[Ejtools-cvs] CVS: libraries/adwt/src/main/net/sourceforge/ejtools/awt BeanContextPanel.java,NONE,1.
Brought to you by:
letiemble
From: Laurent E. <let...@us...> - 2002-04-18 21:10:38
|
Update of /cvsroot/ejtools/libraries/adwt/src/main/net/sourceforge/ejtools/awt In directory usw-pr-cvs1:/tmp/cvs-serv9933/main/net/sourceforge/ejtools/awt Added Files: BeanContextPanel.java BeanContextTreeView.java GenericCustomizer.java GenericMBeanCustomizer.java GenericMBeanMethodDialog.java GenericTitledBorder.java Log Message: Initial Import --- NEW FILE: BeanContextPanel.java --- /* * EJTools, the Enterprise Java Tools * * Distributable under LGPL license. * See terms of license at www.gnu.org. */ package net.sourceforge.ejtools.awt; import java.awt.Container; import java.awt.Dimension; import java.beans.beancontext.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import net.sourceforge.ejtools.jmx.ObjectNameFinder; /** * Description of the Class * * @author letiembl * @created 19 octobre 2001 * @todo Javadoc to complete * @todo Import to clean */ public class BeanContextPanel extends JSplitPane implements ObjectNameFinder { /** Description of the Field */ protected BeanContextTreeView tree; /** * Constructor for the BeanContextPanel object * * @param beancontext Description of Parameter */ public BeanContextPanel(BeanContext beancontext) { this(beancontext, null); } /** * Constructor for the BeanContextPanel object * * @param beancontext Description of Parameter * @param s Description of Parameter */ public BeanContextPanel(BeanContext beancontext, String s) { super(1); if (s != null) { setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), s)); } tree = new BeanContextTreeView(beancontext); JScrollPane jscrollpane = new JScrollPane(tree); jscrollpane.setMinimumSize(new Dimension(300, 400)); jscrollpane.setPreferredSize(new Dimension(300, 400)); final JPanel dummyMsg = new JPanel(); dummyMsg.add(new JLabel("", 0)); setLeftComponent(jscrollpane); setRightComponent(dummyMsg); tree.addTreeSelectionListener( new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent treeselectionevent) { final TreePath selPath = treeselectionevent.getNewLeadSelectionPath(); SwingUtilities.invokeLater( new Runnable() { public void run() { try { Object obj = ((DefaultMutableTreeNode) selPath.getLastPathComponent()).getUserObject(); if (obj instanceof BeanContextChildComponentProxy) { BeanContextChildComponentProxy beancontextchildcomponentproxy = (BeanContextChildComponentProxy) obj; setRightComponent(beancontextchildcomponentproxy.getComponent()); } else if (obj instanceof BeanContextContainerProxy) { BeanContextContainerProxy beancontextcontainerproxy = (BeanContextContainerProxy) obj; setRightComponent(beancontextcontainerproxy.getContainer()); } validate(); } catch (Exception _ex) { } } }); } }); tree.getModel().addTreeModelListener( new TreeModelListener() { public void treeNodesChanged(TreeModelEvent treemodelevent) { } public void treeNodesInserted(TreeModelEvent treemodelevent) { } public void treeNodesRemoved(TreeModelEvent treemodelevent) { setRightComponent(dummyMsg); validate(); } public void treeStructureChanged(TreeModelEvent treemodelevent) { setRightComponent(dummyMsg); validate(); } }); } /** * Gets the tree attribute of the BeanContextPanel object * * @return The tree value */ public JTree getTree() { return tree; } /** * Description of the Method * * @param searchString Description of the Parameter */ public void searchObjectName(String objectName) { System.out.println("BeanContextPanel In searchReference(" + objectName+ ")"); tree.searchObjectName(objectName); } /** * Sets the showRoot attribute of the BeanContextPanel object * * @param flag The new showRoot value */ public void setShowRoot(boolean flag) { if (!flag) { tree.expandPath(tree.getPathForRow(0)); } tree.setRootVisible(flag); } } --- NEW FILE: BeanContextTreeView.java --- /* * EJTools, the Enterprise Java Tools * * Distributable under LGPL license. * See terms of license at www.gnu.org. */ package net.sourceforge.ejtools.awt; import java.awt.*; import java.awt.event.*; import java.beans.*; import java.beans.beancontext.*; import java.io.*; import java.lang.reflect.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import com.dreambean.awt.*; import net.sourceforge.ejtools.jmx.ObjectNameFinder; import org.apache.log4j.*; /** * Description of the Class * * @author letiembl * @created 24 septembre 2001 * @todo Javadoc to complete * @todo Import to clean */ public class BeanContextTreeView extends JTree implements ObjectNameFinder { /** Description of the Field */ protected Hashtable indexes = new Hashtable(); /** Description of the Field */ private static Category cat = Category.getInstance(BeanContextTreeView.class.getName()); /** * Constructor for the BeanContextTreeView object * * @param context Description of Parameter */ public BeanContextTreeView(BeanContext context) { ((DefaultTreeModel) getModel()).setRoot(new DefaultMutableTreeNode(new ContextNode(context), true)); setShowsRootHandles(true); setExpandsSelectedPaths(true); putClientProperty("JTree.lineStyle", "Angled"); setCellRenderer( new DefaultTreeCellRenderer() { public Component getTreeCellRendererComponent(JTree jtree, Object obj, boolean flag, boolean flag1, boolean flag2, int i, boolean flag3) { try { ContextNode contextnode = (ContextNode) ((DefaultMutableTreeNode) obj).getUserObject(); Object obj1 = contextnode.getUserObject(); Icon icon = null; Icon icon1 = null; Icon icon2 = null; if (contextnode.icon != null) { icon = getLeafIcon(); icon1 = getOpenIcon(); icon2 = getClosedIcon(); setLeafIcon(contextnode.icon); setOpenIcon(contextnode.open); setClosedIcon(contextnode.closed); } super.getTreeCellRendererComponent(jtree, obj, flag, flag1, flag2, i, flag3); if (contextnode.icon != null) { setLeafIcon(icon); setOpenIcon(icon1); setClosedIcon(icon2); } return this; } catch (Exception _ex) { return super.getTreeCellRendererComponent(jtree, obj, flag, flag1, flag2, i, flag3); } } }); updateTree(context, (DefaultMutableTreeNode) getModel().getRoot()); addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent mouseevent) { try { int i = getRowForLocation(mouseevent.getX(), mouseevent.getY()); TreePath treepath = getPathForLocation(mouseevent.getX(), mouseevent.getY()); if (i != -1) { Object obj = ((ContextNode) ((DefaultMutableTreeNode) treepath.getLastPathComponent()).getUserObject()).getUserObject(); // Right mouse button pressed if (SwingUtilities.isRightMouseButton(mouseevent)) { setSelectionPath(treepath); JPopupMenu jpopupmenu = new JPopupMenu(obj.toString()); BeanInfo beaninfo = Introspector.getBeanInfo(obj.getClass()); MethodDescriptor amethoddescriptor[] = beaninfo.getMethodDescriptors(); if (amethoddescriptor.length == 0) { return; } for (int j = 0; j < amethoddescriptor.length; j++) { jpopupmenu.add(new PopupAction(obj, amethoddescriptor[j])); } jpopupmenu.show(BeanContextTreeView.this, mouseevent.getX(), mouseevent.getY()); } } } catch (Exception exception) { exception.printStackTrace(); } } }); addTreeSelectionListener( new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent treeselectionevent) { final TreePath selPath = treeselectionevent.getNewLeadSelectionPath(); SwingUtilities.invokeLater( new Runnable() { public void run() { /* * try { * Object obj = ((ContextNode) ((DefaultMutableTreeNode) selPath.getLastPathComponent()).getUserObject()).getUserObject(); * if (obj instanceof BeanContextEditable) { * ((BeanContextEditable) obj).setSelection(); * } * } catch (Exception _ex) { * } */ } }); } }); } /** * Description of the Method * * @param searchString Description of the Parameter */ public void searchObjectName(String objectName) { System.out.println("BeanContextTreeView In searchReference(" + objectName+ ")"); TreeNode[] nodes = (TreeNode[]) indexes.get(objectName); if (nodes != null) { TreePath path = new TreePath(nodes); setSelectionPath(path); } } /** * Description of the Method * * @param collection Description of Parameter * @param defaultmutabletreenode Description of Parameter */ private void updateTree(Collection collection, DefaultMutableTreeNode defaultmutabletreenode) { for (Iterator iterator = collection.iterator(); iterator.hasNext(); ) { Object obj = iterator.next(); if (obj instanceof BeanContextContainerProxy) { DefaultMutableTreeNode defaultmutabletreenode1 = new DefaultMutableTreeNode(new ContextNode(obj), true); defaultmutabletreenode.add(defaultmutabletreenode1); indexes.put(obj.toString(), defaultmutabletreenode1.getPath()); // System.out.println(obj.toString() + " linked to " + defaultmutabletreenode1.getPath()); } else if (obj instanceof BeanContextChildComponentProxy) { DefaultMutableTreeNode defaultmutabletreenode2 = new DefaultMutableTreeNode(new ContextNode(obj), true); defaultmutabletreenode.add(defaultmutabletreenode2); if (obj instanceof Collection) { updateTree((Collection) obj, defaultmutabletreenode2); } indexes.put(obj.toString(), defaultmutabletreenode2.getPath()); // System.out.println(obj.toString() + " linked to " + defaultmutabletreenode2.getPath()); } } if (collection instanceof BeanContext) { ((BeanContext) collection).addBeanContextMembershipListener(new ServerTreeSync(defaultmutabletreenode)); } } /** * Description of the Class * * @author letiembl * @created 24 septembre 2001 */ public class ContextNode implements BeanContextChildComponentProxy { /** Description of the Field */ Icon closed; /** Description of the Field */ Icon icon; /** Description of the Field */ Object obj; /** Description of the Field */ Icon open; /** Description of the Field */ String txt; /** * Constructor for the ContextNode object * * @param obj1 Description of Parameter */ ContextNode(Object obj1) { obj = obj1; try { BeanInfo beaninfo = Introspector.getBeanInfo(obj1.getClass()); { // Custom rendering for Resource // Classic rendering for others if ((icon == null) && (beaninfo.getIcon(1) != null)) { icon = new ImageIcon(beaninfo.getIcon(1)); open = new ImageIcon(beaninfo.getIcon(1)); closed = new ImageIcon(beaninfo.getIcon(1)); } } Method method = obj1.getClass().getMethod("toString", new Class[0]); if (method.getDeclaringClass().equals(Object.class)) { txt = beaninfo.getBeanDescriptor().getDisplayName(); } } catch (Exception exception) { exception.printStackTrace(); } } /** * Gets the Component attribute of the ContextNode object * * @return The Component value */ public Component getComponent() { if (obj instanceof Component) { return (Component) obj; } if (obj instanceof BeanContextContainerProxy) { return ((BeanContextContainerProxy) obj).getContainer(); } if (obj instanceof BeanContextChildComponentProxy) { return ((BeanContextChildComponentProxy) obj).getComponent(); } else { return new JLabel("No GUI available for this service", 0); } } /** * Gets the UserObject attribute of the ContextNode object * * @return The UserObject value */ public Object getUserObject() { return obj; } /** * Description of the Method * * @return Description of the Returned Value */ public String toString() { return txt != null ? txt : obj.toString(); } } /** * Description of the Class * * @author letiembl * @created 24 septembre 2001 */ public class PopupAction extends AbstractAction { /** Description of the Field */ MethodDescriptor md; /** Description of the Field */ Object obj; /** * Constructor for the PopupAction object * * @param obj1 Description of Parameter * @param methoddescriptor Description of Parameter */ PopupAction(Object obj1, MethodDescriptor methoddescriptor) { super(methoddescriptor.getDisplayName()); obj = obj1; md = methoddescriptor; } /** * Description of the Method * * @param actionevent Description of Parameter */ public void actionPerformed(ActionEvent actionevent) { if (md.getParameterDescriptors() != null && md.getParameterDescriptors().length > 0) { new GenericMethodDialog(obj, md, (JFrame) SwingUtilities.getRoot(BeanContextTreeView.this)); } else { try { md.getMethod().invoke(obj, new Object[0]); } catch (Exception exception) { exception.printStackTrace(); } } } } /** * Description of the Class * * @author letiembl * @created 24 septembre 2001 */ protected class ServerTreeSync implements BeanContextMembershipListener { /** Description of the Field */ DefaultMutableTreeNode node; /** * Constructor for the ServerTreeSync object * * @param defaultmutabletreenode Description of Parameter */ ServerTreeSync(DefaultMutableTreeNode defaultmutabletreenode) { node = defaultmutabletreenode; } /** * Description of the Method * * @param beancontextmembershipevent Description of Parameter */ public void childrenAdded(BeanContextMembershipEvent beancontextmembershipevent) { node.removeAllChildren(); for (Iterator iterator = ((Collection) beancontextmembershipevent.getSource()).iterator(); iterator.hasNext(); ) { Object obj = iterator.next(); if (obj instanceof BeanContextContainerProxy) { DefaultMutableTreeNode defaultmutabletreenode = new DefaultMutableTreeNode(new ContextNode(obj)); node.add(defaultmutabletreenode); indexes.put(obj.toString(), defaultmutabletreenode.getPath()); } else if (obj instanceof BeanContextChildComponentProxy) { DefaultMutableTreeNode defaultmutabletreenode1 = new DefaultMutableTreeNode(new ContextNode(obj)); node.add(defaultmutabletreenode1); indexes.put(obj.toString(), defaultmutabletreenode1.getPath()); if (obj instanceof Collection) { updateTree((Collection) obj, defaultmutabletreenode1); } } } ((DefaultTreeModel) getModel()).reload(node); } /** * Description of the Method * * @param beancontextmembershipevent Description of Parameter */ public void childrenRemoved(BeanContextMembershipEvent beancontextmembershipevent) { Object aobj[] = beancontextmembershipevent.toArray(); for (int i = 0; i < aobj.length; i++) { for (Enumeration enumeration = node.children(); enumeration.hasMoreElements(); ) { DefaultMutableTreeNode defaultmutabletreenode = (DefaultMutableTreeNode) enumeration.nextElement(); if (((ContextNode) defaultmutabletreenode.getUserObject()).getUserObject() == aobj[i]) { node.remove(defaultmutabletreenode); indexes.remove(aobj[i].toString()); break; } } } ((DefaultTreeModel) getModel()).reload(node); } } } --- NEW FILE: GenericCustomizer.java --- /* * EJTools, the Enterprise Java Tools * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.sourceforge.ejtools.awt; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.*; import java.beans.beancontext.*; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import javax.swing.*; import javax.swing.border.*; import com.dreambean.awt.*; /** * Description of the Class * * @author letiembl * @created 8 avril 2002 * @todo Non Supported classes displayed * @todo Result of Command put into an Output List */ public class GenericCustomizer extends JScrollPane implements Customizer { /** Description of the Field */ private JPanel beanGui; /** Description of the Field */ private MethodDescriptor md[]; /** Description of the Field */ private Object object; /** Description of the Field */ private JPanel p; /** Description of the Field */ private PropertyDescriptor pd[]; /** Description of the Field */ private JComponent previous; /** Description of the Field */ private boolean showMethods; /** Constructor for the GenericCustomizer object */ public GenericCustomizer() { this(true); } /** * Constructor for the GenericCustomizer object * * @param obj Description of Parameter */ public GenericCustomizer(Object obj) { this(); setObject(obj); } /** * Constructor for the GenericCustomizer object * * @param flag Description of Parameter */ public GenericCustomizer(boolean flag) { super(new JPanel()); previous = null; p = (JPanel) getViewport().getView(); // To check p.setLayout(new GridBagLayout()); showMethods = flag; } /** * Constructor for the GenericCustomizer object * * @param flag Description of Parameter * @param obj Description of Parameter */ public GenericCustomizer(boolean flag, Object obj) { this(flag); setObject(obj); } /** * Adds a feature to the ArrayProperty attribute of the GenericCustomizer * object * * @param propertyeditor The feature to be added to the ArrayProperty * attribute * @param propertydescriptor The feature to be added to the ArrayProperty * attribute */ public void addArrayProperty(PropertyEditor propertyeditor, PropertyDescriptor propertydescriptor) { Object obj = null; Object[] array = null; JPanel jpanel = null; GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); try { obj = propertydescriptor.getReadMethod().invoke(object, new Object[0]); if (obj != null) { array = (Object[]) obj; } } catch (Exception _ex) { } JLabel jlabel = new JLabel(propertydescriptor.getDisplayName() + " :", JLabel.RIGHT); jlabel.setToolTipText(propertydescriptor.getShortDescription()); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weightx = 0.0D; gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.RELATIVE; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(jlabel, gridbagconstraints); if (array == null) { jpanel = new JPanel(); } else { jpanel = new JPanel(new GridLayout(array.length, 1)); for (int i = 0; i < array.length; i++) { try { PropertyEditor propertyeditor1 = (PropertyEditor) propertyeditor.getClass().newInstance(); propertyeditor1.setValue(array[i]); Object obj1; if (propertyeditor1.supportsCustomEditor()) { obj1 = propertyeditor1.getCustomEditor(); if (obj1 instanceof JComponent) { if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } } else { String as[] = propertyeditor1.getTags(); if (as != null) { obj1 = new GenericPropertyCustomizer(propertyeditor1, as); if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } else { final JLabel lbl = new JLabel(propertyeditor1.getAsText()); final PropertyEditor pcEditor = propertyeditor1; obj1 = lbl; pcEditor.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent propertychangeevent) { lbl.setText(pcEditor.getAsText()); } }); } } jpanel.add((Component) obj1); } catch (Exception _ex) { } } } gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.weightx = 1.0D; beanGui.add(jpanel, gridbagconstraints); } /** * Adds a feature to the Property attribute of the GenericCustomizer object * * @param propertyeditor The feature to be added to the Property * attribute * @param propertydescriptor The feature to be added to the Property * attribute */ public void addProperty(PropertyEditor propertyeditor, PropertyDescriptor propertydescriptor) { GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); try { Object obj = propertydescriptor.getReadMethod().invoke(object, new Object[0]); if (obj != null) { propertyeditor.setValue(obj); } if (!obj.equals(propertyeditor.getValue())) { propertydescriptor.getWriteMethod().invoke(object, new Object[]{ propertyeditor.getValue() }); } } catch (Exception _ex) { } JLabel jlabel = new JLabel(propertydescriptor.getDisplayName() + " :", JLabel.RIGHT); jlabel.setToolTipText(propertydescriptor.getShortDescription()); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weightx = 0.0D; gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.RELATIVE; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(jlabel, gridbagconstraints); Object obj1; if (propertyeditor.supportsCustomEditor()) { obj1 = propertyeditor.getCustomEditor(); if (obj1 instanceof JComponent) { if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } } else { String as[] = propertyeditor.getTags(); if (as != null) { obj1 = new GenericPropertyCustomizer(propertyeditor, as); if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } else if (propertydescriptor.getWriteMethod() != null) { obj1 = new GenericPropertyCustomizer(propertyeditor); if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } else { final JLabel lbl = new JLabel(propertyeditor.getAsText()); final PropertyEditor pcEditor = propertyeditor; obj1 = lbl; pcEditor.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent propertychangeevent) { lbl.setText(pcEditor.getAsText()); } }); } } gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.weightx = 1.0D; beanGui.add(((Component) (obj1)), gridbagconstraints); if (propertydescriptor.getWriteMethod() != null) { propertyeditor.addPropertyChangeListener(new BeanUpdater(propertydescriptor)); } try { Method method = object.getClass().getMethod("addPropertyChangeListener", new Class[]{java.lang.String.class, java.beans.PropertyChangeListener.class}); method.invoke(object, new Object[]{propertydescriptor.getName(), new EditorUpdater(propertyeditor, propertydescriptor.getName())}); } catch (Exception _ex) { try { Method method1 = object.getClass().getMethod("addPropertyChangeListener", new Class[]{java.beans.PropertyChangeListener.class}); method1.invoke(object, new Object[]{new EditorUpdater(propertyeditor, propertydescriptor)}); } catch (Exception _ex2) { System.out.println("Exception occurred"); _ex2.printStackTrace(); } } } /** * Sets the Object attribute of the GenericCustomizer object * * @param obj The new Object value */ public void setObject(Object obj) { try { p.removeAll(); if (obj == null) { validate(); repaint(); return; } object = obj; GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weighty = 1.0D; BeanInfo beaninfo; if (obj instanceof BeanInfo) { beaninfo = (BeanInfo) obj; } else { beaninfo = Introspector.getBeanInfo(obj.getClass()); } beanGui = new JPanel(new GridBagLayout()); beanGui.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), beaninfo.getBeanDescriptor().getDisplayName())); /* * if (beaninfo.getIcon(BeanInfo.ICON_COLOR_32x32) != null) * { * beanGui.setBorder(new GenericTitledBorder(BorderFactory.createEtchedBorder(), beaninfo.getBeanDescriptor().getDisplayName(), new ImageIcon(beaninfo.getIcon(BeanInfo.ICON_COLOR_32x32)))); * } * else * { * beanGui.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), beaninfo.getBeanDescriptor().getDisplayName())); * } */ pd = beaninfo.getPropertyDescriptors(); if (pd != null) { if (beaninfo.getBeanDescriptor().getValue("propertyorder") == null) { for (int i = 0; i < pd.length; i++) { if (!pd[i].getReadMethod().getDeclaringClass().equals(java.lang.Object.class) && !pd[i].isHidden()) { PropertyEditor propertyeditor = null; // Test if there is an editor Class class1 = pd[i].getPropertyEditorClass(); if (class1 != null) { propertyeditor = (PropertyEditor) class1.newInstance(); } // System.out.println("Property " + pd[i].getPropertyType()); // If it's an array, take if (pd[i].getPropertyType().isArray()) { Class componentType = pd[i].getPropertyType().getComponentType(); propertyeditor = PropertyEditorManager.findEditor(componentType); addArrayProperty(propertyeditor, pd[i]); } else { if (propertyeditor == null) { propertyeditor = PropertyEditorManager.findEditor(pd[i].getPropertyType()); } if (propertyeditor != null) { addProperty(propertyeditor, pd[i]); } } gridbagconstraints.weighty = 1.0D; } } } else { for (StringTokenizer stringtokenizer = new StringTokenizer((String) beaninfo.getBeanDescriptor().getValue("propertyorder"), ":"); stringtokenizer.hasMoreTokens(); ) { String s = stringtokenizer.nextToken(); for (int k = 0; k < pd.length; k++) { if (pd[k].getName().equals(s) && !pd[k].isHidden()) { PropertyEditor propertyeditor1 = null; Class class2 = pd[k].getPropertyEditorClass(); if (class2 != null) { propertyeditor1 = (PropertyEditor) class2.newInstance(); } // System.out.println("Property " + pd[k].getPropertyType()); // If it's an array, take if (pd[k].getPropertyType().isArray()) { Class componentType = pd[k].getPropertyType().getComponentType(); propertyeditor1 = PropertyEditorManager.findEditor(componentType); addArrayProperty(propertyeditor1, pd[k]); } else { if (propertyeditor1 == null) { propertyeditor1 = PropertyEditorManager.findEditor(pd[k].getPropertyType()); } if (propertyeditor1 != null) { addProperty(propertyeditor1, pd[k]); } } gridbagconstraints.weighty = 1.0D; } } } } } if (showMethods) { md = beaninfo.getMethodDescriptors(); gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; if (md != null) { for (int j = 0; j < md.length; j++) { if (!md[j].getName().startsWith("get") && !md[j].getName().startsWith("set") && !md[j].getName().startsWith("is")) { JButton jbutton = new JButton(md[j].getDisplayName()); jbutton.setToolTipText(md[j].getShortDescription()); beanGui.add(jbutton, gridbagconstraints); jbutton.addActionListener(new MethodInvoker(md[j])); } } } } gridbagconstraints.weighty = 0.0D; gridbagconstraints.weightx = 1.0D; gridbagconstraints.fill = GridBagConstraints.BOTH; p.add(beanGui, gridbagconstraints); // Add a spacer gridbagconstraints.weighty = 1.0D; p.add(new JLabel(" "), gridbagconstraints); validate(); repaint(); } catch (Exception exception) { System.out.println("Exception occurred"); exception.printStackTrace(); } } /** * Description of the Method * * @param s Description of Parameter * @param obj Description of Parameter * @param obj1 Description of Parameter */ protected void updated(String s, Object obj, Object obj1) { firePropertyChange(s, obj, obj1); } /** * Description of the Class * * @author root * @created 7 octobre 2001 */ protected class BeanUpdater implements PropertyChangeListener { /** Description of the Field */ PropertyDescriptor pd; /** * Constructor for the BeanUpdater object * * @param propertydescriptor Description of Parameter */ public BeanUpdater(PropertyDescriptor propertydescriptor) { pd = propertydescriptor; } /** * Description of the Method * * @param propertychangeevent Description of Parameter */ public void propertyChange(PropertyChangeEvent propertychangeevent) { Object obj = null; try { Object obj1 = pd.getReadMethod().invoke(object, new Object[0]); Object obj2 = ((PropertyEditor) propertychangeevent.getSource()).getValue(); pd.getWriteMethod().invoke(object, new Object[]{obj2}); updated(pd.getName(), obj1, obj2); } catch (InvocationTargetException invocationtargetexception) { if (invocationtargetexception.getTargetException() instanceof PropertyVetoException) { JOptionPane.showMessageDialog((Frame) SwingUtilities.windowForComponent(GenericCustomizer.this), "Could not change value:" + invocationtargetexception.getTargetException().getMessage(), "Error", 0); } } catch (Exception exception) { System.err.println(exception); } } } /** * Description of the Class * * @author root * @created 7 octobre 2001 */ protected class EditorUpdater implements PropertyChangeListener { /** Description of the Field */ PropertyEditor editor; /** Description of the Field */ PropertyDescriptor pd; /** Description of the Field */ String propName; /** * Constructor for the EditorUpdater object * * @param propertyeditor Description of Parameter * @param propertydescriptor Description of Parameter */ public EditorUpdater(PropertyEditor propertyeditor, PropertyDescriptor propertydescriptor) { propName = null; editor = propertyeditor; pd = propertydescriptor; } /** * Constructor for the EditorUpdater object * * @param propertyeditor Description of Parameter * @param s Description of Parameter */ public EditorUpdater(PropertyEditor propertyeditor, String s) { propName = null; editor = propertyeditor; propName = s; } /** * Description of the Method * * @param propertychangeevent Description of Parameter */ public void propertyChange(PropertyChangeEvent propertychangeevent) { if (propName != null && propertychangeevent.getPropertyName() != null && !propertychangeevent.getPropertyName().equals(propName)) { return; } if (propertychangeevent.getPropertyName() != null) { if (!editor.getValue().equals(propertychangeevent.getNewValue())) { editor.setValue(propertychangeevent.getNewValue()); } } else { try { Object obj = pd.getReadMethod().invoke(propertychangeevent.getSource(), new Object[0]); if (obj != null && !obj.equals(editor.getValue())) { editor.setValue(obj); } } catch (Exception _ex) { } } } } /** * Description of the Class * * @author root * @created 7 octobre 2001 */ protected class MethodInvoker implements ActionListener { /** Description of the Field */ MethodDescriptor md; /** * Constructor for the MethodInvoker object * * @param methoddescriptor Description of Parameter */ MethodInvoker(MethodDescriptor methoddescriptor) { md = methoddescriptor; } /** * Description of the Method * * @param actionevent Description of Parameter */ public void actionPerformed(ActionEvent actionevent) { Object obj; for (obj = p; !(obj instanceof Frame); obj = ((Component) (obj)).getParent()) { ; } if (md.getParameterDescriptors() == null && md.getMethod().getParameterTypes().length == 0 || md.getParameterDescriptors() != null && md.getParameterDescriptors().length == 0) { try { md.getMethod().invoke(object, new Object[0]); } catch (InvocationTargetException invocationtargetexception) { invocationtargetexception.getTargetException().printStackTrace(); JOptionPane.showMessageDialog(((Component) (obj)), invocationtargetexception.getTargetException().getMessage(), "Error", 0); } catch (Exception exception) { System.err.println(exception); JOptionPane.showMessageDialog(((Component) (obj)), "An exception occured. Check log for details", "Error", 0); } } else { new GenericMethodDialog(object, md, (Frame) obj); } } } static { PropertyEditorManager.setEditorSearchPath(new String[]{"sun.beans.editors", "net.sourceforge.ejtools.awt.editors"}); } } --- NEW FILE: GenericMBeanCustomizer.java --- /* * EJTools, the Enterprise Java Tools * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.sourceforge.ejtools.awt; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.*; import java.beans.beancontext.*; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import javax.management.*; import javax.swing.*; import javax.swing.border.*; import com.dreambean.awt.*; import net.sourceforge.ejtools.jmx.MBeanAccessor; /** * Description of the Class * * @author letiembl * @created 8 avril 2002 * @todo Protected method to choose PropertyEditor by Class and Name * @todo Constructor Info * @todo Notification Info * @todo Layout for Contructor Attribute Operation and Notification * @todo Non Supported classes displayed * @todo Result of Command put into an Output List */ public class GenericMBeanCustomizer extends JScrollPane implements Customizer { /** Description of the Field */ private JPanel beanGui; /** Description of the Field */ private MBeanAttributeInfo mbai[]; /** Description of the Field */ private MBeanNotificationInfo mbni[]; /** Description of the Field */ private MBeanOperationInfo mboi[]; /** Description of the Field */ private MBeanAccessor object; /** Description of the Field */ private JPanel p; /** Description of the Field */ private JComponent previous; /** Description of the Field */ private boolean showMethods; /** Constructor for the GenericCustomizer object */ public GenericMBeanCustomizer() { this(true); } /** * Constructor for the GenericCustomizer object * * @param obj Description of Parameter */ public GenericMBeanCustomizer(Object obj) { this(); setObject(obj); } /** * Constructor for the GenericCustomizer object * * @param flag Description of Parameter */ public GenericMBeanCustomizer(boolean flag) { super(new JPanel()); previous = null; p = (JPanel) getViewport().getView(); p.setLayout(new GridBagLayout()); showMethods = flag; } /** * Constructor for the GenericCustomizer object * * @param flag Description of Parameter * @param obj Description of Parameter */ public GenericMBeanCustomizer(boolean flag, Object obj) { this(flag); setObject(obj); } /** * Adds a feature to the ArrayProperty attribute of the GenericCustomizer * object * * @param propertyeditor The feature to be added to the ArrayProperty * attribute * @param attributeInfo The feature to be added to the ArrayProperty * attribute */ public void addArrayProperty(PropertyEditor propertyeditor, MBeanAttributeInfo attributeInfo) { Object obj = null; Object[] array = null; JPanel jpanel = null; GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); try { if (attributeInfo.isReadable()) { obj = object.getAttribute(object.getObjectName(), attributeInfo.getName()); } if (obj != null) { array = (Object[]) obj; } } catch (Throwable _ex) { } JLabel jlabel = new JLabel(attributeInfo.getName() + " :", JLabel.RIGHT); jlabel.setToolTipText(attributeInfo.getDescription()); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weightx = 0.0D; gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.RELATIVE; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(jlabel, gridbagconstraints); if (array == null) { jpanel = new JPanel(); } else { jpanel = new JPanel(new GridLayout(array.length, 1)); for (int i = 0; i < array.length; i++) { try { PropertyEditor propertyeditor1 = (PropertyEditor) propertyeditor.getClass().newInstance(); propertyeditor1.setValue(array[i]); Object obj1; if (propertyeditor1.supportsCustomEditor()) { obj1 = propertyeditor1.getCustomEditor(); if (obj1 instanceof JComponent) { if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } } else { String as[] = propertyeditor1.getTags(); if (as != null) { obj1 = new GenericPropertyCustomizer(propertyeditor1, as); if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } else { final JLabel lbl = new JLabel(propertyeditor1.getAsText()); final PropertyEditor pcEditor = propertyeditor1; obj1 = lbl; pcEditor.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { lbl.setText(pcEditor.getAsText()); } }); } } jpanel.add((Component) obj1); } catch (Exception _ex) { } } } gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.weightx = 1.0D; beanGui.add(jpanel, gridbagconstraints); } /** * Adds a feature to the Property attribute of the GenericCustomizer object * * @param propertyeditor The feature to be added to the Property attribute * @param attributeInfo The feature to be added to the Property attribute */ public void addProperty(PropertyEditor propertyeditor, MBeanAttributeInfo attributeInfo) { GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); try { if (attributeInfo.isReadable()) { propertyeditor.setValue(object.getAttribute(object.getObjectName(), attributeInfo.getName())); } } catch (Throwable _ex) { } JLabel jlabel = new JLabel(attributeInfo.getName() + " :", JLabel.RIGHT); jlabel.setToolTipText(attributeInfo.getDescription()); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weightx = 0.0D; gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.RELATIVE; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(jlabel, gridbagconstraints); Object obj1; if (propertyeditor.supportsCustomEditor()) { obj1 = propertyeditor.getCustomEditor(); if (obj1 instanceof JComponent) { if (previous != null) { previous.setNextFocusableComponent(((Component) (obj1))); } previous = (JComponent) obj1; } } else { String[] tags = propertyeditor.getTags(); if (tags != null) { obj1 = new GenericPropertyCustomizer(propertyeditor, tags); if (previous != null) { previous.setNextFocusableComponent((Component) (obj1)); } previous = (JComponent) obj1; } else { if (attributeInfo.isWritable()) { obj1 = new GenericPropertyCustomizer(propertyeditor); if (previous != null) { previous.setNextFocusableComponent((Component) (obj1)); } previous = (JComponent) obj1; } else { final JLabel lbl = new JLabel(propertyeditor.getAsText()); final PropertyEditor pcEditor = propertyeditor; obj1 = lbl; pcEditor.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { lbl.setText(pcEditor.getAsText()); } }); } } } gridbagconstraints.weightx = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(((Component) (obj1)), gridbagconstraints); if (attributeInfo.isWritable()) { propertyeditor.addPropertyChangeListener(new BeanUpdater(attributeInfo)); } try { Method method = object.getClass().getMethod("addPropertyChangeListener", new Class[]{java.lang.String.class, java.beans.PropertyChangeListener.class}); method.invoke(object, new Object[]{attributeInfo.getName(), new EditorUpdater(propertyeditor, attributeInfo.getName())}); } catch (Exception _ex) { try { Method method1 = object.getClass().getMethod("addPropertyChangeListener", new Class[]{java.beans.PropertyChangeListener.class}); method1.invoke(object, new Object[]{new EditorUpdater(propertyeditor, attributeInfo)}); } catch (Exception _ex2) { } } } public void addUnsupportedProperty(MBeanAttributeInfo attributeInfo) { System.out.println("In addUnsupportedProperty " + attributeInfo.getType()); GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); JLabel jlabel = new JLabel(attributeInfo.getName() + " :", JLabel.RIGHT); jlabel.setToolTipText(attributeInfo.getDescription()); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weightx = 0.0D; gridbagconstraints.weighty = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.RELATIVE; gridbagconstraints.fill = GridBagConstraints.HORIZONTAL; beanGui.add(jlabel, gridbagconstraints); JLabel lbl = new JLabel("Unloadabled class " + attributeInfo.getType()); gridbagconstraints.weightx = 1.0D; gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; beanGui.add(lbl, gridbagconstraints); } /** * Sets the Object attribute of the GenericCustomizer object * * @param obj The new Object value */ public void setObject(Object obj) { try { p.removeAll(); if (obj == null) { validate(); repaint(); return; } object = (MBeanAccessor) obj; MBeanInfo beaninfo = object.getMBeanInfo(); GridBagConstraints gridbagconstraints = new GridBagConstraints(); gridbagconstraints.insets = new Insets(3, 3, 3, 3); gridbagconstraints.anchor = GridBagConstraints.NORTH; gridbagconstraints.weighty = 1.0D; beanGui = new JPanel(new GridBagLayout()); beanGui.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), object.getCanonicalName())); mbai = beaninfo.getAttributes(); if (mbai != null) { for (int i = 0; i < mbai.length; i++) { PropertyEditor propertyeditor = null; Class c = getClass(mbai[i].getType()); if (c == null) { addUnsupportedProperty(mbai[i]); } else { if (c.isArray()) { Class componentType = c.getComponentType(); propertyeditor = PropertyEditorManager.findEditor(componentType); addArrayProperty(propertyeditor, mbai[i]); } else { propertyeditor = PropertyEditorManager.findEditor(c); if (propertyeditor == null) { propertyeditor = PropertyEditorManager.findEditor(String.class); } addProperty(propertyeditor, mbai[i]); } gridbagconstraints.weighty = 1.0D; } } } if (showMethods) { mboi = beaninfo.getOperations(); gridbagconstraints.gridwidth = GridBagConstraints.REMAINDER; gridbagconstraints.fill = GridBagConstraints.BOTH; if (mboi != null) { for (int j = 0; j < mboi.length; j++) { if (!mboi[j].getName().startsWith("get") && !mboi[j].getName().startsWith("set") && !mboi[j].getName().startsWith("is")) { JButton jbutton = new JButton(mboi[j].getName()); jbutton.setToolTipText(mboi[j].getDescription()); beanGui.add(jbutton, gridbagconstraints); jbutton.addActionListener(new MethodInvoker(mboi[j])); } } } } gridbagconstraints.weighty = 0.0D; gridbagconstraints.weightx = 1.0D; gridbagconstraints.fill = GridBagConstraints.BOTH; p.add(beanGui, gridbagconstraints); // Add a spacer gridbagconstraints.weighty = 1.0D; p.add(new JLabel(" "), gridbagconstraints); validate(); repaint(); } catch (Exception exception) { System.out.println("Exception occurred"); exception.printStackTrace(); } } /** * Description of the Method * * @param s Description of Parameter * @param obj Description of Parameter * @param obj1 Description of Parameter */ protected void updated(String s, Object obj, Object obj1) { firePropertyChange(s, obj, obj1); } /** * Gets the class attribute of the GenericMBeanCustomizer class * * @param fullPathClassName Description of the Parameter * @return The class value */ static Class getClass(String fullPathClassName) { if (fullPathClassName.equals("int")) { return Integer.TYPE; } if (fullPathClassName.equals("short")) { return Short.TYPE; } if (fullPathClassName.equals("long")) { return Long.TYPE; } if (fullPathClassName.equals("byte")) { return Byte.TYPE; } if (fullPathClassName.equals("char")) { return Character.TYPE; } if (fullPathClassName.equals("float")) { return Float.TYPE; } if (fullPathClassName.equals("double")) { return Double.TYPE; } if (fullPathClassName.equals("boolean")) { return Boolean.TYPE; } Class c = null; try { c = Class.forName(fullPathClassName); } catch (Throwable e) { } System.out.println("Class is " + c); return c; } /** * Description of the Class * * @author laurent * @created 11 avril 2002 */ class BeanUpdater implements PropertyChangeListener { /** Description of the Field */ MBeanAttributeInfo info; /** * Constructor for the BeanUpdater object * * @param info Description of Parameter */ public BeanUpdater(MBeanAttributeInfo info) { this.info = info; } /** * Description of the Method * * @param event Description of Parameter */ public void propertyChange(PropertyChangeEvent event) { Object old = null; try { if (info.isReadable()) { old = object.getAttribute(object.getObjectName(), info.getName()); } Object obj = ((PropertyEditor) event.getSource()).getValue(); object.setAttribute(object.getObjectName(), new Attribute(info.getName(), obj)); updated(info.getName(), old, obj); } /* * AS Adapt to the JMXConnector exceptions * catch( InvocationTargetException e ) { * if( e.getTargetException() instanceof PropertyVetoException ) { * JOptionPane.showMessageDialog( * (Frame) SwingUtilities.windowForComponent( GenericMBeanCustomizer.this ), * "Could not change value:" + e.getTargetException().getMessage(), * "Error", * JOptionPane.ERROR_MESSAGE * ); * } * } */ catch (Exception e) { System.err.println(e); } } } /** * This class makes sure that the customizer is updated with the object * changes * * @author andreass * @created November 24, 2000 */ class EditorUpdater implements PropertyChangeListener { /** Description of the Field */ PropertyEditor editor; /** Description of the Field */ MBeanAttributeInfo info; /** Description of the Field */ String name; /** * Constructor for the EditorUpdater object * * @param editor Description of Parameter * @param info Description of Parameter */ public EditorUpdater(PropertyEditor editor, MBeanAttributeInfo info) { this.editor = editor; ... [truncated message content] |