aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java328
1 files changed, 328 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
new file mode 100644
index 00000000..81a386fd
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
@@ -0,0 +1,328 @@
+/*
+ * 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.optional;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.taskdefs.optional.native2ascii.Native2AsciiAdapter;
+import org.apache.tools.ant.taskdefs.optional.native2ascii.Native2AsciiAdapterFactory;
+import org.apache.tools.ant.types.Mapper;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.util.FileNameMapper;
+import org.apache.tools.ant.util.IdentityMapper;
+import org.apache.tools.ant.util.SourceFileScanner;
+import org.apache.tools.ant.util.facade.FacadeTaskHelper;
+import org.apache.tools.ant.util.facade.ImplementationSpecificArgument;
+
+/**
+ * Converts files from native encodings to ASCII.
+ *
+ * @since Ant 1.2
+ */
+public class Native2Ascii extends MatchingTask {
+
+ private boolean reverse = false; // convert from ascii back to native
+ private String encoding = null; // encoding to convert to/from
+ private File srcDir = null; // Where to find input files
+ private File destDir = null; // Where to put output files
+ private String extension = null; // Extension of output files if different
+
+ private Mapper mapper;
+ private FacadeTaskHelper facade = null;
+ private Native2AsciiAdapter nestedAdapter = null;
+
+ /** No args constructor */
+ public Native2Ascii() {
+ facade = new FacadeTaskHelper(Native2AsciiAdapterFactory.getDefault());
+ }
+
+ /**
+ * Flag the conversion to run in the reverse sense,
+ * that is Ascii to Native encoding.
+ *
+ * @param reverse True if the conversion is to be reversed,
+ * otherwise false;
+ */
+ public void setReverse(boolean reverse) {
+ this.reverse = reverse;
+ }
+
+ /**
+ * The value of the reverse attribute.
+ * @return the reverse attribute.
+ * @since Ant 1.6.3
+ */
+ public boolean getReverse() {
+ return reverse;
+ }
+
+ /**
+ * Set the encoding to translate to/from.
+ * If unset, the default encoding for the JVM is used.
+ *
+ * @param encoding String containing the name of the Native
+ * encoding to convert from or to.
+ */
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ /**
+ * The value of the encoding attribute.
+ * @return the encoding attribute.
+ * @since Ant 1.6.3
+ */
+ public String getEncoding() {
+ return encoding;
+ }
+
+ /**
+ * Set the source directory in which to find files to convert.
+ *
+ * @param srcDir directory to find input file in.
+ */
+ public void setSrc(File srcDir) {
+ this.srcDir = srcDir;
+ }
+
+
+ /**
+ * Set the destination directory to place converted files into.
+ *
+ * @param destDir directory to place output file into.
+ */
+ public void setDest(File destDir) {
+ this.destDir = destDir;
+ }
+
+ /**
+ * Set the extension which converted files should have.
+ * If unset, files will not be renamed.
+ *
+ * @param ext File extension to use for converted files.
+ */
+ public void setExt(String ext) {
+ this.extension = ext;
+ }
+
+ /**
+ * Choose the implementation for this particular task.
+ * @param impl the name of the implementation
+ * @since Ant 1.6.3
+ */
+ public void setImplementation(String impl) {
+ if ("default".equals(impl)) {
+ facade.setImplementation(Native2AsciiAdapterFactory.getDefault());
+ } else {
+ facade.setImplementation(impl);
+ }
+ }
+
+ /**
+ * Defines the FileNameMapper to use (nested mapper element).
+ *
+ * @return the mapper to use for file name translations.
+ *
+ * @throws BuildException if more than one mapper is defined.
+ */
+ public Mapper createMapper() throws BuildException {
+ if (mapper != null) {
+ throw new BuildException("Cannot define more than one mapper",
+ getLocation());
+ }
+ mapper = new Mapper(getProject());
+ return mapper;
+ }
+
+ /**
+ * A nested filenamemapper
+ * @param fileNameMapper the mapper to add
+ * @since Ant 1.6.3
+ */
+ public void add(FileNameMapper fileNameMapper) {
+ createMapper().add(fileNameMapper);
+ }
+
+ /**
+ * Adds an implementation specific command-line argument.
+ * @return a ImplementationSpecificArgument to be configured
+ *
+ * @since Ant 1.6.3
+ */
+ public ImplementationSpecificArgument createArg() {
+ ImplementationSpecificArgument arg =
+ new ImplementationSpecificArgument();
+ facade.addImplementationArgument(arg);
+ return arg;
+ }
+
+ /**
+ * The classpath to use when loading the native2ascii
+ * implementation if it is not a built-in one.
+ *
+ * @since Ant 1.8.0
+ */
+ public Path createImplementationClasspath() {
+ return facade.getImplementationClasspath(getProject());
+ }
+
+ /**
+ * Set the adapter explicitly.
+ * @since Ant 1.8.0
+ */
+ public void add(Native2AsciiAdapter adapter) {
+ if (nestedAdapter != null) {
+ throw new BuildException("Can't have more than one native2ascii"
+ + " adapter");
+ }
+ nestedAdapter = adapter;
+ }
+
+ /**
+ * Execute the task
+ *
+ * @throws BuildException is there is a problem in the task execution.
+ */
+ public void execute() throws BuildException {
+
+ DirectoryScanner scanner = null; // Scanner to find our inputs
+ String[] files; // list of files to process
+
+ // default srcDir to basedir
+ if (srcDir == null) {
+ srcDir = getProject().resolveFile(".");
+ }
+
+ // Require destDir
+ if (destDir == null) {
+ throw new BuildException("The dest attribute must be set.");
+ }
+
+ // if src and dest dirs are the same, require the extension
+ // to be set, so we don't stomp every file. One could still
+ // include a file with the same extension, but ....
+ if (srcDir.equals(destDir) && extension == null && mapper == null) {
+ throw new BuildException("The ext attribute or a mapper must be set if"
+ + " src and dest dirs are the same.");
+ }
+
+ FileNameMapper m = null;
+ if (mapper == null) {
+ if (extension == null) {
+ m = new IdentityMapper();
+ } else {
+ m = new ExtMapper();
+ }
+ } else {
+ m = mapper.getImplementation();
+ }
+
+ scanner = getDirectoryScanner(srcDir);
+ files = scanner.getIncludedFiles();
+ SourceFileScanner sfs = new SourceFileScanner(this);
+ files = sfs.restrict(files, srcDir, destDir, m);
+ int count = files.length;
+ if (count == 0) {
+ return;
+ }
+ String message = "Converting " + count + " file"
+ + (count != 1 ? "s" : "") + " from ";
+ log(message + srcDir + " to " + destDir);
+ for (int i = 0; i < files.length; i++) {
+ convert(files[i], m.mapFileName(files[i])[0]);
+ }
+ }
+
+ /**
+ * Convert a single file.
+ *
+ * @param srcName name of the input file.
+ * @param destName name of the input file.
+ */
+ private void convert(String srcName, String destName)
+ throws BuildException {
+ File srcFile; // File to convert
+ File destFile; // where to put the results
+
+ // Build the full file names
+ srcFile = new File(srcDir, srcName);
+ destFile = new File(destDir, destName);
+
+ // Make sure we're not about to clobber something
+ if (srcFile.equals(destFile)) {
+ throw new BuildException("file " + srcFile
+ + " would overwrite its self");
+ }
+
+ // Make intermediate directories if needed
+ // TODO JDK 1.1 doesn't have File.getParentFile,
+ String parentName = destFile.getParent();
+ if (parentName != null) {
+ File parentFile = new File(parentName);
+
+ if (!parentFile.exists()
+ && !(parentFile.mkdirs() || parentFile.isDirectory())) {
+ throw new BuildException("cannot create parent directory "
+ + parentName);
+ }
+ }
+
+ log("converting " + srcName, Project.MSG_VERBOSE);
+ Native2AsciiAdapter ad =
+ nestedAdapter != null ? nestedAdapter :
+ Native2AsciiAdapterFactory.getAdapter(facade.getImplementation(),
+ this,
+ createImplementationClasspath());
+ if (!ad.convert(this, srcFile, destFile)) {
+ throw new BuildException("conversion failed");
+ }
+ }
+
+ /**
+ * Returns the (implementation specific) settings given as nested
+ * arg elements.
+ * @return the arguments.
+ * @since Ant 1.6.3
+ */
+ public String[] getCurrentArgs() {
+ return facade.getArgs();
+ }
+
+ private class ExtMapper implements FileNameMapper {
+
+ public void setFrom(String s) {
+ }
+ public void setTo(String s) {
+ }
+
+ public String[] mapFileName(String fileName) {
+ int lastDot = fileName.lastIndexOf('.');
+ if (lastDot >= 0) {
+ return new String[] {fileName.substring(0, lastDot)
+ + extension};
+ } else {
+ return new String[] {fileName + extension};
+ }
+ }
+ }
+}