208 lines
6.1 KiB
Java
208 lines
6.1 KiB
Java
|
|
package middleware.components.main.nodeview;
|
|
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseListener;
|
|
import java.net.UnknownHostException;
|
|
import java.util.HashMap;
|
|
import javax.swing.JTree;
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
import middleware.agents.MetaAgent;
|
|
import middleware.agents.Portal;
|
|
import middleware.agents.Router;
|
|
import middleware.agents.UserAgent;
|
|
import middleware.components.main.nodelistener.NodeListener;
|
|
import middleware.components.useragents.UserAgentUI;
|
|
import middleware.nodemonitor.NodeMonitor;
|
|
|
|
/**
|
|
* GUI for NodeTrees
|
|
*
|
|
* @author Dan Lawrence
|
|
*/
|
|
public class NodeTree extends JTree implements MouseListener {
|
|
|
|
DefaultTreeModel model;
|
|
DefaultMutableTreeNode rootNode;
|
|
NodeListener nodeListener;
|
|
|
|
NodeMonitor nm;
|
|
MetaAgent nmMetaAgent;
|
|
|
|
HashMap<String, MetaAgent> MetaAgentMap = new HashMap();
|
|
HashMap<String, UserAgent> UserAgentMap = new HashMap();
|
|
|
|
int id = 1;
|
|
Router router = null;
|
|
|
|
/**
|
|
* Sets up a NodeTree GUI for given NodeListener
|
|
* @param nodeListenerIn NodeListener
|
|
*/
|
|
public NodeTree(NodeListener nodeListenerIn) {
|
|
nodeListener = nodeListenerIn;
|
|
|
|
setUpComponent();
|
|
}
|
|
|
|
private void setUpComponent() {
|
|
rootNode = new DefaultMutableTreeNode("Agents");
|
|
model = new DefaultTreeModel(rootNode);
|
|
|
|
addPortal();
|
|
|
|
setModel(model);
|
|
|
|
setVisible(true);
|
|
|
|
this.addMouseListener(this);
|
|
}
|
|
|
|
/**
|
|
* Adds a Router to the nodetree
|
|
* @param ipAddress ip address of router
|
|
* @param port router port
|
|
* @return index of new router
|
|
* @throws UnknownHostException
|
|
*/
|
|
public int addRouter(int id, String ipAddress, int port) throws UnknownHostException {
|
|
DefaultMutableTreeNode routerNode = new DefaultMutableTreeNode();
|
|
rootNode.add(routerNode);
|
|
|
|
if (router == null)
|
|
{
|
|
router = new Router(10, (rootNode.getIndex(routerNode) + id) + ".0.0", port);
|
|
router.start();
|
|
MetaAgentMap.put(router.getAddress().getAddress(), router);
|
|
}
|
|
else
|
|
{
|
|
router.connect(id + ".0.0", ipAddress, port);
|
|
}
|
|
this.id = id;
|
|
routerNode.setUserObject("Router (" + id + ".0.0)");
|
|
updateUI();
|
|
|
|
return rootNode.getIndex(routerNode) + 1;
|
|
}
|
|
|
|
/**
|
|
* Adds a new portal to the NodeTree
|
|
* @return index of the new portal
|
|
*/
|
|
public int addPortal() {
|
|
if (getSelectionPath() == null)
|
|
return 0;
|
|
|
|
DefaultMutableTreeNode selectedNode =
|
|
(DefaultMutableTreeNode) getSelectionPath().getLastPathComponent();
|
|
|
|
String nodeName = (String) selectedNode.getUserObject();
|
|
|
|
if (selectedNode.isRoot() || !nodeName.contains("Router"))
|
|
return 0;
|
|
|
|
DefaultMutableTreeNode portalNode = new DefaultMutableTreeNode();
|
|
selectedNode.add(portalNode);
|
|
|
|
// Add Portals Here
|
|
Portal p = new Portal(10, id + "." + (selectedNode.getIndex(portalNode) + 1) + ".0");
|
|
p.start();
|
|
MetaAgentMap.get(String.valueOf(id + ".0.0")).addAgent(p);
|
|
MetaAgentMap.values().forEach((metaAgent) -> {
|
|
if (metaAgent instanceof Portal)
|
|
{
|
|
metaAgent.addAgent(p);
|
|
}
|
|
});
|
|
MetaAgentMap.put(p.getAddress().getAddress(), p);
|
|
portalNode.setUserObject("Portal (" + p.getAddress() + ")");
|
|
|
|
updateUI();
|
|
|
|
return rootNode.getIndex(portalNode) + 1;
|
|
}
|
|
|
|
/**
|
|
* Adds a new user agent to the NodeTree
|
|
* @return index of new UserAgent
|
|
*/
|
|
public int addUserAgent() {
|
|
if (getSelectionPath() == null)
|
|
return 0;
|
|
|
|
DefaultMutableTreeNode selectedNode =
|
|
(DefaultMutableTreeNode) getSelectionPath().getLastPathComponent();
|
|
|
|
String nodeName = (String) selectedNode.getUserObject();
|
|
|
|
if (selectedNode.isRoot() || !nodeName.contains("Portal"))
|
|
return 0;
|
|
|
|
DefaultMutableTreeNode userAgentNode = new DefaultMutableTreeNode();
|
|
selectedNode.add(userAgentNode);
|
|
|
|
UserAgent userAgent = new UserAgent((id) + "."
|
|
+ (selectedNode.getParent().getIndex(selectedNode) + 1) + "."
|
|
+ (selectedNode.getIndex(userAgentNode) + 1));
|
|
((Portal) MetaAgentMap.get(id + "."
|
|
+ (selectedNode.getParent().getIndex(selectedNode)+ 1)
|
|
+ ".0")).addAgent(userAgent);
|
|
UserAgentMap.put(userAgent.getAddress(), userAgent);
|
|
|
|
userAgentNode.setUserObject("User Agent (" + userAgent.getAddress() + ")" );
|
|
|
|
updateUI();
|
|
|
|
return rootNode.getIndex(userAgentNode) + 1;
|
|
}
|
|
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {
|
|
if (e.getClickCount()==2 && getSelectionPath() != null) {
|
|
DefaultMutableTreeNode selectedNode =
|
|
(DefaultMutableTreeNode) getSelectionPath().getLastPathComponent();
|
|
|
|
String nodeName = (String) selectedNode.getUserObject();
|
|
|
|
if (nodeName.contains("Router") || nodeName.contains("Portal")) {
|
|
if (nm != null && nmMetaAgent != null)
|
|
{
|
|
nmMetaAgent.detach(nm);
|
|
}
|
|
|
|
nodeListener.clear();
|
|
//Get Portal
|
|
MetaAgent metaAgent = MetaAgentMap.get(nodeName.substring(nodeName.indexOf("(") + 1, nodeName.length() - 1));
|
|
//Attach NodeMonitor
|
|
nm = new NodeMonitor(nodeListener);
|
|
metaAgent.attach(nm);
|
|
nmMetaAgent = metaAgent;
|
|
} else if (nodeName.contains("User Agent")) {
|
|
new UserAgentUI(UserAgentMap.get(nodeName.substring(nodeName.indexOf("(") + 1, nodeName.length()-1)));
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
//Useless.
|
|
}
|
|
|
|
@Override
|
|
public void mouseReleased(MouseEvent e) {
|
|
//Useless.
|
|
}
|
|
|
|
@Override
|
|
public void mouseEntered(MouseEvent e) {
|
|
//Useless.
|
|
}
|
|
|
|
@Override
|
|
public void mouseExited(MouseEvent e) {
|
|
//Useless.
|
|
}
|
|
}
|