|
|
@@ -0,0 +1,150 @@ |
|
|
|
/* |
|
|
|
* Copyright 2005 The Apache Software Foundation |
|
|
|
* |
|
|
|
* Licensed 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.taskdefs.condition; |
|
|
|
|
|
|
|
import org.apache.tools.ant.ProjectComponent; |
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
import org.apache.tools.ant.Project; |
|
|
|
import org.apache.tools.ant.util.JAXPUtils; |
|
|
|
import org.xml.sax.XMLReader; |
|
|
|
import org.xml.sax.SAXNotRecognizedException; |
|
|
|
import org.xml.sax.SAXNotSupportedException; |
|
|
|
|
|
|
|
/** |
|
|
|
* test for the XML parser supporting a particular feature |
|
|
|
* @since Ant 1.7 |
|
|
|
*/ |
|
|
|
public class ParserSupports extends ProjectComponent implements Condition { |
|
|
|
|
|
|
|
private String feature; |
|
|
|
private String property; |
|
|
|
private String value; |
|
|
|
public static final String ERROR_BOTH_ATTRIBUTES = |
|
|
|
"Property and feature attributes are exclusive"; |
|
|
|
public static final String FEATURE="feature"; |
|
|
|
public static final String PROPERTY = "property"; |
|
|
|
|
|
|
|
public static final String NOT_RECOGNIZED = |
|
|
|
" not recognized: "; |
|
|
|
private static final String NOT_SUPPORTED = |
|
|
|
" not supported: "; |
|
|
|
public static final String ERROR_NO_ATTRIBUTES = "Neither feature or property are set"; |
|
|
|
public static final String ERROR_NO_VALUE = "A value is needed when testing for property support"; |
|
|
|
|
|
|
|
/** |
|
|
|
* Feature to probe for. |
|
|
|
* |
|
|
|
* @param feature |
|
|
|
*/ |
|
|
|
public void setFeature(String feature) { |
|
|
|
this.feature = feature; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Property to probe for |
|
|
|
* @param property |
|
|
|
*/ |
|
|
|
public void setProperty(String property) { |
|
|
|
this.property = property; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Optional value to set. |
|
|
|
* Converted to a boolean value when setting a property |
|
|
|
* @param value |
|
|
|
*/ |
|
|
|
public void setValue(String value) { |
|
|
|
this.value = value; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* validate the args, then try to set the feature or property |
|
|
|
* @return |
|
|
|
* @throws BuildException |
|
|
|
*/ |
|
|
|
public boolean eval() throws BuildException { |
|
|
|
if(feature!=null && property!=null) { |
|
|
|
throw new BuildException(ERROR_BOTH_ATTRIBUTES); |
|
|
|
} |
|
|
|
if(feature==null && property==null) { |
|
|
|
throw new BuildException(ERROR_NO_ATTRIBUTES); |
|
|
|
} |
|
|
|
//pick a value that is good for everything |
|
|
|
if(feature!=null) { |
|
|
|
return evalFeature(); |
|
|
|
} else { |
|
|
|
if(value==null) { |
|
|
|
throw new BuildException(ERROR_NO_VALUE); |
|
|
|
} |
|
|
|
return evalProperty(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* get our reader |
|
|
|
* @return a reader |
|
|
|
*/ |
|
|
|
private XMLReader getReader() { |
|
|
|
JAXPUtils.getParser(); |
|
|
|
return JAXPUtils.getXMLReader(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* set a feature |
|
|
|
* @return true if the feature could be set |
|
|
|
*/ |
|
|
|
public boolean evalFeature() { |
|
|
|
XMLReader reader = getReader(); |
|
|
|
if (value == null) { |
|
|
|
value = "true"; |
|
|
|
} |
|
|
|
boolean v= Project.toBoolean(value); |
|
|
|
try { |
|
|
|
reader.setFeature(feature,v); |
|
|
|
} catch (SAXNotRecognizedException e) { |
|
|
|
log(FEATURE+NOT_RECOGNIZED+feature,Project.MSG_VERBOSE); |
|
|
|
return false; |
|
|
|
} catch (SAXNotSupportedException e) { |
|
|
|
log(FEATURE+NOT_SUPPORTED + feature, Project.MSG_VERBOSE); |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* set a feature |
|
|
|
* |
|
|
|
* @return true if the feature could be set |
|
|
|
*/ |
|
|
|
public boolean evalProperty() { |
|
|
|
XMLReader reader = getReader(); |
|
|
|
try { |
|
|
|
reader.setProperty(property, value); |
|
|
|
} catch (SAXNotRecognizedException e) { |
|
|
|
log(PROPERTY + NOT_RECOGNIZED + property, Project.MSG_VERBOSE); |
|
|
|
return false; |
|
|
|
} catch (SAXNotSupportedException e) { |
|
|
|
log(PROPERTY + NOT_SUPPORTED + property, Project.MSG_VERBOSE); |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |