cvs commit: spice/sandbox/repository/componenthaus/src/java/org/componenthaus/ant NotAPublicInterfaceBuildException.java ComponentMetadataTask.java NotAnInterfaceBuildException.java

Mike Hogan <[email protected]> Wed, 05 Nov 2003 11:35:50 -0800
Newsgroups gmane.comp.java.spice.cvs
Message-ID <[email protected]>
hogie       03/11/05 11:35:50

  Modified:    sandbox/repository/componenthaus/src/java/org/componenthaus/ant
                        ComponentMetadataTask.java
  Added:       sandbox/repository/componenthaus/src/java/org/componenthaus/ant
                        NotAPublicInterfaceBuildException.java
  Removed:     sandbox/repository/componenthaus/src/java/org/componenthaus/ant
                        NotAnInterfaceBuildException.java
  Log:
  * Can have classes as service interfaces
   * Can have more than one service interface per submission
  
  Revision  Changes    Path
  1.3       +46 -32    spice/sandbox/repository/componenthaus/src/java/org/componenthaus/ant/ComponentMetadataTask.java
  
  Index: ComponentMetadataTask.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/repository/componenthaus/src/java/org/componenthaus/ant/ComponentMetadataTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ComponentMetadataTask.java	3 Nov 2003 21:15:29 -0000	1.2
  +++ ComponentMetadataTask.java	5 Nov 2003 19:35:50 -0000	1.3
  @@ -16,8 +16,10 @@
   import java.util.ArrayList;
   import java.util.Arrays;
   import java.util.List;
  +import java.util.Iterator;
   
   //TODO Accept multiple interface names
  +
   public class ComponentMetadataTask extends Task {
       static final String metadataFilename = "metadata.xml";
   
  @@ -29,7 +31,7 @@
           interfaceNames = new ArrayList();
       }
   
  -    public ComponentMetadataTask(String []interfaceNames, String sourceDirectory, String targetdirectory) {
  +    public ComponentMetadataTask(String[] interfaceNames, String sourceDirectory, String targetdirectory) {
           this();
           this.interfaceNames = Arrays.asList(interfaceNames);
           this.sourceDirectory = sourceDirectory;
  @@ -37,7 +39,7 @@
       }
   
       public ComponentMetadataTask(String interfacename, String sourceDirectory, String targetdirectory) {
  -        this(new String[]{interfacename},sourceDirectory,targetdirectory);
  +        this(new String[]{interfacename}, sourceDirectory, targetdirectory);
       }
   
       public InterfaceSpec createInterface() {
  @@ -58,26 +60,26 @@
       }
   
       private void assertParametersAreOk() {
  -        if ( interfaceNames.size() == 0 || interfaceNames.get(0) == null) {
  +        if (interfaceNames.size() == 0 || interfaceNames.get(0) == null) {
               throw new NoInterfacesSpecifiedBuildException();
           }
  -        assertNotNull(sourceDirectory,"sourceDirectory");
  -        assertNotNull(targetDirectory,"targetDirectory");
  +        assertNotNull(sourceDirectory, "sourceDirectory");
  +        assertNotNull(targetDirectory, "targetDirectory");
           assertDirectoryIsOk(new File(sourceDirectory), sourceDirectory);
           assertDirectoryIsOk(new File(targetDirectory), targetDirectory);
       }
   
       private void assertNotNull(String property, String propertyName) {
  -        if ( property == null ) {
  +        if (property == null) {
               throw new ParameterNotSpecifiedBuildException(propertyName);
           }
       }
   
       private void assertDirectoryIsOk(File dir, String directoryName) {
  -        if ( !dir.exists()) {
  +        if (!dir.exists()) {
               throw new DirectoryDoesNotExistBuildException(directoryName);
           }
  -        if ( ! dir.isDirectory()) {
  +        if (!dir.isDirectory()) {
               throw new NotADirectoryBuildException(directoryName);
           }
       }
  @@ -85,29 +87,49 @@
       private void doExecute() {
           JavaDocBuilder builder = new JavaDocBuilder();
           builder.addSourceTree(new File(sourceDirectory));
  -        final String interfaceName = interfaceNames.size() > 0 ? (String) interfaceNames.iterator().next() : null;  //Just for now, until I deal properly with many interfaces
  +        final ComponentMetadata componentMetadata = new ComponentMetadata();
  +        addMetadataForInterfaces(builder, componentMetadata);
  +
  +        File metadataFile = new File(targetDirectory, metadataFilename);
  +        try {
  +            metadataFile.createNewFile();
  +        } catch (IOException e) {
  +            throw new IOBuildException(e);
  +        }
  +
  +        try {
  +            FileWriter writer = new FileWriter(metadataFile);
  +            writer.write(componentMetadata.toXml());
  +            writer.close();
  +        } catch (IOException e) {
  +            throw new IOBuildException(e);
  +        }
  +    }
  +
  +    private void addMetadataForInterfaces(JavaDocBuilder builder, final ComponentMetadata componentMetadata) {
  +        for (Iterator i = interfaceNames.iterator(); i.hasNext();) {
  +            final String interfaceName = (String) i.next();
  +            InterfaceMetadata interfaceMetadata = getInterfaceMetadata(builder, interfaceName);
  +            componentMetadata.addInterface(interfaceMetadata);
  +        }
  +    }
  +
  +    private InterfaceMetadata getInterfaceMetadata(JavaDocBuilder builder, final String interfaceName) {
           final JavaClass interfaceAsClass = builder.getClassByName(interfaceName);
  -        if ( interfaceAsClass == null ) {
  +        if (interfaceAsClass == null) {
               throw new NoSuchJavaSourceFileBuildException(interfaceName);
           }
           final String javadoc = interfaceAsClass.getComment();
  -        if ( javadoc == null || "".equals(javadoc)) {
  +        if (javadoc == null || "".equals(javadoc)) {
               throw new NoJavadocBuildException(interfaceName);
           }
  -        if ( ! interfaceAsClass.isInterface() ) {
  -            throw new NotAnInterfaceBuildException(interfaceName);
  -        }
  -
  -        File metadataFile = new File(targetDirectory,metadataFilename);
  -        try {
  -            metadataFile.createNewFile();
  -        } catch (IOException e) {
  -            throw new IOBuildException(e);
  +        if (!interfaceAsClass.isPublic()) {
  +            throw new NotAPublicInterfaceBuildException(interfaceName);
           }
   
           String source = null;
           try {
  -            source = loadFile(new File(sourceDirectory,asDirectory(interfaceName) + ".java"));
  +            source = loadFile(new File(sourceDirectory, asDirectory(interfaceName) + ".java"));
           } catch (IOException e) {
               throw new IOBuildException(e);
           }
  @@ -116,26 +138,18 @@
                   interfaceAsClass.getName(),
                   interfaceAsClass.getComment(),
                   source);
  -        ComponentMetadata componentMetadata = new ComponentMetadata();
  -        componentMetadata.addInterface(interfaceMetadata);
  -        try {
  -            FileWriter writer = new FileWriter(metadataFile);
  -            writer.write(componentMetadata.toXml());
  -            writer.close();
  -        } catch (IOException e) {
  -            throw new IOBuildException(e);
  -        }
  +        return interfaceMetadata;
       }
   
       private String asDirectory(String javaPackageName) {
  -        return javaPackageName.replaceAll("\\.","/"); //File.separator does not work here for some reason
  +        return javaPackageName.replaceAll("\\.", "/"); //File.separator does not work here for some reason
       }
   
       private String loadFile(File file) throws IOException {
           StringWriter writer = new StringWriter();
           BufferedReader reader = new BufferedReader(new FileReader(file));
           String line = reader.readLine();
  -        while ( line != null ) {
  +        while (line != null) {
               writer.write(line + "\n");
               line = reader.readLine();
           }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/ant/NotAPublicInterfaceBuildException.java
  
  Index: NotAPublicInterfaceBuildException.java
  ===================================================================
  package org.componenthaus.ant;
  
  import org.apache.tools.ant.BuildException;
  
  public class NotAPublicInterfaceBuildException extends BuildException {
      private final String interfaceName;
  
      public NotAPublicInterfaceBuildException(String interfaceName) {
          super("Class file " + interfaceName + " is not a service interface");
          this.interfaceName = interfaceName;
      }
  
      public String getInterfaceName() {
          return interfaceName;
      }
  }
  
  
  


-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?   SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/