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/