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/03/17 16:26:07 UTC

svn commit: r157935 - in lenya/trunk/src: java/org/apache/lenya/cms/ant/ java/org/apache/lenya/cms/cocoon/acting/ java/org/apache/lenya/cms/cocoon/flow/ java/org/apache/lenya/cms/cocoon/scheduler/ java/org/apache/lenya/cms/cocoon/task/ java/org/apache/lenya/cms/cocoon/workflow/ java/org/apache/lenya/cms/publication/task/ java/org/apache/lenya/cms/scheduler/ java/org/apache/lenya/cms/task/ java/org/apache/lenya/cms/workflow/ webapp/lenya/ webapp/lenya/content/publishing/ webapp/lenya/pubs/default/config/tasks/

Author: andreas
Date: Thu Mar 17 07:25:58 2005
New Revision: 157935

URL: http://svn.apache.org/viewcvs?view=rev&rev=157935
Log:
Pass the ServiceManager to tasks and Ant tasks. This made it possible to remove deprecated workflow support classes.

Added:
    lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaProject.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java
Removed:
    lenya/trunk/src/java/org/apache/lenya/cms/ant/InitCopyWorkflowTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/InitWorkflowHistoryTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/workflow/WorkflowHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowFactory.java
Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/TaskAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/task/CocoonTaskWrapper.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/scheduler/TaskJob.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/AbstractTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/AntTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/CommandLineTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/DefaultTaskWrapper.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/Task.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/TaskManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/TaskSequence.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java
    lenya/trunk/src/webapp/lenya/content/publishing/screen.xsp
    lenya/trunk/src/webapp/lenya/pubs/default/config/tasks/targets.xml
    lenya/trunk/src/webapp/lenya/usecase.xmap

Added: lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaProject.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaProject.java?view=auto&rev=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaProject.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaProject.java Thu Mar 17 07:25:58 2005
@@ -0,0 +1,46 @@
+/*
+ * 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.ant;
+
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.tools.ant.Project;
+
+/**
+ * Ant project that provides access to the service manager.
+ * 
+ * @version $Id:$
+ */
+public class LenyaProject extends Project {
+
+    private ServiceManager manager;
+    
+    /**
+     * Ctor.
+     * @param manager The service manager.
+     */
+    public LenyaProject(ServiceManager manager) {
+        this.manager = manager;
+    }
+    
+    /**
+     * @return The service manager.
+     */
+    public ServiceManager getServiceManager() {
+        return this.manager;
+    }
+    
+}

Added: lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaTask.java?view=auto&rev=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaTask.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/LenyaTask.java Thu Mar 17 07:25:58 2005
@@ -0,0 +1,39 @@
+/*
+ * 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.ant;
+
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.tools.ant.Task;
+
+/**
+ * Lenya-specific Ant task.
+ *
+ * @version $Id:$
+ */
+public class LenyaTask extends Task {
+    
+    private ServiceManager manager;
+
+    protected ServiceManager getServiceManager() {
+        if (this.manager == null) {
+            LenyaProject project = (LenyaProject) getOwningTarget().getProject();
+            this.manager = project.getServiceManager();
+        }
+        return this.manager;
+    }
+    
+}

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java Thu Mar 17 07:25:58 2005
@@ -25,13 +25,12 @@
 import org.apache.lenya.cms.site.tree.SiteTree;
 import org.apache.lenya.cms.site.tree.SiteTreeNode;
 import org.apache.lenya.cms.site.tree.SiteTreeNodeVisitor;
-import org.apache.lenya.cms.workflow.WorkflowFactory;
-import org.apache.lenya.workflow.WorkflowException;
+import org.apache.lenya.cms.workflow.WorkflowManager;
 import org.apache.tools.ant.BuildException;
 
 /**
- * Ant task which implements the SiteTreeNodeVisitor for the operation move a
- * document. (Visitor pattern)
+ * Ant task which implements the SiteTreeNodeVisitor for the operation move a document. (Visitor
+ * pattern)
  */
 public class MoveDocumentTask extends PublicationTask implements SiteTreeNodeVisitor {
 
@@ -126,7 +125,6 @@
 
             Document document;
             Document newDocument;
-            WorkflowFactory factory = WorkflowFactory.newInstance();
 
             log("move workflow history");
             try {
@@ -141,24 +139,17 @@
             } catch (DocumentBuildException e) {
                 throw new BuildException(e);
             }
+            WorkflowManager wfManager = null;
             try {
-                if (factory.hasWorkflow(document)) {
-                    /*
-                     * WorkflowInstance sourceInstance =
-                     * factory.buildExistingInstance(document); String
-                     * workflowName = sourceInstance.getWorkflow().getName();
-                     * 
-                     * WorkflowInstance destInstance =
-                     * factory.buildNewInstance(newDocument, workflowName);
-                     * destInstance.getHistory().replaceWith(sourceInstance.getHistory());
-                     * 
-                     * sourceInstance.getHistory().delete();
-                     */
-                }
+                wfManager = (WorkflowManager) getServiceManager().lookup(WorkflowManager.ROLE);
+                wfManager.moveHistory(document, newDocument);
             } catch (Exception e) {
                 throw new BuildException(e);
+            } finally {
+                if (wfManager != null) {
+                    getServiceManager().release(wfManager);
+                }
             }
-
         }
     }
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java Thu Mar 17 07:25:58 2005
@@ -23,8 +23,7 @@
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.site.Label;
 import org.apache.lenya.cms.site.tree.SiteTreeNode;
-import org.apache.lenya.cms.workflow.WorkflowFactory;
-import org.apache.lenya.workflow.WorkflowException;
+import org.apache.lenya.cms.workflow.WorkflowManager;
 import org.apache.tools.ant.BuildException;
 
 /**
@@ -55,9 +54,8 @@
 
             Document srcDoc;
             Document destDoc;
-            WorkflowFactory factory = WorkflowFactory.newInstance();
 
-            log("init workflow history");
+            WorkflowManager wfManager = null;
             try {
                 srcDoc = getIdentityMap().getFactory().get(getPublication(),
                         getFirstarea(),
@@ -67,30 +65,19 @@
                         getSecarea(),
                         destDocumentid,
                         language);
-            } catch (DocumentBuildException e) {
+                
+                log("move workflow history of " + srcDoc.getFile().getAbsolutePath() + " to "
+                        + destDoc.getFile().getAbsolutePath());
+                
+                wfManager = (WorkflowManager) getServiceManager().lookup(WorkflowManager.ROLE);
+                wfManager.moveHistory(srcDoc, destDoc);
+            } catch (Exception e) {
                 throw new BuildException(e);
             }
-
-            log("move workflow history of " + srcDoc.getFile().getAbsolutePath() + " to "
-                    + destDoc.getFile().getAbsolutePath());
-            try {
-                if (factory.hasWorkflow(srcDoc)) {
-                    log("has workflow");
-                    /*
-                     * WorkflowInstance sourceInstance =
-                     * factory.buildExistingInstance(srcDoc); String
-                     * workflowName = sourceInstance.getWorkflow().getName();
-                     * 
-                     * WorkflowInstance destInstance =
-                     * factory.buildNewInstance(destDoc, workflowName);
-                     * destInstance.getHistory().replaceWith(sourceInstance.getHistory());
-                     * 
-                     * sourceInstance.getHistory().delete(); log("workflow
-                     * moved");
-                     */
+            finally {
+                if (wfManager != null) {
+                    getServiceManager().release(wfManager);
                 }
-            } catch (Exception e) {
-                throw new BuildException(e);
             }
         }
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java Thu Mar 17 07:25:58 2005
@@ -32,13 +32,12 @@
 import org.apache.lenya.cms.site.tree.TreeSiteManager;
 import org.apache.lenya.cms.task.AntTask;
 import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
 
 /**
  * Abstract base class for publication-dependent Ant tasks. It requires some
  * project parameters that are set by the AntTask.
  */
-public abstract class PublicationTask extends Task {
+public abstract class PublicationTask extends LenyaTask {
     /** Creates a new instance of PublicationTask */
     public PublicationTask() {
         // do nothing

Added: lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java?view=auto&rev=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java Thu Mar 17 07:25:58 2005
@@ -0,0 +1,61 @@
+/*
+ * 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.ant;
+
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentManager;
+import org.apache.lenya.cms.publication.DocumentType;
+import org.apache.lenya.cms.publication.DocumentTypeResolver;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.site.SiteManager;
+import org.apache.tools.ant.BuildException;
+
+/**
+ * Test task.
+ *
+ * @version $Id:$
+ */
+public class TestTask extends PublicationTask {
+
+    /**
+     * @see org.apache.tools.ant.Task#execute()
+     */
+    public void execute() throws BuildException {
+        super.execute();
+        
+        ServiceManager manager = getServiceManager();
+        DocumentTypeResolver resolver = null;
+        try {
+            resolver = (DocumentTypeResolver) manager.lookup(DocumentTypeResolver.ROLE);
+            Document document = getIdentityMap().getFactory().get(getPublication(), Publication.AUTHORING_AREA, "/index");
+            DocumentType doctype = resolver.resolve(document);
+            String message = "Document type of [" + document + "] is [" + doctype.getName() + "]";
+            log(message);
+            System.out.println(message);
+        }
+        catch (Exception e) {
+            throw new BuildException(e);
+        }
+        finally {
+            if (resolver != null) {
+                manager.release(resolver);
+            }
+        }
+        
+    }
+}

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/TaskAction.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/TaskAction.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/TaskAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/TaskAction.java Thu Mar 17 07:25:58 2005
@@ -23,7 +23,7 @@
 import java.util.Map;
 
 import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.cocoon.acting.AbstractAction;
+import org.apache.cocoon.acting.ServiceableAction;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.environment.Request;
@@ -35,7 +35,7 @@
 /**
  * An action that executes a task.
  */
-public class TaskAction extends AbstractAction {
+public class TaskAction extends ServiceableAction {
     
     /**
      * @see org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector, org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
@@ -48,7 +48,7 @@
         Parameters parameters)
         throws java.lang.Exception {
 
-        TaskWrapper wrapper = new CocoonTaskWrapper(objectModel, parameters);
+        TaskWrapper wrapper = new CocoonTaskWrapper(objectModel, parameters, this.manager);
         wrapper.execute();
 
         Request request = ObjectModelHelper.getRequest(objectModel);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java Thu Mar 17 07:25:58 2005
@@ -25,78 +25,56 @@
 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;
 import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
-import org.apache.cocoon.environment.Session;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Identity;
-import org.apache.lenya.ac.Machine;
-import org.apache.lenya.ac.Role;
-import org.apache.lenya.ac.User;
-import org.apache.lenya.ac.impl.PolicyAuthorizer;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.PageEnvelope;
 import org.apache.lenya.cms.publication.PageEnvelopeException;
 import org.apache.lenya.cms.publication.PageEnvelopeFactory;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.publication.PublicationFactory;
 import org.apache.lenya.cms.publication.util.DocumentHelper;
 import org.apache.lenya.cms.rc.FileReservedCheckInException;
 import org.apache.lenya.cms.rc.RCEnvironment;
 import org.apache.lenya.cms.rc.RevisionController;
-import org.apache.lenya.cms.workflow.WorkflowFactory;
+import org.apache.lenya.cms.workflow.WorkflowManager;
+import org.apache.lenya.cms.workflow.WorkflowResolver;
 import org.apache.lenya.workflow.Situation;
-import org.apache.lenya.workflow.Workflow;
-import org.apache.lenya.workflow.WorkflowEngine;
 import org.apache.lenya.workflow.WorkflowException;
-import org.apache.lenya.workflow.impl.WorkflowEngineImpl;
 
 /**
- * Flowscript utility class. The FOM_Cocoon object is not passed in the
- * constructor to avoid errors. This way, not the initial, but the current
- * FOM_Cocoon object is used by the methods.
+ * Flowscript utility class. The FOM_Cocoon object is not passed in the constructor to avoid errors.
+ * This way, not the initial, but the current FOM_Cocoon object is used by the methods.
  */
-public class FlowHelperImpl extends AbstractLogEnabled implements FlowHelper {
+public class FlowHelperImpl extends AbstractLogEnabled implements FlowHelper, Serviceable {
 
     /**
      * Ctor.
      */
     public FlowHelperImpl() {
-	    // do nothing
+        // do nothing
     }
 
     /**
      * @see org.apache.lenya.cms.cocoon.flow.FlowHelper#getSituation(org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon)
      */
     public Situation getSituation(FOM_Cocoon cocoon) throws AccessControlException {
-        Request request = ObjectModelHelper.getRequest(cocoon.getObjectModel());
-        Session session = request.getSession();
-        Identity identity = (Identity) session.getAttribute(Identity.class.getName());
-
-        String userId = "";
-        String ipAddress = "";
-
-        User user = identity.getUser();
-        if (user != null) {
-            userId = user.getId();
+        Situation situation;
+        WorkflowResolver resolver = null;
+        try {
+            resolver = (WorkflowResolver) this.manager.lookup(WorkflowResolver.ROLE);
+            situation = resolver.getSituation();
+        } catch (ServiceException e) {
+            throw new RuntimeException(e);
+        } finally {
+            this.manager.release(resolver);
         }
-
-        Machine machine = identity.getMachine();
-        if (machine != null) {
-            ipAddress = machine.getIp();
-        }
-
-        Role[] roles = PolicyAuthorizer.getRoles(request);
-        String[] roleIds = new String[roles.length];
-        for (int i = 0; i < roles.length; i++) {
-            roleIds[i] = roles[i].getId();
-        }
-
-        WorkflowFactory factory = WorkflowFactory.newInstance();
-        Situation situation = factory.buildSituation(roleIds, userId, ipAddress);
         return situation;
     }
 
@@ -175,12 +153,20 @@
      */
     public void triggerWorkflow(FOM_Cocoon cocoon, String event) throws WorkflowException,
             PageEnvelopeException, AccessControlException {
-        
-        WorkflowFactory factory = WorkflowFactory.newInstance();
-        Document document = getPageEnvelope(cocoon).getDocument();
-        Workflow workflow = factory.getWorkflow(document);
-        WorkflowEngine engine = new WorkflowEngineImpl();
-        engine.invoke(document, workflow, getSituation(cocoon), event);
+
+        WorkflowManager wfManager = null;
+        try {
+            wfManager = (WorkflowManager) this.manager.lookup(WorkflowManager.ROLE);
+            Document document = getPageEnvelope(cocoon).getDocument();
+            wfManager.invoke(document, event);
+        } catch (Exception e) {
+            throw new WorkflowException(e);
+        } finally {
+            if (wfManager != null) {
+                this.manager.release(wfManager);
+            }
+        }
+
     }
 
     /**
@@ -213,5 +199,14 @@
         final String filename = pageEnvelope.getDocument().getFile().getCanonicalPath()
                 .substring(publication.getDirectory().getCanonicalPath().length());
         getRevisionController(cocoon).reservedCheckIn(filename, identity.getUser().getId(), backup);
+    }
+
+    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/cocoon/scheduler/SchedulerHelper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java Thu Mar 17 07:25:58 2005
@@ -65,7 +65,7 @@
         Map map = new HashMap();
 
         try {
-            TaskWrapper wrapper = new CocoonTaskWrapper(this.objectModel, this.parameters);
+            TaskWrapper wrapper = new CocoonTaskWrapper(this.objectModel, this.parameters, null);
 
             this.logger.debug("Adding task wrapper parameters");
             Map wrapperParameters = wrapper.getParameters();

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/task/CocoonTaskWrapper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/task/CocoonTaskWrapper.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/task/CocoonTaskWrapper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/task/CocoonTaskWrapper.java Thu Mar 17 07:25:58 2005
@@ -24,6 +24,7 @@
 
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.Session;
@@ -49,35 +50,38 @@
  */
 public class CocoonTaskWrapper extends DefaultTaskWrapper {
 
-	private static Logger log = Logger.getLogger(CocoonTaskWrapper.class);
+    private static Logger log = Logger.getLogger(CocoonTaskWrapper.class);
 
-	/**
-	 * Ctor to be called from a Cocoon component.
-	 * @param objectModel A Cocoon object model.
-	 * @param parameters A parameters object.
-	 * @throws ExecutionException when something went wrong.
-	 */
-	public CocoonTaskWrapper(Map objectModel, Parameters parameters) throws ExecutionException {
+    /**
+     * Ctor to be called from a Cocoon component.
+     * @param objectModel A Cocoon object model.
+     * @param parameters A parameters object.
+     * @param manager The service manager to use.
+     * @throws ExecutionException when something went wrong.
+     */
+    public CocoonTaskWrapper(Map objectModel, Parameters parameters, ServiceManager manager)
+            throws ExecutionException {
+        super(manager);
 
-		log.debug("Creating CocoonTaskWrapper");
+        log.debug("Creating CocoonTaskWrapper");
 
-		Publication publication;
-		try {
+        Publication publication;
+        try {
             PublicationFactory factory = PublicationFactory.getInstance(new ConsoleLogger());
-			publication = factory.getPublication(objectModel);
-		} catch (PublicationException e) {
-			throw new ExecutionException(e);
-		}
-		Request request = ObjectModelHelper.getRequest(objectModel);
+            publication = factory.getPublication(objectModel);
+        } catch (PublicationException e) {
+            throw new ExecutionException(e);
+        }
+        Request request = ObjectModelHelper.getRequest(objectModel);
 
         initialize(parameters, publication, request);
-	}
-    
+    }
+
     /**
      * Ctor.
      */
-    protected CocoonTaskWrapper() {
-	    // do nothing
+    protected CocoonTaskWrapper(ServiceManager manager) {
+        super(manager);
     }
 
     /**
@@ -88,106 +92,108 @@
      * @throws ExecutionException when something went wrong.
      */
     protected void initialize(Parameters parameters, Publication publication, Request request)
-        throws ExecutionException {
+            throws ExecutionException {
         setNotifying(request);
-        
+
         Parameters taskParameters = extractTaskParameters(parameters, publication, request);
         getTaskParameters().parameterize(taskParameters);
-        
+
         String taskId = request.getParameter(TaskWrapperParameters.TASK_ID);
         taskId = parameters.getParameter(TaskWrapperParameters.TASK_ID, taskId);
-        
+
         String webappUrl = ServletHelper.getWebappURI(request);
         initialize(taskId, publication, webappUrl, taskParameters);
-        
+
         String eventName = request.getParameter(WorkflowInvoker.EVENT_REQUEST_PARAMETER);
         if (eventName == null) {
-        	eventName = request.getParameter(WorkflowInvoker.LENYA_EVENT_REQUEST_PARAMETER);
+            eventName = request.getParameter(WorkflowInvoker.LENYA_EVENT_REQUEST_PARAMETER);
         }
         if (eventName != null) {
-        	Session session = request.getSession(false);
-        	if (session == null) {
-        		log.debug("No session found - not enabling workflow handling.");
-        	} else {
-        		Identity identity = Identity.getIdentity(session);
-        		if (identity == null) {
-        			log.debug("No identity found - not enabling workflow handling.");
-        		} else {
-        			log.debug("Identity found - enabling workflow handling.");
-        			Role[] roles;
-        			try {
-        				roles = PolicyAuthorizer.getRoles(request);
-        			} catch (AccessControlException e) {
-        				throw new ExecutionException(e);
-        			}
-        			setWorkflowAware(eventName, identity, roles);
-        		}
-        	}
+            Session session = request.getSession(false);
+            if (session == null) {
+                log.debug("No session found - not enabling workflow handling.");
+            } else {
+                Identity identity = Identity.getIdentity(session);
+                if (identity == null) {
+                    log.debug("No identity found - not enabling workflow handling.");
+                } else {
+                    log.debug("Identity found - enabling workflow handling.");
+                    Role[] roles;
+                    try {
+                        roles = PolicyAuthorizer.getRoles(request);
+                    } catch (AccessControlException e) {
+                        throw new ExecutionException(e);
+                    }
+                    setWorkflowAware(eventName, identity, roles);
+                }
+            }
         }
-        
+
     }
 
-	/**
-	 * Enables notification if the corresponding request parameters exist.
-	 * @param request The request.
-	 */
-	protected void setNotifying(Request request) {
-
-		log.debug("Trying to initialize notification ...");
-
-		Map requestParameters = ServletHelper.getParameterMap(request);
-		String		key;
-		String		value;
-		Map.Entry	entry;
-
-		log.debug("    Request parameters:");
-		for (Iterator iter = requestParameters.entrySet().iterator(); iter.hasNext();) {
-			entry 	= (Map.Entry)iter.next();
-			key 	= (String)entry.getKey();
-			value 	= (String)entry.getValue();
-			log.debug("        [" + key + "] = [" + value + "]");
-		}
-
-		NamespaceMap notificationMap = new NamespaceMap(requestParameters, Notifier.PREFIX);
-
-		log.debug("    Notification parameters:");
-		for (Iterator iter = notificationMap.getMap().entrySet().iterator(); iter.hasNext();) {
-			entry 	= (Map.Entry)iter.next();
-			key 	= (String)entry.getKey();
-			value 	= (String)entry.getValue();
-			log.debug("        [" + key + "] = [" + value + "]");
-		}
-
-		if (notificationMap.getMap().isEmpty()) {
-			log.debug("    No notification parameters found.");
-		} else {
-			log.debug("    Initializing notification");
-            
+    /**
+     * Enables notification if the corresponding request parameters exist.
+     * @param request The request.
+     */
+    protected void setNotifying(Request request) {
+
+        log.debug("Trying to initialize notification ...");
+
+        Map requestParameters = ServletHelper.getParameterMap(request);
+        String key;
+        String value;
+        Map.Entry entry;
+
+        log.debug("    Request parameters:");
+        for (Iterator iter = requestParameters.entrySet().iterator(); iter.hasNext();) {
+            entry = (Map.Entry) iter.next();
+            key = (String) entry.getKey();
+            value = (String) entry.getValue();
+            log.debug("        [" + key + "] = [" + value + "]");
+        }
+
+        NamespaceMap notificationMap = new NamespaceMap(requestParameters, Notifier.PREFIX);
+
+        log.debug("    Notification parameters:");
+        for (Iterator iter = notificationMap.getMap().entrySet().iterator(); iter.hasNext();) {
+            entry = (Map.Entry) iter.next();
+            key = (String) entry.getKey();
+            value = (String) entry.getValue();
+            log.debug("        [" + key + "] = [" + value + "]");
+        }
+
+        if (notificationMap.getMap().isEmpty()) {
+            log.debug("    No notification parameters found.");
+        } else {
+            log.debug("    Initializing notification");
+
             Identity identity = Identity.getIdentity(request.getSession());
             User user = identity.getUser();
             String eMail = user.getEmail();
             notificationMap.put(Notifier.PARAMETER_FROM, eMail);
-            log.debug("    Setting from address [" + Notifier.PARAMETER_FROM + "] = [" + eMail + "]");
+            log.debug("    Setting from address [" + Notifier.PARAMETER_FROM + "] = [" + eMail
+                    + "]");
 
-			String toKey = NamespaceMap.getFullName(Notifier.PREFIX, Notifier.PARAMETER_TO);
-			StringBuffer buf = new StringBuffer();
-			String[] toValues = request.getParameterValues(toKey);
-
-			if (toValues == null) {
-				throw new IllegalStateException("You must specify at least one [notification.tolist] request parameter!");
-			}
-
-			for (int i = 0; i < toValues.length; i++) {
-				if (i > 0 && !"".equals(buf.toString())) {
-					buf.append(",");
-				}
-				log.debug("    Adding notification address [" + toValues[i].trim() + "]");
-				buf.append(toValues[i].trim());
-			}
-
-			notificationMap.put(Notifier.PARAMETER_TO, buf.toString());
-			setNotifying(notificationMap);
-		}
-	}
+            String toKey = NamespaceMap.getFullName(Notifier.PREFIX, Notifier.PARAMETER_TO);
+            StringBuffer buf = new StringBuffer();
+            String[] toValues = request.getParameterValues(toKey);
+
+            if (toValues == null) {
+                throw new IllegalStateException(
+                        "You must specify at least one [notification.tolist] request parameter!");
+            }
+
+            for (int i = 0; i < toValues.length; i++) {
+                if (i > 0 && !"".equals(buf.toString())) {
+                    buf.append(",");
+                }
+                log.debug("    Adding notification address [" + toValues[i].trim() + "]");
+                buf.append(toValues[i].trim());
+            }
+
+            notificationMap.put(Notifier.PARAMETER_TO, buf.toString());
+            setNotifying(notificationMap);
+        }
+    }
 
-}
+}
\ No newline at end of file

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java Thu Mar 17 07:25:58 2005
@@ -28,6 +28,7 @@
 import org.apache.avalon.excalibur.io.FileUtil;
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.service.ServiceException;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.Publication;
@@ -39,12 +40,9 @@
 import org.apache.lenya.cms.task.AbstractTask;
 import org.apache.lenya.cms.task.ExecutionException;
 import org.apache.lenya.cms.task.Task;
-import org.apache.lenya.cms.workflow.WorkflowFactory;
+import org.apache.lenya.cms.workflow.WorkflowManager;
+import org.apache.lenya.cms.workflow.WorkflowResolver;
 import org.apache.lenya.workflow.Situation;
-import org.apache.lenya.workflow.Workflow;
-import org.apache.lenya.workflow.WorkflowEngine;
-import org.apache.lenya.workflow.WorkflowException;
-import org.apache.lenya.workflow.impl.WorkflowEngineImpl;
 import org.apache.log4j.Logger;
 
 /**
@@ -158,23 +156,18 @@
             log.debug("Checking workflow of document [" + document + "].");
         }
 
-        boolean canFire = true;
-
-        WorkflowFactory factory = WorkflowFactory.newInstance();
-        if (factory.hasWorkflow(document)) {
-            try {
-                Situation situation = getSituation();
-                Workflow workflow = factory.getWorkflow(document);
-                WorkflowEngine engine = new WorkflowEngineImpl();
-                canFire = engine.canInvoke(document, workflow, situation, getEventName());
-            } catch (final ParameterException e) {
-                throw new ExecutionException(e);
-            } catch (final WorkflowException e) {
-                throw new ExecutionException(e);
+        WorkflowManager wfManager = null;
+        try {
+            wfManager = (WorkflowManager) getServiceManager().lookup(WorkflowManager.ROLE);
+            return wfManager.canInvoke(document, getEventName());
+        } catch (Exception e) {
+            throw new ExecutionException(e);
+        }
+        finally {
+            if (wfManager != null) {
+                getServiceManager().release(wfManager);
             }
-
         }
-        return canFire;
     }
 
     /**
@@ -183,11 +176,18 @@
      * @throws ParameterException when something went wrong.
      */
     protected Situation getSituation() throws ParameterException {
-        WorkflowFactory workflowFactory = WorkflowFactory.newInstance();
-        String userId = getParameters().getParameter(PARAMETER_USER_ID);
-        String machineIp = getParameters().getParameter(PARAMETER_IP_ADDRESS);
-        Situation situation = workflowFactory.buildSituation(getRoleIDs(), userId, machineIp);
-        return situation;
+        WorkflowResolver wfResolver = null;
+        try {
+            wfResolver = (WorkflowResolver) getServiceManager().lookup(WorkflowResolver.ROLE);
+            return wfResolver.getSituation();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        finally {
+            if (wfResolver != null) {
+                getServiceManager().release(wfResolver);
+            }
+        }
     }
 
     /**
@@ -201,26 +201,16 @@
             log.debug("Trying to execute workflow on document [" + document.getId() + "].");
         }
 
-        WorkflowFactory factory = WorkflowFactory.newInstance();
-        if (factory.hasWorkflow(document)) {
-
-            try {
-                String userId = getParameters().getParameter(PARAMETER_USER_ID);
-                String machineIp = getParameters().getParameter(PARAMETER_IP_ADDRESS);
-
-                Workflow workflow = factory.getWorkflow(document);
-                Situation situation = factory.buildSituation(getRoleIDs(), userId, machineIp);
-                WorkflowEngine engine = new WorkflowEngineImpl();
-                engine.invoke(document, workflow, situation, getEventName());
-            } catch (final ParameterException e) {
-                throw new ExecutionException(e);
-            } catch (final WorkflowException e) {
-                throw new ExecutionException(e);
-            }
-
-        } else {
-            if (log.isDebugEnabled()) {
-                log.debug("No workflow associated with document.");
+        WorkflowManager wfManager = null;
+        try {
+            wfManager = (WorkflowManager) getServiceManager().lookup(WorkflowManager.ROLE);
+            wfManager.invoke(document, getEventName());
+        } catch (Exception e) {
+            throw new ExecutionException(e);
+        }
+        finally {
+            if (wfManager != null) {
+                getServiceManager().release(wfManager);
             }
         }
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/scheduler/TaskJob.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/scheduler/TaskJob.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/scheduler/TaskJob.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/scheduler/TaskJob.java Thu Mar 17 07:25:58 2005
@@ -59,7 +59,7 @@
         taskParameters.putAll(wrapperMap);
         wrapperMap.putAll(taskParameters.getPrefixedMap());
         
-        DefaultTaskWrapper wrapper = new DefaultTaskWrapper(wrapperMap);
+        DefaultTaskWrapper wrapper = new DefaultTaskWrapper(wrapperMap, null);
         return wrapper.getParameters();
     }
 
@@ -105,7 +105,7 @@
         log.info("Executing job");
         JobDetail jobDetail = context.getJobDetail();
         
-        DefaultTaskWrapper wrapper = new DefaultTaskWrapper(jobDetail.getJobDataMap());
+        DefaultTaskWrapper wrapper = new DefaultTaskWrapper(jobDetail.getJobDataMap(), null);
         try {
             wrapper.execute();
         } catch (ExecutionException e) {
@@ -145,7 +145,7 @@
     public Element save(NamespaceHelper helper, JobDetail jobDetail) throws SchedulerException {
         
         Element jobElement = super.save(helper, jobDetail);
-        TaskWrapper wrapper = new DefaultTaskWrapper(jobDetail.getJobDataMap());
+        TaskWrapper wrapper = new DefaultTaskWrapper(jobDetail.getJobDataMap(), null);
         jobElement.appendChild(wrapper.save(helper));
         
         return jobElement;

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/AbstractTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/AbstractTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/AbstractTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/AbstractTask.java Thu Mar 17 07:25:58 2005
@@ -21,6 +21,7 @@
 
 import org.apache.avalon.framework.parameters.ParameterException;
 import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceManager;
 
 
 /**
@@ -28,6 +29,25 @@
  */
 public abstract class AbstractTask implements Task {
     private Parameters parameters = new Parameters();
+    
+    private ServiceManager manager;
+    
+    /**
+     * Ctor.
+     */
+    public AbstractTask() {
+    }
+    
+    /**
+     * @param manager The service manager to use.
+     */
+    public void service(ServiceManager manager) {
+        this.manager = manager;
+    }
+    
+    protected ServiceManager getServiceManager() {
+        return this.manager;
+    }
 
     /**
      * Get parameters of the task

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/AntTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/AntTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/AntTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/AntTask.java Thu Mar 17 07:25:58 2005
@@ -29,6 +29,7 @@
 
 import org.apache.avalon.framework.parameters.ParameterException;
 import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.lenya.cms.ant.LenyaProject;
 import org.apache.lenya.cms.publishing.PublishingEnvironment;
 import org.apache.lenya.util.NamespaceMap;
 import org.apache.tools.ant.BuildException;
@@ -37,48 +38,41 @@
 import org.apache.tools.ant.XmlLogger;
 
 /**
- * An object of this class is used to execute Ant tasks.
- * The task parameters are:
- *
+ * An object of this class is used to execute Ant tasks. The task parameters are:
+ * 
  * <ul>
- *   <li><code><strong>publication-id</strong></code>: the publication ID</li>
- *   <li><code><strong>buildfile</strong> (optional)</code>: the location of the build file
- *       relative to the publication directory. If this parameter is
- *       not provided, the file is loaded from {@link #DEFAULT_BUILDFILE}.</li>
- *   <li><code><strong>target</strong> (optional)</code>: the build target. If this parameter
-         is not provided, the default target is executed.</li>
- *   <li><code><strong>ant.*</strong></code>: the command-line parameters for Ant <strong>(not implemented yet!)</strong></li>
- *   <li><code><strong>properties.*</strong></code>: the project properties</li>
+ * <li><code><strong>publication-id</strong></code>: the publication ID</li>
+ * <li><code><strong>buildfile</strong> (optional)</code>: the location of the build file
+ * relative to the publication directory. If this parameter is not provided, the file is loaded from
+ * {@link #DEFAULT_BUILDFILE}.</li>
+ * <li><code><strong>target</strong> (optional)</code>: the build target. If this parameter is
+ * not provided, the default target is executed.</li>
+ * <li><code><strong>ant.*</strong></code>: the command-line parameters for Ant <strong>(not
+ * implemented yet!) </strong></li>
+ * <li><code><strong>properties.*</strong></code>: the project properties</li>
  * </ul>
  */
 public class AntTask extends AbstractTask {
+    
     /**
      * Executes an Ant target.
-     *
+     * 
      * @param buildFile The build XML file.
      * @param target The name of the target to execute.
      * @param arguments A map mapping the command-line arguments to their values.
      * @param properties A map mapping the project properties to their values.
      * @param servletContextPath The context-path of the servlet
-     * @param contextPrefix The context-prefix of the servlet 
+     * @param contextPrefix The context-prefix of the servlet
      * @param publicationId The publication-id
      * @param publicationDirectory The directory of the publication
      * @param logFile The file where the log should go to
      * 
      * @throws ExecutionException if the execution failed
      */
-    public void executeAntTarget(
-        String servletContextPath,
-        String contextPrefix,
-        String publicationId,
-        File publicationDirectory,
-        File buildFile,
-        String target,
-        Map arguments,
-        Map properties,
-        File logFile)
-        throws ExecutionException {
-        Project project = new Project();
+    public void executeAntTarget(String servletContextPath, String contextPrefix,
+            String publicationId, File publicationDirectory, File buildFile, String target,
+            Map arguments, Map properties, File logFile) throws ExecutionException {
+        Project project = new LenyaProject(getServiceManager());
         project.setCoreLoader(getClass().getClassLoader());
 
         Throwable error = null;
@@ -91,9 +85,7 @@
                 logDirectory.mkdirs();
             }
 
-            project.setUserProperty(
-                "XmlLogger.file",
-                logFile.getAbsolutePath());
+            project.setUserProperty("XmlLogger.file", logFile.getAbsolutePath());
 
             XmlLogger logger = new XmlLogger();
             project.addBuildListener(logger);
@@ -105,21 +97,19 @@
             ProjectHelper helper = ProjectHelper.getProjectHelper();
             helper.parse(project, buildFile);
 
-            project.setUserProperty(
-                PUBLICATION_DIRECTORY,
-                publicationDirectory.getAbsolutePath());
+            project.setUserProperty(PUBLICATION_DIRECTORY, publicationDirectory.getAbsolutePath());
             project.setUserProperty(PUBLICATION_ID, publicationId);
             project.setUserProperty(SERVLET_CONTEXT_PATH, servletContextPath);
-			project.setUserProperty(CONTEXT_PREFIX, contextPrefix);
+            project.setUserProperty(CONTEXT_PREFIX, contextPrefix);
 
-			String		key;
-			String		value;
-			Map.Entry	entry;
-
-			for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
-				entry 	= (Map.Entry)iter.next();
-				key 	= (String)entry.getKey();
-				value 	= (String)entry.getValue();
+            String key;
+            String value;
+            Map.Entry entry;
+
+            for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
+                entry = (Map.Entry) iter.next();
+                key = (String) entry.getKey();
+                value = (String) entry.getValue();
                 project.setUserProperty(key, value);
             }
 
@@ -138,23 +128,19 @@
 
     /**
      * Returns the filename of the logfile to write.
-     * @param publicationDirectory for which publication the 
-     * filename of the logfile is requested
+     * @param publicationDirectory for which publication the filename of the logfile is requested
      * @return the file path for the log file
      */
     protected File getDefaultLogFile(File publicationDirectory) {
         Calendar now = new GregorianCalendar();
 
-        return new File(
-            publicationDirectory,
-            LOG_PATH + dateFormat.format(now.getTime()) + ".xml");
+        return new File(publicationDirectory, LOG_PATH + dateFormat.format(now.getTime()) + ".xml");
     }
 
     /**
      * <code>dateFormat</code> The date format
      */
-    public static final DateFormat dateFormat =
-        new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
+    public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
     /**
      * <code>PUBLICATION_DIRECTORY</code> The publication directory
      */
@@ -194,8 +180,7 @@
     /**
      * <code>LOG_PATH</code> The log path
      */
-    public static final String LOG_PATH =
-        "logs/tasks/".replace('/', File.separatorChar);
+    public static final String LOG_PATH = "logs/tasks/".replace('/', File.separatorChar);
     /**
      * <code>PARAMETER_LOGFILE</code> The log file parameter
      */
@@ -217,25 +202,17 @@
         File logFile;
 
         try {
-            String buildFileName =
-                getParameters().getParameter(
-                    "buildfile",
-                    DEFAULT_BUILDFILE).replace(
-                    '/',
-                    File.separatorChar);
+            String buildFileName = getParameters().getParameter("buildfile", DEFAULT_BUILDFILE)
+                    .replace('/', File.separatorChar);
 
-            publicationId =
-                getParameters().getParameter(PARAMETER_PUBLICATION_ID);
+            publicationId = getParameters().getParameter(PARAMETER_PUBLICATION_ID);
             contextPrefix = getParameters().getParameter(PARAMETER_CONTEXT_PREFIX);
-            
 
             if (publicationId.equals("")) {
                 publicationDirectory = new File(".");
                 buildFile = new File(buildFileName);
             } else {
-                PublishingEnvironment environment =
-                    new PublishingEnvironment(
-                        servletContextPath,
+                PublishingEnvironment environment = new PublishingEnvironment(servletContextPath,
                         publicationId);
                 publicationDirectory = environment.getPublicationDirectory();
                 buildFile = new File(publicationDirectory, buildFileName);
@@ -248,29 +225,25 @@
             NamespaceMap antMap = new NamespaceMap(parametersMap, ANT_PREFIX);
             arguments = antMap.getMap();
 
-            NamespaceMap propertiesMap =
-                new NamespaceMap(parametersMap, PROPERTIES_PREFIX);
+            NamespaceMap propertiesMap = new NamespaceMap(parametersMap, PROPERTIES_PREFIX);
             properties = propertiesMap.getMap();
 
             // set logfile
-            String logFilename =
-                getParameters().getParameter(
-                    PARAMETER_LOGFILE,
+            String logFilename = getParameters().getParameter(PARAMETER_LOGFILE,
                     getDefaultLogFile(publicationDirectory).getAbsolutePath());
             logFile = new File(logFilename);
         } catch (ParameterException e) {
             throw new ExecutionException(e);
         }
 
-        executeAntTarget(
-            servletContextPath,
-            contextPrefix,
-            publicationId,
-            publicationDirectory,
-            buildFile,
-            target,
-            arguments,
-            properties,
-            logFile);
+        executeAntTarget(servletContextPath,
+                contextPrefix,
+                publicationId,
+                publicationDirectory,
+                buildFile,
+                target,
+                arguments,
+                properties,
+                logFile);
     }
-}
+}
\ No newline at end of file

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/CommandLineTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/CommandLineTask.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/CommandLineTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/CommandLineTask.java Thu Mar 17 07:25:58 2005
@@ -19,17 +19,10 @@
 
 package org.apache.lenya.cms.task;
 
-
 /**
  * A command line task
  */
 public class CommandLineTask extends AbstractTask {
-    /**
-     * Creates a new CommandLineTask object.
-     */
-    public CommandLineTask() {
-	    // do nothing
-    }
 
     /** 
      * Execute the task. All parameters must have been set with parameterize().

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/DefaultTaskWrapper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/DefaultTaskWrapper.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/DefaultTaskWrapper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/DefaultTaskWrapper.java Thu Mar 17 07:25:58 2005
@@ -32,6 +32,7 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.parameters.ParameterException;
 import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.environment.Request;
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.ac.Role;
@@ -54,19 +55,24 @@
         new TaskWrapperParameters(getParameterObject());
     private TaskParameters taskParameters = new TaskParameters(getParameterObject());
 
+    private ServiceManager manager;
+    
     /**
      * Default ctor for subclasses.
+     * @param manager The service manager to use.
      */
-    protected DefaultTaskWrapper() {
-	    // do nothing
+    protected DefaultTaskWrapper(ServiceManager manager) {
+        this.manager = manager;
     }
 
     /**
      * Ctor to be called when all task wrapper parameters are known.
      * All keys and values must be strings or string arrays.
      * @param _parameters The prefixed parameters.
+     * @param manager The service manager to use.
      */
-    public DefaultTaskWrapper(Map _parameters) {
+    public DefaultTaskWrapper(Map _parameters, ServiceManager manager) {
+        this(manager);
         log.debug("Creating");
 
         List keys = new ArrayList();
@@ -227,12 +233,12 @@
 
         Publication publication = getTaskParameters().getPublication();
 
-        WorkflowInvoker workflowInvoker = new WorkflowInvoker(getParameters());
+        WorkflowInvoker workflowInvoker = new WorkflowInvoker(getParameters(), this.manager);
         workflowInvoker.setup(publication, getWrapperParameters().getWebappUrl());
 
         Task task;
         try {
-            manager = new TaskManager(publication.getDirectory().getAbsolutePath());
+            manager = new TaskManager(publication.getDirectory().getAbsolutePath(), this.manager);
             task = manager.getTask(taskId);
 
             Properties properties = new Properties();

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/Task.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/Task.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/Task.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/Task.java Thu Mar 17 07:25:58 2005
@@ -20,6 +20,7 @@
 package org.apache.lenya.cms.task;
 
 import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.service.ServiceManager;
 
 /**
  * A Task is a command that can be executed. <br/>
@@ -93,4 +94,10 @@
      * @return #SUCCESS for success, #FAILURE for failure
      */
     int getResult();
+    
+    /**
+     * Passes the service manager to the task.
+     * @param manager The service manager.
+     */
+    void service(ServiceManager manager);
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/TaskManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/TaskManager.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/TaskManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/TaskManager.java Thu Mar 17 07:25:58 2005
@@ -28,6 +28,7 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.log4j.Logger;
 import org.xml.sax.SAXException;
 
@@ -66,23 +67,29 @@
 
     // maps task-ids to tasks
     private Map tasks = new HashMap();
+    
+    private ServiceManager manager;
 
     /**
      * Creates a new TaskManager object.
+     * @param manager The service manager to use.
      */
-    public TaskManager() {
-        // do nothing
+    public TaskManager(ServiceManager manager) {
+        this.manager = manager;
     }
 
     /**
      * Creates a new instance of TaskManager
      * @param publicationPath path to publication
+     * @param manager The service manager to use.
      * @throws ConfigurationException if the configuration failed.
      * @throws SAXException when parsing the config file failed.
      * @throws IOException when an I/O error occured.
      */
-    public TaskManager(String publicationPath)
+    public TaskManager(String publicationPath, ServiceManager manager)
         throws ConfigurationException, SAXException, IOException {
+        this(manager);
+        
         String configurationFilePath = publicationPath + CONFIGURATION_FILE;
         log.debug("Loading tasks: " + configurationFilePath);
 
@@ -101,8 +108,14 @@
                     + configurationFile.getAbsolutePath()
                     + "] does not exist.");
         }
-        this.tasks.put(EMTPY_TASK, new EmptyTask());
-        this.tasks.put(ANT_TASK, new AntTask());
+        
+        Task empty = new EmptyTask();
+        empty.service(this.manager);
+        this.tasks.put(EMTPY_TASK, empty);
+        
+        Task ant = new AntTask();
+        ant.service(this.manager);
+        this.tasks.put(ANT_TASK, ant);
     }
 
     /**
@@ -124,6 +137,7 @@
 
             Task task =
                 TaskFactory.getInstance().createTask(taskConfigurations[i]);
+            task.service(this.manager);
             this.tasks.put(taskId, task);
         }
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/TaskSequence.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/TaskSequence.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/TaskSequence.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/TaskSequence.java Thu Mar 17 07:25:58 2005
@@ -42,7 +42,7 @@
      * @throws ConfigurationException if an error occurs
      */
     public void init(Configuration configuration) throws ConfigurationException {
-        this.taskManager = new TaskManager();
+        this.taskManager = new TaskManager(getServiceManager());
         this.taskManager.configure(configuration);
 
         // create task list

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java Thu Mar 17 07:25:58 2005
@@ -19,6 +19,7 @@
 
 import java.util.Map;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.ac.Machine;
 import org.apache.lenya.ac.Role;
@@ -27,12 +28,8 @@
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.workflow.WorkflowFactory;
+import org.apache.lenya.cms.workflow.WorkflowManager;
 import org.apache.lenya.util.NamespaceMap;
-import org.apache.lenya.workflow.Situation;
-import org.apache.lenya.workflow.Workflow;
-import org.apache.lenya.workflow.WorkflowEngine;
-import org.apache.lenya.workflow.impl.WorkflowEngineImpl;
 import org.apache.log4j.Logger;
 
 /**
@@ -41,6 +38,7 @@
 public class WorkflowInvoker extends ParameterWrapper {
 
     private static Logger log = Logger.getLogger(WorkflowInvoker.class);
+    private ServiceManager manager;
 
     /**
      * <code>ROLES</code> The roles
@@ -93,9 +91,11 @@
      * Ctor.
      * 
      * @param parameters A map containing the prefixed parameters.
+     * @param manager The service manager.
      */
-    public WorkflowInvoker(Map parameters) {
+    public WorkflowInvoker(Map parameters, ServiceManager manager) {
         super(parameters);
+        this.manager = manager;
     }
 
     /**
@@ -176,7 +176,6 @@
     }
 
     private Document document;
-    private boolean doTransition = false;
 
     /**
      * Initializes the workflow invoker.
@@ -192,14 +191,12 @@
         } else {
             log.debug("Workflow event: [" + eventName + "]");
             // check for workflow instance first (task can initialize the workflow history)
-            WorkflowFactory factory = WorkflowFactory.newInstance();
             try {
                 DocumentIdentityMap map = new DocumentIdentityMap();
                 this.document = map.getFactory().getFromURL(publication, webappUrl);
             } catch (DocumentBuildException e) {
                 throw new ExecutionException(e);
             }
-            this.doTransition = factory.hasWorkflow(this.document);
         }
     }
 
@@ -208,24 +205,18 @@
      * @throws ExecutionException when something went wrong.
      */
     public void invokeTransition() throws ExecutionException {
-        if (this.doTransition) {
 
-            try {
-                WorkflowFactory factory = WorkflowFactory.newInstance();
-                WorkflowEngine engine = new WorkflowEngineImpl();
-                Situation situation = factory.buildSituation(getRoleIDs(), getUserId(),
-                        getMachineIp());
-                Workflow workflow = factory.getWorkflow(this.document);
-
-                log.debug("Invoking transition.");
-                engine.invoke(this.document, workflow, situation, getEventName());
-                log.debug("Invoking transition completed.");
-
-            } catch (Exception e) {
-                throw new ExecutionException(e);
+        WorkflowManager wfManager = null;
+        try {
+            wfManager = (WorkflowManager) this.manager.lookup(WorkflowManager.ROLE);
+            wfManager.invoke(this.document, getEventName());
+        } catch (Exception e) {
+            throw new ExecutionException(e);
+        } finally {
+            if (wfManager != null) {
+                this.manager.release(wfManager);
             }
         }
-
     }
 
     /**

Modified: lenya/trunk/src/webapp/lenya/content/publishing/screen.xsp
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/content/publishing/screen.xsp?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/webapp/lenya/content/publishing/screen.xsp (original)
+++ lenya/trunk/src/webapp/lenya/content/publishing/screen.xsp Thu Mar 17 07:25:58 2005
@@ -34,10 +34,6 @@
     <xsp:include>org.apache.lenya.cms.publication.DocumentIdentityMap</xsp:include>
     <xsp:include>org.apache.lenya.cms.publication.Publication</xsp:include>
     <xsp:include>org.apache.lenya.cms.publication.util.DocumentReferencesHelper</xsp:include>
-    <xsp:include>org.apache.lenya.cms.workflow.CMSVersion</xsp:include>
-    <xsp:include>org.apache.lenya.cms.workflow.WorkflowFactory</xsp:include>
-    <xsp:include>org.apache.lenya.workflow.impl.History</xsp:include>
-    <xsp:include>org.apache.lenya.workflow.impl.Version</xsp:include>
   </xsp:structure>
 
   <usecase:publish>
@@ -81,46 +77,6 @@
          throw new ProcessingException(e);
      }
    </xsp:logic>
-
-    
-    <not:users>
-    <xsp:logic>
-        try {
-        
-          String userId = null;
-          
-          if (WorkflowFactory.newInstance().hasWorkflow(document)) {
-                History history = WorkflowFactory.getHistory(document);
-                Version[] versions = history.getVersions();
-                
-                int i = versions.length - 1;
-                while (userId == null &amp;&amp; i &gt;= 0) {
-                        if (versions[i].getEvent() != null &amp;&amp;
-                            versions[i].getEvent().getName().equals("submit")) {
-                                userId = ((CMSVersion) versions[i]).getUserId();
-                        }
-                        i--;
-                }
-          }
-        
-          if (userId != null) {
-                UserManager userManager = (UserManager)
-                    <input:get-attribute module="access-control" as="object" name="user-manager"/>;
-                User user = userManager.getUser(userId);
-                <not:user>
-                    <xsp:attribute name="id"><xsp:expr>user.getId()</xsp:expr></xsp:attribute>
-                    <xsp:attribute name="name"><xsp:expr>user.getName()</xsp:expr></xsp:attribute>
-                    <xsp:attribute name="email"><xsp:expr>user.getEmail()</xsp:expr></xsp:attribute>
-                </not:user>
-          }
-        }
-        catch (Exception e) {
-            throw new ProcessingException(e);
-        }
-        
-    </xsp:logic>
-    
-    </not:users>
 
     <xsp:logic>
 	  DocumentReferencesHelper helper = new DocumentReferencesHelper(document.getIdentityMap(), objectModel);

Modified: lenya/trunk/src/webapp/lenya/pubs/default/config/tasks/targets.xml
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/config/tasks/targets.xml?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/config/tasks/targets.xml (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/config/tasks/targets.xml Thu Mar 17 07:25:58 2005
@@ -77,6 +77,8 @@
 
   <target name="test">
     <echo>This is a test of the AntTask: ${text}</echo>
+    <taskdef name="ant-test" classname="org.apache.lenya.cms.ant.TestTask"/>
+    <ant-test/>
   </target>
 
 

Modified: lenya/trunk/src/webapp/lenya/usecase.xmap
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/usecase.xmap?view=diff&r1=157934&r2=157935
==============================================================================
--- lenya/trunk/src/webapp/lenya/usecase.xmap (original)
+++ lenya/trunk/src/webapp/lenya/usecase.xmap Thu Mar 17 07:25:58 2005
@@ -139,6 +139,15 @@
           <map:serialize/>
           
         </map:match>
+        
+        <map:match pattern="testAntTask" type="usecase">
+          <map:act type="task">
+            <map:parameter name="publication-id" value="{../1}"/>
+            <map:parameter name="task-id" value="ant-test"/>
+            <map:redirect-to session="true" uri="{request:requestURI}"/>
+          </map:act>
+        </map:match>
+      
 
         <!-- usecase -->
         <!-- View Logs -->



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