diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java new file mode 100644 index 00000000..4c20c7c9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java @@ -0,0 +1,248 @@ +/* + * 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; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Properties; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.filters.util.ChainReaderHelper; +import org.apache.tools.ant.types.FilterChain; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.ResourceCollection; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.JavaResource; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.ResourceUtils; + +/** + * Load a file's contents as Ant properties. + * + * @since Ant 1.5 + * @ant.task category="utility" + */ +public class LoadProperties extends Task { + + /** + * Source resource. + */ + private Resource src = null; + + /** + * Holds filterchains + */ + private final Vector<FilterChain> filterChains = new Vector<FilterChain>(); + + /** + * Encoding to use for input; defaults to the platform's default encoding. + */ + private String encoding = null; + + /** + * Prefix for loaded properties. + */ + private String prefix = null; + private boolean prefixValues = true; + + /** + * Set the file to load. + * + * @param srcFile The new SrcFile value + */ + public final void setSrcFile(final File srcFile) { + addConfigured(new FileResource(srcFile)); + } + + /** + * Set the resource name of a property file to load. + * + * @param resource resource on classpath + */ + public void setResource(String resource) { + getRequiredJavaResource().setName(resource); + } + + /** + * Encoding to use for input, defaults to the platform's default + * encoding. <p> + * + * For a list of possible values see + * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html"> + * http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html + * </a>.</p> + * + * @param encoding The new Encoding value + */ + public final void setEncoding(final String encoding) { + this.encoding = encoding; + } + + /** + * Set the classpath to use when looking up a resource. + * @param classpath to add to any existing classpath + */ + public void setClasspath(Path classpath) { + getRequiredJavaResource().setClasspath(classpath); + } + + /** + * Add a classpath to use when looking up a resource. + * @return The classpath to be configured + */ + public Path createClasspath() { + return getRequiredJavaResource().createClasspath(); + } + + /** + * Set the classpath to use when looking up a resource, + * given as reference to a <path> defined elsewhere + * @param r The reference value + */ + public void setClasspathRef(Reference r) { + getRequiredJavaResource().setClasspathRef(r); + } + + /** + * get the classpath used by this <code>LoadProperties</code>. + * @return The classpath + */ + public Path getClasspath() { + return getRequiredJavaResource().getClasspath(); + } + + /** + * Set the prefix to load these properties under. + * @param prefix to set + */ + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + /** + * Whether to apply the prefix when expanding properties on the + * right hand side of a properties file as well. + * + * @since Ant 1.8.2 + */ + public void setPrefixValues(boolean b) { + prefixValues = b; + } + + /** + * load Ant properties from the source file or resource + * + * @exception BuildException if something goes wrong with the build + */ + public final void execute() throws BuildException { + //validation + if (src == null) { + throw new BuildException("A source resource is required."); + } + if (!src.isExists()) { + if (src instanceof JavaResource) { + // dreaded backwards compatibility + log("Unable to find resource " + src, Project.MSG_WARN); + return; + } + throw new BuildException("Source resource does not exist: " + src); + } + BufferedInputStream bis = null; + Reader instream = null; + ByteArrayInputStream tis = null; + + try { + bis = new BufferedInputStream(src.getInputStream()); + if (encoding == null) { + instream = new InputStreamReader(bis); + } else { + instream = new InputStreamReader(bis, encoding); + } + ChainReaderHelper crh = new ChainReaderHelper(); + crh.setPrimaryReader(instream); + crh.setFilterChains(filterChains); + crh.setProject(getProject()); + instream = crh.getAssembledReader(); + + String text = crh.readFully(instream); + + if (text != null && text.length() != 0) { + if (!text.endsWith("\n")) { + text = text + "\n"; + } + tis = new ByteArrayInputStream(text.getBytes(ResourceUtils.ISO_8859_1)); + final Properties props = new Properties(); + props.load(tis); + + Property propertyTask = new Property(); + propertyTask.bindToOwner(this); + propertyTask.setPrefix(prefix); + propertyTask.setPrefixValues(prefixValues); + propertyTask.addProperties(props); + } + } catch (final IOException ioe) { + throw new BuildException("Unable to load file: " + ioe, ioe, getLocation()); + } finally { + FileUtils.close(bis); + FileUtils.close(tis); + } + } + + /** + * Adds a FilterChain. + * @param filter the filter to add + */ + public final void addFilterChain(FilterChain filter) { + filterChains.addElement(filter); + } + + /** + * Set the source resource. + * @param a the resource to load as a single element Resource collection. + * @since Ant 1.7 + */ + public synchronized void addConfigured(ResourceCollection a) { + if (src != null) { + throw new BuildException("only a single source is supported"); + } + if (a.size() != 1) { + throw new BuildException( + "only single-element resource collections are supported"); + } + src = a.iterator().next(); + } + + private synchronized JavaResource getRequiredJavaResource() { + if (src == null) { + src = new JavaResource(); + src.setProject(getProject()); + } else if (!(src instanceof JavaResource)) { + throw new BuildException("expected a java resource as source"); + } + return (JavaResource) src; + } +} |