Ggrr - how to include simple small zips? Here as inline:
--8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- package org.apache.tools.ant.taskdefs.optional; import org.apache.tools.ant.Task; import java.util.StringTokenizer; import java.util.Vector; import org.apache.tools.ant.BuildException; import java.util.Iterator; public class Sprintf extends Task { private String property; private String[] refids; private String format; private Class libraryAdapter; public void setProperty(String property) { this.property = property; } public void setRefids(String r) { Vector allRefids = new Vector(); // split on ";" StringTokenizer tok1 = new StringTokenizer(r, ";"); while (tok1.hasMoreTokens()) { StringTokenizer tok2 = new StringTokenizer(tok1.nextToken(), ":"); while (tok2.hasMoreTokens()) { StringTokenizer tok3 = new StringTokenizer(tok2.nextToken(), ","); while (tok3.hasMoreTokens()) { allRefids.add(tok3.nextToken()); } } } refids = new String[allRefids.size()]; int i=0; for (Iterator iter = allRefids.iterator(); iter.hasNext(); ) { refids[i] = (String) iter.next(); i++; } } public void setFormat(String format) { this.format = format; } public void setLibraryAdapter(Class libraryAdapter) { this.libraryAdapter = libraryAdapter; } public void execute() { if (libraryAdapter==null) { throw new BuildException("Library Adapter not set."); } try { SprintfLibraryAdapter adapter = (SprintfLibraryAdapter) libraryAdapter.newInstance(); String[] values = new String[refids.length]; for (int i = 0; i < refids.length; i++) { values[i] = getProject().getProperty(refids[i]); } String result = adapter.printf(format, values); getProject().setNewProperty(property, result); } catch (Exception ex) { ex.printStackTrace(); throw new BuildException("Problem while initialising printf library.", ex); } } } --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- package org.apache.tools.ant.taskdefs.optional; public interface SprintfLibraryAdapter { String printf(String format, String[] values); } package org.apache.tools.ant.taskdefs.optional; /** Connects to printf library by http://www.braju.com/ */ public class SprintfLibraryBrajuAdapter implements SprintfLibraryAdapter { public String printf(String format, String[] values) { return com.braju.format.Format.sprintf(format, values); } } --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- package org.apache.tools.ant.taskdefs.optional; import org.apache.tools.ant.BuildFileTest; import junit.framework.*; public abstract class SprintfAbstractTestCase extends BuildFileTest { Sprintf printf; public SprintfAbstractTestCase(String s) { super(s); if (getProject()==null) { // I need a project instance for properties handling // maybe itīs not set by junit ??? project = new org.apache.tools.ant.Project(); } } public abstract Class getAdapter(); public void setUp() { getProject().setProperty("string-1", "string-1"); getProject().setProperty("string-2", "string-2"); getProject().setProperty("boolean-1", "true"); getProject().setProperty("boolean-2", "false"); getProject().setProperty("number-1", "1"); getProject().setProperty("number-2", "22"); getProject().setProperty("number-3", "333"); printf = new Sprintf(); printf.setProject(getProject()); printf.setLibraryAdapter(getAdapter()); printf.setProperty("output"); } public void testString() { assertEquals("string-1", printf("%s", "string-1")); } public void testMultipleString() { assertEquals("string-1::string-2", printf("%s::%s", "string-1,string-2")); } public void testSeparator() { assertEquals("string-1::string-2", printf("%s::%s", "string-1,string-2")); assertEquals("string-1::string-2", printf("%s::%s", "string-1;string-2")); assertEquals("string-1::string-2", printf("%s::%s", "string-1:string-2")); } public void testBoolean() { assertEquals("true", printf("%I", "boolean-1")); } public void testMultipleBoolean() { assertEquals("true::false", printf("%I::%I", "boolean-1,boolean-2")); } public void testNumber() { assertEquals("1", printf("%d", "number-1")); } public void testMultipleNumber() { assertEquals("1::22", printf("%d::%d", "number-1,number-2")); } // private String printf(String format, String refids) { printf.setFormat(format); printf.setRefids(refids); printf.execute(); return getProject().getProperty("output"); } } --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- package org.apache.tools.ant.taskdefs.optional; public class SprintfBrajuTest extends SprintfAbstractTestCase { public SprintfBrajuTest(String s) { super(s); } public Class getAdapter() { return org.apache.tools.ant.taskdefs.optional.SprintfLibraryBrajuAdapter.class; } } --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- <?xml version="1.0" encoding="ISO-8859-1"?> <project name="sprintf" basedir="." default="use"> <property name="printf.lib" value="braju-printf.jar"/> <property name="task.lib" value="${ant.project.name}-task.jar"/> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="classes.dir" value="${build.dir}/classes"/> <property name="junit.out.dir.xml" value="${build.dir}/junit"/> <property name="junit.out.dir.html" value="${build.dir}/junit"/> <path id="cp"> <pathelement path="${classes.dir}"/> <pathelement location="${printf.lib}"/> </path> <target name="clean"> <delete dir="${build.dir}" failonerror="false"/> <delete file="${ant.home}/lib/${task.lib}"/> </target> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="cp"/> </target> <target name="jar" depends="compile"> <property name="jar.dir" value="${build.dir}/jar"/> <delete dir="${jar.dir}" failonerror="false"/> <mkdir dir="${jar.dir}"/> <unzip src="${printf.lib}" dest="${jar.dir}"/> <copy todir="${jar.dir}"><fileset dir="${classes.dir}" excludes="package cache"/></copy> <jar destfile="${task.lib}" basedir="${jar.dir}"/> <copy file="${task.lib}" todir="${ant.home}/lib"/> </target> <target name="junit"> <delete dir="${junit.out.dir.xml}" /> <mkdir dir="${junit.out.dir.xml}" /> <junit printsummary="yes" haltonfailure="no"> <classpath refid="cp"/> <formatter type="xml"/> <batchtest fork="yes" todir="${junit.out.dir.xml}"> <fileset dir="src/testcases"> <include name="**/*Test.java"/> </fileset> </batchtest> </junit> </target> <target name="junitreport"> <mkdir dir="${junit.out.dir.html}" /> <junitreport todir="${junit.out.dir.html}"> <fileset dir="${junit.out.dir.xml}"> <include name="*.xml"/> </fileset> <report format="frames" todir="${junit.out.dir.html}"/> </junitreport> </target> <target name="use"> <taskdef name="sprintf" classname="org.apache.tools.ant.taskdefs.optional.Sprintf" /> <property name="year" value="2003"/> <property name="month" value="9"/> <property name="day" value="5"/> <property name="format" value="%04s-%02s-%02s"/> <sprintf property="output" refids="year,month,day" format="${format}" libraryAdapter="org.apache.tools.ant.taskdefs.optional.SprintfLibraryBrajuAd apter" /> <echo>Year ${year}</echo> <echo>Month ${month}</echo> <echo>Day ${day}</echo> <echo>Format ${format}</echo> <echo> </echo> <echo>Output ${output}</echo> </target> </project> --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- C:. | braju-printf.jar (the downloaded zip renamed to jar) | build.xml | \---src +---main | \---org | \---apache | \---tools | \---ant | \---taskdefs | \---optional | Sprintf.java | SprintfLibraryAdapter.java | SprintfLibraryBrajuAdapter.java | \---testcases \---org \---apache \---tools \---ant \---taskdefs \---optional SprintfAbstractTestCase.java SprintfBrajuTest.java --8-<-----8-<------8-<-----8-<------8-<-----8-<------8-<-----8-<---- Jan -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, September 05, 2003 12:46 PM To: [EMAIL PROTECTED] Subject: <sprintf> (WAS: RE: [SUBMIT] optional task <propertyformatter>) Hmm, attachement didnīt come through ... Once again: - sprintf.zip (7kB) containing buildfile and sources (impl and test) Jan