dflorey     2004/05/11 08:23:43

  Modified:    proposals/projector/src/java/org/apache/slide/projector/engine
                        ProcessServlet.java ProcessorManager.java
               proposals/projector/src/java/org/apache/slide/projector
                        Constants.java
               proposals/projector/src/java/org/apache/slide/projector/connector
                        Connector.java
               proposals/projector/src/java/org/apache/slide/projector/connector/webdav
                        WebdavConnector.java
  Added:       proposals/projector/src/java/org/apache/slide/projector/engine
                        PackageManager.java
  Log:
  Introduction of PackageManager to handle different applications
  
  Revision  Changes    Path
  1.3       +1 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java
  
  Index: ProcessServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProcessServlet.java       3 May 2004 14:28:36 -0000       1.2
  +++ ProcessServlet.java       11 May 2004 15:23:43 -0000      1.3
  @@ -29,7 +29,7 @@
       private final static String allowedChars = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       
       public void service(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
  -        Context context = new HttpContext(request, response);
  +     Context context = new HttpContext(request, response);
           URI uri = new 
URIResource(request.getRequestURI().substring(request.getContextPath().length()+request.getServletPath().length()));
           try {
               Result result;
  
  
  
  1.3       +18 -26    
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProcessorManager.java     5 May 2004 09:58:08 -0000       1.2
  +++ ProcessorManager.java     11 May 2004 15:23:43 -0000      1.3
  @@ -28,8 +28,6 @@
    * The ProcessorManager is responsible for loading processors and their
    * configuration. Because every processor is located via its URI, it might be
    * possible to handle different versions of the same processor.
  - * FIXME: The ProcessorManager locates the processor class files by searching the
  - * content repository. There is no need to register them manually.
    * They are reloaded if an event occurs that indicates, that the class or 
configuration has changed
    * or was updated.
    */
  @@ -52,31 +50,25 @@
   
       private ProcessorManager() {
           configure();
  -        ConnectorFactory.getConnector().subscribe("Update", Constants.CONFIG_DIR + 
PROCESSOR_CONFIG,
  -                0, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
  -                new Subscriber() {
  -                    public void notify(Map information) {
  -                        logger.log(Level.INFO, "Reloading processor manager");
  -                        configure();
  -                    }
  -                }, Constants.CREDENTIALS);
       }
  -
  -    private void configure() {
  -        // The processors should be queried via searching the content repository. 
There is no need for a manual configuration.
  -        // FIXME: This is needed until processors can be found via content 
repository search! Type search is not available yet...
  -        processorMap = new HashMap(256);
  -        configuredProcessors = new ArrayList();
  -        processorDescriptors = new ArrayList();
  -        try {
  -            InputStream configuration = 
((StreamableResource)ConnectorFactory.getConnector().getResource(new 
URIResource(Constants.CONFIG_DIR + PROCESSOR_CONFIG), 
Constants.CREDENTIALS)).getInputStream();
  -            SimpleImporter importer = new SimpleImporter();
  -            ConfigurationHandler handler = new ConfigurationHandler();
  -            importer.addSimpleImportHandler(handler);
  -            importer.parse(new InputSource(configuration));
  -        } catch (Exception exception) {
  -            logger.log(Level.SEVERE, "Error while parsing configuration", 
exception);
  -        }
  +     
  +    void configure() {
  +     processorMap = new HashMap(256);
  +     configuredProcessors = new ArrayList();
  +     processorDescriptors = new ArrayList();
  +     try {
  +             List processorConfigurations = 
PackageManager.getInstance().getProcessorConfigurations();
  +             for ( Iterator i = processorConfigurations.iterator(); i.hasNext(); ) {
  +                     URI configurationUri = (URI)i.next();
  +                     InputStream configuration = 
((StreamableResource)ConnectorFactory.getConnector().getResource(configurationUri, 
Constants.CREDENTIALS)).getInputStream();
  +                     SimpleImporter importer = new SimpleImporter();
  +                     ConfigurationHandler handler = new ConfigurationHandler();
  +                     importer.addSimpleImportHandler(handler);
  +                     importer.parse(new InputSource(configuration));
  +             }
  +     } catch (Exception exception) {
  +             logger.log(Level.SEVERE, "Error while parsing configuration", 
exception);
  +     }
       }
   
       public static ProcessorManager getInstance() {
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/PackageManager.java
  
  Index: PackageManager.java
  ===================================================================
  package org.apache.slide.projector.engine;
  
  import de.zeigermann.xml.simpleImporter.DefaultSimpleImportHandler;
  import de.zeigermann.xml.simpleImporter.SimpleImporter;
  import de.zeigermann.xml.simpleImporter.SimplePath;
  
  import org.apache.slide.projector.*;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.connector.Subscriber;
  import org.apache.slide.projector.resource.ArrayResource;
  import org.apache.slide.projector.resource.StreamableResource;
  import org.apache.slide.projector.resource.URIResource;
  import org.xml.sax.InputSource;
  import org.xml.sax.helpers.AttributesImpl;
  
  import java.io.InputStream;
  import java.util.*;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  
  public class PackageManager implements Subscriber {
      private final static Logger logger = 
Logger.getLogger(PackageManager.class.getName());
  
      private final static String APPLICATION_CONFIG = "/application.xml";
  
      private static PackageManager packageManager = new PackageManager();
  
      static {
          ConnectorFactory.getConnector().subscribe("Update", 
Constants.APPLICATIONS_DIR, 1, Constants.SUBSCRIPTION_LIFETIME, 
Constants.NOTIFICATION_DELAY, packageManager, Constants.CREDENTIALS);
      }
  
      private List applications = new ArrayList();
  
      private PackageManager() {
                configure();
      }
  
        private void configure() {
                final Context context = new SystemContext();
          logger.log(Level.INFO, "Parsing application configurations");
          try {
                ArrayResource installedApplications = 
((ArrayResource)ConnectorFactory.getConnector().getChildren(new 
URIResource(Constants.APPLICATIONS_DIR), context.getCredentials())); 
                        Resource[] applicationDefinitions = 
installedApplications.getArray();
              SimpleImporter importer = new SimpleImporter();
                        for ( int i = 0; i < applicationDefinitions.length; i++ ) {
                                String applicationUri = 
applicationDefinitions[i].toString()+"/"; 
                                URI applicationDefinition = new 
URIResource(applicationUri+APPLICATION_CONFIG);
                    InputStream configuration = 
((StreamableResource)ConnectorFactory.getConnector().getResource(applicationDefinition,
 context.getCredentials())).getInputStream();
                    ConfigurationHandler handler = new 
ConfigurationHandler(applications, applicationUri);
                    importer.addSimpleImportHandler(handler);
                importer.parse(new InputSource(configuration));
                        }  
          } catch ( Exception exception ) {
              logger.log(Level.SEVERE, "Error while parsing package manager 
configuration", exception);
          }
        }       
  
      public static PackageManager getInstance() {
          return packageManager;
      }
  
      public void notify(Map information) {
          logger.log(Level.INFO, "Package manager received map='"+information+"'");
          configure();
     }
      
      public List getProcessorConfigurations() {
        List processorConfigurations = new ArrayList();
        for ( Iterator i = applications.iterator(); i.hasNext(); ) {
                Application application = (Application)i.next();
                processorConfigurations.addAll(application.getProcessors());
        }
        return processorConfigurations;
      }
      
      static class ConfigurationHandler extends DefaultSimpleImportHandler {
                private List applications;
                private Application application;
                private String applicationUri;
                
                public ConfigurationHandler(List applications, String applicationUri) {
                        this.applications = applications;
                        this.applicationUri = applicationUri;
                }
  
          public void startElement(SimplePath path, String name, AttributesImpl 
attributes, String leadingCDdata) {
              if (path.matches("application")) {
                                application = new Application();
              } else if ( path.matches("display-name") ) {
                                application.setDisplayName(leadingCDdata);             
         
              } else if ( path.matches("vendor") ) {
                                application.setVendor(leadingCDdata);                  
 
              } else if ( path.matches("description") ) {
                                application.setDescription(leadingCDdata);             
         
              } else if ( path.matches("content/processors") ) {
                String uri = attributes.getValue("uri"); 
                application.addProcessors(new URIResource(applicationUri+uri));        
         
                        ConnectorFactory.getConnector().subscribe("Update", uri, 0, 
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
                                new Subscriber() {
                                    public void notify(Map information) {
                                        logger.log(Level.INFO, "Reloading processor 
manager");
                                        ProcessorManager.getInstance().configure();
                                    }
                                }, Constants.CREDENTIALS);
              } else if ( path.matches("content/messages") ) {
                                application.addMessages(new 
URIResource(applicationUri+attributes.getValue("uri")));                    
              } else if ( path.matches("content/jobs") ) {
                                application.addJobs(new 
URIResource(applicationUri+attributes.getValue("uri")));                        
              }
          }
  
          public void endElement(SimplePath path, String name) {
              if (path.matches("application")) {
                                applications.add(application);
              }         
          }
      }
  
        static class Application {
                private String displayName, vendor, description;
                List processors = new ArrayList();
                List messages = new ArrayList(); 
                List jobs = new ArrayList();
                
                public String getDescription() {
                        return description;
                }
  
                public void setDescription(String description) {
                        this.description = description;
                }
  
                public String getDisplayName() {
                        return displayName;
                }
  
                public void setDisplayName(String displayName) {
                        this.displayName = displayName;
                }
  
                public void addJobs(URI jobsUri) {
                        jobs.add(jobsUri);
                }
  
                public List getJobs() {
                        return jobs;
                }
  
                public void addMessages(URI messagesUri) {
                        messages.add(messagesUri);
                }
  
                public List getMessages() {
                        return messages;
                }
  
                public void addProcessors(URI processorsUri) {
                        processors.add(processorsUri);
                }
  
                public List getProcessors() {
                        return processors;
                }
  
                public String getVendor() {
                        return vendor;
                }
  
                public void setVendor(String vendor) {
                        this.vendor = vendor;
                }
        }
  }
  
  
  1.5       +2 -0      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Constants.java    5 May 2004 15:32:44 -0000       1.4
  +++ Constants.java    11 May 2004 15:23:43 -0000      1.5
  @@ -46,6 +46,8 @@
       public final static String DOMAIN = REPOSITORY_DOMAIN+"/files/";
       public final static String SYSTEM_HOME = DOMAIN + "contelligent/";
   
  +    public final static String PROJECTOR_DIR = DOMAIN + "projector/";
  +    public final static String APPLICATIONS_DIR = PROJECTOR_DIR + "applications/";
       public final static String CONFIG_DIR = SYSTEM_HOME + "config/";
       public final static String CONTENT_DIR = SYSTEM_HOME + "content/";
       public final static String TEMPLATES_DIR = SYSTEM_HOME + "templates/";
  
  
  
  1.2       +3 -0      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java
  
  Index: Connector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Connector.java    3 May 2004 14:20:29 -0000       1.1
  +++ Connector.java    11 May 2004 15:23:43 -0000      1.2
  @@ -7,6 +7,7 @@
   import org.apache.slide.projector.resource.StreamableResource;
   
   import java.io.IOException;
  +import java.util.List;
   import java.util.Map;
   
   /**
  @@ -23,6 +24,8 @@
   
       public void removeResource(URI uri, Credentials credentials) throws IOException;
   
  +    public ArrayResource getChildren(URI uri, Credentials credentials) throws 
IOException;
  +    
       public Resource[] search(String query, Credentials credentials) throws 
IOException;
   
       public void subscribe(String method, String uri, int depth, int lifetime, int 
notificationDelay, Subscriber listener, Credentials credentials);
  
  
  
  1.2       +24 -0     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java
  
  Index: WebdavConnector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WebdavConnector.java      3 May 2004 14:20:27 -0000       1.1
  +++ WebdavConnector.java      11 May 2004 15:23:43 -0000      1.2
  @@ -99,6 +99,30 @@
           deleteMethod.execute(httpState, new 
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL));
       }
   
  +    public ArrayResource getChildren(URI uri, Credentials credentials) throws 
IOException {
  +        String url = uri.toString();
  +        if ( url.charAt(url.length()-1) == '/') {
  +             url = url.substring(0, url.length()-1);
  +        }
  +        PropFindMethod propfindMethod = new PropFindMethod(url, 0);
  +        propfindMethod.setDepth(1);
  +        propfindMethod.setDoAuthentication(true);
  +        HttpState httpState = new HttpState();
  +        httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +        int state = propfindMethod.execute(httpState, new 
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL));
  +        if ( state != HttpStatus.SC_MULTI_STATUS ) {
  +            throw new IOException("Received status code "+state+" when doing 
PROPFIND on URI="+url);
  +        }
  +        List children = new ArrayList();
  +        for ( Enumeration propertyEnumeration = 
propfindMethod.getAllResponseURLs(); propertyEnumeration.hasMoreElements(); ) {
  +             String childUrl = (String)propertyEnumeration.nextElement();
  +             if ( !childUrl.equals(url) ) {
  +                     children.add(new URIResource(childUrl));
  +             }
  +        }
  +        return new ArrayResource((Resource[])children.toArray(new 
Resource[children.size()]));
  +    }
  +    
       public void subscribe(String method, String uri, int depth, int lifetime, int 
notificationDelay, Subscriber listener, Credentials credentials) {
           dispatcher.subscribe(method, uri, depth, lifetime, notificationDelay, 
listener, credentials);
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to