/*
* 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.Enumeration;
import java.util.Vector;
/**
* 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 Vector args = new Vector();
/**
* The explicitly chosen implementation.
*/
private String userChoice;
/**
* The magic property to consult.
*/
private String magicValue;
/**
* The default value.
*/
private String defaultValue;
/**
* @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.addElement(arg);
}
/**
* Retrieves the command line arguments enabled for the current
* facade implementation.
* @return an array of command line arguements.
*/
public String[] getArgs() {
Vector tmp = new Vector(args.size());
for (Enumeration e = args.elements(); e.hasMoreElements();) {
ImplementationSpecificArgument arg =
((ImplementationSpecificArgument) e.nextElement());
String[] curr = arg.getParts(getImplementation());
for (int i = 0; i < curr.length; i++) {
tmp.addElement(curr[i]);
}
}
String[] res = new String[tmp.size()];
tmp.copyInto(res);
return 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;
}
}
|