/** * **************************************************************************** * Copyright (C) 2014 BonitaSoft S.A. * BonitaSoft is a trademark of BonitaSoft SA. * This software file is BONITASOFT CONFIDENTIAL. Not For Distribution. * For commercial licensing information, contact: * BonitaSoft, 32 rue Gustave Eiffel – 38000 Grenoble * or BonitaSoft US, 51 Federal Street, Suite 305, San Francisco, CA 94107 * ***************************************************************************** */ package org.bonitasoft.web.rest.server.api.bdm; import org.bonitasoft.engine.api.BusinessDataAPI; import org.bonitasoft.engine.bpm.data.DataNotFoundException; import org.bonitasoft.engine.business.data.BusinessDataReference; import org.bonitasoft.engine.business.data.MultipleBusinessDataReference; import org.bonitasoft.engine.business.data.SimpleBusinessDataReference; import org.bonitasoft.web.rest.server.BonitaRestletApplication; import org.bonitasoft.web.rest.server.api.resource.CommonResource; import org.restlet.data.Status; import org.restlet.resource.Get; /** * @author Matthieu Chaffotte */ public class BusinessDataReferenceResource extends CommonResource { private final BusinessDataAPI bdmAPI; public BusinessDataReferenceResource(final BusinessDataAPI bdmAPI) { this.bdmAPI = bdmAPI; } @Get("json") public BusinessDataReferenceClient getProcessBusinessDataReference() throws DataNotFoundException { final String businessDataName = getPathParam("dataName"); final Long processInstanceId = getPathParamAsLong("caseId"); return toClient(bdmAPI.getProcessBusinessDataReference(businessDataName, processInstanceId)); } public static BusinessDataReferenceClient toClient(BusinessDataReference object) { if (object instanceof SimpleBusinessDataReference) { final SimpleBusinessDataReference businessDataReference = (SimpleBusinessDataReference) object; return new SimpleBusinessDataReferenceClient(object.getName(), object.getType(), getUrl(object.getType(), getStorageIdString(businessDataReference)), businessDataReference.getStorageId()); } else { final MultipleBusinessDataReference businessDataReference = (MultipleBusinessDataReference) object; return new MultipleBusinessDataReferenceClient(object.getName(), object.getType(), getUrl(businessDataReference.getType(), getValue(businessDataReference)), businessDataReference.getStorageIds()); } } private static String getStorageIdString(SimpleBusinessDataReference businessDataReference) { Long storageId = businessDataReference.getStorageId(); if (storageId != null) { return storageId.toString(); } return ""; } static String getValue(MultipleBusinessDataReference multipleBusinessDataReference) { return "findByIds?ids="+multipleBusinessDataReference.getStorageIds().toString().replaceAll("[\\[\\] ]",""); } private static String getUrl(String type, String value) { return "API" + BonitaRestletApplication.BDM_BUSINESS_DATA_URL + "/" + type + "/" + value; } @Override protected void doCatch(final Throwable throwable) { super.doCatch(throwable); if (throwable.getCause() instanceof DataNotFoundException) { getResponse().setStatus(Status.CLIENT_ERROR_NOT_FOUND); } } }