1 package org.sapia.regis.gui; 2 3 4 import javax.swing.JLabel ; 5 import javax.swing.JTabbedPane ; 6 import javax.swing.JTextField ; 7 import javax.swing.JTree ; 8 import javax.swing.tree.DefaultMutableTreeNode ; 9 import javax.swing.tree.DefaultTreeModel ; 10 import javax.swing.tree.MutableTreeNode ; 11 import javax.swing.tree.TreePath ; 12 13 import org.sapia.gumby.event.EventListener; 14 import org.sapia.gumby.event.EventManager; 15 import org.sapia.regis.Node; 16 import org.sapia.regis.Property; 17 import org.sapia.regis.gui.event.NewNodePropertyCreationEvent; 18 import org.sapia.regis.gui.event.NewNodeSelectionEvent; 19 import org.sapia.regis.gui.event.NodeChangeEvent; 20 import org.sapia.regis.gui.event.NodeCreatedEvent; 21 import org.sapia.regis.gui.event.NodeUpdatedEvent; 22 import org.sapia.regis.gui.event.PropertyCreationEvent; 23 import org.sapia.regis.gui.event.TaskEvent; 24 import org.sapia.regis.gui.model.ModelUtils; 25 import org.sapia.regis.gui.model.NodeModel; 26 import org.sapia.regis.gui.widgets.NewNodePanel; 27 import org.sapia.regis.gui.widgets.NodePanel; 28 29 public class Controller implements EventListener, GuiConsts{ 30 31 public Controller(){ 32 EventManager.getInstance().register(TaskEvent.class, this); 33 EventManager.getInstance().register(NodeChangeEvent.class, this); 34 EventManager.getInstance().register(NewNodeSelectionEvent.class, this); 35 EventManager.getInstance().register(PropertyCreationEvent.class, this); 36 EventManager.getInstance().register(NewNodePropertyCreationEvent.class, this); 37 EventManager.getInstance().register(NodeCreatedEvent.class, this); 38 } 39 public void onEvent(Object event) { 40 if(event instanceof TaskEvent){ 41 ((TaskEvent)event).execute(); 42 } 43 else if(event instanceof NodeChangeEvent){ 44 refreshCurrentNodePane(((NodeChangeEvent)event).getNode(), true); 45 } 46 else if(event instanceof NodeUpdatedEvent){ 47 refreshCurrentNodePane(((NodeUpdatedEvent)event).getNode(), true); 48 } 49 else if(event instanceof NewNodeSelectionEvent){ 50 refreshNewNodePane(true); 51 } 52 else if(event instanceof NewNodePropertyCreationEvent){ 53 Property prop = ((NewNodePropertyCreationEvent)event).getProperty(); 54 GlobalContext.getInstance().getModelManager().getNewNodeModel().addProperty(prop); 55 refreshNewNodePane(false); 56 } 57 else if(event instanceof PropertyCreationEvent){ 58 Property prop = ((PropertyCreationEvent)event).getProperty(); 59 GlobalContext.getInstance().getModelManager().getNodeModel().addProperty(prop); 60 refreshCurrentNodePane( 61 GlobalContext.getInstance().getModelManager().getNodeModel().getNode(), 62 false); 63 } 64 else if(event instanceof NodeCreatedEvent){ 65 handleNodeCreation(((NodeCreatedEvent)event).getNode()); 66 } 67 } 68 69 private void refreshCurrentNodePane(Node node, boolean clear){ 70 if(clear){ 71 GlobalContext.getInstance().getModelManager().getNodeModel().setNode(node); 72 } 73 NodePanel panel = (NodePanel)GlobalContext.getInstance().getWidget(NODE_PANE); 74 panel.fireCurrentNodeChange(); 75 76 JLabel title = (JLabel )GlobalContext.getInstance().getWidget(NODE_PANE_TITLE); 77 title.setText("/"+node.getAbsolutePath().toString()); 78 79 JTabbedPane pane = (JTabbedPane )GlobalContext.getInstance().getWidget(TABBED_PANE); 80 pane.setSelectedIndex(0); 81 } 82 83 private void refreshNewNodePane(boolean clear){ 84 NodeModel currentModel = GlobalContext.getInstance().getModelManager().getNodeModel(); 85 86 NewNodePanel panel = (NewNodePanel)GlobalContext.getInstance().getRenderContext().getEnv().get(GuiConsts.NEW_NODE_PANE); 87 if(clear){ 88 panel.fireCreateNewNodeForm(); 89 } 90 else{ 91 panel.fireUpdateNewNodeForm(); 92 } 93 94 JLabel title = (JLabel )GlobalContext.getInstance().getRenderContext().getEnv().get(GuiConsts.NEW_NODE_PANE_TITLE); 95 96 if(currentModel.getNode() == null){ 97 title.setText("/ "); 98 } 99 else{ 100 title.setText(currentModel.getNode().getAbsolutePath().toString() + "/ "); 101 } 102 } 103 104 private void handleNodeCreation(Node node){ 105 JTree tree = (JTree )GlobalContext.getInstance().getWidget(TREE); 106 107 synchronized(tree.getTreeLock()){ 108 DefaultTreeModel model = (DefaultTreeModel )tree.getModel(); 109 TreePath path = tree.getSelectionPath(); 110 MutableTreeNode parent = null; 111 if(path == null){ 112 parent = (MutableTreeNode )model.getRoot(); 113 } 114 else{ 115 parent = (MutableTreeNode )path.getLastPathComponent(); 116 } 117 DefaultMutableTreeNode child = ModelUtils.buildTreeNodeFrom(node); 118 119 model.insertNodeInto( 120 child, 121 parent, 122 parent.getChildCount()); 123 124 125 tree.scrollPathToVisible(new TreePath (child.getPath())); 126 JTabbedPane pane = (JTabbedPane )GlobalContext.getInstance().getWidget(TABBED_PANE); 127 refreshCurrentNodePane(node, true); 128 pane.setSelectedIndex(0); 129 JTextField newNodeName = (JTextField )GlobalContext.getInstance().getWidget(NEW_NODE_PANE_NAME); 130 newNodeName.setText(""); 131 } 132 } 133 134 } 135 | Popular Tags |