diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java b/proposal/myrmidon/src/java/org/apache/aut/manifest/ManifestUtil.java
similarity index 98%
rename from proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java
rename to proposal/myrmidon/src/java/org/apache/aut/manifest/ManifestUtil.java
index 764f54ac1..3dd014ae7 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java
+++ b/proposal/myrmidon/src/java/org/apache/aut/manifest/ManifestUtil.java
@@ -5,7 +5,7 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
-package org.apache.tools.ant.taskdefs.manifest;
+package org.apache.aut.manifest;
import java.io.IOException;
import java.io.InputStream;
@@ -16,8 +16,8 @@ import java.io.UnsupportedEncodingException;
import java.io.BufferedReader;
import java.util.jar.Attributes;
import org.apache.myrmidon.api.TaskException;
-import org.apache.aut.manifest.Attribute;
-import org.apache.aut.manifest.ManifestException;
+import org.apache.tools.ant.taskdefs.manifest.Manifest;
+import org.apache.tools.ant.taskdefs.manifest.Section;
/**
* Utility methods for manifest stuff.
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/archive/Jar.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/archive/Jar.java
index 7cf4dfbdd..2ea0f8ce4 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/archive/Jar.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/archive/Jar.java
@@ -23,7 +23,7 @@ import org.apache.aut.zip.ZipOutputStream;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.taskdefs.manifest.Manifest;
import org.apache.aut.manifest.ManifestException;
-import org.apache.tools.ant.taskdefs.manifest.ManifestUtil;
+import org.apache.aut.manifest.ManifestUtil;
import org.apache.tools.ant.types.FileScanner;
/**
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Manifest.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Manifest.java
index 81a49c6b3..c7839802d 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Manifest.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Manifest.java
@@ -15,6 +15,7 @@ import java.util.Set;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to manage Manifest information
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
index 723678de0..1463d664d 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
@@ -19,6 +19,7 @@ import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to manage Manifest information
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Section.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Section.java
index c6cb3e170..cfd577e0b 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Section.java
+++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/manifest/Section.java
@@ -16,6 +16,7 @@ import java.util.Hashtable;
import java.util.Iterator;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to represent an individual section in the Manifest. A section
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/archive/Jar.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/archive/Jar.java
index 7cf4dfbdd..2ea0f8ce4 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/archive/Jar.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/archive/Jar.java
@@ -23,7 +23,7 @@ import org.apache.aut.zip.ZipOutputStream;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.taskdefs.manifest.Manifest;
import org.apache.aut.manifest.ManifestException;
-import org.apache.tools.ant.taskdefs.manifest.ManifestUtil;
+import org.apache.aut.manifest.ManifestUtil;
import org.apache.tools.ant.types.FileScanner;
/**
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Manifest.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Manifest.java
index 81a49c6b3..c7839802d 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Manifest.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Manifest.java
@@ -15,6 +15,7 @@ import java.util.Set;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to manage Manifest information
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
index 723678de0..1463d664d 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestTask.java
@@ -19,6 +19,7 @@ import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to manage Manifest information
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java
deleted file mode 100644
index 764f54ac1..000000000
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/ManifestUtil.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE.txt file.
- */
-package org.apache.tools.ant.taskdefs.manifest;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.io.BufferedReader;
-import java.util.jar.Attributes;
-import org.apache.myrmidon.api.TaskException;
-import org.apache.aut.manifest.Attribute;
-import org.apache.aut.manifest.ManifestException;
-
-/**
- * Utility methods for manifest stuff.
- *
- * @author Conor MacNeill
- * @author Stefan Bodewig
- * @author Peter Donald
- * @version $Revision$ $Date$
- */
-public final class ManifestUtil
-{
- /**
- * The Name Attribute is the first in a named section
- */
- public final static String ATTRIBUTE_NAME = "Name";
- /**
- * The From Header is disallowed in a Manifest
- */
- public final static String ATTRIBUTE_FROM = "From";
- /**
- * The Class-Path Header is special - it can be duplicated
- */
- public final static String ATTRIBUTE_CLASSPATH = Attributes.Name.CLASS_PATH.toString();
- /**
- * Default Manifest version if one is not specified
- */
- public final static String DEFAULT_MANIFEST_VERSION = "1.0";
- /**
- * The max length of a line in a Manifest
- */
- public final static int MAX_LINE_LENGTH = 70;
-
- public static Attribute buildAttribute( final String line )
- throws ManifestException
- {
- final Attribute attribute = new Attribute();
- parse( attribute, line );
- return attribute;
- }
-
- public static Manifest buildManifest( final Reader reader )
- throws ManifestException, IOException
- {
- final Manifest manifest = new Manifest();
- BufferedReader bufferedReader = new BufferedReader( reader );
- // This should be the manifest version
- final Section mainSection = manifest.getMainSection();
- String nextSectionName = mainSection.read( bufferedReader );
- final String readManifestVersion =
- mainSection.getAttributeValue( Attributes.Name.MANIFEST_VERSION.toString() );
- if( readManifestVersion != null )
- {
- manifest.setManifestVersion( readManifestVersion );
- mainSection.removeAttribute( Attributes.Name.MANIFEST_VERSION.toString() );
- }
-
- String line = null;
- while( ( line = bufferedReader.readLine() ) != null )
- {
- if( line.length() == 0 )
- {
- continue;
- }
-
- Section section = new Section();
- if( nextSectionName == null )
- {
- Attribute sectionName = ManifestUtil.buildAttribute( line );
- if( !sectionName.getName().equalsIgnoreCase( ManifestUtil.ATTRIBUTE_NAME ) )
- {
- throw new ManifestException( "Manifest sections should start with a \"" + ManifestUtil.ATTRIBUTE_NAME +
- "\" attribute and not \"" + sectionName.getName() + "\"" );
- }
- nextSectionName = sectionName.getValue();
- }
- else
- {
- // we have already started reading this section
- // this line is the first attribute. set it and then let the normal
- // read handle the rest
- Attribute firstAttribute = ManifestUtil.buildAttribute( line );
- section.addAttributeAndCheck( firstAttribute );
- }
-
- section.setName( nextSectionName );
- nextSectionName = section.read( bufferedReader );
- manifest.addSection( section );
- }
-
- return manifest;
- }
-
- /**
- * Construct a manifest from Ant's default manifest file.
- */
- public static Manifest getDefaultManifest()
- throws ManifestException
- {
- try
- {
- final InputStream input = getInputStream();
- final InputStreamReader reader = getReader( input );
- return buildManifest( reader );
- }
- catch( final IOException ioe )
- {
- throw new ManifestException( "Unable to read default manifest", ioe );
- }
- }
-
- private static InputStream getInputStream()
- throws ManifestException
- {
- final String location = "default.mf";
- final InputStream input = ManifestUtil.class.getResourceAsStream( location );
- if( null == input )
- {
- throw new ManifestException( "Could not find default manifest: " + location );
- }
- return input;
- }
-
- private static InputStreamReader getReader( final InputStream input )
- {
- try
- {
- return new InputStreamReader( input, "ASCII" );
- }
- catch( final UnsupportedEncodingException uee )
- {
- return new InputStreamReader( input );
- }
- }
-
- /**
- * Parse a line into name and value pairs
- *
- * @param line the line to be parsed
- * @throws ManifestException if the line does not contain a colon
- * separating the name and value
- */
- public static void parse( final Attribute attribute, final String line )
- throws ManifestException
- {
- final int index = line.indexOf( ": " );
- if( index == -1 )
- {
- throw new ManifestException( "Manifest line \"" + line + "\" is not valid as it does not " +
- "contain a name and a value separated by ': ' " );
- }
- final String name = line.substring( 0, index );
- final String value = line.substring( index + 2 );
- attribute.setName( name );
- attribute.setValue( value );
- }
-
- public static void write( final Attribute attribute, final PrintWriter writer )
- throws IOException
- {
- final String name = attribute.getName();
- final String value = attribute.getValue();
- String line = name + ": " + value;
- while( line.getBytes().length > MAX_LINE_LENGTH )
- {
- // try to find a MAX_LINE_LENGTH byte section
- int breakIndex = MAX_LINE_LENGTH;
- String section = line.substring( 0, breakIndex );
- while( section.getBytes().length > MAX_LINE_LENGTH && breakIndex > 0 )
- {
- breakIndex--;
- section = line.substring( 0, breakIndex );
- }
- if( breakIndex == 0 )
- {
- throw new IOException( "Unable to write manifest line " + name + ": " + value );
- }
- writer.println( section );
- line = " " + line.substring( breakIndex );
- }
- writer.println( line );
- }
-
- /**
- * Write the manifest out to a print writer.
- *
- * @param writer the Writer to which the manifest is written
- * @throws IOException if the manifest cannot be written
- */
- public static void write( Manifest manifest, PrintWriter writer )
- throws IOException
- {
- final String sigVersionKey = Attributes.Name.SIGNATURE_VERSION.toString();
-
- writer.println( Attributes.Name.MANIFEST_VERSION + ": " + manifest.getManifestVersion() );
-
- final String signatureVersion =
- manifest.getMainSection().getAttributeValue( sigVersionKey );
- if( signatureVersion != null )
- {
- writer.println( Attributes.Name.SIGNATURE_VERSION + ": " + signatureVersion );
- manifest.getMainSection().removeAttribute( sigVersionKey );
- }
- manifest.getMainSection().write( writer );
- if( signatureVersion != null )
- {
- try
- {
- manifest.getMainSection().addAttribute( new Attribute( sigVersionKey, signatureVersion ) );
- }
- catch( ManifestException e )
- {
- // shouldn't happen - ignore
- }
- }
-
- final Section[] sections = manifest.getSections();
- for( int i = 0; i < sections.length; i++ )
- {
- sections[ i ].write( writer );
- }
- }
-}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Section.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Section.java
index c6cb3e170..cfd577e0b 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Section.java
+++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/manifest/Section.java
@@ -16,6 +16,7 @@ import java.util.Hashtable;
import java.util.Iterator;
import org.apache.aut.manifest.Attribute;
import org.apache.aut.manifest.ManifestException;
+import org.apache.aut.manifest.ManifestUtil;
/**
* Class to represent an individual section in the Manifest. A section