Hi Marc
Yeah, I took the code of GenericCustomizer from Ricky's EJX and changed it
to make it working
with JMX but I didn't had the time to make all the changes (I will,
promised).
It was working on my computer and therefore I thought I just add it to CVS
to let you guys see
what's going on.
BTW when you have time can you explain me what you are trying to say (sorry,
but my English
is not as good as it should be).
Have fun - Mad Andy / Better Pizza
Senior Java Developer
eBuilt Inc. (www.ebuilt.com)
while( true ) { think(); write(); publish(); }
----- Original Message -----
From: "marc fleury" <[EMAIL PROTECTED]>
To: "jBoss Developer" <[EMAIL PROTECTED]>
Sent: Saturday, November 25, 2000 2:24 PM
Subject: RE: [jBoss-Dev]
CVSupdate:ejx/examples/jboss.admin/src/org/jboss/jBossAdminGenericMBeanCusto
mizer.java RemoteResource.java
> hey
>
> :)
>
> it's full of Ricky code ... are you trying to slip a fast one by me :)))
>
> marc
>
>
> |-----Original Message-----
> |From: [EMAIL PROTECTED]
> |[mailto:[EMAIL PROTECTED]]On Behalf Of jBoss CVS
> |Development
> |Sent: Saturday, November 25, 2000 2:24 PM
> |To: [EMAIL PROTECTED]
> |Subject: [jBoss-Dev] CVS
> |update:ejx/examples/jboss.admin/src/org/jboss/jBossAdminGenericMBeanCust
> |omizer.java RemoteResource.java
> |
> |
> | User: andreas
> | Date: 00/11/25 14:23:31
> |
> | Modified: examples/jboss.admin/src/org/jboss/jBossAdmin
> | RemoteResource.java
> | Added: examples/jboss.admin/src/org/jboss/jBossAdmin
> | GenericMBeanCustomizer.java
> | Log:
> | Created a new GenericMBeanCustomizer to display the
> | remote MBean overview dynamic based on the MBean
> | description.
> | It is still buggy but evolving.
> |
> | Revision Changes Path
> | 1.4 +7 -5
> |ejx/examples/jboss.admin/src/org/jboss/jBossAdmin/RemoteResource.java
> |
> | Index: RemoteResource.java
> | ===================================================================
> | RCS file:
> |/products/cvs/ejboss/ejx/examples/jboss.admin/src/org/jboss/jBossAd
> |min/RemoteResource.java,v
> | retrieving revision 1.3
> | retrieving revision 1.4
> | diff -u -r1.3 -r1.4
> | --- RemoteResource.java 2000/11/24 07:51:43 1.3
> | +++ RemoteResource.java 2000/11/25 22:23:31 1.4
> | @@ -37,7 +37,7 @@
> | * <description>
> | *
> | * @author <A
> |href="mailto:[EMAIL PROTECTED]">Andreas "Mad" Schaefer</A>
> | -* @version $Revision: 1.3 $
> | +* @version $Revision: 1.4 $
> | **/
> | public class RemoteResource
> | extends BeanContextSupport
> | @@ -183,19 +183,21 @@
> |
> | // BeanContextContainerProxy implementation -----------------
> | public Component getComponent() {
> | -/*
> | +// /*
> | if( c == null ) {
> | - c = new GenericCustomizer();
> | - c.setObject( this );
> | + c = new GenericMBeanCustomizer();
> | + c.setObject( new
> ericMBeanCustomizer.Resource(
> |mConnector, mName ) );
> | }
> | return (Component) c;
> | -*/
> | +// */
> | +/*
> | if( mViewer == null ) {
> | mViewer = new JScrollPane(
> | new Viewer()
> | );
> | }
> | return mViewer;
> | +*/
> | }
> |
> | // Package protected ---------------------------------------------
> |
> |
> |
> | 1.1
> |ejx/examples/jboss.admin/src/org/jboss/jBossAdmin/GenericMBeanCusto
> |mizer.java
> |
> | Index: GenericMBeanCustomizer.java
> | ===================================================================
> | /*
> | * jBoss, the OpenSource EJB server
> | *
> | * Distributable under GPL license.
> | * See terms of license at gnu.org.
> | */
> | package org.jboss.jBossAdmin;
> |
> | import java.awt.Component;
> | import java.awt.Container;
> | import java.awt.Frame;
> | import java.awt.GridBagConstraints;
> | import java.awt.GridBagLayout;
> | import java.awt.Insets;
> | import java.awt.event.ActionEvent;
> | import java.awt.event.ActionListener;
> | import java.beans.Customizer;
> | import java.beans.PropertyChangeEvent;
> | import java.beans.PropertyChangeListener;
> | import java.beans.PropertyEditor;
> | import java.beans.PropertyEditorManager;
> | import java.beans.PropertyVetoException;
> | import java.beans.beancontext.BeanContext;
> | import java.beans.beancontext.BeanContextChild;
> | import java.beans.beancontext.BeanContextProxy;
> | import java.beans.beancontext.BeanContextServiceProvider;
> | import java.beans.beancontext.BeanContextServices;
> | import java.beans.beancontext.BeanContextServicesSupport;
> | import java.io.IOException;
> | import java.lang.reflect.InvocationTargetException;
> | import java.lang.reflect.Method;
> | import java.util.Arrays;
> | import java.util.Iterator;
> |
> | import javax.management.Attribute;
> | import javax.management.MBeanAttributeInfo;
> | import javax.management.MBeanFeatureInfo;
> | impor
> t javax.management.MBeanInfo;
> | import javax.management.MBeanNotificationInfo;
> | import javax.management.MBeanOperationInfo;
> | import javax.management.MBeanParameterInfo;
> | import javax.management.ObjectName;
> |
> | import javax.swing.*;
> |
> | import com.dreambean.awt.GenericMethodDialog;
> | import com.dreambean.awt.GenericPropertyCustomizer;
> |
> | import org.jboss.jmx.interfaces.JMXConnector;
> |
> | /**
> | * Generic JavaBean customizer. It creates property editors for
> |all properties and buttons for all methods.
> | * Create a BeanInfo class for the JavaBean that you want to be
> |able to customize for maximum control over the
> | * appearance of the customizer.
> | * The GenericCustomizer has one extension to the standard
> |JavaBeans behavior: if a propertyeditor implements BeanContextProxy
> | * the GenericCustomizer will add it to a beancontext method so
> |that the propertyeditor can use that contextual info to customize itself.
> | * For example, the legal values of a property might depend on
> |which object is being edited.
> | * The object being edited is made available as a BeanContext
> |service /w the class of the object. This allows the
> |propertyeditors to extract
> | * dynamic info for customization.
> | *
> | * @author Rickard �berg ([EMAIL PROTECTED])
> | * @created November 24, 2000
> | * @version $Revision: 1.1 $
> | */
> | public class GenericMBeanCustomizer
> | extends JScrollPane
> | implements Customizer, BeanContextProxy
> | {
> |
> | // Attributes ----------------------------------------------------
> | /**
> | * Description of the Field
> | */
> | private Resource mResource;
> | /**
> | * Description of the Field
> | */
> | private JPanel mPanel;
> | /**
> | * Description of the Field
> | */
> | private JPanel mGUI;
> |
> | /**
> | * Description of the Field
> | */
> | private JComponent mPreviousBean = null;
> |
> | /**
> | * Description of the Field
> | */
> | private BeanContextServices bcProxy = null;
> |
> | // Constructor ---------------------------------------------------
> | /**
> | * Create a new customizer
> | */
> | public GenericMBeanCustomizer() {
> | super( new JPanel() );
> | mPanel = ( JPanel ) getViewport().getView();
> | mPanel.setLayout( new GridBagLayout() );
> | }
> |
> | /**
> | * Convenience method to create a customizer and set the
> |object to be customized
> | *
> | * @param obj the customized object
> | */
> | public GenericMBeanCustomizer( Resource pResource ) {
> | this();
> | setObject( pResource );
> | }
> |
> | // Customizer implementation -------------------------------------
> | /**
> | * Set the object to be customized. Inspects the object
> |and creates editors and buttons
> | *
> | * @param object
> | */
> | public void setObject( Object pObject ) {
> | try {
> | mPanel.removeAll();
> |
> | if( !( pObject instanceof Resource ) ) {
> | validate();
> | repaint();
> | return;
> | }
> |
> | mResource = (Resource) pObject;
> | ObjectName lName = mResource.getName();
> | MBeanInfo lInfo =
> |mResource.getConnector().getMBeanInfo( lName );
> |
> | GridBagConstraints c = new GridBagConstraints();
> | c.insets = new Insets( 5, 5, 5, 5 );
> | c.anchor = GridBagConstraints.NORTH;
> | c.weighty = 1;
> |
> | /* AS No BeanInfo used here -> remove later
> | BeanInfo info;
> | if( object instanceof BeanInfo ) {
> | info = ( BeanInfo ) object;
> | }
> | else {
> | info =
> rospector.getBeanInfo(
> |object.getClass() );
> | }
> | */
> |
> | mGUI = new JPanel( new GridBagLayout() );
> | mGUI.setBorder(
> |BorderFactory.createTitledBorder(
> |BorderFactory.createEtchedBorder(), mResource.getName().toString() ) );
> |
> | addInfo( "Domain", lName.getDomain() );
> | addInfo( "Description", lInfo.getDescription() );
> |
> | addSubtitle( "Attributes" );
> | Iterator i = Arrays.asList(
> |lInfo.getAttributes() ).iterator();
> |
> while( i.hasNext() ) {
> | MBeanAttributeInfo lFeature =
> |(MBeanAttributeInfo) i.next();
> | String lType = lFeature.getType();
> | Class lClass = null;
> | if( lType.equals( "int" ) ) {
> | lClass = Integer.TYPE;
> | }
> | else if( lType.equals( "short" ) ) {
> | lClass = Short.TYPE;
> | }
> | else if( lType.equals( "long" ) ) {
> | lClass = Long.TYPE;
> | }
> | else if( lType.equals( "byte" ) ) {
> | lClass = Byte.TYPE;
> | }
> | else if( lType.equals( "char" ) ) {
> | lClass = Character.TYPE;
> | }
> | else if( lType.equals( "float" ) ) {
> | lClass = Float.TYPE;
> | }
> | else if( lType.equals( "double" ) ) {
> | lClass = Double.TYPE;
> | }
> | else if( lType.equals( "boolean" ) ) {
> | lClass = Boolean.TYPE;
> | }
> | if( lClass == null ) {
> | lClass = Class.forName( lType );
> | }
> | System.out.println( "Got class: " +
> |lClass );
> | PropertyEditor lEditor =
> |PropertyEditorManager.findEditor(
> | lClass
> | );
> | // If editor is null then is uses
> |the default string editor
> | addProperty( lEditor, lFeature );
> | }
> |
> | addSubtitle( "Operations" );
> | i = Arrays.asList( lInfo.getOperations()
> |).iterator();
> | while( i.hasNext() ) {
> | MBeanOperationInfo lFeature =
> |(MBeanOperationInfo) i.next();
> | addMethod( lFeature );
> | }
> |
> | addSubtitle( "Notifications" );
> | i = Arrays.asList( lInfo.getNotifications()
> |).iterator();
> | while( i.hasNext() ) {
> | MBeanNotificationInfo lFeature =
> |(MBeanNotificationInfo) i.next();
> | addMethod( lFeature );
> | }
> | /* AS No BeanInfo used here -> remove later
> | // Properties
> | pd = info.getPropertyDescriptors();
> |
> | if( pd != null ) {
> |
>
> |info.getBeanDescriptor().getValue( "propertyorder" ) == null ) {
> | // Order is not given
> | for( int i = 0; i <
> |pd.length; i++ ) {
> |
>
> |pd[i].getReadMethod().getDeclaringClass().equals( Object.class ) ) {
> | continue;
> | }
> |
> | if( pd[i].isHidden() ) {
> | continue;
> | }
> |
> | PropertyEditor
> |editor = null;
> |
> | Class cl =
> |pd[i].getPropertyEditorClass();
> | if( cl != null ) {
> | editor =
>
> |PropertyEditor ) cl.newInstance();
> | }
> | else {
> | editor =
> |PropertyEditorManager.findEditor( pd[i].getPropertyType() );
> | }
> |
> | if( editor != null ) {
> |
> |addProperty( editor, pd[i] );
> | }
> | c.weighty = 1;
> | }
> | }
> | else {
> | // Order of properties has
> |been given
> | for( StringTokenizer token
> |= new StringTokenizer( ( String )
> |info.getBeanDescriptor().getValue( "propertyorder" ), ":" );
> |token.hasMoreTokens(); ) {
> | String propName =
> |token.nextToken();
> | for( int i = 0; i <
> |pd.length; i++ ) {
> |
>
> |!pd[i].getName().equals( propName ) ) {
> | continue;
> | }
> |
> |
>
> |pd[i].isHidden() ) {
> | continue;
> | }
> |
> |
> |PropertyEditor editor = null;
> |
> | Class cl =
> |pd[i].getPropertyEditorClass();
> | if( cl != null ) {
> |
> |editor = ( PropertyEditor ) cl.newInstance();
> | }
> | else {
> |
> |editor = PropertyEditorManager.findEditor( pd[i].getPropertyType() );
> | }
> |
> | if( editor
> |!= null ) {
> |
> |addProperty( editor, pd[i] );
> | }
> | c.weighty = 1;
> | }
> | }
> | }
> | }
> |
> | // Methods
> | if( showMethods ) {
> | md = info.getMethodDescriptors();
> | c.gridwidth = GridBagConstraints.REMAINDER;
> | c.fill = GridBagConstraints.HORIZONTAL;
> | if( md != null ) {
> | for( int i = 0; i <
> |md.length; i++ ) {
> |
>
> |md[i].getName().startsWith( "get" ) ||
> |
> |md[i].getName().startsWith( "set" ) ||
> |
> |md[i].getName().startsWith( "is" ) ) {
> | continue;
> | }
> |
> | JButton button =
> |new JButton( md[i].getDisplayName() );
> |
> |button.setToolTipText( md[i].getShortDescription() );
> | ( ( GridBagLayout )
> |beanGui.getLayout() ).setConstraints( button, c );
> | beanGui.add( button );
> |
> |
> |button.addActionListener( new MethodInvoker( md[i] ) );
> | }
> | }
> | }
> | */
> |
> | c.weighty = 0;
> | c.weightx = 1;
> | c.fill = GridBagConstraints.BOTH;
> | ( ( GridBagLayout ) mPanel.getLayout()
> |).setConstraints( mGUI, c );
> | mPanel.add( mGUI );
> |
> | validate();
> | repaint();
> | }
> | catch( Exception e ) {
> | System.out.println( "Exception occurred" );
> | e.printStackTrace();
> | }
> | }
> |
> | // BeanContextProxy ----------------------------------------------
> | /**
> | * Gets the BeanContextProxy attribute of the
> |GenericMBeanCustomizer object
> | *
> | * @return The BeanContextProxy value
> | */
> | public BeanContextChild getBeanContextProxy() {
> | if( bcProxy == null ) {
> | bcProxy = new BeanContextServicesSupport();
> | bcProxy.addService( mResource.getClass(),
> | new BeanContextServiceProvider() {
> | /**
> | * Gets the
> |CurrentServiceSelectors attribute of the GenericMBeanCustomizer object
> | *
> | * @param bcs
> |Description of Parameter
> | * @param serviceClass
> |Description of Parameter
> | * @return
> |The CurrentServiceSelectors value
> | */
> | public Iterator
> |getCurrentServiceSelectors( BeanContextServices bcs, Class serviceClass )
{
> | return null;
> | }
> |
> | /**
> | * Gets the Service
> |attribute of the GenericMBeanCustomizer object
> | *
> | * @param bcs
> |Description of Parameter
> | * @param requestor
> |Description of Parameter
> | * @param serviceClass
> |Description of Parameter
> | * @param serviceSelector
> |Description of Parameter
> | * @return
> |The Service value
> | */
> | public Object
> Service(
> |BeanContextServices bcs, Object requestor, Class serviceClass,
> |Object serviceSelector ) {
> | return mResource;
> | }
> |
> | /**
> | * Description of the Method
> | *
> | * @param bcs
> |Description of Parameter
> | * @param requestor
> |Description of Parameter
> | * @param service
> |Description of Parameter
> | */
> | public void releaseService(
> |BeanContextServices bcs, Object requestor, Object service ) {
> | }
> | } );
> | // Make object available as service
> | // TODO
> | }
> | return bcProxy;
> | }
> |
> | // Public --------------------------------------------------------
> | public void addInfo( String pDescription, String pValue ) {
> | }
> | public void addSubtitle( String pTitle ) {
> | }
> | public void addMethod( MBeanFeatureInfo pInfo ) {
> | }
> |
> | /**
> | * Add a property to the customizer
> | *
> | * @param editor
> | * @param pd
> | */
> | public void addProperty( PropertyEditor pEditor,
> |MBeanAttributeInfo pInfo ) {
> | // If the PropertyEditor is a BeanContextChild: put
> |it into the tree
> | // This lets the editor find contextual info!
> | if( pEditor instanceof BeanContextProxy ) {
> | ( ( BeanContext ) getBeanContextProxy()
> |).add( pEditor );
> | }
> | if( pEditor == null ) {
> | System.out.println( "Editor is null: " +
> |pInfo.getName() + ", type: " + pInfo.getType() );
> | return;
> | }
> |
> | try {
> | // Try to set the value to the editor. If
> |not possible do nothing because
> | // this should not change the remote Resource
> | if( pInfo.isReadable() ) {
> | pEditor.setValue(
> |
> |mResource.getConnector().getAttribute( mResource.getName(),
> |pInfo.getName() )
> | );
> | }
> | }
> | catch( Exception e ) {
> | e.printStac
> kTrace();
> | }
> | JLabel lName = new JLabel( pInfo.getName() + ":",
> |JLabel.RIGHT );
> | lName.setToolTipText( pInfo.getDescription() );
> | GridBagConstraints c = new GridBagConstraints();
> | c.insets = new Insets( 5, 5, 5, 5 );
> | c.anchor = GridBagConstraints.NORTH;
> | c.weighty = 1;
> | c.gridwidth = GridBagConstraints.RELATIVE;
> | c.fill = GridBagConstraints.HORIZONTAL;
> | c.weightx = 0;
> | ( ( GridBagLayout ) mGUI.getLayout()
> |).setConstraints( lName, c );
> | mGUI.add( lName );
> |
> | Component lEditorBean;
> | if( pEditor.supportsCustomEditor() ) {
> | lEditorBean = pEditor.getCustomEditor();
> | if( lEditorBean instanceof JComponent ) {
> | if( mPreviousBean != null ) {
> |
> |mPreviousBean.setNextFocusableComponent( lEditorBean );
> | }
> | mPreviousBean = ( JComponent ) lEditorBean;
> | }
> | }
> | else {
> | String[] lTags = pEditor.getTags();
> | if( lTags != null ) {
> | lEditorBean = new
> |GenericPropertyCustomizer( pEditor, lTags );
> | if( mPreviousBean != null ) {
> |
> |mPreviousBean.setNextFocusableComponent( lEditorBean );
> | }
> | mPreviousBean = ( JComponent ) lEditorBean;
> | }
> | else {
> | if( pInfo.isWritable() ) {
> | lEditorBean = new
> |GenericPropertyCustomizer( pEditor );
> | if( mPreviousBean != null ) {
> |
> |mPreviousBean.setNextFocusableComponent( lEditorBean );
> | }
> | mPreviousBean =
>
> |JComponent ) lEditorBean;
> | }
> | else {
> | final JLabel lLabel = new
> |JLabel( pEditor.getAsText() );
> | final PropertyEditor
> |lEditor = pEditor;
> | lEditorBean = lLabel;
> |
> itor.addPropertyChangeListener(
> | new
> |PropertyChangeListener() {
> | /**
> | *
> |Description of the Method
> | *
> | * @param
> |evt Description of Parameter
> | */
> | public void
> |propertyChange( PropertyChangeEvent evt ) {
> |
> |lLabel.setText( lEditor.getAsText() );
> | }
> | } );
> | }
> | }
> | }
> |
> | c.gridwidth = GridBagConstraints.REMAINDER;
> | c.fill = GridBagConstraints.HORIZONTAL;
> | c.weightx = 1;
> | ( ( GridBagLayout ) mGUI.getLayout()
> |).setConstraints( lEditorBean, c );
> | mGUI.add( lEditorBean );
> |
> | // Read-only?
> | if( pInfo.isWritable() ) {
> | pEditor.addPropertyChangeListener( new
> |BeanUpdater( pInfo ) );
> | }
> |
> | /* AS Check later
> | try {
> | Method addPCL =
> |object.getClass().getMethod( "addPropertyChangeListener", new
> |Class[]{String.class, PropertyChangeListener.class} );
> | addPCL.invoke( object, new Object[]{
> |pInfo.getName(), new EditorUpdater( pEditor, pInfo.getName() )} );
> | }
> | catch( Exception e ) {
> | try {
> | Method addPCL =
> |object.getClass().getMethod( "addPropertyChangeListener", new
> |Class[]{PropertyChangeListener.class} );
> | addPCL.invoke( object, new
> |Object[]{ new EditorUpdater( pEditor, pInfo )} );
> | }
> | catch( Exception ex ) {
> | }
> | }
> | */
> | }
> |
> | // Protected ---------------------------------------------
> | /**
> | * Fire a property change. This is a workaround for
> |firePropertyChange not being visible to the inner classes(?)
> | *
> | * @param name
> | * @param oldVal
> | * @param newVal
> | */
> | protected void updated( String name, Object oldVal, Object
> |newVal ) {
> | firePropertyChange( name, oldVal, newVal );
> | }
> |
> | // Protected ---------------------------------------------
> | /**
> | * Description of the Method
> | *
> | * @param out Description of Parameter
> | * @exception IOException Description of Exception
> | */
> | private void writeObject( java.io.ObjectOutputStream out )
> | throws IOException {
> | System.out.println( "GenericCustomizer writeObject" );
> | }
> |
> | // Inner classes -------------------------------------------------
> | /**
> | * This class makes sure that the object is up
> dated with
> |the customizer changes
> | *
> | * @author andreass
> | * @created November 24, 2000
> | */
> | class BeanUpdater
> | implements PropertyChangeListener {
> | /**
> | * Description of the Field
> | */
> | MBeanAttributeInfo mInfo;
> |
> | /**
> | * Constructor for the BeanUpdater object
> | *
> | * @param pd Description of Parameter
> | */
> | public BeanUpdater( MBeanAttributeInfo pInfo ) {
> | mInfo = pInfo;
> | }
> |
> | /**
> | * Description of the Method
> | *
> | * @param evt Description of Parameter
> | */
> | public void propertyChange( PropertyChangeEvent pEvent ) {
> | Object lOld = null;
> | try {
> | if( mInfo.isReadable() ) {
> | lOld =
> |mResource.getConnector().getAttribute(
> | mResource.getName(),
> | mInfo.getName()
> | );
> | }
> | Object lNew = ( ( PropertyEditor )
> |pEvent.getSource() ).getValue();
> |
> | mResource.getConnector().setAttribute(
> | mResource.getName(),
> | new Attribute(
> | mInfo.getName(),
> | lNew
> | )
> | );
> | updated( mInfo.getName(), lOld, lNew );
> | }
> | /* 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 mEditor;
> | /**
> | * Description of the Field
> | */
> | String mName;
> | /**
> | * Description of the Field
> | */
> | MBeanAttributeInfo mInfo;
> |
> | /**
> | * Constructor for the EditorUpdater object
> | *
> | * @param e Description of Parameter
> | * @param pd Description of Parameter
> | */
> | public EditorUpdater( PropertyEditor pEditor,
> |MBeanAttributeInfo pInfo ) {
> | mEditor = pEditor;
> | mInfo = pInfo;
> | }
> |
> | /**
> | * Constructor for the EditorUpdater object
> | *
> | * @param e Description of Parameter
> | * @param name Description of Parameter
> | */
> | public EditorUpdater( PropertyEditor pEditor,
> |String pName ) {
> | mEditor = pEditor;
> | mName = pName;
> | }
> |
> | /**
> | * Description of the Method
> | *
> | * @param evt Description of Parameter
> | */
> | public void propertyChange( PropertyChangeEvent pEvent ) {
> | if( mName != null &&
> |pEvent.getPropertyName() != null ) {
> |
>
> |!pEvent.getPropertyName().equals( mName ) ) {
> | return;
> | }
> | }
> | if( pEvent.getPropertyName() != null ) {
> |
> !mEditor.getValue().equals(
> |pEvent.getNewValue() ) ) {
> | mEditor.setValue(
> |pEvent.getNewValue() );
> | }
> | }
> | else {
> | try {
> | Object lValue =
> |mResource.getConnector().getAttribute(
> | mResource.getName(),
> | pEvent.getSource() + ""
> | );
> | if( mEditor != null &&
> |!mEditor.equals( mEditor.getValue() ) ) {
> | mEditor.setValue( lValue );
> | }
> | }
> | catch( Exception e ) {
> | }
> | }
> | }
> | }
> |
> | /**
> | * This class handles method invocations
> | *
> | * @author andreass
> | * @created November 24, 2000
> | */
> | class MethodInvoker
> | implements ActionListener {
> | /**
> | * Description of the Field
> | */
> | MBeanOperationInfo mI
> nfo;
> |
> | /**
> | * Constructor for the MethodInvoker object
> | *
> | * @param md Description of Parameter
> | */
> | MethodInvoker( MBeanOperationInfo pInfo ) {
> | mInfo = pInfo;
> | }
> |
> | /**
> | * Description of the Method
> | *
> | * @param e Description of Parameter
> | */
> | public void actionPerformed( ActionEvent e ) {
> | Container lFrame = mPanel;
> | while( !( lFrame instanceof Frame ) ) {
> | lFrame = lFrame.getParent();
> | }
> |
> | // No parameters->invoke right away
> | MBeanParameterInfo[] lParameters =
> |mInfo.getSignature();
> | if( lParameters.length == 0 ) {
> | try {
> | mResource.getConnector().invoke(
> | mResource.getName(),
> | mInfo.getName(),
> | new Object[] {},
> | new String[] {}
> | );
> | }
> | /* AS Deal with the MBean Exceptions and not with reflection one
> | catch( InvocationTargetException ex ) {
> |
> |ex.getTargetException().printStackTrace();
> |
> |JOptionPane.showMessageDialog( lFrame,
> |ex.getTargetException().getMessage(), "Error",
JOptionPane.ERROR_MESSAGE );
> | }
> | */
> | catch( Exception ex ) {
> | System.err.println( ex );
> |
> |JOptionPane.showMessageDialog( lFrame, "An exception occured.
> |Check log for details", "Error", JOptionPane.ERROR_MESSAGE );
> | }
> | }
> | else {
> | /* AS Make a new class using MBeanOperationInfo instead of "md"
> | new GenericMethodDialog( object,
> |md, ( Frame ) lFrame );
> | */
> | }
> | }
> | }
> |
> | public static class Resource {
> | private JMXConnector mConnector;
> | private ObjectName mName;
> |
> | public Resource( JMXConnector pConnector,
> |ObjectName pName ) {
> | if( pConnector == null || pName == null ) {
> | throw new
> egalArgumentException(
> |"Both arguments must be defined" );
> | }
> | mConnector = pConnector;
> | mName = pName;
> | }
> | public JMXConnector getConnector() {
> | return mConnector;
> | }
> | public ObjectName getName() {
> | return mName;
> | }
> | }
> | }
> |
> |
> |
> |
> |
>
>