hammant 2002/09/28 03:37:50 Added: metagenerate .cvsignore ant.properties.sample build.xml default.properties metagenerate/lib qdox-1.0.jar metagenerate/src/java/org/apache/avalon/excalibur/metagenerate MetaGenerateQdoxTask.java XinfoFactory.java XinfoHelper.java metagenerate/src/test/org/apache/avalon/excalibur/metagenerate IntegrationTestCase.java TestBlock.java TestNonBlock.java metagenerate/src/xdocs index.xml menu.xml Log: Start of metagenerate Revision Changes Path 1.1 jakarta-avalon-excalibur/metagenerate/.cvsignore Index: .cvsignore =================================================================== ant.properties build checkstyle.cache distributions dist excalibur-* *.el *.ipr 1.1 jakarta-avalon-excalibur/metagenerate/ant.properties.sample Index: ant.properties.sample =================================================================== # ----------------------------------------------------------------------------- # Component ant.properties.sample # # This is an example "ant.properties" file, used to customize the building of # the component for your local environment. It defines the location of all # external modules that this component depend on. Copy this file to # "ant.properties" in the source directory, and customize it as needed. # # The ant.properties values in this directory apply only to this component. # It is overridden by ../ant.properties and ~/build.properties # It overrides all default.properties files and ~/.ant.properties # # $Id: ant.properties.sample,v 1.1 2002/09/28 10:37:50 hammant Exp $ # ----------------------------------------------------------------------------- # ----- Compile Control Flags ----- build.debug=on build.optimize=off build.deprecation=off #build.compiler=jikes # ----- Base Directory in which all the packages are stored ----- base.path=${basedir}/../.. # -------------------------------------------------- # REQUIRED LIBRARIES # -------------------------------------------------- # -------------------------------------------------- # OPTIONAL LIBRARIES # -------------------------------------------------- # ----- JUnit Unit Test Suite, version 3.7 or later. ----- # Not needed if junit.jar is in $ANT_HOME/lib junit.home=${base.path}/junit3.7 junit.lib=${junit.home} junit.jar=${junit.lib}/junit.jar # ----- Checkstyle, version 2.1 or later ----- # Uncomment the 'do.checkstyle' flag property to enable checkstyle # do.checkstyle= checkstyle.home=${base.path}/checkstyle-2.1 checkstyle.lib=${checkstyle.home} checkstyle.jar=${checkstyle.lib}/checkstyle-all-2.1.jar 1.1 jakarta-avalon-excalibur/metagenerate/build.xml Index: build.xml =================================================================== <?xml version="1.0"?> <project name="Excalibur MetaGenerate" default="main" basedir="."> <property file="${user.home}/build.properties"/> <property file="${basedir}/../ant.properties"/> <property file="${basedir}/ant.properties"/> <property file="${user.home}/.ant.properties"/> <property file="${basedir}/../default.properties"/> <property file="${basedir}/default.properties"/> <!-- Classpath for product --> <path id="project.class.path"> <pathelement location="${build.classes}"/> <pathelement location="${checkstyle.jar}"/> <pathelement location="${avalon-framework.jar}"/> <pathelement location="${qdox.jar}"/> <pathelement path="${java.class.path}"/> </path> <path id="tools.class.path"> <pathelement location="${junit.jar}"/> <fileset dir="${jakarta-site.dir}/lib"/> </path> <path id="test.class.path"> <pathelement location="${build.testclasses}"/> <pathelement location="${junit.jar}"/> <path refid="project.class.path"/> </path> <property name="cp" refid="test.class.path"/> <target name="main" depends="jar" description="Build the project"/> <target name="rebuild" depends="clean,main" description="Rebuild the project"/> <target name="dependencies" description="Check dependencies" unless="skip.dependencies"> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkCommon"/> </target> <target name="dependencies-test" depends="dist-jar, dependencies" description="Check unit test dependencies" unless="skip.dependencies"> <!-- Need the jar to prevent recursive deps. --> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkJUnit"/> </target> <!-- Compiles the source code --> <target name="compile" depends="dependencies" description="Compiles the source code"> <mkdir dir="${build.classes}"/> <!-- Compile all classes excluding the tests. --> <javac srcdir="${java.dir}" destdir="${build.classes}" debug="${build.debug}" optimize="${build.optimize}" deprecation="${build.deprecation}" target="1.2"> <classpath refid="project.class.path" /> <include name="**/*.java"/> </javac> <!-- copy resources to same location as .class files --> <copy todir="${build.classes}"> <fileset dir="${java.dir}"> <exclude name="**/*.java"/> <exclude name="**/package.html"/> </fileset> </copy> </target> <!-- Compiles the unit test source code --> <target name="compile-test" depends="compile, dependencies-test" description="Compiles the source code"> <mkdir dir="${build.testsrc}"/> <!-- In case tests do not exist, create the directory --> <mkdir dir="${test.dir}"/> <!-- Copy over all of the tests applying test filters --> <copy todir="${build.testsrc}"> <fileset dir="${test.dir}"/> </copy> <mkdir dir="${build.testclasses}"/> <!-- Compile all test classes. --> <javac srcdir="${build.testsrc}" destdir="${build.testclasses}" debug="${build.debug}" optimize="${build.optimize}" deprecation="${build.deprecation}" target="1.2"> <classpath refid="test.class.path" /> <include name="**/*.java"/> </javac> <copy todir="${build.testclasses}"> <fileset dir="${test.dir}"> <exclude name="**/*.java"/> <exclude name="**/package.html"/> </fileset> </copy> </target> <!-- Copies and filters the license. Used by jar and dist --> <target name="prepare-conf"> <mkdir dir="${build.conf}"/> <copy todir="${build.conf}" flatten="true"> <fileset dir="../" includes="LICENSE.txt"/> <filterset> <filter token="year" value="${year}"/> </filterset> </copy> </target> <!-- Creates all the .jar file --> <target name="jar" depends="compile, prepare-conf" description="Generates the jar files"> <mkdir dir="${build.lib}"/> <jar jarfile="${build.lib}/${jar.name}" basedir="${build.classes}" compress="${build.compress}"> <manifest> <attribute name="Extension-Name" value="${name}"/> <attribute name="Specification-Vendor" value="Apache Software Foundation"/> <attribute name="Specification-Version" value="1.0"/> <attribute name="Implementation-Vendor" value="Apache Software Foundation"/> <attribute name="Implementation-Version" value="${package-version}"/> </manifest> <exclude name="**/test/**"/> <zipfileset dir="${build.conf}" prefix="META-INF/"> <include name="LICENSE.txt"/> </zipfileset> </jar> </target> <!-- Creates all the Javadocs --> <target name="javadocs" depends="compile" description="Generates the javadocs" unless="skip.javadocs"> <mkdir dir="${dist.javadocs}"/> <javadoc packagenames="org.apache.*" sourcepath="${java.dir}" destdir="${dist.javadocs}"> <classpath refid="project.class.path" /> <doclet name="com.sun.tools.doclets.standard.Standard"> <param name="-author"/> <param name="-version"/> <param name="-doctitle" value="${Name}"/> <param name="-windowtitle" value="${Name} API"/> <param name="-link" value="http://java.sun.com/j2se/1.4/docs/api/"/> <param name="-link" value="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/"/> <param name="-link" value="http://jakarta.apache.org/avalon/api/"/> <param name="-bottom" value=""Copyright © ${year} Apache Jakarta Project. All Rights Reserved.""/> </doclet> </javadoc> </target> <target name="test" depends="compile-test, test-generate" description="Perform the unit tests" unless="skip.tests"> <echo message="Performing Unit Tests" /> <mkdir dir="${build.tests}"/> <copy todir="${build.tests}"> <fileset dir="build/metagenerate"> <include name="**/*.xinfo"/> </fileset> </copy> <junit fork="true" haltonfailure="${junit.failonerror}" printsummary="yes" dir="${build.tests}"> <classpath refid="test.class.path"/> <formatter type="xml"/> <!-- xml reports for junitreport --> <formatter type="plain" usefile="false"/> <!-- text reports for humans --> <batchtest todir="${build.tests}"> <fileset dir="${build.testclasses}"> <include name="**/*TestCase.class"/> <exclude name="**/Abstract*"/> </fileset> </batchtest> </junit> </target> <target name="test-reports" depends="test" description="Generate Reports for the unit tests"> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkBSF"/> <mkdir dir="${build.reports}/junit"/> <junitreport todir="${build.reports}/junit"> <fileset dir="${build.tests}"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${build.reports}/junit"/> </junitreport> <!-- Clean up the xml reports used by the junitreport task --> <!-- <delete> <fileset dir="${build.tests}" includes="TEST-*.xml"/> <fileset dir="${build.tests}" includes="TESTS-*.xml"/> </delete> --> </target> <target name="checkstyle" if="do.checkstyle" description="Checkstyle"> <!-- this invocation of checkstyle requires that checkstyle be downloaded and setup --> <!-- thats why you are required to define do.checkstyle property to generate the report --> <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"> <classpath refid="project.class.path"/> </taskdef> <checkstyle lcurlyType="nl" lcurlyMethod="nl" lcurlyOther="nl" rcurly="ignore" allowProtected="false" allowPackage="false" allowNoAuthor="false" maxLineLen="100" maxMethodLen="200" maxConstructorLen="100" memberPattern="^m_[a-z][a-zA-Z0-9]*$" staticPattern="^c_[a-z][a-zA-Z0-9]*$" constPattern="(^c_[a-z][a-zA-Z0-9]*$)|([A-Z_]*$)" ignoreImportLen="true" allowTabs="false" javadocScope="protected" ignoreWhitespace="true" cacheFile="checkstyle.cache" failOnViolation="false" ignoreCastWhitespace="true"> <fileset dir="${java.dir}"> <include name="**/*.java"/> </fileset> <formatter type="plain"/> <formatter type="xml" toFile="${build.dir}/checkstyle-results.xml"/> </checkstyle> </target> <target name="checkstyle-report" depends="checkstyle" if="do.checkstyle" description="Generate Checkstyle Report"> <mkdir dir="${build.reports}/checkstyle"/> <property name="checkstyle.pathhack" location="."/> <style style="${tools.dir}/etc/checkstyle-frames.xsl" in="${build.dir}/checkstyle-results.xml" out="${build.reports}/checkstyle/delete-me.html"/> </target> <!-- Creates the distribution --> <target name="dist" depends="dist-jar, test-reports, checkstyle-report, site" description="Generates a distribution (jar + docs javadocs + unit tests + checkstyle reports)"> <copy file="${build.conf}/LICENSE.txt" todir="${dist.dir}"/> <copy file="../KEYS" todir="${dist.dir}"/> <zip zipfile="${dist.dir}/src.zip" compress="false"> <zipfileset dir="src/java"/> </zip> <mkdir dir="${dist.base}"/> <zip zipfile="${dist.base}/${dist.name}.zip" compress="true"> <zipfileset dir="${dist.dir}" prefix="${dist.name}"/> </zip> </target> <!-- Creates a mini jar-only distribution --> <target name="dist-jar" depends="jar"> <mkdir dir="${dist.dir}"/> <copy todir="${dist.dir}"> <fileset dir="${build.lib}"> <include name="*.jar"/> </fileset> </copy> </target> <!-- Creates a minimal distribution --> <target name="dist.lite" depends="dist-jar, test, javadocs" description="Generates a minimal distribution (jar + javadocs)"> <copy file="../LICENSE.txt" todir="${dist.dir}"/> <copy file="../KEYS" todir="${dist.dir}"/> </target> <target name="anakia-avail"> <available classname="org.apache.velocity.anakia.AnakiaTask" property="AnakiaTask.present"> <classpath refid="tools.class.path"/> </available> </target> <target name="anakia-check" depends="anakia-avail" unless="AnakiaTask.present"> <echo> AnakiaTask is not present! Please check to make sure that velocity.jar is in your classpath. The easiest way to build the documentation is to checkout jakarta-site CVS and specify jakarta-site.dir property. </echo> </target> <target name="docs" depends="anakia-check" description="Generate documentation and website"> <taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask"> <classpath refid="tools.class.path"/> </taskdef> <anakia basedir="${xdocs.dir}" destdir="${docs.dir}" style="docs.vsl" projectfile="menu.xml" includes="**/*.xml" excludes="menu.xml" velocitypropertiesfile="../site/src/stylesheets/velocity.properties" /> <copy todir="${docs.dir}" filtering="off"> <fileset dir="../site/src" includes="css/*.css" /> <fileset dir="${xdocs.dir}"> <include name="**/images/**"/> <include name="**/*.gif"/> <include name="**/*.jpg"/> <include name="**/*.png"/> <include name="**/*.css"/> <include name="**/*.js"/> </fileset> </copy> </target> <target name="site" depends="javadocs, docs" description=" Places Docs ready for hosting on website"> <mkdir dir="../site/dist/docs/${dir-name}"/> <copy todir="../site/dist/docs/${dir-name}"> <fileset dir="${docs.dir}"> <include name="**"/> </fileset> </copy> </target> <!-- Cleans up build and distribution directories --> <target name="clean" description="Cleans up the project"> <delete file="checkstyle.cache"/> <delete dir="${build.dir}" /> <delete dir="${dist.dir}" /> <delete dir="${docs.dir}" /> <delete dir="test" /> <!-- unit testing output directory --> <delete> <fileset dir="." includes="velocity.*"/> <fileset dir="." includes="**/*~" defaultexcludes="no"/> </delete> </target> <target name="real-clean" depends="clean" description="Cleans up the project, including distributions"> <delete dir="${dist.base}" /> </target> <target name="test-generate"> <taskdef name="makexinfo" classname="org.apache.avalon.excalibur.metagenerate.MetaGenerateQdoxTask"> <classpath refid="test.class.path" /> </taskdef> <makexinfo dest="build/metagenerate"> <fileset dir="src/test"> <include name="**/*.java"/> </fileset> </makexinfo> </target> </project> 1.1 jakarta-avalon-excalibur/metagenerate/default.properties Index: default.properties =================================================================== # ------------------------------------------------------------------- # B U I L D P R O P E R T I E S # ------------------------------------------------------------------- # Specifies default property values # Overridden by ../default.properties and all ant.properties # Not user-editable; use ant.properties files instead name=excalibur-meta-generate Name=Excalibur MetaGenerate dir-name=metagenerate version=0.7 package-version=0.7 year=2002 # -------------------------------------------------- # REQUIRED LIBRARIES # -------------------------------------------------- # -------------------------------------------------- # Settings used to configure compile environment build.debug = on build.optimize = off build.deprecation = off build.compress = false junit.failonerror = false # location of intermediate products build.dir = build build.testsrc = ${build.dir}/testsrc build.testclasses = ${build.dir}/testclasses build.lib = ${build.dir}/lib build.conf = ${build.dir}/conf build.classes = ${build.dir}/classes build.tests = ${build.dir}/tests build.reports = ${build.dir}/reports # Set the properties for source directories src.dir = src java.dir = ${src.dir}/java conf.dir = ${src.dir}/conf test.dir = ${src.dir}/test # Set the properties for distribution directories dist.dir = dist dist.javadocs = ${docs.dir}/api xdocs.dir = ${src.dir}/xdocs docs.dir = ${dist.dir}/docs jakarta-site.dir = ../../jakarta-site tools.dir = ../../jakarta-avalon/tools # name of .zip/.tar.gz/.bz2 files and their top-level directory dist.name = ${name}-${version} # name of jar file jar.name = ${name}-${version}.jar # property indicating directory where all distribution archives are placed dist.base = distributions depchecker.prefix=. qdox.jar = lib/qdox-1.0.jar 1.1 jakarta-avalon-excalibur/metagenerate/lib/qdox-1.0.jar <<Binary file>> 1.1 jakarta-avalon-excalibur/metagenerate/src/java/org/apache/avalon/excalibur/metagenerate/MetaGenerateQdoxTask.java Index: MetaGenerateQdoxTask.java =================================================================== /* * 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.avalon.excalibur.metagenerate; import com.thoughtworks.qdox.model.JavaClass; import com.thoughtworks.qdox.model.DocletTag; import com.thoughtworks.qdox.ant.AbstractQdoxTask; import org.apache.tools.ant.BuildException; import java.io.File; import java.io.IOException; import org.apache.avalon.excalibur.metagenerate.XinfoFactory; /** * MetaInfo Generation Ant Taskdef * @author Paul Hammant */ public class MetaGenerateQdoxTask extends AbstractQdoxTask { private File m_destDir; /** * Execute */ public void execute() { super.execute(); try { m_destDir.mkdirs(); outputClasses(); } catch (IOException e) { e.printStackTrace(); throw new BuildException("IOException " + e.getMessage()); } } /** * Set the desitation * @param destinationDir The destination directory */ public void setDest(File destinationDir) { m_destDir = destinationDir; } /** * Output the classes * @throws IOException If a problem writing output */ protected void outputClasses() throws IOException { for (int i = 0; i < allClasses.size(); i++) { JavaClass javaClass = (JavaClass) allClasses.get(i); DocletTag tag = javaClass.getTagByName("phoenix:block"); if (tag != null) { XinfoFactory factory = new XinfoFactory(m_destDir, javaClass); factory.generate(); } } } } 1.1 jakarta-avalon-excalibur/metagenerate/src/java/org/apache/avalon/excalibur/metagenerate/XinfoFactory.java Index: XinfoFactory.java =================================================================== /* * 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.avalon.excalibur.metagenerate; import com.thoughtworks.qdox.model.JavaClass; import com.thoughtworks.qdox.model.JavaMethod; import com.thoughtworks.qdox.model.DocletTag; import com.thoughtworks.qdox.model.Type; import com.thoughtworks.qdox.model.JavaParameter; import java.io.IOException; import java.io.File; /** * A Xinfo Factory * @author Paul Hammant */ public class XinfoFactory { private JavaClass m_javaClass; private File m_destDir; /** * Construct a factory for a class. * @param destDir * @param javaClass */ public XinfoFactory(File destDir, JavaClass javaClass) { m_javaClass = javaClass; m_destDir = destDir; } /** * Generate the class * @throws IOException If a problem writing output */ public void generate() throws IOException { File file = new File(m_destDir, m_javaClass.getFullyQualifiedName().replace('.',File.separatorChar) + ".xinfo"); file.getParentFile().mkdirs(); XinfoHelper xinfo = new XinfoHelper(file); JavaMethod[] methods = m_javaClass.getMethods(); for (int j = 0; j < methods.length; j++) { xinfo.writeHeader(); // services DocletTag[] services = m_javaClass.getTagsByName("phoenix:service"); for (int i = 0; i < services.length; i++) { DocletTag service = services[i]; xinfo.writeServiceLines(service.getNamedParameter("name")); } xinfo.writeMidSection(); // dependencies JavaMethod method = methods[j]; if (method.getName().equals("service") && method.getReturns().equals(new Type("void",0)) && method.getParameters().length == 1 && method.getParameters()[0].getType().getValue().equals( "org.apache.avalon.framework.service.ServiceManager")) { DocletTag[] dependencies = method.getTagsByName("phoenix:dependency"); for (int i = 0; i < dependencies.length; i++) { DocletTag dependency = dependencies[i]; xinfo.writeDependencyLines(dependency.getNamedParameter("name")); } } xinfo.writeFooter(); xinfo.close(); } } } 1.1 jakarta-avalon-excalibur/metagenerate/src/java/org/apache/avalon/excalibur/metagenerate/XinfoHelper.java Index: XinfoHelper.java =================================================================== /* * 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.avalon.excalibur.metagenerate; import java.io.FileWriter; import java.io.IOException; import java.io.File; /** * A Xinfo Helper. * @author Paul Hammant */ public class XinfoHelper { private FileWriter m_output; private static final String[] HEADER = new String[] { "<?xml version=\"1.0\"?>", "<!DOCTYPE blockinfo PUBLIC \"-//PHOENIX/Block Info DTD Version 1.0//EN\"", " \"http://jakarta.apache.org/avalon/dtds/phoenix/blockinfo_1_0.dtd\">", "", "<blockinfo>", "", " <!-- section to describe block -->", " <block>", " <version>1.0</version>", " </block>", "", " <!-- services that are offered by this block -->", " <services>" }; private static final String[] SERVICE_LINES = new String[] { " <service name=\"@SERVICE-CLASS@\"/>" }; private static final String[] MID_SECTION = new String[] { " </services>", "", " <!-- interfaces that may be exported to manange this block -->", " <management-access-points>", " </management-access-points>", "", " <!-- services that are required by this block -->", " <dependencies>" }; private static final String[] DEPENDENCY_SECTION = new String[] { " <dependency>", " <service name=\"@SERVICE-CLASS@\"/>", " </dependency>" }; private static final String[] FOOTER = new String[] { " </dependencies>", "</blockinfo>" }; /** * Construct * @param file The File to create * @throws IOException If a problem writing output */ public XinfoHelper(File file) throws IOException { m_output = new FileWriter(file); } /** * Write the header * @throws IOException If a problem writing output */ public void writeHeader() throws IOException { for (int i = 0; i < HEADER.length; i++) { m_output.write(HEADER[i] + "\n"); } } /** * Write the Service Lines * @param service The service name * @throws IOException If a problem writing output */ public void writeServiceLines(String service) throws IOException { for (int i = 0; i < SERVICE_LINES.length; i++) { String line = SERVICE_LINES[i]; int ix = line.indexOf("\"@SERVICE-CLASS@\""); if (ix != -1) { m_output.write( line.substring(0, ix) + service + line.substring(ix + "\"@SERVICE-CLASS@\"".length(), line.length()) + "\n"); } else { m_output.write(line + "\n"); } } } /** * Write the mid section * @throws IOException If a problem writing output */ public void writeMidSection() throws IOException { for (int i = 0; i < MID_SECTION.length; i++) { m_output.write(MID_SECTION[i] + "\n"); } } /** * Write Dependency Lines * @param dependency The Dependency * @throws IOException If a problem writing output */ public void writeDependencyLines(String dependency) throws IOException { for (int i = 0; i < DEPENDENCY_SECTION.length; i++) { String line = DEPENDENCY_SECTION[i]; int ix = line.indexOf("\"@SERVICE-CLASS@\""); if (ix != -1) { m_output.write( line.substring(0, ix) + dependency + line.substring(ix + "\"@SERVICE-CLASS@\"".length(), line.length()) + "\n"); } else { m_output.write(line + "\n"); } } } /** * Write footer * @throws IOException If a problem writing output */ public void writeFooter() throws IOException { for (int i = 0; i < FOOTER.length; i++) { m_output.write(FOOTER[i] + "\n"); } } /** * Close the file. * @throws IOException If a problem writing output */ public void close() throws IOException { m_output.close(); } } 1.1 jakarta-avalon-excalibur/metagenerate/src/test/org/apache/avalon/excalibur/metagenerate/IntegrationTestCase.java Index: IntegrationTestCase.java =================================================================== /* * Created by IntelliJ IDEA. * User: Administrator * Date: 28-Sep-02 * Time: 11:13:36 * To change template for new class use * Code Style | Class Templates options (Tools | IDE Options). */ package org.apache.avalon.excalibur.metagenerate; import junit.framework.TestCase; import java.io.FileReader; import java.io.File; import java.io.LineNumberReader; import java.io.FileNotFoundException; public class IntegrationTestCase extends TestCase { public IntegrationTestCase(String name) { super(name); } public void testBlockInfoOutput() throws Exception { String fileName = "org/apache/avalon/excalibur/metagenerate/TestBlock.xinfo"; fileName.replace('\\',File.separatorChar); fileName.replace('/',File.separatorChar); LineNumberReader reader = new LineNumberReader(new FileReader(fileName)); String line = reader.readLine(); int ix =0; while (line != null) { assertEquals("Line not expected", line.trim(), XINFO[ix].trim()); ix++; line = reader.readLine(); } } public void testNonBlockInfoOutput() throws Exception { String fileName = "org/apache/avalon/excalibur/metagenerate/TestNonBlock.xinfo"; fileName.replace('\\',File.separatorChar); fileName.replace('/',File.separatorChar); try { new LineNumberReader(new FileReader(fileName)); fail("Non Block should not generate an xinfo file"); } catch (FileNotFoundException e) { // expected. } } private static final String XINFO[] = new String[] { " <?xml version=\"1.0\"?>", " <!DOCTYPE blockinfo PUBLIC \"-//PHOENIX/Block Info DTD Version 1.0//EN\"", " \"http://jakarta.apache.org/avalon/dtds/phoenix/blockinfo_1_0.dtd\">", "", " <blockinfo>", "", " <!-- section to describe block -->", " <block>", " <version>1.0</version>", " </block>", "", " <!-- services that are offered by this block -->", " <services>", " <service name=\"blah.BlahService\"/>", " </services>", "", " <!-- interfaces that may be exported to manange this block -->", " <management-access-points>", " </management-access-points>", "", " <!-- services that are required by this block -->", " <dependencies>", " <dependency>", " <service name=\"blah.OtherBlahService\"/>", " </dependency>", " </dependencies>", " </blockinfo>" }; } 1.1 jakarta-avalon-excalibur/metagenerate/src/test/org/apache/avalon/excalibur/metagenerate/TestBlock.java Index: TestBlock.java =================================================================== /* * 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.avalon.excalibur.metagenerate; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.Serviceable; /** * Blah! * * @phoenix:block * @phoenix:service name="blah.BlahService" * */ public class TestBlock implements Serviceable { /** * @phoenix:dependency name="blah.OtherBlahService" */ public void service( final ServiceManager serviceManager ) throws ServiceException { } } 1.1 jakarta-avalon-excalibur/metagenerate/src/test/org/apache/avalon/excalibur/metagenerate/TestNonBlock.java Index: TestNonBlock.java =================================================================== /* * 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.avalon.excalibur.metagenerate; public class TestNonBlock { public void service() { } } 1.1 jakarta-avalon-excalibur/metagenerate/src/xdocs/index.xml Index: index.xml =================================================================== <?xml version="1.0"?> <document> <properties> <title>Excalibur MetaGenerate - Overview</title> <author email="[EMAIL PROTECTED]">Paul Hammant</author> </properties> <body> <section name="Introduction"> <p> Meta Generate generates meta-info for Phoenix, Fortress etc. </p> </section> </body> </document> 1.1 jakarta-avalon-excalibur/metagenerate/src/xdocs/menu.xml Index: menu.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <project href="http://jakarta.apache.org/avalon/excalibur/metagenerate/" name="Excalibur MetaGenerate"> <title>Excalibur MetaGenerate</title> <body> <item href="/../index.html" name="Back to Excalibur"/> <menu name="About"> <item name="Overview" href="index.html"/> <item name="Excalibur Home" href="http://jakarta.apache.org/avalon/excalibur/index.html"/> <item name="Download" href="http://jakarta.apache.org/builds/jakarta-avalon-excalibur/release"/> <item name="API Docs" href="api/"/> </menu> </body> </project>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>