001/* 002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * <a href="mailto:grenard@nuxeo.com">Guillaume Renard</a> 018 * 019 */ 020 021package org.nuxeo.ecm.restapi.server.jaxrs.routing.io; 022 023import java.io.IOException; 024import java.io.Serializable; 025import java.util.Map.Entry; 026 027import javax.servlet.http.HttpServletRequest; 028import javax.ws.rs.Produces; 029import javax.ws.rs.core.Context; 030import javax.ws.rs.core.MediaType; 031import javax.ws.rs.core.UriInfo; 032import javax.ws.rs.ext.Provider; 033 034import org.codehaus.jackson.JsonGenerationException; 035import org.codehaus.jackson.JsonGenerator; 036import org.nuxeo.ecm.automation.jaxrs.io.EntityWriter; 037import org.nuxeo.ecm.platform.routing.api.DocumentRoute; 038import org.nuxeo.ecm.platform.routing.core.impl.GraphRoute; 039import org.nuxeo.ecm.platform.routing.core.io.JsonEncodeDecodeUtils; 040 041/** 042 * @since 7.2 043 */ 044@Provider 045@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON + "+nxentity" }) 046public class DocumentRouteWriter extends EntityWriter<DocumentRoute> { 047 048 public static final String ENTITY_TYPE = "workflow"; 049 050 @Context 051 HttpServletRequest request; 052 053 @Context 054 UriInfo uriInfo; 055 056 @Override 057 protected void writeEntityBody(JsonGenerator jg, DocumentRoute item) throws IOException { 058 writeDocumentRoute(jg, item, request, uriInfo); 059 } 060 061 public static void writeDocumentRoute(JsonGenerator jg, DocumentRoute item, HttpServletRequest request, 062 UriInfo uriInfo) throws JsonGenerationException, IOException { 063 jg.writeStringField("id", item.getDocument().getId()); 064 jg.writeStringField("name", item.getName()); 065 jg.writeStringField("title", item.getTitle()); 066 jg.writeStringField("state", item.getDocument().getCurrentLifeCycleState()); 067 jg.writeStringField("workflowModelName", item.getModelName()); 068 jg.writeStringField("initiator", item.getInitiator()); 069 070 jg.writeArrayFieldStart("attachedDocumentIds"); 071 for (String docId : item.getAttachedDocuments()) { 072 jg.writeStartObject(); 073 jg.writeStringField("id", docId); 074 jg.writeEndObject(); 075 } 076 jg.writeEndArray(); 077 078 if (item instanceof GraphRoute) { 079 GraphRoute graphRoute = (GraphRoute) item; 080 jg.writeFieldName("variables"); 081 jg.writeStartObject(); 082 for (Entry<String, Serializable> e : graphRoute.getVariables().entrySet()) { 083 JsonEncodeDecodeUtils.encodeVariableEntry(item.getDocument(), GraphRoute.PROP_VARIABLES_FACET, e, jg, 084 request); 085 } 086 jg.writeEndObject(); 087 String graphResourceUrl = ""; 088 if (item.isValidated()) { 089 // it is a model 090 graphResourceUrl = uriInfo.getBaseUri() + "api/v1/workflowModel/" + item.getDocument().getName() 091 + "/graph"; 092 } else { 093 // it is an instance 094 graphResourceUrl = uriInfo.getBaseUri() + "api/v1/workflow/" + item.getDocument().getId() + "/graph"; 095 } 096 jg.writeStringField("graphResource", graphResourceUrl); 097 } 098 } 099 100 @Override 101 protected String getEntityType() { 102 return ENTITY_TYPE; 103 } 104 105}