001/* 002 * (C) Copyright 2014 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-2.1.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 * <a href="mailto:grenard@nuxeo.com">Guillaume Renard</a> 016 * 017 */ 018 019package org.nuxeo.ecm.restapi.server.jaxrs.routing.io; 020 021import java.io.IOException; 022import java.io.Serializable; 023import java.util.Map.Entry; 024 025import javax.servlet.http.HttpServletRequest; 026import javax.ws.rs.Produces; 027import javax.ws.rs.core.Context; 028import javax.ws.rs.core.MediaType; 029import javax.ws.rs.core.UriInfo; 030import javax.ws.rs.ext.Provider; 031 032import org.codehaus.jackson.JsonGenerationException; 033import org.codehaus.jackson.JsonGenerator; 034import org.nuxeo.ecm.automation.jaxrs.io.EntityWriter; 035import org.nuxeo.ecm.platform.routing.api.DocumentRoute; 036import org.nuxeo.ecm.platform.routing.core.impl.GraphNode; 037import org.nuxeo.ecm.platform.routing.core.impl.GraphRoute; 038import org.nuxeo.ecm.restapi.server.jaxrs.routing.io.util.JsonEncodeDecodeUtils; 039 040/** 041 * @since 7.2 042 */ 043@Provider 044@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON + "+nxentity" }) 045public class DocumentRouteWriter extends EntityWriter<DocumentRoute> { 046 047 public static final String ENTITY_TYPE = "workflow"; 048 049 @Context 050 HttpServletRequest request; 051 052 @Context 053 UriInfo uriInfo; 054 055 @Override 056 protected void writeEntityBody(JsonGenerator jg, DocumentRoute item) throws IOException { 057 writeDocumentRoute(jg, item, request, uriInfo); 058 } 059 060 public static void writeDocumentRoute(JsonGenerator jg, DocumentRoute item, HttpServletRequest request, 061 UriInfo uriInfo) throws JsonGenerationException, IOException { 062 jg.writeStringField("id", item.getDocument().getId()); 063 jg.writeStringField("name", item.getName()); 064 jg.writeStringField("title", item.getTitle()); 065 jg.writeStringField("state", item.getDocument().getCurrentLifeCycleState()); 066 jg.writeStringField("workflowModelName", item.getModelName()); 067 jg.writeStringField("initiator", item.getInitiator()); 068 069 jg.writeArrayFieldStart("attachedDocumentIds"); 070 for (String docId : item.getAttachedDocuments()) { 071 jg.writeStartObject(); 072 jg.writeStringField("id", docId); 073 jg.writeEndObject(); 074 } 075 jg.writeEndArray(); 076 077 if (item instanceof GraphRoute) { 078 GraphRoute graphRoute = (GraphRoute) item; 079 jg.writeFieldName("variables"); 080 jg.writeStartObject(); 081 for (Entry<String, Serializable> e : graphRoute.getVariables().entrySet()) { 082 JsonEncodeDecodeUtils.encodeVariableEntry(item.getDocument(), GraphNode.PROP_VARIABLES_FACET, e, jg, 083 request); 084 } 085 jg.writeEndObject(); 086 String graphResourceUrl = ""; 087 if (item.isValidated()) { 088 // it is a model 089 graphResourceUrl = uriInfo.getBaseUri() + "api/v1/workflowModel/" + item.getDocument().getName() 090 + "/graph"; 091 } else { 092 // it is an instance 093 graphResourceUrl = uriInfo.getBaseUri() + "api/v1/workflow/" + item.getDocument().getId() + "/graph"; 094 } 095 jg.writeStringField("graphResource", graphResourceUrl); 096 } 097 } 098 099 @Override 100 protected String getEntityType() { 101 return ENTITY_TYPE; 102 } 103 104}