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: package org.netbeans.modules.collab.channel.filesharing.ui.actions;
042:
043: import com.sun.collablet.CollabException;
044:
045: import org.openide.loaders.DataFolder;
046: import org.openide.nodes.Node;
047: import org.openide.util.HelpCtx;
048: import org.openide.util.NbBundle;
049: import org.openide.util.actions.CookieAction;
050: import org.netbeans.modules.collab.channel.filesharing.FilesharingCollablet;
051: import org.netbeans.modules.collab.channel.filesharing.FilesharingContext;
052: import org.netbeans.modules.collab.core.Debug;
053:
054: /**
055: *
056: * @author
057: */
058: public class ShareFilesAction extends CookieAction {
059: /** Creates a new instance of ShareFilesAction */
060: public ShareFilesAction() {
061: }
062:
063: public String getName() {
064: return NbBundle.getMessage(ShareFilesAction.class,
065: "LBL_Action_ShareFiles");
066: }
067:
068: protected String iconResource() {
069: return "org/openide/resources/actions/empty.gif";
070: }
071:
072: public HelpCtx getHelpCtx() {
073: return new HelpCtx(ShareFilesAction.class);
074: }
075:
076: /* protected members */
077: protected Class[] cookieClasses() {
078: return new Class[] { DataFolder.class };
079: }
080:
081: protected int mode() {
082: return MODE_ANY; // allow creation of tests for multiple selected nodes (classes, packages)
083: }
084:
085: public boolean asynchronous() {
086: return true; // yes, this action should run asynchronously
087:
088: // would be better to rewrite it to synchronous (running in AWT thread),
089: // just replanning test generation to RequestProcessor
090: }
091:
092: /** Perform special enablement check in addition to the normal one.
093: * protected boolean enable (Node[] nodes) {
094: * if (! super.enable (nodes)) return false;
095: * if (...) ...;
096: * }
097: */
098: protected boolean enable(Node[] nodes) {
099: if (!super .enable(nodes)) {
100: return false;
101: }
102:
103: if (nodes.length == 0) {
104: return false;
105: }
106:
107: for (int i = 0; i < nodes.length; i++) {
108: if (!isEnabledOnNode(nodes[i])) {
109: return false;
110: }
111: }
112:
113: return true;
114: }
115:
116: /**
117: * Returns true iff the node represents a source file or package.
118: * @param node the Node to query
119: * @return true or false
120: */
121: private static boolean isEnabledOnNode(Node node) {
122: return true;
123: }
124:
125: protected void performAction(Node[] nodes) {
126: Debug.out.println("ShareFilesAction, performAction"); //NoI18n
127:
128: FilesharingContext context = FilesharingCollablet
129: .getActivatedComponentContext();
130:
131: if ((context != null) && context.isValid()) {
132: try {
133: //clone nodes
134: Node[] nue = new Node[nodes.length];
135:
136: for (int i = 0; i < nue.length; i++) {
137: nue[i] = nodes[i].cloneNode();
138: }
139:
140: context.getFilesystemExplorer().getRootNode()
141: .createProjectNode(nue);
142: } catch (CollabException ce) {
143: }
144: }
145: }
146: }
|