dflorey     2004/06/29 08:12:00

  Modified:    proposals/projector/src/java/org/apache/slide/projector/engine
                        ProcessServlet.java Scheduler.java
               
proposals/projector/src/java/org/apache/slide/projector/processor/resolver
                        LocaleResolver.java
               proposals/projector/src/java/org/apache/slide/projector/processor/tree
                        TreeLocalizer.java
  Added:       proposals/projector/src/java/org/apache/slide/projector/engine
                        SessionListener.java
  Log:
  Introduced jobs that are triggered via session creation/request
  
  Revision  Changes    Path
  1.10      +8 -0      
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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ProcessServlet.java       8 Jun 2004 09:10:53 -0000       1.9
  +++ ProcessServlet.java       29 Jun 2004 15:11:59 -0000      1.10
  @@ -17,6 +17,8 @@
   import javax.servlet.http.HttpServlet;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  +import javax.servlet.http.HttpSession;
  +
   import java.io.IOException;
   import java.util.HashMap;
   import java.util.Map;
  @@ -32,6 +34,7 @@
       
       public void service(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
        ApplicationManager.getInstance();
  +     boolean sessionCreated = request.getSession(false) == null;
        Context context = new HttpContext(request, response);
           logger.log(Level.INFO, "Request uri=" + request.getRequestURI());
           logger.log(Level.INFO, "Context path=" + request.getContextPath());
  @@ -55,6 +58,11 @@
                   processor = ProcessorManager.getInstance().getProcessor(uri);
                   Scheduler.getInstance();
                   Scheduler.setContext(context);
  +             if ( sessionCreated ) {
  +                     // new session
  +                    Scheduler.getInstance().launchSessionJobs(context);
  +             }
  +                Scheduler.getInstance().launchRequestJobs(context);
                   if ( 
ProcessorManager.getInstance().getProcessorDescriptor(uri).isBookmark() ) {
                       context.setBookmark(uri);
                   }
  
  
  
  1.11      +41 -10    
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java
  
  Index: Scheduler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Scheduler.java    10 Jun 2004 16:14:12 -0000      1.10
  +++ Scheduler.java    29 Jun 2004 15:11:59 -0000      1.11
  @@ -28,6 +28,9 @@
       public final static String JOBS = "jobs.xml";
       public final static String JOB_DEFINITIONS = "jobDefinitions.xml";
   
  +    private final static String STARTUP = "startup";
  +    private final static String SESSION = "session";
  +    private final static String REQUEST = "request";
       private final static String STARTUP_IDENTIFIER = "startup:";
   
       private final Context context = new SystemContext();
  @@ -37,6 +40,8 @@
       private static Timer timer = new Timer();
   
       private List jobs = new ArrayList();
  +     private List sessionJobs = new ArrayList();
  +     private List requestJobs = new ArrayList();
       private List restoredJobs = new ArrayList();
       private List installedJobNames = new ArrayList();
   
  @@ -78,28 +83,32 @@
                        Document document = documentResource.getDocument();
                        Element rootElement = document.getRootElement();
                        List jobElements = 
XPath.newInstance("/jobs/job").selectNodes(rootElement);
  -                     List configuredJobs = new ArrayList();
  +                     List startupJobs = new ArrayList();
                        for ( Iterator i = jobElements.iterator(); i.hasNext(); ) {
                                Element jobElement = (Element)i.next();
                                Step job = new Step();
                                job.configure(jobElement);
  -                             if ( 
!installedJobNames.contains(STARTUP_IDENTIFIER+job.getName()) ) {
  -                                     configuredJobs.add(job);
  -                                     installedJobNames.add(job.getName());
  +                             String trigger = 
jobElement.getAttributeValue("trigger");
  +                             if ( trigger == null || trigger.equals(STARTUP) ) {
  +                                     if ( 
!installedJobNames.contains(STARTUP_IDENTIFIER+job.getName()) ) {
  +                                             startupJobs.add(job);
  +                                             installedJobNames.add(job.getName());
  +                                     }
  +                             } else if ( trigger.equals(REQUEST) ) {
  +                                     requestJobs.add(job);
  +                             } else if ( trigger.equals(SESSION) ) {
  +                                     sessionJobs.add(job);
                                }
                        }
                        // Note: starting jobs after reading all, to avoid writing to 
configuration files while reading...
  -                     for ( Iterator i = configuredJobs.iterator(); i.hasNext(); ) { 
  +                     for ( Iterator i = startupJobs.iterator(); i.hasNext(); ) { 
                                Step job = (Step)i.next();
                                if ( job.getName().startsWith(STARTUP_IDENTIFIER) ) {
                                        context.setStep(job.getName());
                                } else {
                                        
context.setStep(STARTUP_IDENTIFIER+job.getName());
                                }
  -                             Processor processor = 
ProcessorManager.getInstance().getProcessor(job.getProcessorURI());
  -                             Map processorParameters = Process.loadParameters(job, 
processor, new HashMap(), null, context);
  -                             
ProcessorHelper.validate(processor.getParameterDescriptors(), processorParameters, 
context);
  -                             processor.process(processorParameters, context);
  +                             launchJob(job, context);
                                if ( !restoreRunningJobs ) {
                                        
ConnectorFactory.getConnector().subscribe("Update", new 
URIValue(Constants.REPOSITORY_DOMAIN+jobsUri),
                                                        0, 
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
  @@ -136,7 +145,29 @@
                install(jobsUri, true);
        }       
        
  -    /**
  +     public void launchSessionJobs(Context context) throws Exception {
  +             for ( Iterator i = sessionJobs.iterator(); i.hasNext(); ) {
  +                     Step job = (Step)i.next();
  +                     launchJob(job, context);
  +             }
  +     }
  +     
  +     public void launchRequestJobs(Context context) throws Exception {
  +             for ( Iterator i = requestJobs.iterator(); i.hasNext(); ) {
  +                     Step job = (Step)i.next();
  +                     launchJob(job, context);
  +             }
  +     }
  +     
  +     private void launchJob(Step job, Context context) throws Exception {
  +        logger.log(Level.INFO, "Launching job: '"+job.getName()+"'");
  +             Processor processor = 
ProcessorManager.getInstance().getProcessor(job.getProcessorURI());
  +             Map processorParameters = Process.loadParameters(job, processor, new 
HashMap(), null, context);
  +             ProcessorHelper.validate(processor.getParameterDescriptors(), 
processorParameters, context);
  +             processor.process(processorParameters, context);
  +     }
  +
  +     /**
         * @return Returns the timer.
         */
        public static Timer getTimer() {
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/SessionListener.java
  
  Index: SessionListener.java
  ===================================================================
  /*
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  package org.apache.slide.projector.engine;
  
  import java.util.logging.Level;
  import java.util.logging.Logger;
  
  import javax.servlet.http.HttpSessionEvent;
  import javax.servlet.http.HttpSessionListener;
  
  public class SessionListener implements HttpSessionListener {
        private final static Logger logger = 
Logger.getLogger(SessionListener.class.getName());
  
        public void sessionCreated(HttpSessionEvent sessionEvent) {
        }
  
        public void sessionDestroyed(HttpSessionEvent sessionEvent) {
        }
  }
  
  
  
  1.3       +2 -4      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/resolver/LocaleResolver.java
  
  Index: LocaleResolver.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/resolver/LocaleResolver.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LocaleResolver.java       1 Jun 2004 07:49:58 -0000       1.2
  +++ LocaleResolver.java       29 Jun 2004 15:12:00 -0000      1.3
  @@ -18,9 +18,7 @@
    * @version $Revision$
    */
   public class LocaleResolver extends SimpleProcessor {
  -    public final static String LOCALE = "locale";
  -
  -    private final static ParameterDescriptor parameterDescriptor = new 
ParameterDescriptor(LOCALE, new ParameterMessage("localeResolver/locale"), new 
StringValueDescriptor(), new StringValue(Locale.getDefault().toString()));
  +    private final static ParameterDescriptor parameterDescriptor = new 
ParameterDescriptor(INPUT, new ParameterMessage("localeResolver/locale"), new 
StringValueDescriptor(), new StringValue(Locale.getDefault().toString()));
       private final static ResultEntryDescriptor resultEntryDescriptor =  new 
ResultEntryDescriptor(SimpleProcessor.OUTPUT, new 
DefaultMessage("locale/result/output"), LocaleValue.CONTENT_TYPE, false);
   
       public Value process(Value input, Context context) throws Exception {
  
  
  
  1.5       +16 -7     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeLocalizer.java
  
  Index: TreeLocalizer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeLocalizer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TreeLocalizer.java        17 Jun 2004 14:54:57 -0000      1.4
  +++ TreeLocalizer.java        29 Jun 2004 15:12:00 -0000      1.5
  @@ -24,9 +24,11 @@
   package org.apache.slide.projector.processor.tree;
   
   import org.apache.slide.projector.Context;
  +import org.apache.slide.projector.EnvironmentConsumer;
   import org.apache.slide.projector.ProcessException;
   import org.apache.slide.projector.Processor;
   import org.apache.slide.projector.Result;
  +import org.apache.slide.projector.Store;
   import org.apache.slide.projector.processor.SimpleProcessor;
   import org.apache.slide.projector.descriptor.*;
   import org.apache.slide.projector.engine.ProcessorManager;
  @@ -49,7 +51,7 @@
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
    */
  -public class TreeLocalizer implements Processor {
  +public class TreeLocalizer implements Processor, EnvironmentConsumer  {
       private static Logger logger = Logger.getLogger(TreeLocalizer.class.getName());
   
       public final static String LOCALE = "locale";
  @@ -57,8 +59,7 @@
       protected final static String IMAGE_IDENTIFIER = "image";
   
       private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
  -        new ParameterDescriptor(SimpleProcessor.INPUT, new 
ParameterMessage("treeLocalizer/input"), new TreeValueDescriptor(new 
StringValueDescriptor())),
  -        new ParameterDescriptor(LOCALE, new 
ParameterMessage("treeLocalizer/locale"), new LocaleValueDescriptor())
  +        new ParameterDescriptor(SimpleProcessor.INPUT, new 
ParameterMessage("treeLocalizer/input"), new TreeValueDescriptor(new 
StringValueDescriptor()))
       };
       private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
               new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR },
  @@ -66,9 +67,13 @@
                   new ResultEntryDescriptor(SimpleProcessor.OUTPUT, new 
DefaultMessage("treeLocalizer/output"), ArrayValue.CONTENT_TYPE, false)
               });
   
  +    private final static RequiredEnvironmentDescriptor[] 
requiredEnvironmentDescriptors = new RequiredEnvironmentDescriptor[] {
  +             new RequiredEnvironmentDescriptor(LOCALE, Store.SESSION, new 
DefaultMessage("treeLocalized/requiredEnvironment/locale"), new 
LocaleValueDescriptor(), new LocaleValue(Locale.getDefault()))
  +    };
  +
       public Result process(Map parameter, Context context) throws Exception {
           Value []resources = 
((ArrayValue)parameter.get(SimpleProcessor.INPUT)).getArray();
  -        Locale locale = (((LocaleValue)parameter.get(LOCALE)).getLocale());
  +        Locale locale = 
((LocaleValue)context.getStore(Store.SESSION).get(LOCALE)).getLocale();
           return new Result(StateDescriptor.OK, SimpleProcessor.OUTPUT, 
localize(resources, locale, context));
       }
   
  @@ -110,4 +115,8 @@
       public ResultDescriptor getResultDescriptor() {
           return resultDescriptor;
       }
  +
  +    public RequiredEnvironmentDescriptor[] getRequiredEnvironmentDescriptors() {
  +             return requiredEnvironmentDescriptors;
  +     }
   }
  
  
  

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

Reply via email to