1 18 19 package org.apache.jmeter.control.gui; 20 21 import java.awt.FlowLayout ; 22 23 import javax.swing.DefaultComboBoxModel ; 24 import javax.swing.JComboBox ; 25 import javax.swing.JLabel ; 26 import javax.swing.JMenu ; 27 import javax.swing.JPanel ; 28 import javax.swing.JPopupMenu ; 29 30 import org.apache.jmeter.control.Controller; 31 import org.apache.jmeter.control.ModuleController; 32 import org.apache.jmeter.gui.GuiPackage; 33 import org.apache.jmeter.gui.tree.JMeterTreeNode; 34 import org.apache.jmeter.gui.util.MenuFactory; 35 import org.apache.jmeter.testelement.TestElement; 36 import org.apache.jmeter.testelement.TestPlan; 37 import org.apache.jmeter.testelement.WorkBench; 38 import org.apache.jmeter.threads.ThreadGroup; 39 import org.apache.jmeter.util.JMeterUtils; 40 import org.apache.jorphan.gui.layout.VerticalLayout; 41 42 47 public class ModuleControllerGui 48 extends AbstractControllerGui 49 { 50 51 private JMeterTreeNode selected = null; 52 53 private JComboBox nodes; 54 private DefaultComboBoxModel nodesModel; 55 56 public static final String CONTROLLER = "Module To Run"; 57 59 62 public ModuleControllerGui() 63 { 64 init(); 65 } 66 67 public String getLabelResource() 68 { 69 return "module_controller_title"; 70 } 71 72 75 public void configure(TestElement el) 76 { 77 super.configure(el); 78 this.selected = ((ModuleController) el).getSelectedNode(); 79 reinitialize(); 80 } 81 82 85 public TestElement createTestElement() 86 { 87 ModuleController mc = new ModuleController(); 88 configureTestElement(mc); 89 if (selected != null) 90 { 91 mc.setSelectedNode(selected); 92 } 93 return mc; 94 } 95 96 99 public void modifyTestElement(TestElement element) 100 { 101 configureTestElement(element); 102 TreeNodeWrapper tnw = (TreeNodeWrapper) nodesModel.getSelectedItem(); 103 if (tnw != null) 104 { 105 selected = tnw.getTreeNode(); 106 if (selected != null) 107 { 108 ((ModuleController) element).setSelectedNode(selected); 109 } 110 } 111 } 112 113 public JPopupMenu createPopupMenu() 114 { 115 JPopupMenu menu = new JPopupMenu (); 116 JMenu addMenu = 117 MenuFactory.makeMenus( 118 new String [] { 119 MenuFactory.CONFIG_ELEMENTS, 120 MenuFactory.ASSERTIONS, 121 MenuFactory.TIMERS, 122 MenuFactory.LISTENERS, 123 }, 124 JMeterUtils.getResString("Add"), 125 "Add"); 126 menu.add(addMenu); 127 MenuFactory.addEditMenu(menu, true); 128 MenuFactory.addFileMenu(menu); 129 return menu; 130 } 131 132 private void init() 133 { 134 setLayout( 135 new VerticalLayout(5, VerticalLayout.LEFT, VerticalLayout.TOP)); 136 setBorder(makeBorder()); 137 add(makeTitlePanel()); 138 139 JPanel modulesPanel = new JPanel (new FlowLayout (FlowLayout.LEFT)); 141 modulesPanel.add(new JLabel (CONTROLLER)); 142 nodesModel = new DefaultComboBoxModel (); 143 nodes = new JComboBox (nodesModel); 144 reinitialize(); 145 modulesPanel.add(nodes); 146 add(modulesPanel); 147 } 148 149 private void reinitialize() 150 { 151 TreeNodeWrapper current; 152 nodesModel.removeAllElements(); 153 GuiPackage gp = GuiPackage.getInstance(); 154 JMeterTreeNode root; 155 if (gp != null) 156 { 157 root = 158 (JMeterTreeNode) GuiPackage 159 .getInstance() 160 .getTreeModel() 161 .getRoot(); 162 buildNodesModel(root, "", 0); 163 } 164 if (selected != null) 165 { 166 for (int i = 0; i < nodesModel.getSize(); i++) 167 { 168 current = (TreeNodeWrapper) nodesModel.getElementAt(i); 169 if (current.getTreeNode().equals(selected)) 170 { 171 nodesModel.setSelectedItem(current); 172 break; 173 } 174 } 175 } 176 } 177 178 private void buildNodesModel( 179 JMeterTreeNode node, 180 String parent_name, 181 int level) 182 { 183 String seperator = " > "; 184 if (node != null) 185 { 186 for (int i = 0; i < node.getChildCount(); i++) 187 { 188 StringBuffer name = new StringBuffer (); 189 JMeterTreeNode cur = (JMeterTreeNode) node.getChildAt(i); 190 TestElement te = cur.getTestElement(); 191 if (te instanceof ThreadGroup ) 192 { 193 name.append(parent_name); 194 name.append(cur.getName()); 195 name.append(seperator); 196 buildNodesModel(cur, name.toString(), level); 197 } 198 else if ( 199 te instanceof Controller 200 && !(te instanceof ModuleController)) 201 { 202 name.append(spaces(level)); 203 name.append(parent_name); 204 name.append(cur.getName()); 205 TreeNodeWrapper tnw = 206 new TreeNodeWrapper(cur, name.toString()); 207 nodesModel.addElement(tnw); 208 name = new StringBuffer (); 209 name.append(cur.getName()); 210 name.append(seperator); 211 buildNodesModel(cur, name.toString(), level + 1); 212 } 213 else if (te instanceof TestPlan || te instanceof WorkBench) 214 { 215 name.append(cur.getName()); 216 name.append(seperator); 217 buildNodesModel(cur, name.toString(), 0); 218 } 219 } 220 } 221 } 222 223 private String spaces(int level) 224 { 225 int multi = 4; 226 StringBuffer spaces = new StringBuffer (level * multi); 227 for (int i = 0; i < level * multi; i++) 228 { 229 spaces.append(" "); 230 } 231 return spaces.toString(); 232 } 233 } 234 235 class TreeNodeWrapper 236 { 237 238 private JMeterTreeNode tn; 239 private String label; 240 241 private TreeNodeWrapper() 242 { 243 }; 244 245 public TreeNodeWrapper(JMeterTreeNode tn, String label) 246 { 247 this.tn = tn; 248 this.label = label; 249 } 250 251 public JMeterTreeNode getTreeNode() 252 { 253 return tn; 254 } 255 256 public String toString() 257 { 258 return label; 259 } 260 261 } 262 | Popular Tags |