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