You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/04/18 12:49:30 UTC

svn commit: r161752 - in lenya/trunk/src/java/org/apache/lenya: cms/usecase/UsecaseInvoker.java cms/usecase/UsecaseInvokerImpl.java cms/usecase/scheduling/UsecaseCronJob.java lenya.roles

Author: andreas
Date: Mon Apr 18 03:49:27 2005
New Revision: 161752

URL: http://svn.apache.org/viewcvs?view=rev&rev=161752
Log:
added UsecaseInvoker

Added:
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvoker.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvokerImpl.java
Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/scheduling/UsecaseCronJob.java
    lenya/trunk/src/java/org/apache/lenya/lenya.roles

Added: lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvoker.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvoker.java?view=auto&rev=161752
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvoker.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvoker.java Mon Apr 18 03:49:27 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright  1999-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.lenya.cms.usecase;
+
+import java.util.Map;
+
+/**
+ * Invoke a usecase.
+ * 
+ * @version $Id:$
+ */
+public interface UsecaseInvoker {
+
+    /**
+     * The Avalon role.
+     */
+    String ROLE = UsecaseInvoker.class.getName();
+
+    /**
+     * Invokes a usecase.
+     * @param webappUrl The URL to invoke the usecase on.
+     * @param usecaseName The name of the usecase.
+     * @param parameters The parameters.
+     * @throws UsecaseException if an error occurs.
+     */
+    void invoke(String webappUrl, String usecaseName, Map parameters) throws UsecaseException;
+
+}
\ No newline at end of file

Added: lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvokerImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvokerImpl.java?view=auto&rev=161752
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvokerImpl.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/UsecaseInvokerImpl.java Mon Apr 18 03:49:27 2005
@@ -0,0 +1,118 @@
+/*
+ * Copyright  1999-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.lenya.cms.usecase;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+
+/**
+ * Usecase invoker implementation.
+ *
+ * @version $Id:$
+ */
+public class UsecaseInvokerImpl extends AbstractLogEnabled implements UsecaseInvoker, Serviceable {
+
+    /**
+     * @see org.apache.lenya.cms.usecase.UsecaseInvoker#invoke(java.lang.String, java.lang.String, java.util.Map)
+     */
+    public void invoke(String webappUrl, String usecaseName, Map parameters) throws UsecaseException {
+        UsecaseResolver resolver = null;
+        Usecase usecase = null;
+        try {
+
+            resolver = (UsecaseResolver) this.manager.lookup(UsecaseResolver.ROLE);
+            usecase = resolver.resolve(webappUrl, usecaseName);
+
+            usecase.setSourceURL(webappUrl);
+            usecase.setName(usecaseName);
+
+            passParameters(usecase, parameters);
+
+            usecase.checkPreconditions();
+            List errorMessages = usecase.getErrorMessages();
+            if (!errorMessages.isEmpty()) {
+                logErrorMessages(usecaseName, "Pre condition messages:", errorMessages);
+            } else {
+                usecase.lockInvolvedObjects();
+                usecase.checkExecutionConditions();
+                errorMessages = usecase.getErrorMessages();
+                if (!errorMessages.isEmpty()) {
+                    logErrorMessages(usecaseName, "Execution condition messages:", errorMessages);
+                } else {
+                    usecase.execute();
+                    logErrorMessages(usecaseName, "Execution messages:", usecase.getErrorMessages());
+                    usecase.checkPostconditions();
+                    logErrorMessages(usecaseName, "Post condition messages:", usecase.getErrorMessages());
+                }
+            }
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (resolver != null) {
+                if (usecase != null) {
+                    try {
+                        resolver.release(usecase);
+                    } catch (ServiceException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+                this.manager.release(resolver);
+            }
+        }
+    }
+    
+    /**
+     * @param usecase The usecase to pass the parameters to.
+     * @param parameters The parameters.
+     */
+    protected void passParameters(Usecase usecase, Map parameters) {
+        for (Iterator i = parameters.keySet().iterator(); i.hasNext();) {
+            String key = (String) i.next();
+            Object value = parameters.get(key);
+            usecase.setParameter(key, value);
+        }
+    }
+
+    /**
+     * @param usecaseName The name of the usecase.
+     * @param headline The headline of the messages.
+     * @param errorMessages The messages to log.
+     */
+    protected void logErrorMessages(String usecaseName, String headline, List errorMessages) {
+        getLogger().error("Usecase [" + usecaseName + "] - " + headline);
+        for (Iterator i = errorMessages.iterator(); i.hasNext();) {
+            getLogger().error((String) i.next());
+        }
+    }
+
+    private ServiceManager manager;
+
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+     */
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
+
+}

Modified: lenya/trunk/src/java/org/apache/lenya/cms/usecase/scheduling/UsecaseCronJob.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/scheduling/UsecaseCronJob.java?view=diff&r1=161751&r2=161752
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/scheduling/UsecaseCronJob.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/scheduling/UsecaseCronJob.java Mon Apr 18 03:49:27 2005
@@ -48,7 +48,7 @@
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.impl.DefaultAccessController;
 import org.apache.lenya.cms.usecase.Usecase;
-import org.apache.lenya.cms.usecase.UsecaseResolver;
+import org.apache.lenya.cms.usecase.UsecaseInvoker;
 
 /**
  * Job to schedule usecase execution.
@@ -98,52 +98,19 @@
      * @see org.apache.cocoon.components.cron.CronJob#execute(java.lang.String)
      */
     public void execute(String jobname) {
-        UsecaseResolver resolver = null;
-        Usecase usecase = null;
+        UsecaseInvoker invoker = null;
         try {
-
             setupOriginalRequest();
-
             authorizeRequest();
 
-            resolver = (UsecaseResolver) this.manager.lookup(UsecaseResolver.ROLE);
-            usecase = resolver.resolve(getSourceURL(), getUsecaseName());
-
-            usecase.setSourceURL(getSourceURL());
-            usecase.setName(getUsecaseName());
-
-            passParameters(usecase);
-
-            usecase.checkPreconditions();
-            List errorMessages = usecase.getErrorMessages();
-            if (!errorMessages.isEmpty()) {
-                logErrorMessages("Pre condition messages:", errorMessages);
-            } else {
-                usecase.lockInvolvedObjects();
-                usecase.checkExecutionConditions();
-                errorMessages = usecase.getErrorMessages();
-                if (!errorMessages.isEmpty()) {
-                    logErrorMessages("Execution condition messages:", errorMessages);
-                } else {
-                    usecase.execute();
-                    logErrorMessages("Execution messages:", usecase.getErrorMessages());
-                    usecase.checkPostconditions();
-                    logErrorMessages("Post condition messages:", usecase.getErrorMessages());
-                }
-            }
+            invoker = (UsecaseInvoker) this.manager.lookup(UsecaseInvoker.ROLE);
+            invoker.invoke(getSourceURL(), getUsecaseName(), getParameters());
 
         } catch (Exception e) {
             throw new RuntimeException(e);
         } finally {
-            if (resolver != null) {
-                if (usecase != null) {
-                    try {
-                        resolver.release(usecase);
-                    } catch (ServiceException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-                this.manager.release(resolver);
+            if (invoker != null) {
+                this.manager.release(invoker);
             }
         }
     }
@@ -234,29 +201,6 @@
             }
         }
 
-    }
-
-    /**
-     * @param headline The headline of the messages.
-     * @param errorMessages The messages to log.
-     */
-    protected void logErrorMessages(String headline, List errorMessages) {
-        getLogger().error("Usecase [" + getUsecaseName() + "] - " + headline);
-        for (Iterator i = errorMessages.iterator(); i.hasNext();) {
-            getLogger().error((String) i.next());
-        }
-    }
-
-    /**
-     * @param usecase The usecase to pass the parameters to.
-     */
-    protected void passParameters(Usecase usecase) {
-        Map parameters = getParameters();
-        for (Iterator i = parameters.keySet().iterator(); i.hasNext();) {
-            String key = (String) i.next();
-            Object value = parameters.get(key);
-            usecase.setParameter(key, value);
-        }
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/lenya.roles
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/lenya.roles?view=diff&r1=161751&r2=161752
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/lenya.roles (original)
+++ lenya/trunk/src/java/org/apache/lenya/lenya.roles Mon Apr 18 03:49:27 2005
@@ -86,6 +86,10 @@
         shorthand="usecases"
         default-class="org.apache.cocoon.components.ExtendedComponentSelector"/>
 
+  <role name="org.apache.lenya.cms.usecase.UsecaseInvoker"
+  	    shorthand="usecase-invoker"
+  	    default-class="org.apache.lenya.cms.usecase.UsecaseInvokerImpl"/>
+        
   <role name="org.apache.lenya.cms.usecase.UsecaseResolver"
   	    shorthand="usecase-resolver"
   	    default-class="org.apache.lenya.cms.usecase.UsecaseResolverImpl"/>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org