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:
019: package org.apache.tools.ant.types.optional;
020:
021: import org.apache.tools.ant.filters.TokenFilter;
022: import java.io.File;
023: import org.apache.tools.ant.BuildException;
024: import org.apache.tools.ant.Project;
025: import org.apache.tools.ant.types.Path;
026: import org.apache.tools.ant.types.Reference;
027: import org.apache.tools.ant.util.ScriptRunnerBase;
028: import org.apache.tools.ant.util.ScriptRunnerHelper;
029:
030: /**
031: * Most of this is CAP (Cut And Paste) from the Script task
032: * ScriptFilter class, implements TokenFilter.Filter
033: * for scripts to use.
034: * This provides the same beans as the Script Task
035: * to a script.
036: * The script is meant to use get self.token and
037: * set self.token in the reply.
038: *
039: * @since Ant 1.6
040: */
041: public class ScriptFilter extends TokenFilter.ChainableReaderFilter {
042: /** script runner helper */
043: private ScriptRunnerHelper helper = new ScriptRunnerHelper();
044:
045: /** script runner. */
046: private ScriptRunnerBase runner = null;
047:
048: /** the token used by the script */
049: private String token;
050:
051: /**
052: * Set the project.
053: * @param project the owner of this component.
054: */
055: public void setProject(Project project) {
056: super .setProject(project);
057: helper.setProjectComponent(this );
058: }
059:
060: /**
061: * Defines the language (required).
062: *
063: * @param language the scripting language name for the script.
064: */
065: public void setLanguage(String language) {
066: helper.setLanguage(language);
067: }
068:
069: /**
070: * Initialize.
071: *
072: * @exception BuildException if someting goes wrong
073: */
074: private void init() throws BuildException {
075: if (runner != null) {
076: return;
077: }
078: runner = helper.getScriptRunner();
079: }
080:
081: /**
082: * The current token
083: *
084: * @param token the string filtered by the script
085: */
086: public void setToken(String token) {
087: this .token = token;
088: }
089:
090: /**
091: * The current token
092: *
093: * @return the string filtered by the script
094: */
095: public String getToken() {
096: return token;
097: }
098:
099: /**
100: * Called filter the token.
101: * This sets the token in this object, calls
102: * the script and returns the token.
103: *
104: * @param token the token to be filtered
105: * @return the filtered token
106: */
107: public String filter(String token) {
108: init();
109: setToken(token);
110: runner.executeScript("ant_filter");
111: return getToken();
112: }
113:
114: /**
115: * Load the script from an external file ; optional.
116: *
117: * @param file the file containing the script source.
118: */
119: public void setSrc(File file) {
120: helper.setSrc(file);
121: }
122:
123: /**
124: * The script text.
125: *
126: * @param text a component of the script text to be added.
127: */
128: public void addText(String text) {
129: helper.addText(text);
130: }
131:
132: /**
133: * Defines the manager.
134: *
135: * @param manager the scripting manager.
136: */
137: public void setManager(String manager) {
138: helper.setManager(manager);
139: }
140:
141: /**
142: * Set the classpath to be used when searching for classes and resources.
143: *
144: * @param classpath an Ant Path object containing the search path.
145: */
146: public void setClasspath(Path classpath) {
147: helper.setClasspath(classpath);
148: }
149:
150: /**
151: * Classpath to be used when searching for classes and resources.
152: *
153: * @return an empty Path instance to be configured by Ant.
154: */
155: public Path createClasspath() {
156: return helper.createClasspath();
157: }
158:
159: /**
160: * Set the classpath by reference.
161: *
162: * @param r a Reference to a Path instance to be used as the classpath
163: * value.
164: */
165: public void setClasspathRef(Reference r) {
166: helper.setClasspathRef(r);
167: }
168:
169: }
|