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 && i >= 0) {
- if (versions[i].getEvent() != null &&
- 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