001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.tools.ant.taskdefs.optional.native2ascii;
019:
020: import java.io.File;
021: import org.apache.tools.ant.BuildException;
022: import org.apache.tools.ant.ProjectComponent;
023: import org.apache.tools.ant.taskdefs.optional.Native2Ascii;
024: import org.apache.tools.ant.types.Commandline;
025:
026: /**
027: * encapsulates the handling common to diffent Native2Asciiadapter
028: * implementations.
029: *
030: * @since Ant 1.6.3
031: */
032: public abstract class DefaultNative2Ascii implements
033: Native2AsciiAdapter {
034:
035: /** No-arg constructor. */
036: public DefaultNative2Ascii() {
037: }
038:
039: /**
040: * Splits the task into setting up the command line switches
041: * @param args the native 2 ascii arguments.
042: * @param srcFile the source file.
043: * @param destFile the destination file.
044: * @return run if the conversion was successful.
045: * @throws BuildException if there is a problem.
046: * (delegated to {@link #setup setup}), adding the file names
047: * (delegated to {@link #addFiles addFiles}) and running the tool
048: * (delegated to {@link #run run}).
049: */
050: public final boolean convert(Native2Ascii args, File srcFile,
051: File destFile) throws BuildException {
052: Commandline cmd = new Commandline();
053: setup(cmd, args);
054: addFiles(cmd, args, srcFile, destFile);
055: return run(cmd, args);
056: }
057:
058: /**
059: * Sets up the initial command line.
060: *
061: * <p>only the -encoding argument and nested arg elements get
062: * handled here.</p>
063: *
064: * @param cmd Command line to add to
065: * @param args provides the user-setting and access to Ant's
066: * logging system.
067: * @throws BuildException if there was a problem.
068: */
069: protected void setup(Commandline cmd, Native2Ascii args)
070: throws BuildException {
071: if (args.getEncoding() != null) {
072: cmd.createArgument().setValue("-encoding");
073: cmd.createArgument().setValue(args.getEncoding());
074: }
075: cmd.addArguments(args.getCurrentArgs());
076: }
077:
078: /**
079: * Adds source and dest files to the command line.
080: *
081: * <p>This implementation adds them without any leading
082: * qualifiers, source first.</p>
083: *
084: * @param cmd Command line to add to
085: * @param log provides access to Ant's logging system.
086: * @param src the source file
087: * @param dest the destination file
088: * @throws BuildException if there was a problem.
089: */
090: protected void addFiles(Commandline cmd, ProjectComponent log,
091: File src, File dest) throws BuildException {
092: cmd.createArgument().setFile(src);
093: cmd.createArgument().setFile(dest);
094: }
095:
096: /**
097: * Executes the command.
098: *
099: * @param cmd Command line to execute
100: * @param log provides access to Ant's logging system.
101: * @return whether execution was successful
102: * @throws BuildException if there was a problem.
103: */
104: protected abstract boolean run(Commandline cmd, ProjectComponent log)
105: throws BuildException;
106: }
|