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:[EMAIL PROTECTED]">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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to