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-2007 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.cnd.execution41.org.openide.execution;
043:
044: import java.beans.*;
045: import java.io.IOException;
046: import java.util.*;
047:
048: import org.openide.execution.ExecutorTask;
049: import org.netbeans.modules.cnd.execution41.org.openide.cookies.ArgumentsCookie;
050:
051: import org.openide.ErrorManager;
052: import org.openide.util.HelpCtx;
053: import org.openide.loaders.DataObject;
054: import org.openide.util.Lookup;
055: import org.openide.util.WeakSet;
056:
057: /** Implements the execution of a class.
058: * There may be several different types of executors installed in the system,
059: * some of which may only be appropriate for certain types of objects
060: * (e.g., applets or servlets).
061: * The two standard ones, both assuming a main method (i.e. a standalone Java program),
062: * are {@link ThreadExecutor} (internal execution)
063: * and {@link ProcessExecutor} (external execution).
064: * <p>This class <em>currently</em> has a property editor in the default IDE property
065: * editor search path.
066: * <p>Override {@link #execute(DataObject)}.
067: * @author Jaroslav Tulach
068: */
069: public abstract class Executor {
070: /** generated Serialized Version UID */
071: static final long serialVersionUID = -5089771565951633752L;
072:
073: /** Execute a class given by name with some arguments in this executor.
074: * @param info information describing what to execute
075: * @return a task object that can be used to control the running process
076: * @exception IOException if the execution cannot be started (class is missing, etc.)
077: //* @deprecated This method is a relic of Java-specific execution. New <code>Executor</code>
078: //* implementations are encouraged to override {@link #execute(DataObject)} to be the actual implementation.
079: //* <a href="http://www.netbeans.org/download/dev/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.5i-sep-II-ExecInfo">More info</a>
080: */
081: public ExecutorTask execute(ExecInfo info) throws IOException {
082: throw new IOException("ExecInfo is deprecated"); // NOI18N
083: }
084:
085: private final static Set warnedClasses = new WeakSet(); // Set<Class>
086:
087: /** Executes a dataobject.
088: * The default implementation should not be used; treat this method
089: * as abstract.
090: * @param obj object to execute
091: * @return a task object that can be used to control the running process
092: * @exception IOException if the execution cannot be started (class is missing, etc.)
093: */
094: public ExecutorTask execute(DataObject obj) throws IOException {
095: throw new IOException("No longer works"); // NOI18N
096: /*
097: Class c = getClass();
098: synchronized (warnedClasses) {
099: if (warnedClasses.add(c)) {
100: ErrorManager.getDefault().log(ErrorManager.WARNING, "Warning - " + c.getName() + " should have overridden execute(DataObject); falling back on deprecated ExecInfo usage; see: http://www.netbeans.org/download/dev/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.5i-sep-II-ExecInfo");
101: }
102: }
103: String[] params;
104: ArgumentsCookie ac = (ArgumentsCookie) obj.getCookie(ArgumentsCookie.class);
105: if (ac != null) {
106: params = ac.getArguments();
107: } else {
108: params = new String[0];
109: }
110: return execute(new ExecInfo(obj.getPrimaryFile().getPackageName ('.'), params));
111: */
112: }
113:
114: /** Instruct the execution engine whether
115: * the process might need I/O communication with the user.
116: * If I/O is needed, a tab in the output window may be opened for the process;
117: * otherwise the output is discarded and reads will fail.
118: * <p>The default implementation returns <code>true</code>.
119: * @return <code>true</code> if the process needs I/O
120: */
121: public boolean needsIO() {
122: return true;
123: }
124:
125: public HelpCtx getHelpCtx() {
126: return new HelpCtx(Executor.class);
127: }
128:
129: /** Get all registered executors in the system's execution engine.
130: * @return enumeration of <code>Executor</code>s
131: //* @deprecated Please use {@link org.openide.util.Lookup} instead.
132: */
133: public static Enumeration executors() {
134: return Collections.enumeration(Lookup.getDefault().lookup(
135: new Lookup.Template(Executor.class)).allInstances());
136: }
137:
138: /** Find the
139: * executor implemented as a given class, among the executors registered to the
140: * execution engine.
141: * <P>
142: * This should be used during (de-)serialization
143: * of the specific executor for a data object: only store its class name
144: * and then try to find the executor implemented by that class later.
145: *
146: * @param clazz the class of the executor looked for
147: * @return the desired executor or <code>null</code> if it does not exist
148: //* @deprecated Please use {@link org.openide.util.Lookup} instead.
149: */
150: public static Executor find(Class clazz) {
151: return (Executor) Lookup.getDefault().lookup(clazz);
152: }
153:
154: /** Find the
155: * executor with requested name, among the executors registered to the
156: * execution engine.
157: * <P>
158: * This should be used during (de-)serialization
159: * of the specific executor for a data object: only store its name
160: * and then try to find the executor later.
161: *
162: * @param name (display) name of executor to find
163: * @return the desired executor or <code>null</code> if it does not exist
164: */
165: public static Executor find(String name) {
166: return null;
167: }
168:
169: /** Get the default executor for the system's execution engine.
170: * <p>You may actually want {@link org.openide.loaders.ExecutionSupport#getExecutor}.
171: * @return the default executor
172: //* @deprecated The notion of a default executor for all file types is probably meaningless.
173: */
174: public static Executor getDefault() {
175: Enumeration en = executors();
176: return en.hasMoreElements() ? (Executor) en.nextElement()
177: : NoExecutor.getInstance();
178: }
179:
180: }
|