1 23 24 package org.infoglue.cms.plugins.opentree; 25 26 import java.awt.Color ; 27 import java.awt.FlowLayout ; 28 import java.net.URL ; 29 30 import javax.swing.Icon ; 31 import javax.swing.ImageIcon ; 32 import javax.swing.JApplet ; 33 import javax.swing.JScrollPane ; 34 import javax.swing.JTextPane ; 35 import javax.swing.JTree ; 36 import javax.swing.SwingUtilities ; 37 import javax.swing.UIManager ; 38 import javax.swing.tree.DefaultTreeCellRenderer ; 39 import javax.swing.tree.TreeNode ; 40 41 import netscape.javascript.JSObject; 42 43 47 48 public class OpenTree extends JApplet 49 { 50 51 private Icon customOpenIcon = null; 52 private Icon customClosedIcon = null; 53 private Icon customLeafIcon = null; 54 55 private TreeNode rootNode; 56 protected JTree nodeTree; 57 private JScrollPane sp; 58 private Controller controller; 59 private Integer repositoryId; 60 private String entityName; 61 private String hideLeafs; 62 63 private Integer currentNodeId; 64 65 public void init() 66 { 67 System.out.println("Initializing tree..."); 68 69 String serverAddress = null; 70 Color bgColor = null; 71 72 try 73 { 74 int rColor = Integer.parseInt(this.getParameter("bgColorR")); 75 int gColor = Integer.parseInt(this.getParameter("bgColorG")); 76 int bColor = Integer.parseInt(this.getParameter("bgColorB")); 77 bgColor = new Color (rColor,gColor,bColor); 78 79 this.entityName = this.getParameter("entityName"); 80 this.repositoryId = new Integer (this.getParameter("repositoryId")); 81 this.hideLeafs = this.getParameter("hideLeafs"); 82 83 URL codeBase = this.getCodeBase(); 84 String applicationPath = this.getDocumentBase().getPath().substring(0, this.getDocumentBase().getPath().lastIndexOf("/")); 85 System.out.println("applicationPath:" + applicationPath); 86 serverAddress = codeBase.getProtocol() + "://" + codeBase.getHost() + ":" + codeBase.getPort() + "" + applicationPath + "/" + entityName + "TreeService"; 87 String imageBaseURL = codeBase.getProtocol() + "://" + codeBase.getHost() + ":" + codeBase.getPort() + "" + applicationPath + "/"; 88 System.out.println("serverAddress:" + serverAddress); 89 90 String folderOpenImage = imageBaseURL + "images/" + entityName + "folderOpen.gif"; 91 String folderClosedImage = imageBaseURL + "images/" + entityName + "folderClosed.gif"; 92 String documentImage = imageBaseURL + "images/" + entityName + "document.gif"; 93 94 System.out.println(folderOpenImage); 95 System.out.println(folderClosedImage); 96 System.out.println(documentImage); 97 98 customOpenIcon = new ImageIcon (new URL (folderOpenImage)); 99 customClosedIcon = new ImageIcon (new URL (folderClosedImage)); 100 customLeafIcon = new ImageIcon (new URL (documentImage)); 101 } 102 catch(Exception e) 103 { 104 e.printStackTrace(); 105 } 106 107 try 108 { 109 controller = new Controller(serverAddress, entityName, repositoryId, hideLeafs); 110 rootNode = controller.getRootNode(); 111 nodeTree = new JTree (rootNode); 112 controller.setNodeTree(this.nodeTree); 113 114 try{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); SwingUtilities.updateComponentTreeUI(nodeTree); } catch (Exception e){ e.printStackTrace(); } 115 116 DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer (); 117 renderer.setOpenIcon(customOpenIcon); 118 renderer.setClosedIcon(customClosedIcon); 119 renderer.setLeafIcon(customLeafIcon); 120 renderer.setBackgroundNonSelectionColor(bgColor); 121 nodeTree.setCellRenderer(renderer); 122 123 FlowLayout flowManager = new FlowLayout (FlowLayout.LEFT); 124 flowManager.setHgap(0); 125 flowManager.setVgap(0); 126 127 sp = new JScrollPane (nodeTree); 128 sp.setBorder(null); 129 getContentPane().setBackground(bgColor); 130 getContentPane().add(sp, "Center"); 131 132 nodeTree.setBackground(bgColor); 133 nodeTree.addTreeSelectionListener(new NodeTreeSelectionListener(this)); 134 CMSTreeListener cmsTreeListener = new CMSTreeListener(nodeTree, controller); 135 nodeTree.addMouseListener(cmsTreeListener); 136 nodeTree.addTreeWillExpandListener(cmsTreeListener); 137 138 } 139 catch(Exception e) 140 { 141 FlowLayout flowManager = new FlowLayout (FlowLayout.LEFT); 142 flowManager.setHgap(0); 143 flowManager.setVgap(0); 144 getContentPane().setBounds(5, 5, 150, 300); 145 getContentPane().setLayout(flowManager); 146 getContentPane().setBackground(bgColor); 147 JTextPane errorMessage = new JTextPane (); 148 errorMessage.setBackground(bgColor); 149 errorMessage.setText("Error:\r\nAn server-error made it\r\nimpossible to show the tree. \r\nPlease make sure that there are\r\nat least one repository available. \r\nIf the problem persists report it to \r\nyour technical straff."); 150 151 getContentPane().add(errorMessage); 152 e.printStackTrace(); 153 } 154 155 notifyLoaded(); 156 } 157 158 163 164 public void openMainArea(CMSNode node) 165 { 166 System.out.println("Trying to activate the main area through javascript..."); 167 try 168 { 169 JSObject win = JSObject.getWindow(this); 170 Object [] args = {node.getId().toString(), this.repositoryId.toString(), getPath(node, new StringBuffer ())}; 171 String functionName = "loadMainArea"; 172 win.call(functionName, args); 174 this.currentNodeId = node.getId(); 176 } 177 catch(Exception e) 178 { 179 System.out.println("An error occurred while we tried to call a javascript: " + e); 180 } 181 } 182 183 184 189 190 public void notifyLoaded() 191 { 192 System.out.println("Going to tell the world that I'm fully loaded..."); 193 try 194 { 195 JSObject win = JSObject.getWindow(this); 196 Object [] args = {}; 197 String functionName = "notifyIsLoaded"; 198 win.call(functionName, args); 200 } 201 catch(Exception e) 202 { 203 System.out.println("An error occurred while we tried to call a javascript: " + e); 204 e.printStackTrace(); 205 } 206 System.out.println("notifyLoaded done..."); 207 } 208 209 210 public void refreshTreeNode(Integer nodeId, Integer changeTypeId, Integer addedNodeId) 211 { 212 controller.refreshNode(nodeId, changeTypeId, addedNodeId); 214 } 215 216 public void refreshTreeNode(int nodeId, int changeTypeId, int addedNodeId) 217 { 218 controller.refreshNode(new Integer (nodeId), new Integer (changeTypeId), new Integer (addedNodeId)); 220 } 221 222 private StringBuffer getPath(CMSNode node, StringBuffer path) 223 { 224 225 path.insert(0, "/" + node.getName()); 226 if(node.getParent() != null) 228 { 229 getPath((CMSNode)node.getParent(), path); 230 } 231 232 return path; 233 } 234 235 238 239 public void setSize(int width, int height) 240 { 241 super.setSize(width,height); 243 validate(); 246 } 255 256 257 } 258 | Popular Tags |