blob: b59bb302c666f6da6a874252ad271f0c09efb567 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.site.usecases;
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.repository.History;
import org.apache.lenya.cms.repository.Revision;
import org.apache.lenya.cms.workflow.WorkflowUtil;
import org.apache.lenya.workflow.Version;
import org.apache.lenya.workflow.Workflow;
import org.apache.lenya.workflow.Workflowable;
/**
* Usecase to display revisions of a resource.
*
* @version $Id$
*/
public class Revisions extends SiteUsecase {
/**
* @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters() TODO
* filter out checkin entries
*/
protected void initParameters() {
super.initParameters();
Document sourceDoc = getSourceDocument();
if (sourceDoc != null) {
try {
History history = sourceDoc.getRepositoryNode().getHistory();
int[] numbers = history.getRevisionNumbers();
Revision[] revisions = new Revision[numbers.length];
for (int i = 0; i < numbers.length; i++) {
revisions[i] = history.getRevision(numbers[i]);
}
setParameter("revisions", revisions);
Boolean canRollback = Boolean.valueOf(WorkflowUtil.canInvoke(this.manager,
getDocumentFactory().getSession(), getLogger(), sourceDoc, getEvent()));
setParameter("canRollback", canRollback);
if (WorkflowUtil.hasWorkflow(this.manager, getSession(), getLogger(), sourceDoc)) {
Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager,
getSession(), getLogger(), sourceDoc);
Version latestVersion = workflowable.getLatestVersion();
String state;
if (latestVersion != null) {
state = latestVersion.getState();
} else {
Workflow workflow = WorkflowUtil.getWorkflowSchema(this.manager,
getSession(), getLogger(), sourceDoc);
state = workflow.getInitialState();
}
setParameter("workflowState", state);
}
} catch (final Exception e) {
throw new RuntimeException(e);
}
/*
* // since we need both state and canInvoke, we could deal with the
* avalon // component ourselves rather than using WorkflowUtil -
* saves one // service manager lookup. // problem is that
* DocumentWorkflowable is not public and Workflowable is abstract :(
*
* WorkflowManager wfManager = null; String workflowState; Boolean
* canRollback; try { wfManager = (WorkflowManager)
* this.manager.lookup(WorkflowManager.ROLE); Workflowable
* workflowable = new DocumentWorkflowable( this.manager,
* getDocumentFactory().getSession(), sourceDoc, getLogger() );
* workflowState = workflowable.getLatestVersion().getState();
* canRollback = new Boolean(wfManager.canInvoke(workflowable,
* WORKFLOW_EVENT_EDIT)); } catch (ServiceException e) { throw new
* RuntimeException(e); } finally { if (wfManager != null) {
* manager.release(wfManager); } } setParameter("workflowState",
* workflowState); setParameter("canRollback", canRollback);
*/
}
}
protected String getEvent() {
return getParameterAsString("workflowEvent");
}
}