perfsonar-dev - perfsonar: r3036 - in branches/perfsonarui/src/org/perfsonar/perfsonarui: . flowsa flowsa/components
Subject: perfsonar development work
List archive
perfsonar: r3036 - in branches/perfsonarui/src/org/perfsonar/perfsonarui: . flowsa flowsa/components
Chronological Thread
- From:
- To:
- Subject: perfsonar: r3036 - in branches/perfsonarui/src/org/perfsonar/perfsonarui: . flowsa flowsa/components
- Date: Tue, 13 Nov 2007 03:19:38 -0500
Author: michael.bischoff
Date: 2007-11-13 03:19:38 -0500 (Tue, 13 Nov 2007)
New Revision: 3036
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMAResponse.java
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMATab.java
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RawSpecificsPanel.java
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/ResultTable.java
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RouterPanel.java
branches/perfsonarui/src/org/perfsonar/perfsonarui/log4.console
Log:
demo enhancements
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMAResponse.java
===================================================================
---
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMAResponse.java
2007-11-13 08:17:03 UTC (rev 3035)
+++
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMAResponse.java
2007-11-13 08:19:38 UTC (rev 3036)
@@ -7,11 +7,16 @@
package org.perfsonar.perfsonarui.flowsa;
+import java.awt.EventQueue;
+import java.text.DateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import javax.swing.JOptionPane;
+
import org.perfsonar.perfsonarui.AbstractPerfsonarResponse;
import org.perfsonar.perfsonarui.AbstractUserData;
import org.perfsonar.perfsonarui.PerfsonarResponseEvent;
@@ -22,7 +27,7 @@
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-
+import static java.text.DateFormat.SHORT;
/**
* @author michael
*
@@ -44,9 +49,28 @@
@Override
public void process(IPerfsonarRequest request, IUserData uData,
Document response) throws Exception {
- NodeList data = response.getElementsByTagName("nmwg:data");
+
+ final NodeList eventType =
response.getElementsByTagName("nmwg:eventType");
+ final NodeList data =
response.getElementsByTagName("nmwg:data");
+
+ // FIXME clean up - should be handled higher up not per
plug-in.
+ if(eventType.item(0) !=null
+ &&
eventType.item(0).getTextContent().startsWith("error.")) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ if(data.item(0)==null ||
data.item(0).getChildNodes().item(0) == null) {
+ JOptionPane.showMessageDialog(null,"result was: "
+eventType.item(0).getTextContent(),"Result",JOptionPane.WARNING_MESSAGE);
+ } else {
+
JOptionPane.showMessageDialog(null,data.item(0).getChildNodes().item(0).getTextContent(),"Result",JOptionPane.WARNING_MESSAGE);
+ }
+ }
+ });
+ return;
+ }
+
if(data.item(0)==null) {
logger.error("no data element");
+ //TODO handle
return;
}
NodeList datums = data.item(0).getChildNodes();
@@ -77,6 +101,7 @@
List<String> headerList = getHeader(datums);
String[][] data = extractData(datums, headerList);
String[] header = stripNullValues(headerList);
+ decorate(header, data);
userData.pushQuery(new Query(new Question("Top query"), new
TopData(header, data)));
}
@@ -116,9 +141,21 @@
List<String> headerList = getHeader(datums);
String[][] data = extractData(datums, headerList);
String[] header = stripNullValues(headerList);
+ decorate(header, data);
userData.pushQuery(new Query(new Question("Raw query"), new
FlowData(header, data)));
}
+ private void decorate(String[] header, String[][] data) {
+ for(int column = 0; column <header.length ; column++) {
+ if(header[column].equalsIgnoreCase("timeFirstSeen") ||
header[column].equalsIgnoreCase("timeLastSeen")
+ || header[column].equalsIgnoreCase("dateFirstSeen") ||
header[column].equalsIgnoreCase("dateFirstSeen")) {
+ for(int row = 0; row <data.length; row++) {
+ data[row][column] = parseUnixToHuman(data[row][column]);
+ }
+ }
+ }
+ }
+
private String[] stripNullValues(List<String> headerList) {
for(Iterator<String> iterator =
headerList.iterator();iterator.hasNext();) {
if(iterator.next()==null) {
@@ -166,7 +203,7 @@
String value = attribute.getNodeName();
if(value.startsWith("xmlns")) {
value = null;
- }
+ }
header.add(value);
}
}
@@ -174,6 +211,18 @@
return header;
}
+ private String parseUnixToHuman(String value) {
+ long time = 0L;
+ try {
+ time = Long.parseLong(value);
+ } catch (NumberFormatException e) {
+ return "error";
+ }
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(time * 1000);
+ return DateFormat.getDateTimeInstance(SHORT,
SHORT).format(cal.getTime());
+ }
+
private String getAttribute(NamedNodeMap attributes, String name) {
Node value = attributes.getNamedItem(name);
return value==null ? null : value.getNodeValue();
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMATab.java
===================================================================
---
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMATab.java
2007-11-13 08:17:03 UTC (rev 3035)
+++
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/FlowsaMATab.java
2007-11-13 08:19:38 UTC (rev 3036)
@@ -84,7 +84,7 @@
MAEndpointList endpoints = new MAEndpointList(new
File("MA.conf"),getSupportedRequests());
if (endpoints.size() == 0) {
endpoints.add(new
MAEndpoint("local,http://localhost:8080/flowsa-ma-0.0.1/services/FlowsaMeasurementArchiveService,\"\",flowsa,flowsa"));
- endpoints.add(new
MAEndpoint("SURFnet,http://sonar1.amsterdam.surfnet.nl:8080/flowsa-ma-0.0.1/services/FlowsaMeasurementArchiveService,\"\",flowsa,flowsa"));
+ endpoints.add(new
MAEndpoint("SURFnet,http://sonar1.amsterdam.surfnet.nl:8080/SURFnet-FLOWSA-MA/services/FlowsaMeasurementArchiveService,\"\",flowsa,flowsa"));
}
return endpoints;
}
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RawSpecificsPanel.java
===================================================================
---
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RawSpecificsPanel.java
2007-11-13 08:17:03 UTC (rev 3035)
+++
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RawSpecificsPanel.java
2007-11-13 08:19:38 UTC (rev 3036)
@@ -1,9 +1,13 @@
package org.perfsonar.perfsonarui.flowsa.components;
+import static org.jdesktop.layout.GroupLayout.DEFAULT_SIZE;
+import static org.jdesktop.layout.GroupLayout.LEADING;
+import static org.jdesktop.layout.GroupLayout.PREFERRED_SIZE;
+import static org.jdesktop.layout.LayoutStyle.RELATED;
+
import java.awt.LayoutManager;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
@@ -24,9 +28,6 @@
import org.perfsonar.perfsonarui.ui.panels.JDualListItemSelector;
import org.perfsonar.perfsonarui.ui.panels.ModifiableListModel;
-import static org.jdesktop.layout.GroupLayout.*;
-import static org.jdesktop.layout.LayoutStyle.*;
-
public class RawSpecificsPanel extends JPanel {
private static final long serialVersionUID = 1L;
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/ResultTable.java
===================================================================
---
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/ResultTable.java
2007-11-13 08:17:03 UTC (rev 3035)
+++
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/ResultTable.java
2007-11-13 08:19:38 UTC (rev 3036)
@@ -1,8 +1,22 @@
package org.perfsonar.perfsonarui.flowsa.components;
+import java.awt.Color;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.List;
+
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableModel;
import org.perfsonar.perfsonarui.flowsa.FlowData;
import org.perfsonar.perfsonarui.flowsa.TopData;
@@ -17,6 +31,7 @@
public ResultTable(String string) {
super(new Object[0][0], new Object[] {string});
+ setDefaultRenderer(Object.class, new MyCellRenderer());
}
public void setModel(TopData data) {
setModel(new DefaultResultTableModel(data.getHeader(),
data.getData()));
@@ -26,19 +41,111 @@
}
@Override
public void tableChanged(TableModelEvent e) {
+ super.tableChanged(e);
if (e == null || e.getFirstRow() == TableModelEvent.HEADER_ROW) {
+ calculateAndSetColumnWidth();
orderColumns();
- calculateAndSetColumnWidth();
+ resizeAndRepaint();
+ }
+ }
+ protected void calculateAndSetColumnWidth() {
+ TableModel model = getModel();
+ int[] weight = new int[model.getColumnCount()];
+ int testRowRange = 20;
+ if(testRowRange>model.getRowCount()) {
+ testRowRange = model.getRowCount();
}
- super.tableChanged(e);
- }
- private void calculateAndSetColumnWidth() {
- // TODO Auto-generated method stub
+ if(testRowRange == 0) return;
+ int length;
+ for(int i = 0 ; i < weight.length; i++) {
+ for(int ii = 0 ; ii < testRowRange; ii++) {
+ length = (int)
getFontMetrics(getFont()).getStringBounds(model.getValueAt(ii, i).toString(),
getGraphics()).getWidth();
+ if(length > weight[i]) weight[i] = length;
+ }
+ }
+ for(int i = 0; i < weight.length ;i++) {
+ getColumnModel().getColumn(i).setPreferredWidth(weight[i]);
+ }
}
private void orderColumns() {
- // TODO Auto-generated method stub
+ List<TableColumn> sortedColumns = new ArrayList<TableColumn>();
+ Enumeration<TableColumn> columns = getColumnModel().getColumns();
+ while(columns.hasMoreElements()) {
+ sortedColumns.add(columns.nextElement());
+ }
+ Collections.sort(sortedColumns, new ColumnComperator());
+ TableColumnModel model = new DefaultTableColumnModel();
+ for(TableColumn column : sortedColumns) {
+ model.addColumn(column);
+ }
+ setColumnModel(model);
}
+
+ protected static class ColumnComperator implements
Comparator<TableColumn> {
+ List<String> list = Arrays.asList(new String[] {
+ "adressFamily",
+ "sourceAddress","sourcePort", "sourceAsNumber",
+ "destinationAdress","destinationPort", "destinationAsNumber",
+ "timeFirstSeen","msecFirstSeen",
+ "timeLastSeen","msecLastSeen",
+ "dateFirstSeen",
"duration","topStatistic","bps","pps","bpp","bytes","packets","packages","flows","Protocol",
+ "outputInterface","InputInterface",
+ "typeOfService"
+ });
+
+ public int compare(TableColumn first, TableColumn other) {
+ String firstName = first.getHeaderValue().toString();
+ String otherName = other.getHeaderValue().toString();
+ if(!list.contains(firstName) && !list.contains(otherName))
return firstName.compareTo(otherName);
+ if(list.contains(firstName) && !list.contains(otherName)) return
-1;
+ if(!list.contains(firstName) && list.contains(otherName)) return
1;
+ if(list.contains(firstName) && list.contains(otherName)) {
+ return list.indexOf(firstName) - list.indexOf(otherName);
+ }
+ return 0;
+ }
+
+ }
+
+ protected static class MyCellRenderer extends DefaultTableCellRenderer {
+
+ private static final long serialVersionUID = 1L;
+ private static final int DELTA = 10;
+ private JTable table;
+ private Color alternateColor;
+ private Color normalColor;
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object
value, boolean isSelected, boolean hasFocus, int row, int column) {
+ Component component =
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
column);
+ if(this.table != table) {
+ this.table = table;
+ normalColor = getBackground();
+ alternateColor = foo(normalColor);
+ }
+ if(!isSelected) {
+ if(row % 2 == 0) {
+ component.setBackground(alternateColor);
+ } else {
+ component.setBackground(normalColor);
+ }
+ }
+ return component;
+ }
+
+ private Color foo(Color normalColor) {
+ return new
Color(addDelta(normalColor.getRed()),addDelta(normalColor.getGreen()),addDelta(normalColor.getBlue()));
+ }
+
+ private int addDelta(int value) {
+ int newValue = value + DELTA;
+ if(newValue<0) return 0;
+ if(newValue>255) return 255;
+ return newValue;
+ }
+ }
+
public static class DefaultResultTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private final String[] header;
@@ -87,7 +194,7 @@
* @see javax.swing.table.TableModel#getRowCount()
*/
public int getRowCount() {
- return data==null ? 0 : data.length;
+ return data==null || data.length == 0 ? 1 : data.length;
}
/*
@@ -96,6 +203,7 @@
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
public Object getValueAt(int rowIndex, int columnIndex) {
+ if(data==null || data.length == 0 || data[0].length == 0) return
"";
return data[rowIndex][columnIndex];
}
}
Modified:
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RouterPanel.java
===================================================================
---
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RouterPanel.java
2007-11-13 08:17:03 UTC (rev 3035)
+++
branches/perfsonarui/src/org/perfsonar/perfsonarui/flowsa/components/RouterPanel.java
2007-11-13 08:19:38 UTC (rev 3036)
@@ -55,6 +55,9 @@
private JComponent createRouterList(final FlowsaMAUserData model) {
final CheckListModel<Router> checkListModel = new
DefaultCheckListModel<Router>();
checkListModel.addItem(new
Router("xsr01.asd001a.surf.net","SURFnet6 Core Router Amsterdam1"));
+ checkListModel.addItem(new
Router("xsr01.asd002a.surf.net","SURFnet6 Core Router Amsterdam2"));
+ checkListModel.addItem(new
Router("xsr03.asd001a.surf.net","SURFnet6 Border Router Amsterdam1"));
+ checkListModel.addItem(new
Router("xsr03.asd002a.surf.net","SURFnet6 Border Router Amsterdam2"));
final JCheckList<Router> list = new
JCheckList<Router>(checkListModel);
model.addObserver(new Observer() {
private String oldEndPoint;
@@ -66,7 +69,10 @@
}
oldEndPoint = newEndpoint.getEndpoint();
checkListModel.clear();
- checkListModel.addItem(new
Router("xsr01.asd001a.surf.net","SURFnet6 Core Router Amsterdam1")); //TODO
fill from LS
+ checkListModel.addItem(new
Router("xsr01.asd001a.surf.net","SURFnet6 Core Router Amsterdam1"));
+ checkListModel.addItem(new
Router("xsr01.asd002a.surf.net","SURFnet6 Core Router Amsterdam2"));
+ checkListModel.addItem(new
Router("xsr03.asd001a.surf.net","SURFnet6 Border Router Amsterdam1"));
+ checkListModel.addItem(new
Router("xsr03.asd002a.surf.net","SURFnet6 Border Router Amsterdam2"));
if(checkListModel.getSize() > 0) {
Router router = list.getItem(0);
list.checkItem(router);
Modified: branches/perfsonarui/src/org/perfsonar/perfsonarui/log4.console
===================================================================
--- branches/perfsonarui/src/org/perfsonar/perfsonarui/log4.console
2007-11-13 08:17:03 UTC (rev 3035)
+++ branches/perfsonarui/src/org/perfsonar/perfsonarui/log4.console
2007-11-13 08:19:38 UTC (rev 3036)
@@ -1,6 +1,6 @@
-log4j.rootCategory=DEBUG, console
+log4j.rootCategory=INFO, console
-log4j.category.org.perfsonar=DEBUG
+log4j.category.org.perfsonar=INFO
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
- perfsonar: r3036 - in branches/perfsonarui/src/org/perfsonar/perfsonarui: . flowsa flowsa/components, svnlog, 11/13/2007
Archive powered by MHonArc 2.6.16.