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 * Contributor(s):
025 *
026 * The Original Software is NetBeans. The Initial Developer of the Original
027 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028 * Microsystems, Inc. All Rights Reserved.
029 *
030 * If you wish your version of this file to be governed by only the CDDL
031 * or only the GPL Version 2, indicate your decision by adding
032 * "[Contributor] elects to include this software in this distribution
033 * under the [CDDL or GPL Version 2] license." If you do not indicate a
034 * single choice of license, a recipient has the option to distribute
035 * your version of this file under either the CDDL, the GPL Version 2 or
036 * to extend the choice of license to its licensees as provided above.
037 * However, if you add GPL Version 2 code and therefore, elected the GPL
038 * Version 2 license, then the option applies only if the new code is
039 * made subject to such option by the copyright holder.
040 */
041
042 package org.netbeans.modules.j2ee.deployment.plugins.api;
043
044 import java.awt.Image;
045 import java.beans.BeanInfo;
046 import java.util.WeakHashMap;
047 import javax.swing.Action;
048 import org.netbeans.modules.j2ee.deployment.impl.ServerInstance;
049 import org.netbeans.modules.j2ee.deployment.impl.ServerRegistry;
050 import org.netbeans.modules.j2ee.deployment.impl.ui.ServerRegistryNode;
051 import org.netbeans.modules.j2ee.deployment.impl.ui.actions.*;
052 import org.openide.filesystems.Repository;
053 import org.openide.loaders.DataFolder;
054 import org.openide.nodes.Node;
055 import org.openide.util.Utilities;
056 import org.openide.windows.IOProvider;
057 import org.openide.windows.InputOutput;
058
059 /**
060 * UI support for plugins provided by the j2eeserver.
061 *
062 * @author sherold
063 * @since 1.7
064 */
065 public final class UISupport {
066
067 private static final WeakHashMap ioWeakMap = new WeakHashMap();
068
069 /**
070 * Server icon constants.
071 *
072 * @since 1.19
073 */
074 public enum ServerIcon {
075 EJB_ARCHIVE, WAR_ARCHIVE, EAR_ARCHIVE, EJB_FOLDER, EAR_FOLDER, WAR_FOLDER, EJB_OPENED_FOLDER, EAR_OPENED_FOLDER, WAR_OPENED_FOLDER
076 };
077
078 /** Do not allow to create instances of this class */
079 private UISupport() {
080 }
081
082 /**
083 * Returns the specified icon.
084 *
085 * @return The specified icon.
086 *
087 * @since 1.19
088 */
089 public static Image getIcon(ServerIcon serverIcon) {
090 switch (serverIcon) {
091 case EJB_ARCHIVE:
092 return Utilities
093 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/ejb.png"); // NOI18N
094 case WAR_ARCHIVE:
095 return Utilities
096 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/war.png"); // NOI18N
097 case EAR_ARCHIVE:
098 return Utilities
099 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/ear.png"); // NOI18N
100 default:
101 return computeIcon(serverIcon);
102 }
103 }
104
105 private static Image computeIcon(ServerIcon serverIcon) {
106 // get the default folder icon
107 Node folderNode = DataFolder.findFolder(
108 Repository.getDefault().getDefaultFileSystem()
109 .getRoot()).getNodeDelegate();
110 Image folder;
111 if (serverIcon == ServerIcon.EJB_OPENED_FOLDER
112 || serverIcon == ServerIcon.WAR_OPENED_FOLDER
113 || serverIcon == ServerIcon.EAR_OPENED_FOLDER) {
114 folder = folderNode
115 .getOpenedIcon(BeanInfo.ICON_COLOR_16x16);
116 } else {
117 folder = folderNode.getIcon(BeanInfo.ICON_COLOR_16x16);
118 }
119 Image badge;
120 if (serverIcon == ServerIcon.EJB_FOLDER
121 || serverIcon == ServerIcon.EJB_OPENED_FOLDER) {
122 badge = Utilities
123 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/ejbBadge.png"); // NOI18N
124 } else if (serverIcon == ServerIcon.WAR_FOLDER
125 || serverIcon == ServerIcon.WAR_OPENED_FOLDER) {
126 badge = Utilities
127 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/warBadge.png"); // NOI18N
128 } else if (serverIcon == ServerIcon.EAR_FOLDER
129 || serverIcon == ServerIcon.EAR_OPENED_FOLDER) {
130 badge = Utilities
131 .loadImage("org/netbeans/modules/j2ee/deployment/impl/ui/resources/earBadge.png"); // NOI18N
132 } else {
133 return null;
134 }
135 return Utilities.mergeImages(folder, badge, 7, 7);
136 }
137
138 /**
139 * Get a named instance of InputOutput, which represents an output tab in
140 * the output window. The output tab will expose server state management
141 * actions for the given server: start, debug, restart, stop and refresh.
142 * Streams for reading/writing can be accessed via getters on the returned
143 * instance. If the InputOutput already exists for the given server, the
144 * existing instance will be returned. The display name of the given server
145 * will be used as a name for the tab.
146 *
147 * @param url server instance id (DeploymentManager url).
148 *
149 * @return an <code>InputOutput</code> instance for accessing the new tab,
150 * null if there is no registered server instance with the given url.
151 *
152 */
153 public static InputOutput getServerIO(String url) {
154
155 ServerInstance si = ServerRegistry.getInstance()
156 .getServerInstance(url);
157
158 if (si == null) {
159 return null;
160 }
161
162 // look in the cache
163 InputOutput io = (InputOutput) ioWeakMap.get(si);
164 if (io != null) {
165 return io;
166 }
167
168 Action[] actions = new Action[] {
169 new StartAction.OutputAction(si),
170 new DebugAction.OutputAction(si),
171 new RestartAction.OutputAction(si),
172 new StopAction.OutputAction(si),
173 new RefreshAction.OutputAction(si) };
174 InputOutput newIO = IOProvider.getDefault().getIO(
175 si.getDisplayName(), actions);
176
177 // put the newIO in the cache
178 ioWeakMap.put(si, newIO);
179 return newIO;
180 }
181 }
|