📄 taskvisualization.java
字号:
}
/**
* This method renders the configuration to the screen
*/
private void viewConfiguration() {
// do view stuff here
// AKDNEW - shouldn't need this after testing
/*
Vector hselects = new Vector();
hselects.addElement("voltage");
TASKQuery hquery = new TASKQuery(hselects, new Vector(), 1000, null);
int hq = client.submitHealthQuery(hquery);
*/
TASKQuery healthQuery = client.getHealthQuery();
if (healthQuery != null) {
healthQueryId = healthQuery.getQueryId();
}
/* Vector sselects = new Vector();
sselects.addElement("temperature");
TASKQuery squery = new TASKQuery(sselects, new Vector(), 1000, null);
int sq = client.submitSensorQuery(squery);
*/
TASKQuery sensorQuery = client.getSensorQuery();
if (sensorQuery != null) {
sensorQueryId = sensorQuery.getQueryId();
}
// render image
if (config.useBlankImage()) {
imageWidth = config.getImageWidth();
imageHeight = config.getImageHeight();
canvas = new ZImageCanvas(imageWidth, imageHeight);
}
else {
ImageIcon icon = new ImageIcon(config.getImageName(), config.getImageName());
Image base = icon.getImage();
imageHeight = base.getHeight(null);
imageWidth = base.getWidth(null);
canvas = new ZImageCanvas(base);
}
// render surrounding rectangle
layer = canvas.getLayer();
ZLine line = new ZLine(config.getMinimumPixelX(), config.getMinimumPixelY(),
config.getMaximumPixelX(), config.getMinimumPixelY());
ZVisualLeaf leaf = new ZVisualLeaf(line);
leaf.setSelectable(false);
layer.addChild(leaf);
line = new ZLine(config.getMinimumPixelX(), config.getMinimumPixelY(),
config.getMinimumPixelX(), config.getMaximumPixelY());
leaf = new ZVisualLeaf(line);
leaf.setSelectable(false);
layer.addChild(leaf);
line = new ZLine(config.getMaximumPixelX(), config.getMinimumPixelY(),
config.getMaximumPixelX(), config.getMaximumPixelY());
leaf = new ZVisualLeaf(line);
leaf.setSelectable(false);
layer.addChild(leaf);
line = new ZLine(config.getMinimumPixelX(), config.getMaximumPixelY(),
config.getMaximumPixelX(), config.getMaximumPixelY());
leaf = new ZVisualLeaf(line);
leaf.setSelectable(false);
layer.addChild(leaf);
// render motes
for (Enumeration e=motes.elements(); e.hasMoreElements(); ) {
SensorMote sm = (SensorMote)e.nextElement();
leaf = new ZVisualLeaf(sm);
layer.addChild(leaf);
}
routeGroup = new ZGroup();
routeGroup.setSelectable(false);
layer.addChild(routeGroup);
JPanel main = new JPanel(new BorderLayout());
// add scroll pane
int x=0, y = 0;
if (imageWidth > SCROLL_WIDTH) {
x = SCROLL_WIDTH;
}
else {
x = imageWidth;
}
if (imageHeight > SCROLL_HEIGHT) {
y = SCROLL_HEIGHT;
}
else {
y = imageHeight;
}
scrollPane = new ZScrollPane(canvas);
scrollPane.setPreferredSize(new Dimension(x+20, y+20));
parentPanel.add(scrollPane, BorderLayout.CENTER);
JPanel unknownNodesPanel = new JPanel();
Border b = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
unknownNodesPanel.setBorder(BorderFactory.createTitledBorder(b,"Unknown Nodes"));
unknownNodesPanel.add(scrollPane2);
parentPanel.add(unknownNodesPanel, BorderLayout.EAST);
// create event handlers
panEventHandler = new ZPanEventHandler(canvas.getCameraNode());
zoomEventHandler = new ZoomEventHandler(canvas.getCameraNode());
moveEventHandler = new MoveEventHandler2(canvas, imageWidth, imageHeight, true);
selectionHandler = new ZCompositeSelectionHandler(canvas.getCameraNode(), canvas, canvas.getLayer(), ZCompositeSelectionHandler.MODIFY);
zoomEventHandler.setActive(true);
moveEventHandler.setActive(true);
if (healthQuery != null) {
client.addHealthResultListener(this);
if (timer != null) {
timer.cancel();
}
timer = new java.util.Timer();
healthSamplePeriod = healthQuery.getSamplePeriod();
timer.schedule(new Task(), 0, 10*healthSamplePeriod);
}
if (sensorQuery != null) {
client.addSensorResultListener(this);
}
}
/**
* Retrieves the list of sensor motes from the given table
*
* @param table Table containing the sensor motes information
* @return List of sensor motes
*/
public SensorMotes getSensorMotes() {
SensorMotes sms = new SensorMotes();
Vector mInfos = client.getAllMoteClientInfo(config.getName());
for (int i=0; i<mInfos.size(); i++) {
Mote m = new Mote((TASKMoteClientInfo)mInfos.elementAt(i));
// AKDNEW storing pixels not real SensorMote sm = new SensorMote(new Integer(xConvertRealToPixel(config, m.getX())).doubleValue(),
// new Integer(yConvertRealToPixel(config, m.getY())).doubleValue(),
SensorMote sm = new SensorMote(m.getX(), m.getY(), m.getId());
sms.addMote(sm);
sm.setSensorToVisualize(sensorType);
if (sensorType % 4 == 0) {
sm.setColorScheme(SensorMote.GRAY, 1024);
}
else if (sensorType %4 == 1) {
sm.setColorScheme(SensorMote.RED, 1024);
}
else if (sensorType %4 == 2) {
sm.setColorScheme(SensorMote.BLUE, 1024);
}
else {
sm.setColorScheme(SensorMote.GREEN, 1024);
}
}
return sms;
}
/**
* This method sets the mode of the interface
*
* @param mode Mode to set the interface to
*/
public void setMode(int mode) {
if (currentEventHandler != null) {
currentEventHandler.setActive(false);
}
switch (mode) {
case PAN_MODE: currentEventHandler = panEventHandler;
canvas.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
break;
case SELECT_MODE: currentEventHandler = selectionHandler;
canvas.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
break;
case NO_MODE: currentEventHandler = null;
canvas.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
break;
}
if (currentEventHandler != null) {
currentEventHandler.setActive(true);
}
}
public static int xConvertRealToPixel(Configuration config, double x) {
// xP = (x - xmaxR) / ((xmaxR - xminR)/(xmaxP - xminP)) + xmaxP
return new Double((x - config.getMaximumRealX()) / ((config.getMaximumRealX() - config.getMinimumRealX())/(config.getMaximumPixelX() - config.getMinimumPixelX())) + config.getMaximumPixelX()).intValue();
}
public static int yConvertRealToPixel(Configuration config, double y) {
// yP = (y - ymaxR) / ((ymaxR - yminR)/(ymaxP - yminP)) + ymaxP
return new Double((y - config.getMaximumRealY()) / ((config.getMaximumRealY() - config.getMinimumRealY())/(config.getMaximumPixelY() - config.getMinimumPixelY())) + config.getMaximumPixelY()).intValue();
}
public static double xConvertPixelToReal(Configuration config, int x) {
// x = xmaxR + (xP - xmaxP)*(xmaxR - xminR)/(xmaxP - xminP)
return config.getMaximumRealX() + (x - config.getMaximumPixelX())*(config.getMaximumRealX() - config.getMinimumRealX())/(config.getMaximumPixelX() - config.getMinimumPixelX());
}
public static double yConvertPixelToReal(Configuration config, int y) {
// y = ymaxR + (yP - ymaxP)*(ymaxR - yminR)/(ymaxP - yminP)
return config.getMaximumRealY() + (y - config.getMaximumPixelY())*(config.getMaximumRealY() - config.getMinimumRealY())/(config.getMaximumPixelY() - config.getMinimumPixelY());
}
/**
* This method calculates the distance between 2 points
*
* @param x X coordinate of first point
* @param y Y coordinate of first point
* @param x X coordinate of second point
* @param y Y coordinate of second point
*
* @returns distance between 2 points
*/
public static double distance(int x, int y, int x1, int y1){
return Math.sqrt( (x-x1)*(x-x1)+(y-y1)*(y-y1));
}
public void addResult(TASKResult qr) {
if (qr.getQueryId() == healthQueryId) {
addHealthResult(qr);
}
else {
addSensorResult(qr);
}
}
private void addHealthResult(TASKResult qr) {
// AKDNEW - attribute names
Integer nd = (Integer)qr.getField("nodeId");
if (nd == null)
return;
int node = nd.intValue();
SensorMote mote = motes.getMote(node);
if (mote == null) {
String nodeString = Integer.toString(node);
if (!unknownNodesModel.contains(nodeString)) {
unknownNodesModel.addElement(nodeString);
}
return;
}
// get each data field and update in mote sensor value
for (int i=0; i<qr.getNumFields(); i++) {
int value = 0;
Object o = qr.getField(i);
if (o instanceof Integer) {
Integer tmp = (Integer)o;
value = tmp == null ? 0 : tmp.intValue();
}
else if (o instanceof Byte) {
Byte tmp = (Byte)o;
value = tmp == null ? 0 : tmp.intValue();
}
mote.setSensorValue(i+1, value, qr.getFieldInfo(i).name);
//System.out.println("HEALTH UPDATE: node "+node+", slot: "+i+", value: "+ value);
}
Integer tmp = (Integer)qr.getField("parent");
int parent = tmp == null ? 0 : tmp.intValue();
// routes: need to create SensorLine class, which subclass from ZLine
// add a ZLine as needed, setting time
double x = mote.getX();
double y = mote.getY();
SensorMote moteParent = motes.getMote(parent);
if (moteParent != null) {
// get rid of existing line to parent here
for (int i=0; i<routeGroup.getNumChildren(); i++) {
if (routeGroup.getChild(i) instanceof SensorLine) {
SensorLine sl = (SensorLine)routeGroup.getChild(i);
if ((sl.getX1() == x) && (sl.getY1() == y)) {
routeGroup.removeChild(i);
break;
}
}
}
double xn = moteParent.getX();
double yn = moteParent.getY();
SensorLine sl = new SensorLine(x,y,xn,yn);
sl.setSelectable(false);
routeGroup.addChild(sl);
}
//System.out.println("HEALTH UPDATE: route: "+node+" to "+parent);
}
private void addSensorResult(TASKResult qr) {
// AKDNEW - nodeId has to be last field
Integer nd = ((Integer)qr.getField("nodeId"));
if (nd == null)
return;
int node = nd.intValue();
SensorMote mote = motes.getMote(node);
if (mote == null) {
String nodeString = Integer.toString(node);
if (!unknownNodesModel.contains(nodeString)) {
unknownNodesModel.addElement(nodeString);
}
return;
}
// get each data field and update in mote sensor value
for (int i=0; i<qr.getNumFields(); i++) {
int value = 0;
Object o = qr.getField(i);
if (o instanceof Integer) {
Integer tmp = (Integer)o;
value = tmp == null ? 0 : tmp.intValue();
}
else if (o instanceof Byte) {
Byte tmp = (Byte)o;
value = tmp == null ? 0 : tmp.intValue();
}
mote.setSensorValue(i+sensorIndex+1, value, qr.getFieldInfo(i).name);
//System.out.println("SENSOR UPDATE ("+sensorIndex+"): node "+node+", slot: "+(i+sensorIndex+1)+", value: "+ ((Integer)qr.getField(i)).intValue());
}
}
/**
* Inner class containing the repeated task to run. This handles the removal of old parent information
*/
class Task extends TimerTask {
public void run() {
for (int i=0; i<routeGroup.getNumChildren(); i++) {
if (routeGroup.getChild(i) instanceof SensorLine) {
SensorLine sl = (SensorLine)routeGroup.getChild(i);
long time = new Date().getTime();
if (time - sl.getTime() > 4*healthSamplePeriod) {
routeGroup.removeChild(i);
i--;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -