Browse Source

Support Kaffe in native2ascii, make it a full facade task later

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277561 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 20 years ago
parent
commit
bd2954ad1e
7 changed files with 337 additions and 24 deletions
  1. +1
    -2
      build.xml
  2. +26
    -20
      src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
  3. +93
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/DefaultNative2Ascii.java
  4. +54
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/KaffeNative2Ascii.java
  5. +18
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapter.java
  6. +96
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java
  7. +49
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java

+ 1
- 2
build.xml View File

@@ -162,9 +162,8 @@
Kaffe for example -->
<selector id="needs.sun.tools">
<or>
<filename name="${optional.package}/Native2Ascii*"/>
<filename name="${optional.package}/Javah*"/>
<filename name="${optional.package}/native2ascii/*"/>
<filename name="${optional.package}/native2ascii/Sun*"/>
</or>
</selector>



+ 26
- 20
src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java View File

@@ -1,5 +1,5 @@
/*
* Copyright 2000-2004 The Apache Software Foundation
* Copyright 2000-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.
@@ -22,6 +22,8 @@ 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.Commandline;
import org.apache.tools.ant.types.Mapper;
import org.apache.tools.ant.util.FileNameMapper;
@@ -54,6 +56,15 @@ public class Native2Ascii extends MatchingTask {
this.reverse = reverse;
}

/**
* The value of 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.
@@ -65,6 +76,15 @@ public class Native2Ascii extends MatchingTask {
this.encoding = encoding;
}

/**
* The value of the reverse attribute.
*
* @since Ant 1.6.3
*/
public String getEncoding() {
return encoding;
}

/**
* Set the source directory in which to find files to convert.
*
@@ -181,29 +201,15 @@ public class Native2Ascii extends MatchingTask {
* @param srcName name of the input file.
* @param destName name of the input file.
*/
private void convert(String srcName, String destName) throws BuildException {

Commandline cmd = new Commandline(); // Command line to run
private void convert(String srcName, String destName)
throws BuildException {
File srcFile; // File to convert
File destFile; // where to put the results

// Set up the basic args (this could be done once, but
// it's cleaner here)
if (reverse) {
cmd.createArgument().setValue("-reverse");
}

if (encoding != null) {
cmd.createArgument().setValue("-encoding");
cmd.createArgument().setValue(encoding);
}

// Build the full file names
srcFile = new File(srcDir, srcName);
destFile = new File(destDir, destName);

cmd.createArgument().setFile(srcFile);
cmd.createArgument().setFile(destFile);
// Make sure we're not about to clobber something
if (srcFile.equals(destFile)) {
throw new BuildException("file " + srcFile
@@ -223,9 +229,9 @@ public class Native2Ascii extends MatchingTask {
}

log("converting " + srcName, Project.MSG_VERBOSE);
sun.tools.native2ascii.Main n2a
= new sun.tools.native2ascii.Main();
if (!n2a.convert(cmd.getArguments())) {
Native2AsciiAdapter ad =
Native2AsciiAdapterFactory.getAdapter(null, this);
if (!ad.convert(this, srcFile, destFile)) {
throw new BuildException("conversion failed");
}
}


+ 93
- 0
src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/DefaultNative2Ascii.java View File

@@ -0,0 +1,93 @@
/*
* 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.optional.native2ascii;

import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.taskdefs.optional.Native2Ascii;
import org.apache.tools.ant.types.Commandline;

/**
* encapsulates the handling common to diffent Native2Asciiadapter
* implementations.
*
* @since Ant 1.6.3
*/
public abstract class DefaultNative2Ascii implements Native2AsciiAdapter {

public DefaultNative2Ascii() {
}

/**
* Splits the task into setting up the command line switches
* (delegated to {@link #setup setup}), adding the file names
* (delegated to {@link addFiles addFiles}) and running the tool
* (delegated to {@link #run run}).
*/
public final boolean convert(Native2Ascii args, File srcFile,
File destFile) throws BuildException {
Commandline cmd = new Commandline();
setup(cmd, args);
addFiles(cmd, args, srcFile, destFile);
return run(cmd, args);
}
/**
* Sets up the initial command line.
*
* <p>only the -encoding argument gets handled here.</p>
*
* @param cmd Command line to add to
* @param args provides the user-setting and access to Ant's
* logging system.
*/
protected void setup(Commandline cmd, Native2Ascii args)
throws BuildException {
if (args.getEncoding() != null) {
cmd.createArgument().setValue("-encoding");
cmd.createArgument().setValue(args.getEncoding());
}
}

/**
* Adds source and dest files to the command line.
*
* <p>This implementation adds them without any leading
* qualifiers, source first.</p>
*
* @param cmd Command line to add to
* @param log provides access to Ant's logging system.
* @param src the source file
* @param dest the destination file
*/
protected void addFiles(Commandline cmd, ProjectComponent log, File src,
File dest) throws BuildException {
cmd.createArgument().setFile(src);
cmd.createArgument().setFile(dest);
}

/**
* Executes the command.
*
* @param cmd Command line to execute
* @param log provides access to Ant's logging system.
* @return whether execution was successful
*/
protected abstract boolean run(Commandline cmd, ProjectComponent log)
throws BuildException;
}

+ 54
- 0
src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/KaffeNative2Ascii.java View File

@@ -0,0 +1,54 @@
/*
* 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.optional.native2ascii;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.taskdefs.ExecuteJava;
import org.apache.tools.ant.taskdefs.optional.Native2Ascii;
import org.apache.tools.ant.types.Commandline;

/**
* Adapter to kaffe.tools.native2ascii.Native2Ascii.
*
* @since Ant 1.6.3
*/
public final class KaffeNative2Ascii extends DefaultNative2Ascii {

/**
* Identifies this adapter.
*/
public static final String IMPLEMENTATION_NAME = "kaffe";

protected void setup(Commandline cmd, Native2Ascii args)
throws BuildException {
if (args.getReverse()) {
throw new BuildException("-reverse is not supported by Kaffe");
}
super.setup(cmd, args);
}

protected boolean run(Commandline cmd, ProjectComponent log)
throws BuildException {
ExecuteJava ej = new ExecuteJava();
cmd.setExecutable("kaffe.tools.native2ascii.Native2Ascii");
ej.setJavaCommand(cmd);
ej.execute(log.getProject());
// otherwise ExecuteJava has thrown an exception
return true;
}
}

+ 18
- 2
src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapter.java View File

@@ -14,11 +14,27 @@
* limitations under the License.
*
*/
package org.apache.tools.ant.taskdef.optional.native2ascii;
package org.apache.tools.ant.taskdefs.optional.native2ascii;

import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.optional.Native2Ascii;

/**
* Interface for an adapter to a native2ascii implementation.
*
* @since Ant 1.6.3
*/
public interface Native2AsciiAdapter {
boolean convert(Native2Ascii args, File srcFile, File destFile);
/**
* Convert the encoding of srcFile writing to destFile.
*
* @param args Task that holds command line arguments and allows
* the implementation to send messages to Ant's logging system
* @param srcFile the source to convert
* @param destFile where to send output to
* @return whether the conversion has been successful.
*/
boolean convert(Native2Ascii args, File srcFile, File destFile)
throws BuildException;
}

+ 96
- 0
src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java View File

@@ -0,0 +1,96 @@
/*
* 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.optional.native2ascii;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.util.JavaEnvUtils;

/**
* Creates the Native2AsciiAdapter based on the user choice and
* potentially the VM vendor.
*
* @since Ant 1.6.3
*/
public class Native2AsciiAdapterFactory {

/**
* Determines the default choice of adapter based on the VM
* vendor.
*
* @return the default choice of adapter based on the VM
* vendor
*/
public static String getDefault() {
if (JavaEnvUtils.isKaffe()) {
return KaffeNative2Ascii.IMPLEMENTATION_NAME;
}
return SunNative2Ascii.IMPLEMENTATION_NAME;
}

/**
* Creates the Native2AsciiAdapter based on the user choice and *
* potentially the VM vendor.
*
* @param choice the user choice (if any).
* @param log a ProjectComponent instance used to access Ant's
* logging system.
* @return The adapter to use.
*/
public static Native2AsciiAdapter getAdapter(String choice,
ProjectComponent log)
throws BuildException {
if ((JavaEnvUtils.isKaffe() && choice == null)
|| KaffeNative2Ascii.IMPLEMENTATION_NAME.equals(choice)) {
return new KaffeNative2Ascii();
} else if (SunNative2Ascii.IMPLEMENTATION_NAME.equals(choice)) {
return new SunNative2Ascii();
} else if (choice != null) {
return resolveClassName(choice);
}

// This default has been good enough until Ant 1.6.3, so stick
// with it
return new SunNative2Ascii();
}

/**
* Tries to resolve the given classname into a native2ascii adapter.
* Throws a fit if it can't.
*
* @param className The fully qualified classname to be created.
* @throws BuildException This is the fit that is thrown if className
* isn't an instance of Native2AsciiAdapter.
*/
private static Native2AsciiAdapter resolveClassName(String className)
throws BuildException {
try {
Class c = Class.forName(className);
Object o = c.newInstance();
return (Native2AsciiAdapter) o;
} catch (ClassNotFoundException cnfe) {
throw new BuildException("Can't load " + className, cnfe);
} catch (ClassCastException cce) {
throw new BuildException(className
+ " is not a Native2Ascii adapter", cce);
} catch (Throwable t) {
// for all other possibilities
throw new BuildException(className + " caused an interesting "
+ "exception.", t);
}
}
}

+ 49
- 0
src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java View File

@@ -0,0 +1,49 @@
/*
* 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.optional.native2ascii;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.taskdefs.optional.Native2Ascii;
import org.apache.tools.ant.types.Commandline;

/**
* Adapter to sun.tools.native2ascii.Main.
*
* @since Ant 1.6.3
*/
public final class SunNative2Ascii extends DefaultNative2Ascii {

/**
* Identifies this adapter.
*/
public static final String IMPLEMENTATION_NAME = "sun";

protected void setup(Commandline cmd, Native2Ascii args)
throws BuildException {
if (args.getReverse()) {
cmd.createArgument().setValue("-reverse");
}
super.setup(cmd, args);
}

protected boolean run(Commandline cmd, ProjectComponent log)
throws BuildException {
sun.tools.native2ascii.Main n2a = new sun.tools.native2ascii.Main();
return n2a.convert(cmd.getArguments());
}
}

Loading…
Cancel
Save