diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java new file mode 100644 index 00000000..4fb4341b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.util.facade; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; + +/** + * Helper class for facade implementations - encapsulates treatment of + * explicit implementation choices, magic properties and + * implementation specific command line arguments. + * + * + * @since Ant 1.5 + */ +public class FacadeTaskHelper { + + /** + * Command line arguments. + */ + private List<ImplementationSpecificArgument> args = new ArrayList<ImplementationSpecificArgument>(); + + /** + * The explicitly chosen implementation. + */ + private String userChoice; + + /** + * The magic property to consult. + */ + private String magicValue; + + /** + * The default value. + */ + private String defaultValue; + + /** + * User specified path used as classpath when loading the implementation. + */ + private Path implementationClasspath; + + /** + * @param defaultValue The default value for the implementation. + * Must not be null. + */ + public FacadeTaskHelper(String defaultValue) { + this(defaultValue, null); + } + + /** + * @param defaultValue The default value for the implementation. + * Must not be null. + * @param magicValue the value of a magic property that may hold a user. + * choice. May be null. + */ + public FacadeTaskHelper(String defaultValue, String magicValue) { + this.defaultValue = defaultValue; + this.magicValue = magicValue; + } + + /** + * Used to set the value of the magic property. + * @param magicValue the value of a magic property that may hold a user. + */ + public void setMagicValue(String magicValue) { + this.magicValue = magicValue; + } + + /** + * Used for explicit user choices. + * @param userChoice the explicitly chosen implementation. + */ + public void setImplementation(String userChoice) { + this.userChoice = userChoice; + } + + /** + * Retrieves the implementation. + * @return the implementation. + */ + public String getImplementation() { + return userChoice != null ? userChoice + : (magicValue != null ? magicValue + : defaultValue); + } + + /** + * Retrieves the explicit user choice. + * @return the explicit user choice. + */ + public String getExplicitChoice() { + return userChoice; + } + + /** + * Command line argument. + * @param arg an argument to add. + */ + public void addImplementationArgument(ImplementationSpecificArgument arg) { + args.add(arg); + } + + /** + * Retrieves the command line arguments enabled for the current + * facade implementation. + * @return an array of command line arguments. + */ + public String[] getArgs() { + List<String> tmp = new ArrayList<String>(args.size()); + for (ImplementationSpecificArgument arg : args) { + String[] curr = arg.getParts(getImplementation()); + if (curr != null) { + for (int i = 0; i < curr.length; i++) { + tmp.add(curr[i]); + } + } + } + String[] res = new String[tmp.size()]; + return (String[]) tmp.toArray(res); + } + + /** + * Tests whether the implementation has been chosen by the user + * (either via a magic property or explicitly. + * @return true if magic or user choice has be set. + * @since Ant 1.5.2 + */ + public boolean hasBeenSet() { + return userChoice != null || magicValue != null; + } + + /** + * The classpath to use when loading the implementation. + * + * @param project the current project + * @return a Path instance that may be appended to + * @since Ant 1.8.0 + */ + public Path getImplementationClasspath(Project project) { + if (implementationClasspath == null) { + implementationClasspath = new Path(project); + } + return implementationClasspath; + } +} |