diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java new file mode 100644 index 00000000..d2834019 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java @@ -0,0 +1,150 @@ +/* + * 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.taskdefs.condition; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.util.JAXPUtils; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; +import org.xml.sax.XMLReader; + +/** + * 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; + // Error messages + /** error - combined attributes not allowed */ + public static final String ERROR_BOTH_ATTRIBUTES = + "Property and feature attributes are exclusive"; + /** feature */ + public static final String FEATURE = "feature"; + /** property */ + public static final String PROPERTY = "property"; + + /** error - not recognized */ + public static final String NOT_RECOGNIZED = + " not recognized: "; + /** error - not supported */ + public static final String NOT_SUPPORTED = + " not supported: "; + /** error - missing attribute */ + public static final String ERROR_NO_ATTRIBUTES = + "Neither feature or property are set"; + /** error - no value */ + public static final String ERROR_NO_VALUE = + "A value is needed when testing for property support"; + + /** + * Feature to probe for. + * @param feature the feature to probe for. + */ + public void setFeature(String feature) { + this.feature = feature; + } + + /** + * Property to probe for + * @param property the property to probe for. + */ + public void setProperty(String property) { + this.property = property; + } + + /** + * Optional value to set. + * Converted to a boolean value when setting a property + * @param value the value to set. + */ + public void setValue(String value) { + this.value = value; + } + + /** {@inheritDoc}. */ + 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(); + } + 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 property + * @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; + } +} |