KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > jmx > server > IconicInfo


1 package org.oddjob.jmx.server;
2
3 import javax.management.MBeanAttributeInfo JavaDoc;
4 import javax.management.MBeanException JavaDoc;
5 import javax.management.MBeanNotificationInfo JavaDoc;
6 import javax.management.MBeanOperationInfo JavaDoc;
7 import javax.management.MBeanParameterInfo JavaDoc;
8 import javax.management.Notification JavaDoc;
9 import javax.management.ReflectionException JavaDoc;
10
11 import org.oddjob.Iconic;
12 import org.oddjob.images.IconEvent;
13 import org.oddjob.images.IconListener;
14 import org.oddjob.images.IconTip;
15
16 /**
17  * A MBean which wraps an object providing an Oddjob management interface to the
18  * object.
19  */

20
21 public class IconicInfo implements InterfaceInfo {
22     
23     public static final String JavaDoc ICON_CHANGED_NOTIF_TYPE = "org.oddjob.iconchanged";
24
25     public Class JavaDoc interfaceClass() {
26         return Iconic.class;
27     }
28     
29     public MBeanAttributeInfo JavaDoc[] getMBeanAttributeInfo() {
30         return new MBeanAttributeInfo JavaDoc[0];
31     }
32
33     public MBeanOperationInfo JavaDoc[] getMBeanOperationInfo() {
34         return new MBeanOperationInfo JavaDoc[] {
35                 new MBeanOperationInfo JavaDoc("iconForId",
36                 "Retrieve an Icon and ToolTip.",
37                 new MBeanParameterInfo JavaDoc[] { new MBeanParameterInfo JavaDoc("iconId",
38                         String JavaDoc.class.getName(), "The icon id.") },
39                 IconTip.class.getName(), MBeanOperationInfo.INFO) };
40     }
41     
42     public MBeanNotificationInfo JavaDoc[] getMBeanNotificationInfo() {
43         return new MBeanNotificationInfo JavaDoc[] {
44                 new MBeanNotificationInfo JavaDoc(
45                             new String JavaDoc[] { ICON_CHANGED_NOTIF_TYPE },
46                             Notification JavaDoc.class.getName(),
47                             "Icon changed notification.") };
48     }
49     
50     
51     public InterfaceHandler attach(Object JavaDoc target, OddjobMBean ojmb) {
52         Iconic iconic = (Iconic) target;
53         ServerIconicHelper iconicHelper = new ServerIconicHelper(iconic, ojmb);
54         iconic.addIconListener(iconicHelper);
55         return iconicHelper;
56     }
57     
58     class ServerIconicHelper implements IconListener, InterfaceHandler {
59
60         private final Iconic iconic;
61         private final OddjobMBean ojmb;
62         
63         /** Remember last event. */
64         private Notification JavaDoc lastNotification;
65
66         ServerIconicHelper(Iconic iconic, OddjobMBean ojmb) {
67             this.iconic = iconic;
68             this.ojmb = ojmb;
69         }
70         
71         public void iconEvent(final IconEvent event) {
72             ojmb.runSynchronized(new Runnable JavaDoc() {
73                 public void run() {
74                     // send a dummy source accross the wire
75
IconEvent newEvent = new IconEvent(new Object JavaDoc(), event.getIconId());
76                     Notification JavaDoc notification = new Notification JavaDoc(
77                             ICON_CHANGED_NOTIF_TYPE, ojmb, ojmb.getNextNotificationNumber());
78                     notification.setUserData(newEvent);
79                     ojmb.sendNotification(notification);
80                     lastNotification = notification;
81                 }
82             });
83         }
84         
85         public Notification JavaDoc[] getLastNotifications() {
86             return new Notification JavaDoc[] { lastNotification };
87         }
88         
89         public Object JavaDoc invoke(String JavaDoc actionName, Object JavaDoc[] params, String JavaDoc[] signature) throws MBeanException JavaDoc, ReflectionException JavaDoc {
90             if ("iconForId".equals(actionName) && signature.length == 1
91                     && signature[0].equals(String JavaDoc.class.getName())) {
92                 return iconic.iconForId((String JavaDoc) params[0]);
93             }
94             throw new ReflectionException JavaDoc(
95                     new IllegalStateException JavaDoc("invoked for an unknown method."),
96                             actionName);
97         }
98         
99         public void destroy() {
100             iconic.removeIconListener(this);
101         }
102     }
103
104 }
Popular Tags