|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
/*
* ServerRegNode.java -- synopsis
*
*/
package org.netbeans.modules.j2ee.deployment.impl.ui;
import org.netbeans.modules.j2ee.deployment.impl.ui.actions.RefreshAction;
import org.openide.nodes.*;
import org.openide.util.actions.CookieAction;
import org.openide.util.actions.SystemAction;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import javax.management.*;
import javax.swing.Action;
import javax.management.NotificationListener;
import java.util.*;
/**
* @author George FinKlang
*/
public class ManagementNode extends AbstractNode {
public ManagementNode(ManagedObject mo) {
super(new ManagementChildren(mo));
setDisplayName(mo.getDisplayName());
getCookieSet().add(mo);
Refresher refresher = new Refresher();
getCookieSet().add(refresher);
mo.registerListener(refresher, null);
String icon = mo.getIconBase();
if (icon != null)
setIconBase(icon);
}
public javax.swing.Action[] getActions(boolean b) {
ArrayList actions = new ArrayList(Arrays.asList(getManagedObject().getStandardActions()));
actions.add(SystemAction.get(RefreshAction.class));
actions.add(null);
actions.add(getManagedObject().getExpertOperationsAction());
return (Action[]) actions.toArray(new Action[actions.size()]);
}
private class Refresher implements NotificationListener, RefreshAction.RefreshCookie {
//Force refresh need to remove all reference to the listener
public void refresh() {
refreshSubtree();
getManagedObject().updateSheet(getSheet());
}
void refreshSubtree() {
Children old = getChildren();
Children replacing = new ManagementChildren(getManagedObject());
setChildren(replacing);
//PENDING: traverse old subtree to remove listener.
}
public void handleNotification(javax.management.Notification notification, Object obj) {
if ("j2ee.object.created".equals(notification.getType())) {
//PENDIN: to refine with more surgical action if possible
refreshSubtree();
} else if ("j2ee.object.deleted".equals(notification.getType())) {
//PENDIN: to refine with more surgical action if possible
refreshSubtree();
}
else if ("j2ee.attribute.changed".equals(notification.getType()))
//PENDIN: to refine with more surgical action if possible
getManagedObject().updateSheet(getSheet());
}
}
public HelpCtx getHelpCtx() {
return HelpCtx.DEFAULT_HELP;
}
void addListener() {
ManagedObject mo = getManagedObject();
mo.registerListener(new AttributesListener(), new AttributeNotificationFilter());
}
private class AttributesListener implements NotificationListener {
public void handleNotification(Notification notification, Object handback) {
getManagedObject().updateSheet(getSheet());
}
}
private class AttributeNotificationFilter implements NotificationFilter {
public boolean isNotificationEnabled(Notification notification) {
if ("j2ee.management.attribute".equals(notification.getType())) //NOI18N
return true;
return false;
}
}
public Sheet createSheet() {
Sheet sheet = Sheet.createDefault();
getManagedObject().updateSheet(sheet);
addListener();
return sheet;
}
ManagedObject getManagedObject() {
return (ManagedObject) getCookie(ManagedObject.class);
}
private static class ManagementChildren extends Children.Keys {
private ManagedObject mo;
ManagementChildren(ManagedObject mo) {
this.mo = mo;
}
protected void addNotify() {
setKeys(mo.getChildren());
}
protected void removeNotify() {
setKeys(java.util.Collections.EMPTY_SET);
}
protected org.openide.nodes.Node[] createNodes(Object obj) {
ManagedObject child = (ManagedObject) obj;
return new Node[] { new ManagementNode(child) };
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.