Y2S1-Middleware/src/middleware/components/main/nodeview/NodeTree.java
2020-06-07 22:05:20 +01:00

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.
}
}