diff --git a/proposal/myrmidon/build.xml b/proposal/myrmidon/build.xml
index 1471fa82a..3530ac06c 100644
--- a/proposal/myrmidon/build.xml
+++ b/proposal/myrmidon/build.xml
@@ -389,6 +389,13 @@ Legal:
+
+
+
+
+
+
+
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DistinguishedName.java b/proposal/myrmidon/src/java/org/apache/antlib/security/DistinguishedName.java
similarity index 94%
rename from proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DistinguishedName.java
rename to proposal/myrmidon/src/java/org/apache/antlib/security/DistinguishedName.java
index 3c9bdd787..b72086400 100644
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DistinguishedName.java
+++ b/proposal/myrmidon/src/java/org/apache/antlib/security/DistinguishedName.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.security;
+package org.apache.antlib.security;
import java.util.ArrayList;
import java.util.Iterator;
@@ -28,7 +28,7 @@ public class DistinguishedName
return param;
}
- public String encode( final String string )
+ private String encode( final String string )
{
int end = string.indexOf( ',' );
if( -1 == end )
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DnameParam.java b/proposal/myrmidon/src/java/org/apache/antlib/security/DnameParam.java
similarity index 84%
rename from proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DnameParam.java
rename to proposal/myrmidon/src/java/org/apache/antlib/security/DnameParam.java
index a67b4296c..a6567f767 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DnameParam.java
+++ b/proposal/myrmidon/src/java/org/apache/antlib/security/DnameParam.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.security;
+package org.apache.antlib.security;
public final class DnameParam
{
@@ -22,12 +22,12 @@ public final class DnameParam
m_value = value;
}
- public String getName()
+ protected String getName()
{
return m_name;
}
- public String getValue()
+ protected String getValue()
{
return m_value;
}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/GenerateKey.java b/proposal/myrmidon/src/java/org/apache/antlib/security/GenerateKey.java
similarity index 80%
rename from proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/GenerateKey.java
rename to proposal/myrmidon/src/java/org/apache/antlib/security/GenerateKey.java
index d9d147fc6..bf6d28f4d 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/GenerateKey.java
+++ b/proposal/myrmidon/src/java/org/apache/antlib/security/GenerateKey.java
@@ -5,15 +5,14 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
-package org.apache.tools.ant.taskdefs.security;
+package org.apache.antlib.security;
+import java.io.IOException;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
-import java.io.IOException;
-
/**
* Generates a key.
*
@@ -51,11 +50,6 @@ public class GenerateKey
public void setDname( final String dname )
throws TaskException
{
- if( null != m_expandedDname )
- {
- throw new TaskException( "It is not possible to specify dname both " +
- "as attribute and element." );
- }
m_dname = dname;
}
@@ -69,17 +63,9 @@ public class GenerateKey
m_keypass = keypass;
}
- public void setKeysize( final String keysize )
- throws TaskException
+ public void setKeysize( final int keysize )
{
- try
- {
- m_keysize = Integer.parseInt( keysize );
- }
- catch( final NumberFormatException nfe )
- {
- throw new TaskException( "KeySize attribute should be a integer" );
- }
+ m_keysize = keysize;
}
public void setKeystore( final String keystore )
@@ -102,17 +88,10 @@ public class GenerateKey
m_storetype = storetype;
}
- public void setValidity( final String validity )
+ public void setValidity( final int validity )
throws TaskException
{
- try
- {
- m_validity = Integer.parseInt( validity );
- }
- catch( final NumberFormatException nfe )
- {
- throw new TaskException( "Validity attribute should be a integer" );
- }
+ m_validity = validity;
}
public void setVerbose( final boolean verbose )
@@ -120,20 +99,15 @@ public class GenerateKey
m_verbose = verbose;
}
- public DistinguishedName createDname()
+ public void addDname( final DistinguishedName distinguishedName )
throws TaskException
{
if( null != m_expandedDname )
{
- throw new TaskException( "DName sub-element can only be specified once." );
- }
- if( null != m_dname )
- {
- throw new TaskException( "It is not possible to specify dname both " +
- "as attribute and element." );
+ final String message = "DName sub-element can only be specified once.";
+ throw new TaskException( message );
}
- m_expandedDname = new DistinguishedName();
- return m_expandedDname;
+ m_expandedDname = distinguishedName;
}
public void execute()
@@ -259,6 +233,13 @@ public class GenerateKey
final String message = "dname must be set";
throw new TaskException( message );
}
+ else if( null != m_expandedDname && null != m_dname )
+ {
+ final String message = "It is not possible to specify dname both " +
+ "as attribute and element.";
+ throw new TaskException( message );
+ }
+
}
}
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/SignJar.java b/proposal/myrmidon/src/java/org/apache/antlib/security/SignJar.java
similarity index 97%
rename from proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/SignJar.java
rename to proposal/myrmidon/src/java/org/apache/antlib/security/SignJar.java
index a1ce4000f..40a6690f3 100644
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/SignJar.java
+++ b/proposal/myrmidon/src/java/org/apache/antlib/security/SignJar.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.security;
+package org.apache.antlib.security;
import java.io.File;
import java.io.IOException;
@@ -15,12 +15,11 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
-import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.types.FileSet;
-
/**
* Sign a archive.
*
@@ -206,7 +205,8 @@ public class SignJar
final Enumeration entries = jarFile.entries();
while( entries.hasMoreElements() )
{
- final String name = ( (ZipEntry)entries.nextElement() ).getName();
+ final ZipEntry entry = (ZipEntry)entries.nextElement();
+ final String name = entry.getName();
if( name.startsWith( SIG_START ) && name.endsWith( SIG_END ) )
{
return true;
@@ -282,7 +282,8 @@ public class SignJar
private void doOneJar( final File jarSource, final File jarTarget )
throws TaskException
{
- if( isUpToDate( jarSource, jarTarget ) ) {
+ if( isUpToDate( jarSource, jarTarget ) )
+ {
return;
}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DnameParam.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DnameParam.java
deleted file mode 100644
index a67b4296c..000000000
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/DnameParam.java
+++ /dev/null
@@ -1,34 +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.security;
-
-public final class DnameParam
-{
- private String m_name;
- private String m_value;
-
- public void setName( final String name )
- {
- m_name = name;
- }
-
- public void setValue( final String value )
- {
- m_value = value;
- }
-
- public String getName()
- {
- return m_name;
- }
-
- public String getValue()
- {
- return m_value;
- }
-}
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/GenerateKey.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/GenerateKey.java
deleted file mode 100644
index d9d147fc6..000000000
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/GenerateKey.java
+++ /dev/null
@@ -1,264 +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.security;
-
-import org.apache.myrmidon.api.AbstractTask;
-import org.apache.myrmidon.api.TaskException;
-import org.apache.tools.ant.taskdefs.exec.Execute2;
-import org.apache.tools.ant.types.Commandline;
-
-import java.io.IOException;
-
-/**
- * Generates a key.
- *
- * @author Peter Donald
- */
-public class GenerateKey
- extends AbstractTask
-{
- /**
- * The alias of signer.
- */
- private String m_alias;
- private String m_dname;
- private DistinguishedName m_expandedDname;
- private String m_keyalg;
- private String m_keypass;
- private int m_keysize;
-
- /**
- * The name of keystore file.
- */
- private String m_keystore;
-
- private String m_sigalg;
- private String m_storepass;
- private String m_storetype;
- private int m_validity;
- private boolean m_verbose;
-
- public void setAlias( final String alias )
- {
- m_alias = alias;
- }
-
- public void setDname( final String dname )
- throws TaskException
- {
- if( null != m_expandedDname )
- {
- throw new TaskException( "It is not possible to specify dname both " +
- "as attribute and element." );
- }
- m_dname = dname;
- }
-
- public void setKeyalg( final String keyalg )
- {
- m_keyalg = keyalg;
- }
-
- public void setKeypass( final String keypass )
- {
- m_keypass = keypass;
- }
-
- public void setKeysize( final String keysize )
- throws TaskException
- {
- try
- {
- m_keysize = Integer.parseInt( keysize );
- }
- catch( final NumberFormatException nfe )
- {
- throw new TaskException( "KeySize attribute should be a integer" );
- }
- }
-
- public void setKeystore( final String keystore )
- {
- m_keystore = keystore;
- }
-
- public void setSigalg( final String sigalg )
- {
- m_sigalg = sigalg;
- }
-
- public void setStorepass( final String storepass )
- {
- m_storepass = storepass;
- }
-
- public void setStoretype( final String storetype )
- {
- m_storetype = storetype;
- }
-
- public void setValidity( final String validity )
- throws TaskException
- {
- try
- {
- m_validity = Integer.parseInt( validity );
- }
- catch( final NumberFormatException nfe )
- {
- throw new TaskException( "Validity attribute should be a integer" );
- }
- }
-
- public void setVerbose( final boolean verbose )
- {
- m_verbose = verbose;
- }
-
- public DistinguishedName createDname()
- throws TaskException
- {
- if( null != m_expandedDname )
- {
- throw new TaskException( "DName sub-element can only be specified once." );
- }
- if( null != m_dname )
- {
- throw new TaskException( "It is not possible to specify dname both " +
- "as attribute and element." );
- }
- m_expandedDname = new DistinguishedName();
- return m_expandedDname;
- }
-
- public void execute()
- throws TaskException
- {
- validate();
-
- final String message = "Generating Key for " + m_alias;
- getLogger().info( message );
-
- final Commandline cmd = createCommand();
- final Execute2 exe = new Execute2();
- exe.setWorkingDirectory( getBaseDirectory() );
- exe.setCommandline( cmd.getCommandline() );
- try
- {
- exe.execute();
- }
- catch( final IOException ioe )
- {
- throw new TaskException( ioe.getMessage(), ioe );
- }
- }
-
- private Commandline createCommand()
- {
- final Commandline cmd = new Commandline();
- cmd.setExecutable( "keytool" );
-
- cmd.addArgument( "-genkey " );
-
- if( m_verbose )
- {
- cmd.addArgument( "-v " );
- }
-
- cmd.addArgument( "-alias" );
- cmd.addArgument( m_alias );
-
- if( null != m_dname )
- {
- cmd.addArgument( "-dname" );
- cmd.addArgument( m_dname );
- }
-
- if( null != m_expandedDname )
- {
- cmd.addArgument( "-dname" );
- cmd.addArgument( m_expandedDname.toString() );
- }
-
- if( null != m_keystore )
- {
- cmd.addArgument( "-keystore" );
- cmd.addArgument( m_keystore );
- }
-
- if( null != m_storepass )
- {
- cmd.addArgument( "-storepass" );
- cmd.addArgument( m_storepass );
- }
-
- if( null != m_storetype )
- {
- cmd.addArgument( "-storetype" );
- cmd.addArgument( m_storetype );
- }
-
- cmd.addArgument( "-keypass" );
- if( null != m_keypass )
- {
- cmd.addArgument( m_keypass );
- }
- else
- {
- cmd.addArgument( m_storepass );
- }
-
- if( null != m_sigalg )
- {
- cmd.addArgument( "-sigalg" );
- cmd.addArgument( m_sigalg );
- }
-
- if( null != m_keyalg )
- {
- cmd.addArgument( "-keyalg" );
- cmd.addArgument( m_keyalg );
- }
-
- if( 0 < m_keysize )
- {
- cmd.addArgument( "-keysize" );
- cmd.addArgument( "" + m_keysize );
- }
-
- if( 0 < m_validity )
- {
- cmd.addArgument( "-validity" );
- cmd.addArgument( "" + m_validity );
- }
- return cmd;
- }
-
- private void validate()
- throws TaskException
- {
- if( null == m_alias )
- {
- final String message = "alias attribute must be set";
- throw new TaskException( message );
- }
-
- if( null == m_storepass )
- {
- final String message = "storepass attribute must be set";
- throw new TaskException( message );
- }
-
- if( null == m_dname && null == m_expandedDname )
- {
- final String message = "dname must be set";
- throw new TaskException( message );
- }
- }
-}
-
diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/SignJar.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/SignJar.java
deleted file mode 100644
index a1ce4000f..000000000
--- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/SignJar.java
+++ /dev/null
@@ -1,369 +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.security;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.apache.myrmidon.api.AbstractTask;
-import org.apache.myrmidon.api.TaskException;
-import org.apache.tools.ant.types.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.exec.Execute2;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-
-
-/**
- * Sign a archive.
- *
- * @author Peter Donald
- * @author Nick Fortescue
- */
-public class SignJar
- extends AbstractTask
-{
- /**
- * the filesets of the jars to sign
- */
- private ArrayList m_filesets = new ArrayList();
-
- /**
- * The alias of signer.
- */
- private String m_alias;
- private boolean m_internalsf;
-
- /**
- * The name of the jar file.
- */
- private File m_jar;
- private String m_keypass;
-
- /**
- * The name of keystore file.
- */
- private File m_keystore;
-
- /**
- * Whether to assume a jar which has an appropriate .SF file in is already
- * signed.
- */
- private boolean m_lazy;
-
- private boolean m_sectionsonly;
- private File m_sigfile;
- private File m_signedjar;
-
- private String m_storepass;
- private String m_storetype;
- private boolean m_verbose;
-
- public void setAlias( final String alias )
- {
- m_alias = alias;
- }
-
- public void setInternalsf( final boolean internalsf )
- {
- m_internalsf = internalsf;
- }
-
- public void setJar( final File jar )
- {
- m_jar = jar;
- }
-
- public void setKeypass( final String keypass )
- {
- m_keypass = keypass;
- }
-
- public void setKeystore( final File keystore )
- {
- m_keystore = keystore;
- }
-
- public void setLazy( final boolean lazy )
- {
- m_lazy = lazy;
- }
-
- public void setSectionsonly( final boolean sectionsonly )
- {
- m_sectionsonly = sectionsonly;
- }
-
- public void setSigfile( final File sigfile )
- {
- m_sigfile = sigfile;
- }
-
- public void setSignedjar( final File signedjar )
- {
- m_signedjar = signedjar;
- }
-
- public void setStorepass( final String storepass )
- {
- m_storepass = storepass;
- }
-
- public void setStoretype( final String storetype )
- {
- m_storetype = storetype;
- }
-
- public void setVerbose( final boolean verbose )
- {
- m_verbose = verbose;
- }
-
- /**
- * Adds a set of files (nested fileset attribute).
- *
- * @param set The feature to be added to the Fileset attribute
- */
- public void addFileset( final FileSet set )
- {
- m_filesets.add( set );
- }
-
- public void execute()
- throws TaskException
- {
- validate();
-
- if( null != m_jar )
- {
- doOneJar( m_jar, m_signedjar );
- }
- else
- {
- //Assume null != filesets
-
- // deal with the filesets
- for( int i = 0; i < m_filesets.size(); i++ )
- {
- final FileSet fileSet = (FileSet)m_filesets.get( i );
- final DirectoryScanner scanner = fileSet.getDirectoryScanner();
- final String[] jarFiles = scanner.getIncludedFiles();
- for( int j = 0; j < jarFiles.length; j++ )
- {
- final File file =
- new File( fileSet.getDir(), jarFiles[ j ] );
- doOneJar( file, null );
- }
- }
- }
- }
-
- private void validate() throws TaskException
- {
- if( null == m_jar && null == m_filesets )
- {
- final String message = "jar must be set through jar attribute or nested filesets";
- throw new TaskException( message );
- }
- else if( null != m_jar )
- {
- if( null == m_alias )
- {
- final String message = "alias attribute must be set";
- throw new TaskException( message );
- }
-
- if( null == m_storepass )
- {
- final String message = "storepass attribute must be set";
- throw new TaskException( message );
- }
- }
- }
-
- private boolean isSigned( final File file )
- {
- final String SIG_START = "META-INF/";
- final String SIG_END = ".SF";
-
- if( !file.exists() )
- {
- return false;
- }
- ZipFile jarFile = null;
- try
- {
- jarFile = new ZipFile( file );
- if( null == m_alias )
- {
- final Enumeration entries = jarFile.entries();
- while( entries.hasMoreElements() )
- {
- final String name = ( (ZipEntry)entries.nextElement() ).getName();
- if( name.startsWith( SIG_START ) && name.endsWith( SIG_END ) )
- {
- return true;
- }
- }
- return false;
- }
- else
- {
- final String name = SIG_START + m_alias.toUpperCase() + SIG_END;
- final ZipEntry entry = jarFile.getEntry( name );
- return ( entry != null );
- }
- }
- catch( final IOException ioe )
- {
- return false;
- }
- finally
- {
- if( null != jarFile )
- {
- try
- {
- jarFile.close();
- }
- catch( final IOException ioe )
- {
- }
- }
- }
- }
-
- private boolean isUpToDate( final File jarFile, final File signedjarFile )
- {
- if( null == jarFile )
- {
- return false;
- }
- else if( null != signedjarFile )
- {
- if( !jarFile.exists() )
- {
- return false;
- }
- else if( !signedjarFile.exists() )
- {
- return false;
- }
- else if( jarFile.equals( signedjarFile ) )
- {
- return false;
- }
- else if( signedjarFile.lastModified() > jarFile.lastModified() )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- else if( m_lazy )
- {
- return isSigned( jarFile );
- }
- else
- {
- return false;
- }
- }
-
- private void doOneJar( final File jarSource, final File jarTarget )
- throws TaskException
- {
- if( isUpToDate( jarSource, jarTarget ) ) {
- return;
- }
-
- final StringBuffer sb = new StringBuffer();
-
- final String message = "Signing Jar : " + jarSource.getAbsolutePath();
- getLogger().info( message );
-
- final Commandline cmd = buildCommand( jarTarget, jarSource );
- final Execute2 exe = new Execute2();
- setupLogger( exe );
- try
- {
- exe.execute();
- }
- catch( final IOException ioe )
- {
- throw new TaskException( ioe.getMessage(), ioe );
- }
- }
-
- private Commandline buildCommand( final File jarTarget, final File jarSource )
- {
- final Commandline cmd = new Commandline();
- cmd.setExecutable( "jarsigner" );
-
- if( null != m_keystore )
- {
- cmd.addArgument( "-keystore" );
- cmd.addArgument( m_keystore.toString() );
- }
-
- if( null != m_storepass )
- {
- cmd.addArgument( "-storepass" );
- cmd.addArgument( m_storepass );
- }
-
- if( null != m_storetype )
- {
- cmd.addArgument( "-storetype" );
- cmd.addArgument( m_storetype );
- }
-
- if( null != m_keypass )
- {
- cmd.addArgument( "-keypass" );
- cmd.addArgument( m_keypass );
- }
-
- if( null != m_sigfile )
- {
- cmd.addArgument( "-sigfile" );
- cmd.addArgument( m_sigfile.toString() );
- }
-
- if( null != jarTarget )
- {
- cmd.addArgument( "-signedjar" );
- cmd.addArgument( jarTarget.toString() );
- }
-
- if( m_verbose )
- {
- cmd.addArgument( "-verbose" );
- }
-
- if( m_internalsf )
- {
- cmd.addArgument( "-internalsf" );
- }
-
- if( m_sectionsonly )
- {
- cmd.addArgument( "-sectionsonly" );
- }
-
- cmd.addArgument( jarSource.toString() );
-
- cmd.addArgument( m_alias );
- return cmd;
- }
-}
-
diff --git a/proposal/myrmidon/src/manifest/security-ant-descriptor.xml b/proposal/myrmidon/src/manifest/security-ant-descriptor.xml
new file mode 100644
index 000000000..12fc5a562
--- /dev/null
+++ b/proposal/myrmidon/src/manifest/security-ant-descriptor.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DistinguishedName.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DistinguishedName.java
deleted file mode 100644
index 3c9bdd787..000000000
--- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/DistinguishedName.java
+++ /dev/null
@@ -1,77 +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.security;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-public class DistinguishedName
-{
- private ArrayList m_params = new ArrayList();
- private String m_name;
- private String m_path;
-
- public Iterator getParams()
- {
- return m_params.iterator();
- }
-
- public Object createParam()
- {
- final DnameParam param = new DnameParam();
- m_params.add( param );
- return param;
- }
-
- public String encode( final String string )
- {
- int end = string.indexOf( ',' );
- if( -1 == end )
- {
- return string;
- }
-
- final StringBuffer sb = new StringBuffer();
-
- int start = 0;
- while( -1 != end )
- {
- sb.append( string.substring( start, end ) );
- sb.append( "\\," );
- start = end + 1;
- end = string.indexOf( ',', start );
- }
-
- sb.append( string.substring( start ) );
-
- return sb.toString();
- }
-
- public String toString()
- {
- final int size = m_params.size();
- final StringBuffer sb = new StringBuffer();
- boolean firstPass = true;
-
- for( int i = 0; i < size; i++ )
- {
- if( !firstPass )
- {
- sb.append( " ," );
- }
- firstPass = false;
-
- final DnameParam param = (DnameParam)m_params.get( i );
- sb.append( encode( param.getName() ) );
- sb.append( '=' );
- sb.append( encode( param.getValue() ) );
- }
-
- return sb.toString();
- }
-}