001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Sam
028: */
029:
030: package com.caucho.netbeans.nodes;
031:
032: import com.caucho.netbeans.ResinDeploymentManager;
033: import com.caucho.netbeans.ide.ResinTargetModuleID;
034:
035: import org.openide.ErrorManager;
036: import org.openide.nodes.AbstractNode;
037: import org.openide.nodes.Children;
038: import org.openide.nodes.Node;
039: import org.openide.util.Lookup;
040: import org.openide.util.NbBundle;
041: import org.openide.util.RequestProcessor;
042:
043: import javax.enterprise.deploy.shared.ModuleType;
044: import javax.enterprise.deploy.spi.Target;
045: import javax.enterprise.deploy.spi.TargetModuleID;
046: import javax.enterprise.deploy.spi.exceptions.TargetException;
047: import java.util.ArrayList;
048: import java.util.Collections;
049:
050: /**
051: * Mode children
052: */
053: public class ResinModuleChildren extends Children.Keys implements
054: Node.Cookie {
055:
056: private static final String WAIT_NODE = "wait_node"; // NOI18N
057: private final Lookup lookup;
058: private final ModuleType moduleType;
059:
060: ResinModuleChildren(Lookup lookup, ModuleType moduleType) {
061: this .lookup = lookup;
062: this .moduleType = moduleType;
063: }
064:
065: public void updateKeys() {
066: ArrayList ts = new ArrayList();
067: ts.add(WAIT_NODE);
068: setKeys(ts);
069: RequestProcessor.getDefault().post(new Runnable() {
070: public void run() {
071: ResinDeploymentManager manager = (ResinDeploymentManager) lookup
072: .lookup(ResinDeploymentManager.class);
073: Target target = (Target) lookup.lookup(Target.class);
074: ArrayList<ResinModule> list = new ArrayList();
075: if (manager != null && target != null) {
076: // TODO: add a check whether the server is not in suspended state
077: try {
078: TargetModuleID[] modules = manager
079: .getRunningModules(moduleType,
080: new Target[] { target });
081: for (TargetModuleID tmID : modules) {
082: list.add(new ResinModule(manager,
083: (ResinTargetModuleID) tmID));
084: }
085: Collections.sort(list);
086: } catch (TargetException e) {
087: ErrorManager.getDefault().notify(
088: ErrorManager.INFORMATIONAL, e);
089: } catch (IllegalStateException e) {
090: ErrorManager.getDefault().notify(
091: ErrorManager.INFORMATIONAL, e);
092: }
093: }
094: setKeys(list);
095: }
096: });
097: }
098:
099: protected void addNotify() {
100: updateKeys();
101: }
102:
103: protected void removeNotify() {
104: setKeys(java.util.Collections.EMPTY_SET);
105: }
106:
107: protected org.openide.nodes.Node[] createNodes(Object key) {
108: if (key instanceof ResinModule) {
109: ResinModule module = (ResinModule) key;
110: ResinModuleNode node = new ResinModuleNode(module,
111: moduleType);
112: module.setRepresentedNode(node);
113: return new Node[] { node };
114: } else if (key instanceof String && key.equals(WAIT_NODE)) {
115: return new Node[] { createWaitNode() };
116: }
117: return null;
118: }
119:
120: private Node createWaitNode() {
121: AbstractNode n = new AbstractNode(Children.LEAF);
122: n.setName(NbBundle.getMessage(ResinModuleChildren.class,
123: "LBL_WaitNode_DisplayName"));
124: n
125: .setIconBaseWithExtension("org/openide/src/resources/wait.gif"); // NOI18N
126: return n;
127: }
128: }
|