001/* 002 * (C) Copyright 2009-2012 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Alexandre Russel 016 * Florent Guillaume 017 */ 018package org.nuxeo.ecm.platform.routing.core.impl; 019 020import java.io.Serializable; 021import java.util.HashMap; 022import java.util.Map; 023 024import org.nuxeo.ecm.core.api.CoreSession; 025import org.nuxeo.ecm.core.api.DocumentModel; 026import org.nuxeo.ecm.core.api.IdRef; 027import org.nuxeo.ecm.core.api.NuxeoException; 028import org.nuxeo.ecm.core.api.UnrestrictedSessionRunner; 029import org.nuxeo.ecm.platform.routing.api.DocumentRoute; 030import org.nuxeo.ecm.platform.routing.api.DocumentRoutingConstants; 031import org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEngineService; 032import org.nuxeo.runtime.model.DefaultComponent; 033 034public class DocumentRoutingEngineServiceImpl extends DefaultComponent implements DocumentRoutingEngineService { 035 036 public static final String WORKFLOW_NAME_EVENT_PROPERTY_KEY = "wfName"; 037 038 @Override 039 public void start(DocumentRoute routeInstance, Map<String, Serializable> map, CoreSession session) { 040 routeInstance.run(session, map); 041 } 042 043 @Override 044 public void resume(DocumentRoute routeInstance, String nodeId, String taskId, Map<String, Object> data, 045 String status, CoreSession session) { 046 routeInstance.resume(session, nodeId, taskId, data, status); 047 } 048 049 @Override 050 public void cancel(DocumentRoute routeInstance, CoreSession session) { 051 final String routeDocId = routeInstance.getDocument().getId(); 052 new UnrestrictedSessionRunner(session) { 053 @Override 054 public void run() { 055 DocumentModel routeDoc = session.getDocument(new IdRef(routeDocId)); 056 DocumentRoute routeInstance = routeDoc.getAdapter(DocumentRoute.class); 057 if (routeInstance == null) { 058 throw new NuxeoException("Document " + routeDoc + " can not be adapted to a DocumentRoute"); 059 } 060 routeInstance.cancel(session); 061 } 062 }.runUnrestricted(); 063 Map<String, Serializable> properties = new HashMap<String, Serializable>(); 064 properties.put(WORKFLOW_NAME_EVENT_PROPERTY_KEY, routeInstance.getTitle()); 065 EventFirer.fireEvent(session, routeInstance.getAttachedDocuments(session), properties, 066 DocumentRoutingConstants.Events.workflowCanceled.name()); 067 } 068}