| /* |
| * 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.workflow.usecases; |
| |
| import org.apache.cocoon.components.ContextHelper; |
| import org.apache.cocoon.environment.Request; |
| import org.apache.lenya.ac.AccessControlException; |
| import org.apache.lenya.ac.Identifiable; |
| import org.apache.lenya.ac.User; |
| import org.apache.lenya.cms.ac.PolicyUtil; |
| import org.apache.lenya.cms.observation.RepositoryEvent; |
| import org.apache.lenya.cms.observation.RepositoryEventFactory; |
| import org.apache.lenya.cms.publication.Document; |
| import org.apache.lenya.cms.publication.DocumentException; |
| import org.apache.lenya.cms.publication.Proxy; |
| import org.apache.lenya.cms.publication.Publication; |
| import org.apache.lenya.cms.workflow.WorkflowUtil; |
| import org.apache.lenya.cms.workflow.usecases.InvokeWorkflow; |
| import org.apache.lenya.notification.Message; |
| import org.apache.lenya.notification.NotificationException; |
| import org.apache.lenya.notification.NotificationEventDescriptor; |
| import org.apache.lenya.workflow.Version; |
| import org.apache.lenya.workflow.Workflowable; |
| |
| /** |
| * Reject usecase handler. |
| */ |
| public class Reject extends InvokeWorkflow { |
| |
| protected static final String MESSAGE_SUBJECT = "notification-message"; |
| protected static final String MESSAGE_DOCUMENT_REJECTED = "document-rejected"; |
| protected static final String REJECT_REASON = "rejectReason"; |
| protected static final String SEND_NOTIFICATION = "sendNotification"; |
| |
| /** |
| * @see org.apache.lenya.cms.usecase.AbstractUsecase#doExecute() |
| */ |
| protected void doExecute() throws Exception { |
| |
| super.doExecute(); |
| |
| boolean notify = Boolean.valueOf(getBooleanCheckboxParameter(SEND_NOTIFICATION)) |
| .booleanValue(); |
| if (notify) { |
| sendNotification(getSourceDocument()); |
| } |
| } |
| |
| protected void sendNotification(Document authoringDocument) throws NotificationException, |
| DocumentException, AccessControlException { |
| |
| User sender = getSession().getIdentity().getUser(); |
| |
| String reason = getParameterAsString(REJECT_REASON); |
| Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager, getSession(), |
| getLogger(), authoringDocument); |
| Version versions[] = workflowable.getVersions(); |
| // current version is reject, want originating submit |
| Version version = versions[versions.length - 2]; |
| |
| // we assume that the document has been submitted, otherwise we do |
| // nothing |
| if (version.getEvent().equals("submit")) { |
| |
| String userId = version.getUserId(); |
| User user = PolicyUtil.getUser(this.manager, authoringDocument.getCanonicalWebappURL(), |
| userId, getLogger()); |
| |
| Identifiable[] recipients = { user }; |
| |
| Document authoringVersion = authoringDocument |
| .getAreaVersion(Publication.AUTHORING_AREA); |
| String url; |
| |
| Proxy proxy = authoringVersion.getPublication().getProxy(authoringVersion, false); |
| if (proxy != null) { |
| url = proxy.getURL(authoringVersion); |
| } else { |
| Request request = ContextHelper.getRequest(this.context); |
| final String serverUrl = "http://" + request.getServerName() + ":" |
| + request.getServerPort(); |
| final String webappUrl = authoringVersion.getCanonicalWebappURL(); |
| url = serverUrl + request.getContextPath() + webappUrl; |
| } |
| String[] params = { reason, url }; |
| Message message = new Message(MESSAGE_SUBJECT, new String[0], |
| MESSAGE_DOCUMENT_REJECTED, params, sender, recipients); |
| |
| NotificationEventDescriptor descriptor = new NotificationEventDescriptor(message); |
| RepositoryEvent event = RepositoryEventFactory.createEvent(this.manager, getSession(), |
| getLogger(), descriptor); |
| getSession().enqueueEvent(event); |
| } |
| } |
| } |