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: * PinNode.java
042: *
043: * Created on March 22, 2007, 3:57 PM
044: *
045: * To change this template, choose Tools | Template Manager
046: * and open the template in the editor.
047: */
048:
049: package org.netbeans.modules.web.jsf.navigation;
050:
051: import java.awt.Image;
052: import java.io.IOException;
053: import javax.swing.Action;
054: import org.netbeans.modules.web.jsf.navigation.graph.PageFlowSceneElement;
055: import org.netbeans.modules.web.jsf.navigation.pagecontentmodel.PageContentItem;
056: import org.openide.ErrorManager;
057: import org.openide.nodes.AbstractNode;
058: import org.openide.nodes.Children;
059: import org.openide.nodes.Node;
060: import org.openide.nodes.Node.Cookie;
061: import org.openide.nodes.PropertySupport;
062: import org.openide.nodes.PropertySupport.Reflection;
063: import org.openide.nodes.Sheet;
064: import org.openide.nodes.Sheet.Set;
065: import org.openide.util.HelpCtx;
066: import org.openide.util.NbBundle;
067:
068: /**
069: *
070: * @author joelle
071: */
072: public class Pin extends PageFlowSceneElement {
073:
074: private final Page page;
075: private boolean bDefault = true;
076: private PageContentItem pageContentItem;
077:
078: /** Creates a default PinNode
079: * @param page
080: */
081: public Pin(Page page) {
082: super ();
083: this .page = page;
084: }
085:
086: /**
087: * Create a nondefault pin in a page which represents a page content item.
088: * @param page for which the pin belongs.
089: * @param pageContentItem
090: */
091: public Pin(Page page, PageContentItem pageContentItem) {
092: this (page);
093: assert pageContentItem != null;
094: this .pageContentItem = pageContentItem;
095: bDefault = false;
096: }
097:
098: /**
099: * Is this a default pin?
100: * @return boolean is Default?
101: */
102: public boolean isDefault() {
103: return bDefault;
104: }
105:
106: @Override
107: public String toString() {
108: return new String("Pin[pagename=" + page.getDisplayName()
109: + " isDefault=" + isDefault() + "] ");
110: }
111:
112: /**
113: * Is this a default pin?
114: * @return Image pageContentItem Image
115: */
116: public Image getIcon(int type) {
117: if (pageContentItem != null) {
118: return pageContentItem.getBufferedIcon();
119: }
120: return null;
121: }
122:
123: /**
124: * Get the name of this pin. Will return content item name.
125: * @return String
126: */
127: @Override
128: public String getName() {
129: if (pageContentItem != null) {
130: return pageContentItem.getName();
131: }
132: return null;
133: }
134:
135: /**
136: *
137: * @return fromAction String
138: */
139: public String getFromAction() {
140: if (pageContentItem != null) {
141: return pageContentItem.getFromAction();
142: }
143: return null;
144: }
145:
146: /**
147: *
148: * @return fromOutcome String
149: */
150: public String getFromOutcome() {
151: if (!bDefault) {
152: return pageContentItem.getFromOutcome();
153: }
154: return null;
155: }
156:
157: public void setFromOutcome(String fromOutcome) {
158: if (pageContentItem != null) {
159: pageContentItem.setFromOutcome(fromOutcome);
160: }
161: }
162:
163: public void setFromAction(String fromAction) {
164: if (pageContentItem != null) {
165: pageContentItem.setFromAction(fromAction);
166: }
167: }
168:
169: /**
170: *
171: * @return
172: */
173: public Page getPage() {
174: return page;
175: }
176:
177: public Action[] getActions() {
178: if (pageContentItem != null) {
179: return pageContentItem.getActions();
180: }
181: return new Action[] {};
182: }
183:
184: public <T extends Cookie> T getCookie(Class<T> type) {
185: return pageContentItem.getCookie(type);
186: }
187:
188: @Override
189: public boolean equals(Object obj) {
190: return this == obj;
191: }
192:
193: @Override
194: public int hashCode() {
195: return System.identityHashCode(this );
196: }
197:
198: public HelpCtx getHelpCtx() {
199: throw new UnsupportedOperationException("Not supported yet.");
200: }
201:
202: public void destroy() throws IOException {
203: if (pinNode != null) {
204: pinNode.destroy();
205: }
206: }
207:
208: public boolean canDestroy() {
209: return false;
210: }
211:
212: public boolean canRename() {
213: return false;
214: }
215:
216: public Node getNode() {
217: if (pinNode == null) {
218: pinNode = new PinNode();
219: }
220: return pinNode;
221: }
222:
223: private final Pin getInstance() {
224: return this ;
225: }
226:
227: private Node pinNode;
228:
229: private class PinNode extends AbstractNode {
230: public PinNode() {
231: super (Children.LEAF);
232: }
233:
234: @Override
235: public <T extends Cookie> T getCookie(Class<T> type) {
236: /* I needed to do this because it seems that the activatedNode requires some sort of DataObject to show things like Windows Title correctly */
237: T cookie = getInstance().getCookie(type);
238: if (cookie != null) {
239: return cookie;
240: }
241: return page.getCookie(type);
242: }
243:
244: @Override
245: protected Sheet createSheet() {
246: Sheet s = Sheet.createDefault();
247: Set ss = s.get("general"); // NOI18N
248: if (ss == null) {
249: ss = new Sheet.Set();
250: ss.setName("general"); // NOI18N
251: ss.setDisplayName(NbBundle.getMessage(Pin.class,
252: "General")); // NOI18N
253: ss.setShortDescription(NbBundle.getMessage(Pin.class,
254: "GeneralHint")); // NOI18N
255: s.put(ss);
256: }
257: Set gs = ss;
258:
259: try {
260: PropertySupport.Reflection p = new Reflection<String>(
261: pageContentItem, String.class, "getName",
262: "setName"); // NOI18N
263: p.setName("fromView"); // NOI18N
264: p.setDisplayName(NbBundle.getMessage(Pin.class,
265: "FromView")); // NOI18N
266: p.setShortDescription(NbBundle.getMessage(Pin.class,
267: "FromViewHint")); // NOI18N
268: ss.put(p);
269:
270: p = new Reflection<String>(pageContentItem,
271: String.class, "getFromOutcome",
272: "setFromOutcome"); // NOI18N
273: p.setName("fromOutcome"); // NOI18N
274: p.setDisplayName(NbBundle.getMessage(Pin.class,
275: "Outcome")); // NOI18N
276: p.setShortDescription(NbBundle.getMessage(Pin.class,
277: "OutcomeHint")); // NOI18N
278: ss.put(p);
279: } catch (NoSuchMethodException nsme) {
280: ErrorManager.getDefault().notify(nsme);
281: }
282:
283: return s;
284: }
285: }
286: }
|