You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by df...@apache.org on 2004/05/24 15:33:13 UTC
cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor ValueDescriptorManager.java
dflorey 2004/05/24 06:33:13
Modified: proposals/projector/src/java/org/apache/slide/projector/engine
ProcessorManager.java ApplicationManager.java
proposals/projector/src/java/org/apache/slide/projector/descriptor
ValueDescriptorManager.java
Added: proposals/projector/src/java/org/apache/slide/projector/engine
ProjectorClassLoader.java
Removed: proposals/projector/src/java/org/apache/slide/projector/engine
ProcessorClassLoader.java
Log:
Resource types extendable via application management
Revision Changes Path
1.10 +1 -1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessorManager.java
Index: ProcessorManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessorManager.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ProcessorManager.java 18 May 2004 11:37:24 -0000 1.9
+++ ProcessorManager.java 24 May 2004 13:33:13 -0000 1.10
@@ -49,7 +49,7 @@
private Map configuredProcessors = new HashMap(128);
private Map configurationListeners = new HashMap(128);
private Map processorDescriptors = new HashMap(256); // URI -> ProcessorDescriptor
- private ProcessorClassLoader processorClassLoader = new ProcessorClassLoader(this.getClass().getClassLoader(), new URIResource(Constants.CLASSES_DIR));
+ private ProjectorClassLoader processorClassLoader = new ProjectorClassLoader(this.getClass().getClassLoader(), new URIResource(Constants.CLASSES_DIR));
private ProcessorManager() {
}
1.5 +14 -1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ApplicationManager.java
Index: ApplicationManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ApplicationManager.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ApplicationManager.java 17 May 2004 15:22:03 -0000 1.4
+++ ApplicationManager.java 24 May 2004 13:33:13 -0000 1.5
@@ -7,6 +7,8 @@
import org.apache.slide.projector.*;
import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.connector.Subscriber;
+import org.apache.slide.projector.descriptor.AbstractValueDescriptorFactory;
+import org.apache.slide.projector.descriptor.ValueDescriptorManager;
import org.apache.slide.projector.i18n.MessageManager;
import org.apache.slide.projector.resource.ArrayResource;
import org.apache.slide.projector.resource.StreamableResource;
@@ -32,6 +34,7 @@
private static ApplicationManager applicationManager;
private List applicationListeners = new ArrayList();
private Map installedApplications = new HashMap(); // URI -> Application
+ private ProjectorClassLoader factoryClassLoader = new ProjectorClassLoader(this.getClass().getClassLoader(), new URIResource(Constants.CLASSES_DIR));
private ApplicationManager() {
logger.log(Level.INFO, "Starting projector...");
@@ -194,7 +197,7 @@
installedApplications.remove(application.getUri());
}
- static private final class ConfigurationHandler extends DefaultSimpleImportHandler {
+ private final class ConfigurationHandler extends DefaultSimpleImportHandler {
private Application application;
private URI applicationUri;
@@ -215,6 +218,16 @@
application.setVendor(leadingCDdata);
} else if ( path.matches("description") ) {
application.setDescription(leadingCDdata);
+ } else if ( path.matches("resource-types/resource-type") ) {
+ String resourceTypeName = attributes.getValue("name");
+ String clazz = attributes.getValue("class");
+ try {
+ AbstractValueDescriptorFactory descriptorFactory = (AbstractValueDescriptorFactory)factoryClassLoader.loadClass(clazz).getConstructor(new Class[0]).newInstance(new Object[0]);
+ ValueDescriptorManager.getInstance().registerDescriptorFactory(descriptorFactory);
+ logger.log(Level.INFO, "Successfully registered descriptor factory " + clazz);
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, "Descriptor factory " + clazz + " could not loaded!", e);
+ }
} else if ( path.matches("content/processors") ) {
String uri = attributes.getValue("uri");
application.addContent(Application.PROCESSORS, new URIResource(applicationUri+attributes.getValue("uri")));
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProjectorClassLoader.java
Index: ProjectorClassLoader.java
===================================================================
package org.apache.slide.projector.engine;
import org.apache.slide.projector.Constants;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.URI;
import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.resource.StreamableResource;
import org.apache.slide.projector.resource.URIResource;
import org.apache.slide.projector.util.StreamHelper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ProjectorClassLoader extends ClassLoader {
URI uri;
public ProjectorClassLoader(ClassLoader parent, URI uri) {
super(parent);
this.uri = uri;
}
public Class findClass(String name) throws ClassNotFoundException {
Context context = new SystemContext();
try {
URI rendererUri = new URIResource(Constants.REPOSITORY_DOMAIN+uri.toString() + name.replace('.', '/') + ".class");
StreamableResource resource = ((StreamableResource)ConnectorFactory.getConnector().getResource(rendererUri, context.getCredentials()));
if ( resource == null ) {
throw new ClassNotFoundException("Class " + name + " at URI '"+rendererUri+"' not found in collection '" + uri + "'!");
}
InputStream inputStream = resource.getInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);
StreamHelper.copy(inputStream, outputStream);
byte[] b = outputStream.toByteArray();
return defineClass(name, b, 0, b.length);
} catch (IOException e) {
throw new ClassNotFoundException("Class " + name + " not found in collection " + uri + "!", e);
}
}
}
1.2 +8 -21 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ValueDescriptorManager.java
Index: ValueDescriptorManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ValueDescriptorManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ValueDescriptorManager.java 24 May 2004 12:33:40 -0000 1.1
+++ ValueDescriptorManager.java 24 May 2004 13:33:13 -0000 1.2
@@ -35,32 +35,19 @@
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
*/
public class ValueDescriptorManager {
- private final static ValueDescriptorManager adapterManager = new ValueDescriptorManager();
- private List registeredAdapters = new ArrayList();
-
- private ValueDescriptorManager() {
- registerAdapter(new ArrayValueDescriptorFactory());
- registerAdapter(new BooleanValueDescriptorFactory());
- registerAdapter(new LocaleValueDescriptorFactory());
- registerAdapter(new MapValueDescriptorFactory());
- registerAdapter(new MessageValueDescriptorFactory());
- registerAdapter(new NumberValueDescriptorFactory());
- registerAdapter(new ResourceValueDescriptorFactory());
- registerAdapter(new StringValueDescriptorFactory());
- registerAdapter(new URIValueDescriptorFactory());
- registerAdapter(new XMLValueDescriptorFactory());
- }
+ private final static ValueDescriptorManager valueDescriptorManager = new ValueDescriptorManager();
+ private List registeredDescriptorFactories = new ArrayList();
public static ValueDescriptorManager getInstance() {
- return adapterManager;
+ return valueDescriptorManager;
}
- public void registerAdapter(AbstractValueDescriptorFactory adapter) {
- registeredAdapters.add(adapter);
+ public void registerDescriptorFactory(AbstractValueDescriptorFactory factory) {
+ registeredDescriptorFactories.add(factory);
}
public ValueDescriptor loadValueDescriptor(Element element) {
- for ( Iterator i = registeredAdapters.iterator(); i.hasNext(); ) {
+ for ( Iterator i = registeredDescriptorFactories.iterator(); i.hasNext(); ) {
AbstractValueDescriptorFactory adapter = (AbstractValueDescriptorFactory)i.next();
ValueDescriptor loadedValueDescriptor = adapter.loadIfValueDescriptorMatches(element);
if ( loadedValueDescriptor != null ) return loadedValueDescriptor;
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org