001 /*
002 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003 *
004 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005 *
006 * The contents of this file are subject to the terms of either the GNU
007 * General Public License Version 2 only ("GPL") or the Common
008 * Development and Distribution License("CDDL") (collectively, the
009 * "License"). You may not use this file except in compliance with the
010 * License. You can obtain a copy of the License at
011 * http://www.netbeans.org/cddl-gplv2.html
012 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013 * specific language governing permissions and limitations under the
014 * License. When distributing the software, include this License Header
015 * Notice in each file and include the License file at
016 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017 * particular file as subject to the "Classpath" exception as provided
018 * by Sun in the GPL Version 2 section of the License file that
019 * accompanied this code. If applicable, add the following below the
020 * License Header, with the fields enclosed by brackets [] replaced by
021 * your own identifying information:
022 * "Portions Copyrighted [year] [name of copyright owner]"
023 *
024 * If you wish your version of this file to be governed by only the CDDL
025 * or only the GPL Version 2, indicate your decision by adding
026 * "[Contributor] elects to include this software in this distribution
027 * under the [CDDL or GPL Version 2] license." If you do not indicate a
028 * single choice of license, a recipient has the option to distribute
029 * your version of this file under either the CDDL, the GPL Version 2 or
030 * to extend the choice of license to its licensees as provided above.
031 * However, if you add GPL Version 2 code and therefore, elected the GPL
032 * Version 2 license, then the option applies only if the new code is
033 * made subject to such option by the copyright holder.
034 *
035 * Contributor(s):
036 *
037 * Portions Copyrighted 2007 Sun Microsystems, Inc.
038 */
039
040 package org.netbeans.modules.j2ee.deployment.impl.bridge;
041
042 import java.awt.Component;
043 import java.util.ArrayList;
044 import java.util.List;
045 import javax.swing.Action;
046 import javax.swing.JComponent;
047 import org.netbeans.api.server.ServerInstance;
048 import org.netbeans.modules.j2ee.deployment.impl.ServerInstanceLookup;
049 import org.netbeans.modules.j2ee.deployment.impl.ui.actions.CustomizerAction;
050 import org.netbeans.modules.j2ee.deployment.plugins.spi.StartServer;
051 import org.netbeans.spi.server.ServerInstanceFactory;
052 import org.netbeans.spi.server.ServerInstanceImplementation;
053 import org.netbeans.api.server.CommonServerUIs;
054 import org.openide.nodes.FilterNode;
055 import org.openide.nodes.Node;
056 import org.openide.util.HelpCtx;
057 import org.openide.util.NbBundle;
058 import org.openide.util.actions.NodeAction;
059 import org.openide.util.actions.SystemAction;
060
061 /**
062 *
063 * @author Petr Hejl
064 */
065 public class BridgingServerInstance implements
066 ServerInstanceImplementation, Node.Cookie {
067
068 private final org.netbeans.modules.j2ee.deployment.impl.ServerInstance instance;
069
070 private ServerInstance commonInstance;
071
072 private BridgingServerInstance(
073 org.netbeans.modules.j2ee.deployment.impl.ServerInstance instance) {
074 assert instance != null : "ServerInstance must not be null"; // NOI18N
075 this .instance = instance;
076 }
077
078 public static BridgingServerInstance createInstance(
079 org.netbeans.modules.j2ee.deployment.impl.ServerInstance instance) {
080 BridgingServerInstance created = new BridgingServerInstance(
081 instance);
082 created.commonInstance = ServerInstanceFactory
083 .createServerInstance(created);
084 return created;
085 }
086
087 public String getDisplayName() {
088 return instance.getDisplayName();
089 }
090
091 public String getServerDisplayName() {
092 return instance.getServer().getDisplayName();
093 }
094
095 public Node getFullNode() {
096 Node childNode;
097 StartServer startServer = instance.getStartServer();
098 if (startServer == null) {
099 return null;
100 }
101 if (startServer.isAlsoTargetServer(null)) {
102 childNode = instance.getServer().getNodeProvider()
103 .createInstanceTargetNode(instance);
104 } else {
105 childNode = instance.getServer().getNodeProvider()
106 .createInstanceNode(instance);
107 }
108 instance.refresh(); // detect the server instance status
109 return new InstanceNode(childNode, this );
110 }
111
112 public Node getBasicNode() {
113 Node j2eeNode = instance.getServer().getRegistryNodeFactory()
114 .getManagerNode(
115 new ServerInstanceLookup(instance, instance
116 .getServer().getDeploymentFactory(),
117 null));
118
119 return new ManagerNode(j2eeNode, instance.getDisplayName());
120 }
121
122 public JComponent getCustomizer() {
123 Node node = getBasicNode();
124 if (node == null || !node.hasCustomizer()) {
125 return null;
126 }
127 Component customizer = node.getCustomizer();
128 if (!(customizer instanceof JComponent)) {
129 // TODO log
130 return null;
131 }
132 return (JComponent) customizer;
133 }
134
135 public boolean isRemovable() {
136 return !instance.isRemoveForbidden();
137 }
138
139 public void remove() {
140 instance.remove();
141 }
142
143 public ServerInstance getCommonInstance() {
144 return commonInstance;
145 }
146
147 @Override
148 public boolean equals(Object obj) {
149 if (obj == null) {
150 return false;
151 }
152 if (getClass() != obj.getClass()) {
153 return false;
154 }
155 final BridgingServerInstance other = (BridgingServerInstance) obj;
156 if (this .instance != other.instance
157 && (this .instance == null || !this .instance
158 .equals(other.instance))) {
159 return false;
160 }
161 return true;
162 }
163
164 @Override
165 public int hashCode() {
166 int hash = 7;
167 return hash;
168 }
169
170 private static class ManagerNode extends FilterNode {
171
172 public ManagerNode(Node node, String displayName) {
173 super (node);
174 disableDelegation(DELEGATE_SET_DISPLAY_NAME
175 | DELEGATE_GET_DISPLAY_NAME | DELEGATE_GET_ACTIONS
176 | DELEGATE_GET_CONTEXT_ACTIONS);
177 setDisplayName(displayName);
178 }
179 }
180
181 private static class InstanceNode extends FilterNode {
182
183 private final BridgingServerInstance instance;
184
185 public InstanceNode(Node original,
186 BridgingServerInstance instance) {
187 super (original);
188 this .instance = instance;
189 }
190
191 @Override
192 public org.openide.nodes.Node.Cookie getCookie(Class type) {
193 if (BridgingServerInstance.class.isAssignableFrom(type)) {
194 return instance;
195 }
196 return super .getCookie(type);
197 }
198
199 @Override
200 public Action[] getActions(boolean context) {
201 // replace the action with correct one
202 boolean found = false;
203 List<Action> freshActions = new ArrayList<Action>();
204 Action[] actions = getOriginal().getActions(context);
205 for (int i = 0; i < actions.length; i++) {
206 if (actions[i] instanceof CustomizerAction) {
207 freshActions.add(SystemAction
208 .get(BridgingCustomizerAction.class));
209 found = true;
210 } else {
211 freshActions.add(actions[i]);
212 }
213 }
214 if (!found) {
215 freshActions.add(null);
216 freshActions.add(SystemAction
217 .get(BridgingCustomizerAction.class));
218 }
219 return freshActions
220 .toArray(new Action[freshActions.size()]);
221 }
222 }
223
224 private static class BridgingCustomizerAction extends NodeAction {
225
226 public void performAction(Node[] nodes) {
227 BridgingServerInstance instance = (BridgingServerInstance) nodes[0]
228 .getCookie(BridgingServerInstance.class);
229 CommonServerUIs
230 .showCustomizer(instance.getCommonInstance());
231 }
232
233 protected boolean enable(Node[] nodes) {
234 return true;
235 }
236
237 public String getName() {
238 return NbBundle.getMessage(BridgingServerInstance.class,
239 "LBL_Properties");
240 }
241
242 public HelpCtx getHelpCtx() {
243 return HelpCtx.DEFAULT_HELP;
244 }
245
246 protected boolean asynchronous() {
247 return false;
248 }
249 }
250 }
|