cvs commit: spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent CarSubmissionManager.java ComponentSubmissionException.java ComponentSubmissionManager.java DefaultCarSubmissionManager.java DefaultComponentSubmissionManager.java MetadataConverter.java MetadataConverterImpl.java SubmitComponentController.java DefaultSubmissionManager.java SubmissionManager.java

Mike Hogan <[email protected]> Sun, 09 Nov 2003 06:00:49 -0800
Newsgroups gmane.comp.java.spice.cvs
Message-ID <[email protected]>
hogie       03/11/09 06:00:49

  Modified:    sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent
                        SubmitComponentController.java
  Added:       sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent
                        CarSubmissionManager.java
                        ComponentSubmissionException.java
                        ComponentSubmissionManager.java
                        DefaultCarSubmissionManager.java
                        DefaultComponentSubmissionManager.java
                        MetadataConverter.java MetadataConverterImpl.java
  Removed:     sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent
                        DefaultSubmissionManager.java
                        SubmissionManager.java
  Log:
  If components are classes, show as little of the class as necessary to show service offering
  
  Revision  Changes    Path
  1.9       +2 -2      spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/SubmitComponentController.java
  
  Index: SubmitComponentController.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/SubmitComponentController.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SubmitComponentController.java	26 Oct 2003 13:46:41 -0000	1.8
  +++ SubmitComponentController.java	9 Nov 2003 14:00:49 -0000	1.9
  @@ -23,10 +23,10 @@
        */
       public static final String SUBMISSIONS_DIRECTORY_NAME = "submissions";
   
  -    private final SubmissionManager submissionManager;
  +    private final CarSubmissionManager submissionManager;
   
       public SubmitComponentController(ViewConfiguration viewConfiguration,
  -                                     SubmissionManager submissionManager) {
  +                                     CarSubmissionManager submissionManager) {
           setCommandClass(Object.class);
           setSuccessView(viewConfiguration.getSuccessView());
           setFormView(viewConfiguration.getFormView());
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/CarSubmissionManager.java
  
  Index: CarSubmissionManager.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import java.io.File;
  import java.io.IOException;
  
  /**
   * Given a CAR file on the serverside that contains a component submission,
   * crack open that file and process the contents.
   */
  public interface CarSubmissionManager {
      String METADATA_FILE_JAR_ENTRY_NAME = "metadata.xml";
      String DISTRIBUTION_DIRECTORY_JAR_ENTRY_NAME = "dist/";
      String JAR_REPOSITORY_DIRECTORY = "repository";
  
      public void submit(File jarFile) throws Exception;
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/ComponentSubmissionException.java
  
  Index: ComponentSubmissionException.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  public class ComponentSubmissionException extends Exception {
      public ComponentSubmissionException(String message, Exception e) {
          super(message,e);
      }
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/ComponentSubmissionManager.java
  
  Index: ComponentSubmissionManager.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import org.componenthaus.ant.metadata.ComponentMetadata;
  
  public interface ComponentSubmissionManager {
      void submit(ComponentMetadata componentMetadata) throws ComponentSubmissionException;
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/DefaultCarSubmissionManager.java
  
  Index: DefaultCarSubmissionManager.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import org.componenthaus.ant.metadata.ComponentMetadata;
  import org.componenthaus.repository.api.Component;
  import org.componenthaus.repository.impl.ComponentFactory;
  import org.componenthaus.repository.services.CommandRegistry;
  import org.componenthaus.util.file.FileManager;
  import org.prevayler.Prevayler;
  
  import java.io.ByteArrayOutputStream;
  import java.io.File;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.util.Collection;
  import java.util.Enumeration;
  import java.util.Iterator;
  import java.util.jar.JarFile;
  import java.util.zip.ZipEntry;
  
  public class DefaultCarSubmissionManager implements CarSubmissionManager {
      private final CommandRegistry commandRegistry;
      private final Prevayler prevayler;
      private final FileManager fileManager;
      private final SubmissionMonitor submissionMonitor;
      private final MetadataConverter metadataConverter;
  
      public DefaultCarSubmissionManager(CommandRegistry commandRegistry,
                                      FileManager fileManager,
                                      SubmissionMonitor submissionMonitor,
                                      Prevayler prevayler,
                                      MetadataConverter metadataConverter) {
          this.commandRegistry = commandRegistry;
          this.prevayler = prevayler;
          this.fileManager = fileManager;
          this.submissionMonitor = submissionMonitor;
          this.metadataConverter = metadataConverter;
      }
  
      public void submit(File filename) throws Exception {
          System.out.println("Called");
          JarFile jarFile = new JarFile(filename);
          ZipEntry metadataFile = jarFile.getEntry(CarSubmissionManager.METADATA_FILE_JAR_ENTRY_NAME);
          if ( metadataFile == null ) {
              throw new MissingJarEntryException(CarSubmissionManager.METADATA_FILE_JAR_ENTRY_NAME);
          }
          ZipEntry distribution = getDistributionEntry(jarFile);
          if ( distribution == null ) {
              throw new MissingJarEntryException(CarSubmissionManager.DISTRIBUTION_DIRECTORY_JAR_ENTRY_NAME);
          }
          System.out.println("About to handle metadata");
          Collection components = handleMetadata(jarFile, metadataFile);
          System.out.println("Meta data done");
          File jarInRepository = handleDistribution(jarFile,distribution);
          for(Iterator i=components.iterator();i.hasNext();) {
              Component component = (Component) i.next();
              prevayler.executeCommand(commandRegistry.createRegisterDownloadableCommand(component.getId(),jarInRepository));
              submissionMonitor.componentSubmitted(component,jarInRepository);
          }
      }
  
      private File handleDistribution(JarFile jarFile, ZipEntry distribution) throws IOException {
          String jarName = getJarName(distribution);
          String projectName = getProjectName(jarName);
          File destDirectory = new File(CarSubmissionManager.JAR_REPOSITORY_DIRECTORY + "/" + projectName + "/jars");
          destDirectory.mkdirs();
          File target = new File(destDirectory,jarName);
          fileManager.copy(jarFile.getInputStream(distribution),target);
          return target;
      }
  
      private String getProjectName(String jarName) {
          int indexOfMinus = jarName.indexOf("-");
          if ( indexOfMinus == -1 ) {
              throw new IllegalJarNameException(jarName);
          }
          return jarName.substring(0,indexOfMinus);
      }
  
      private String getJarName(ZipEntry distribution) {
          final String name = distribution.getName();
          return name.substring(CarSubmissionManager.DISTRIBUTION_DIRECTORY_JAR_ENTRY_NAME.length(),name.length());
      }
  
  
      private Collection handleMetadata(JarFile jarFile, ZipEntry metadataFile) throws Exception {
          jarFile.getInputStream(metadataFile);
          final byte[] bytes = getJarEntryBytes(jarFile, metadataFile);
  
          final String metadata = new String(bytes);
          final ComponentMetadata componentMetadata = ComponentMetadata.fromXml(metadata);
          return metadataConverter.convert(componentMetadata);
      }
  
      private ZipEntry getDistributionEntry(JarFile jarFile) {
          ZipEntry result = null;
          Enumeration entries = jarFile.entries();
          final String directory = CarSubmissionManager.DISTRIBUTION_DIRECTORY_JAR_ENTRY_NAME;
          while(result == null && entries.hasMoreElements()) {
              ZipEntry entry = (ZipEntry) entries.nextElement();
              if ( entry.getName().startsWith(directory) && entry.getName().length() > directory.length()) {
                  result = entry;
              }
          }
          return result;
      }
  
      private byte[] getJarEntryBytes(JarFile jarFile, ZipEntry entry) throws IOException {
          final InputStream in = jarFile.getInputStream(entry);
          final ByteArrayOutputStream bytes = new ByteArrayOutputStream(in.available());
          copyStream(in, bytes);
          in.close();
          bytes.close();
          return bytes.toByteArray();
      }
  
      public void copyStream(InputStream in, OutputStream out) throws IOException {
          byte[] buf = new byte[1024];
          int i = 0;
          while ((i = in.read(buf)) != -1) {
              out.write(buf, 0, i);
          }
      }
  
      public static interface SubmissionMonitor {
          void componentSubmitted(Component component, File distribution);
      }
  
      public static final class NullSubmissionMonitor implements SubmissionMonitor {
          public void componentSubmitted(Component component, File distribution) {
          }
      }
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/DefaultComponentSubmissionManager.java
  
  Index: DefaultComponentSubmissionManager.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import org.componenthaus.ant.metadata.ComponentMetadata;
  import org.componenthaus.repository.services.CommandRegistry;
  import org.componenthaus.repository.api.Component;
  import org.prevayler.Prevayler;
  
  import java.util.Collection;
  import java.util.Iterator;
  
  public class DefaultComponentSubmissionManager implements ComponentSubmissionManager {
      private final MetadataConverter metadataConverter;
      private final Prevayler prevayler;
      private CommandRegistry commandRegistry;
  
      public DefaultComponentSubmissionManager(MetadataConverter metadataConverter, Prevayler prevayler, CommandRegistry commandRegistry) {
          this.metadataConverter = metadataConverter;
          this.prevayler = prevayler;
          this.commandRegistry = commandRegistry;
      }
  
      public void submit(ComponentMetadata componentMetadata) throws ComponentSubmissionException {
          if ( componentMetadata == null ) {
              throw new IllegalArgumentException("componentMetadata cannot be null");
          }
          if ( componentMetadata.numInterfaces() <= 0 ) {
              throw new IllegalArgumentException("componentMetadata must contain at least one service interface");
          }
          Collection components = metadataConverter.convert(componentMetadata);
          for(Iterator i=components.iterator();i.hasNext();) {
              try {
                  prevayler.executeCommand(commandRegistry.createSubmitComponentCommand((Component)i.next()));
              } catch (Exception e) {
                  throw new ComponentSubmissionException("Exception submitting component",e);
              }
          }
      }
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/MetadataConverter.java
  
  Index: MetadataConverter.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import org.componenthaus.ant.metadata.ComponentMetadata;
  
  import java.util.Collection;
  
  public interface MetadataConverter {
      Collection convert(ComponentMetadata componentMetadata);
  }
  
  
  
  1.1                  spice/sandbox/repository/componenthaus/src/java/org/componenthaus/usecases/submitcomponent/MetadataConverterImpl.java
  
  Index: MetadataConverterImpl.java
  ===================================================================
  package org.componenthaus.usecases.submitcomponent;
  
  import org.componenthaus.ant.metadata.ComponentMetadata;
  import org.componenthaus.ant.metadata.InterfaceMetadata;
  import org.componenthaus.ant.ClassAbbreviator;
  import org.componenthaus.repository.api.Component;
  import org.componenthaus.repository.impl.ComponentFactory;
  
  import java.util.Collection;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.Collections;
  import java.io.StringReader;
  
  import com.thoughtworks.qdox.JavaDocBuilder;
  import com.thoughtworks.qdox.model.JavaClass;
  
  public class MetadataConverterImpl implements MetadataConverter {
      private final ComponentFactory componentFactory;
      private final ClassAbbreviator classAbbreviator;
  
      public MetadataConverterImpl(ComponentFactory componentFactory, ClassAbbreviator classAbbreviator) {
          this.componentFactory = componentFactory;
          this.classAbbreviator = classAbbreviator;
      }
  
      public Collection convert(ComponentMetadata componentMetadata) {
          if ( componentMetadata == null ) {
              throw new IllegalArgumentException("componentMetadata cannot be null");
          }
          if ( componentMetadata.numInterfaces() <= 0 ) {
              throw new IllegalArgumentException("componentMetadata must contain at least one service interface");
          }
          Collection result = new ArrayList();
          for(Iterator i=componentMetadata.getInterfaces();i.hasNext();) {
              result.add(createComponent((InterfaceMetadata)i.next()));
          }
          return result;
      }
  
      private Component createComponent(InterfaceMetadata interfaceMetadata) {
          System.out.println("Adding interface " + interfaceMetadata.getFullyQualifiedName());
          String source = null;
          if ( interfaceMetadata.isClass()) {
              StringBuffer result = new StringBuffer();
              JavaDocBuilder builder = new JavaDocBuilder();
              builder.addSource(new StringReader(interfaceMetadata.getSource()));
              JavaClass aClass = builder.getClassByName(interfaceMetadata.getFullyQualifiedName());
              assert aClass != null;
              System.out.println("Class = " + aClass);
              classAbbreviator.abbreviate(aClass, result);
              source = result.toString();
              System.out.println("Is a class, formatted the source to be " + source);
          } else {
              System.out.println(interfaceMetadata.getName() + " is an interface");
              source = interfaceMetadata.getSource();
          }
          return componentFactory.createComponent(
                  interfaceMetadata.getFullyQualifiedName(),
                  "1.0",
                  Collections.EMPTY_LIST,
                  interfaceMetadata.getShortDescription(),
                  interfaceMetadata.getJavadoc(),
                  source);
      }
  }
  
  
  


-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/