001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.tools.ant.util;
019:
020: import org.apache.tools.ant.ProjectComponent;
021: import org.apache.tools.ant.types.Path;
022: import java.io.File;
023: import org.apache.tools.ant.types.Reference;
024:
025: /**
026: * A class to help in creating, setting and getting
027: * script runners.
028: */
029: public class ScriptRunnerHelper {
030: private ClasspathUtils.Delegate cpDelegate = null;
031: private File srcFile;
032: private String manager = "auto";
033: private String language;
034: private String text;
035: private boolean setBeans = true;
036: private ProjectComponent projectComponent;
037: private ClassLoader scriptLoader = null;
038:
039: /**
040: * Set the project component associated with this helper.
041: * @param component the project component that owns this helper.
042: */
043: public void setProjectComponent(ProjectComponent component) {
044: this .projectComponent = component;
045: }
046:
047: /**
048: * Create and set text on a script.
049: * @return the created or reused script runner.
050: */
051: public ScriptRunnerBase getScriptRunner() {
052: ScriptRunnerBase runner = getRunner();
053: if (srcFile != null) {
054: runner.setSrc(srcFile);
055: }
056: if (text != null) {
057: runner.addText(text);
058: }
059: if (setBeans) {
060: runner.bindToComponent(projectComponent);
061: } else {
062: runner.bindToComponentMinimum(projectComponent);
063: }
064: return runner;
065: }
066:
067: /**
068: * Classpath to be used when searching for classes and resources.
069: *
070: * @return an empty Path instance to be configured by Ant.
071: */
072: public Path createClasspath() {
073: return getClassPathDelegate().createClasspath();
074: }
075:
076: /**
077: * Set the classpath to be used when searching for classes and resources.
078: *
079: * @param classpath an Ant Path object containing the search path.
080: */
081: public void setClasspath(Path classpath) {
082: getClassPathDelegate().setClasspath(classpath);
083: }
084:
085: /**
086: * Set the classpath by reference.
087: *
088: * @param r a Reference to a Path instance to be used as the classpath
089: * value.
090: */
091: public void setClasspathRef(Reference r) {
092: getClassPathDelegate().setClasspathref(r);
093: }
094:
095: /**
096: * Load the script from an external file ; optional.
097: *
098: * @param file the file containing the script source.
099: */
100: public void setSrc(File file) {
101: this .srcFile = file;
102: }
103:
104: /**
105: * The script text.
106: *
107: * @param text a component of the script text to be added.
108: */
109: public void addText(String text) {
110: this .text = text;
111: }
112:
113: /**
114: * Defines the script manager - defaults to "auto".
115: *
116: * @param manager the scripting manager - "bsf" or "javax" or "auto"
117: */
118: public void setManager(String manager) {
119: this .manager = manager;
120: }
121:
122: /**
123: * Defines the language (required).
124: *
125: * @param language the scripting language name for the script.
126: */
127: public void setLanguage(String language) {
128: this .language = language;
129: }
130:
131: /**
132: * Get the language.
133: * @return the scripting language.
134: */
135: public String getLanguage() {
136: return language;
137: }
138:
139: /**
140: * Set the setbeans attribute.
141: * If this is true, <script> will create variables in the
142: * script instance for all
143: * properties, targets and references of the current project.
144: * It this is false, only the project and self variables will
145: * be set.
146: * The default is true.
147: * @param setBeans the value to set.
148: */
149: public void setSetBeans(boolean setBeans) {
150: this .setBeans = setBeans;
151: }
152:
153: /**
154: * Used when called by scriptdef.
155: * @param loader the loader used by scriptdef.
156: */
157: public void setClassLoader(ClassLoader loader) {
158: scriptLoader = loader;
159: }
160:
161: private ClassLoader generateClassLoader() {
162: if (scriptLoader != null) {
163: return scriptLoader;
164: }
165: if (cpDelegate == null) {
166: scriptLoader = getClass().getClassLoader();
167: return scriptLoader;
168: }
169:
170: scriptLoader = cpDelegate.getClassLoader();
171: return scriptLoader;
172: }
173:
174: private ClasspathUtils.Delegate getClassPathDelegate() {
175: if (cpDelegate == null) {
176: cpDelegate = ClasspathUtils.getDelegate(projectComponent);
177: }
178: return cpDelegate;
179: }
180:
181: /**
182: * Get a script runner.
183: */
184: private ScriptRunnerBase getRunner() {
185: return new ScriptRunnerCreator(projectComponent.getProject())
186: .createRunner(manager, language, generateClassLoader());
187: }
188: }
|