From: Richard Millet Date: Wed, 30 Mar 2011 22:49:49 +0000 (+0000) Subject: CSPACE-3708: Workflow get/update now fully supported on Dimmension objects. X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=a7b40a418bc2c1f72c326e6bc1baaba5aea1eb48;p=tmp%2Fjakarta-migration.git CSPACE-3708: Workflow get/update now fully supported on Dimmension objects. --- diff --git a/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java b/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java index bdaeab9bd..1314d1cd7 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java +++ b/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java @@ -410,9 +410,14 @@ public abstract class AbstractServiceClientImpl } @Override - public ClientResponse getWorkflow(@PathParam("csid") String csid) { + public ClientResponse getWorkflow(String csid) { return getProxy().getWorkflow(csid); - } + } + + @Override + public ClientResponse updateWorkflow(String csid, PoxPayloadOut xmlPayload) { + return getProxy().updateWorkflow(csid, xmlPayload.getBytes()); + } /* * Because of how RESTEasy creates proxy classes, sub-interfaces will need to override diff --git a/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceClient.java b/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceClient.java index cfe589306..90dc28b3e 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceClient.java +++ b/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceClient.java @@ -176,7 +176,9 @@ public interface CollectionSpaceClient { * @param csid the csid of the entity * @return the workflow */ - public ClientResponse getWorkflow(@PathParam("csid") String csid); + public ClientResponse getWorkflow(String csid); + + public ClientResponse updateWorkflow(String csid, PoxPayloadOut xmlPayload); /** * Gets the authority refs. diff --git a/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceProxy.java b/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceProxy.java index 02c39baae..e093f4be6 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceProxy.java +++ b/services/client/src/main/java/org/collectionspace/services/client/CollectionSpaceProxy.java @@ -26,8 +26,10 @@ */ package org.collectionspace.services.client; +import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.DELETE; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -57,9 +59,17 @@ public interface CollectionSpaceProxy { ClientResponse getAuthorityRefs(@PathParam("csid") String csid); @GET + @Produces({"application/xml"}) + @Consumes({"application/xml"}) @Path("{csid}/workflow") ClientResponse getWorkflow(@PathParam("csid") String csid); + @PUT + @Produces({"application/xml"}) + @Consumes({"application/xml"}) + @Path("{csid}/workflow") + ClientResponse updateWorkflow(@PathParam("csid") String csid, byte[] xmlPayload); + /* * (R)read List operations */ diff --git a/services/common/src/main/java/org/collectionspace/services/common/AbstractMultiPartCollectionSpaceResourceImpl.java b/services/common/src/main/java/org/collectionspace/services/common/AbstractMultiPartCollectionSpaceResourceImpl.java index 1371cb62b..e669941c4 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/AbstractMultiPartCollectionSpaceResourceImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/AbstractMultiPartCollectionSpaceResourceImpl.java @@ -26,9 +26,12 @@ */ package org.collectionspace.services.common; +import javax.ws.rs.Consumes; import javax.ws.rs.GET; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; @@ -45,6 +48,7 @@ import org.collectionspace.services.common.security.UnauthorizedException; import org.collectionspace.services.common.workflow.client.WorkflowClient; import org.collectionspace.services.common.workflow.service.nuxeo.WorkflowDocumentModelHandler; import org.collectionspace.services.workflow.WorkflowsCommon; +import org.jboss.resteasy.client.ClientResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -167,14 +171,14 @@ public abstract class AbstractMultiPartCollectionSpaceResourceImpl extends /* * JAX-RS Annotated methods */ - + @GET @Path("{csid}/workflow") public byte[] getWorkflow( @PathParam("csid") String csid) { PoxPayloadOut result = null; - try { + try { ServiceContext parentCtx = createServiceContext(); String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName(); @@ -190,4 +194,25 @@ public abstract class AbstractMultiPartCollectionSpaceResourceImpl extends return result.getBytes(); } + @PUT + @Path("{csid}/workflow") + public byte[] updateWorkflow(@PathParam("csid") String csid, String xmlPayload) { + PoxPayloadOut result = null; + try { + ServiceContext parentCtx = createServiceContext(); + String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName(); + + PoxPayloadIn workflowUpdate = new PoxPayloadIn(xmlPayload); + MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME, workflowUpdate); + WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx); + ctx.setRespositoryWorkspaceName(parentWorkspaceName); //find the document in the parent's workspace + getRepositoryClient(ctx).update(ctx, csid, handler); + result = ctx.getOutput(); + } catch (Exception e) { + throw bigReThrow(e, ServiceMessages.UPDATE_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid); + } + return result.getBytes(); + } + + } diff --git a/services/common/src/main/java/org/collectionspace/services/common/document/AbstractDocumentHandlerImpl.java b/services/common/src/main/java/org/collectionspace/services/common/document/AbstractDocumentHandlerImpl.java index e281c4c01..060af748d 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/document/AbstractDocumentHandlerImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/document/AbstractDocumentHandlerImpl.java @@ -371,7 +371,7 @@ public abstract class AbstractDocumentHandlerImpl * @see org.collectionspace.services.common.document.DocumentHandler#getQProperty(java.lang.String) */ @Override - public abstract String getQProperty(String prop); + public abstract String getQProperty(String prop) throws DocumentException; /* * Strip Nuxeo's schema name from the start of the field / element name. diff --git a/services/common/src/main/java/org/collectionspace/services/common/document/AbstractMultipartDocumentHandlerImpl.java b/services/common/src/main/java/org/collectionspace/services/common/document/AbstractMultipartDocumentHandlerImpl.java index e34b6dc28..a8a580ff5 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/document/AbstractMultipartDocumentHandlerImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/document/AbstractMultipartDocumentHandlerImpl.java @@ -101,6 +101,6 @@ public abstract class AbstractMultipartDocumentHandlerImpl public abstract void setCommonPartList(TL obj); @Override - public abstract String getQProperty(String prop); + public abstract String getQProperty(String prop) throws DocumentException; } diff --git a/services/common/src/main/java/org/collectionspace/services/common/document/DocumentHandler.java b/services/common/src/main/java/org/collectionspace/services/common/document/DocumentHandler.java index b869e9f75..a609e8d23 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/document/DocumentHandler.java +++ b/services/common/src/main/java/org/collectionspace/services/common/document/DocumentHandler.java @@ -307,8 +307,9 @@ public interface DocumentHandler { * getQProperty get qualified property (useful for mapping to repository document property) * @param prop * @return + * @throws DocumentException */ - public String getQProperty(String prop); + public String getQProperty(String prop) throws DocumentException; /** * getUnQProperty unqualifies document property from repository diff --git a/services/common/src/main/java/org/collectionspace/services/common/workflow/client/WorkflowClient.java b/services/common/src/main/java/org/collectionspace/services/common/workflow/client/WorkflowClient.java index 2f470777c..5090db8e3 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/workflow/client/WorkflowClient.java +++ b/services/common/src/main/java/org/collectionspace/services/common/workflow/client/WorkflowClient.java @@ -32,6 +32,11 @@ public class WorkflowClient extends AbstractPoxServiceClientImpl public static final String SERVICE_PAYLOAD_NAME = SERVICE_NAME; public static final String SERVICE_COMMONPART_NAME = SERVICE_NAME + PART_LABEL_SEPARATOR + PART_COMMON_LABEL; + public static final String WORKFLOWSTATE_DELETED = "deleted"; + public static final String WORKFLOWSTATE_PROJECT = "project"; + public static final String WORKFLOWSTATE_APPROVED = "approved"; + + @Override public String getServiceName() { return SERVICE_NAME; diff --git a/services/common/src/main/java/org/collectionspace/services/common/workflow/service/nuxeo/WorkflowDocumentModelHandler.java b/services/common/src/main/java/org/collectionspace/services/common/workflow/service/nuxeo/WorkflowDocumentModelHandler.java index dc622c4ad..2f47a3a84 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/workflow/service/nuxeo/WorkflowDocumentModelHandler.java +++ b/services/common/src/main/java/org/collectionspace/services/common/workflow/service/nuxeo/WorkflowDocumentModelHandler.java @@ -24,20 +24,47 @@ package org.collectionspace.services.common.workflow.service.nuxeo; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; +import org.collectionspace.services.client.PayloadInputPart; +import org.collectionspace.services.client.PoxPayloadIn; +import org.collectionspace.services.client.PoxPayloadOut; +import org.collectionspace.services.common.context.MultipartServiceContext; +import org.collectionspace.services.common.context.ServiceContext; +import org.collectionspace.services.common.document.BadRequestException; +import org.collectionspace.services.common.document.DocumentUtils; import org.collectionspace.services.common.document.DocumentWrapper; +import org.collectionspace.services.common.document.DocumentHandler.Action; import org.collectionspace.services.common.service.ObjectPartType; import org.collectionspace.services.common.workflow.client.WorkflowClient; import org.collectionspace.services.common.workflow.jaxb.WorkflowJAXBSchema; import org.collectionspace.services.nuxeo.client.java.DocHandlerBase; +import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl; import org.collectionspace.services.workflow.WorkflowsCommon; +import org.dom4j.Element; import org.nuxeo.ecm.core.api.DocumentModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class WorkflowDocumentModelHandler extends DocHandlerBase { + + /** The logger. */ + private final Logger logger = LoggerFactory.getLogger(WorkflowDocumentModelHandler.class); + + /* + * Workflow transitions + */ + private static final String TRANSITION_DELETE = "delete"; + private static final String TRANSITION_APPROVE = "approve"; + private static final String TRANSITION_UNKNOWN = "unknown"; + + /* + * Handle read (GET) + */ @Override protected Map extractPart(DocumentModel docModel, @@ -62,7 +89,6 @@ public class WorkflowDocumentModelHandler @Override public void extractAllParts(DocumentWrapper wrapDoc) throws Exception { - DocumentModel docModel = wrapDoc.getWrappedObject(); String[] schemas = {WorkflowClient.SERVICE_COMMONPART_NAME}; Map partsMetaMap = getServiceContext().getPartsMetadata(); @@ -75,6 +101,28 @@ public class WorkflowDocumentModelHandler addOutputPart(unQObjectProperties, schema, partMeta); } } + + private String getTransitionFromState(String state) { + String result = TRANSITION_UNKNOWN; + if (state.equalsIgnoreCase(WorkflowClient.WORKFLOWSTATE_DELETED)) { + result = TRANSITION_DELETE; + } else if (state.equalsIgnoreCase(WorkflowClient.WORKFLOWSTATE_APPROVED)) { + result = TRANSITION_APPROVE; + } + return result; + } + /* + * Handle Update (PUT) + */ + @Override + protected void fillPart(PayloadInputPart part, DocumentModel docModel, + ObjectPartType partMeta, Action action, + ServiceContext ctx) + throws Exception { + WorkflowsCommon workflowsCommon = (WorkflowsCommon)part.getBody(); + docModel.followTransition(getTransitionFromState(workflowsCommon.getCurrentLifeCycleState())); + } + } diff --git a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/DocHandlerBase.java b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/DocHandlerBase.java index 98ed10ff0..96daaf235 100755 --- a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/DocHandlerBase.java +++ b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/DocHandlerBase.java @@ -35,6 +35,7 @@ import org.collectionspace.services.common.service.ListResultField; import org.collectionspace.services.common.service.DocHandlerParams; import org.collectionspace.services.common.service.ServiceBindingType; import org.collectionspace.services.common.context.MultipartServiceContext; +import org.collectionspace.services.common.document.DocumentException; import org.collectionspace.services.common.document.DocumentWrapper; import org.collectionspace.services.jaxb.AbstractCommonList; import org.collectionspace.services.nuxeo.client.java.CommonList; @@ -67,7 +68,8 @@ public abstract class DocHandlerBase extends RemoteDocumentModelHandlerImpl extends RemoteDocumentModelHandlerImpl extends RemoteDocumentModelHandlerImpl getListItemsArray(){ + public List getListItemsArray() throws DocumentException { return getDocHandlerParams().getListResultsFields().getListResultField(); } @@ -123,7 +127,8 @@ public abstract class DocHandlerBase extends RemoteDocumentModelHandlerImpl wrapDoc) throws Exception { + @Override + public void fillCommonPart(T objectexitObject, DocumentWrapper wrapDoc) throws Exception { throw new UnsupportedOperationException(); } @@ -199,7 +204,7 @@ public abstract class DocHandlerBase extends RemoteDocumentModelHandlerImpl extends RemoteDocumentModelHandlerImpl wrapDoc) throws Exception { - String title = getDocHandlerParams().getDublinCoreTitle(); - if (Tools.isEmpty(title)){ - return; - } - DocumentModel docModel = wrapDoc.getWrappedObject(); - docModel.setPropertyValue("dublincore:title", title); + DocHandlerParams.Params docHandlerParams = null; + try { + docHandlerParams = getDocHandlerParams(); + } catch (Exception e) { + logger.warn(e.getMessage()); + } + + if (docHandlerParams != null) { + String title = getDocHandlerParams().getDublinCoreTitle(); + if (Tools.isEmpty(title) == false){ + DocumentModel docModel = wrapDoc.getWrappedObject(); + docModel.setPropertyValue("dublincore:title", title); + } + } } //================== UTILITY METHODS ================================================ diff --git a/services/dimension/client/src/main/java/org/collectionspace/services/client/DimensionClient.java b/services/dimension/client/src/main/java/org/collectionspace/services/client/DimensionClient.java index 139131494..7ad75a304 100644 --- a/services/dimension/client/src/main/java/org/collectionspace/services/client/DimensionClient.java +++ b/services/dimension/client/src/main/java/org/collectionspace/services/client/DimensionClient.java @@ -63,6 +63,5 @@ public class DimensionClient extends AbstractPoxServiceClientImpl readList() { DimensionProxy proxy = (DimensionProxy)getProxy(); return proxy.readList(); - } - + } } diff --git a/services/workflow/3rdparty/nuxeo-platform-cs-workflow/src/main/resources/META-INF/MANIFEST.MF b/services/workflow/3rdparty/nuxeo-platform-cs-workflow/src/main/resources/META-INF/MANIFEST.MF index 6b8bf3500..fb5cad529 100644 --- a/services/workflow/3rdparty/nuxeo-platform-cs-workflow/src/main/resources/META-INF/MANIFEST.MF +++ b/services/workflow/3rdparty/nuxeo-platform-cs-workflow/src/main/resources/META-INF/MANIFEST.MF @@ -16,7 +16,5 @@ Require-Bundle: org.nuxeo.runtime, org.nuxeo.ecm.platform.ws, org.collectionspace.collectionspace_core Provide-Package: org.collectionspace.workflow -Nuxeo-Component: OSGI-INF/core-types-contrib.xml, - OSGI-INF/ecm-types-contrib.xml, - OSGI-INF/layouts-contrib.xml +Nuxeo-Component: OSGI-INF/core-types-contrib.xml diff --git a/services/workflow/client/src/test/java/org/collectionspace/services/client/test/WorkflowServiceTest.java b/services/workflow/client/src/test/java/org/collectionspace/services/client/test/WorkflowServiceTest.java index 77d2e8eda..3582ae854 100644 --- a/services/workflow/client/src/test/java/org/collectionspace/services/client/test/WorkflowServiceTest.java +++ b/services/workflow/client/src/test/java/org/collectionspace/services/client/test/WorkflowServiceTest.java @@ -23,6 +23,7 @@ package org.collectionspace.services.client.test; import java.util.List; + import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -36,6 +37,7 @@ import org.collectionspace.services.common.workflow.client.WorkflowClient; import org.collectionspace.services.workflow.WorkflowsCommon; import org.collectionspace.services.client.DimensionClient; import org.collectionspace.services.dimension.DimensionsCommon; +import org.collectionspace.services.dimension.DimensionsCommonList; import org.jboss.resteasy.client.ClientResponse; @@ -92,10 +94,10 @@ public class WorkflowServiceTest extends AbstractServiceTestImpl { // allResourceIdsCreated.add(extractId(res)); // Store the IDs from every resource created by tests so they can be deleted after tests have been run. // } + /* * Create a Dimension instance to use as our test target. */ - @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class) public void createTestObject(String testName) throws Exception { logger.debug(testBanner(testName, CLASS_NAME)); setupCreate(); @@ -116,7 +118,7 @@ public class WorkflowServiceTest extends AbstractServiceTestImpl { } @Override - @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"createTestObject"}) + @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"create"}) public void read(String testName) throws Exception { logger.debug(testBanner(testName, CLASS_NAME)); setupRead(); @@ -151,30 +153,52 @@ public class WorkflowServiceTest extends AbstractServiceTestImpl { // } // } // } - + @Override -// @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"read"}) + @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"read"}) public void update(String testName) throws Exception { logger.debug(testBanner(testName, CLASS_NAME)); setupUpdate(); - WorkflowClient client = new WorkflowClient(); - ClientResponse res = client.read(knownResourceId); + updateLifeCycleState(testName, knownResourceId, WorkflowClient.WORKFLOWSTATE_APPROVED); + } + + private void updateLifeCycleState(String testName, String resourceId, String lifeCycleState) throws Exception { + // + // Read the existing object + // + DimensionClient client = new DimensionClient(); + ClientResponse res = client.getWorkflow(resourceId); assertStatusCode(res, testName); - logger.debug("got object to update with ID: " + knownResourceId); + logger.debug("Got object to update life cycle state with ID: " + resourceId); PoxPayloadIn input = new PoxPayloadIn(res.getEntity()); - WorkflowsCommon objectexit = (WorkflowsCommon) extractPart(input, client.getCommonPartName(), WorkflowsCommon.class); - Assert.assertNotNull(objectexit); - -// objectexit.setExitNumber("updated-" + objectexit.getExitNumber()); - logger.debug("Object to be updated:"+objectAsXmlString(objectexit, WorkflowsCommon.class)); + WorkflowsCommon workflowCommons = (WorkflowsCommon) extractPart(input, WorkflowClient.SERVICE_COMMONPART_NAME, WorkflowsCommon.class); + Assert.assertNotNull(workflowCommons); + // + // Mark it for a soft delete. + // + logger.debug("Current workflow state:" + objectAsXmlString(workflowCommons, WorkflowsCommon.class)); + workflowCommons.setCurrentLifeCycleState(lifeCycleState); PoxPayloadOut output = new PoxPayloadOut(WorkflowClient.SERVICE_PAYLOAD_NAME); - PayloadOutputPart commonPart = output.addPart(objectexit, MediaType.APPLICATION_XML_TYPE); - commonPart.setLabel(client.getCommonPartName()); - res = client.update(knownResourceId, output); + PayloadOutputPart commonPart = output.addPart(workflowCommons, MediaType.APPLICATION_XML_TYPE); + commonPart.setLabel(WorkflowClient.SERVICE_COMMONPART_NAME); + // + // Perform the update + // + res = client.updateWorkflow(resourceId, output); assertStatusCode(res, testName); input = new PoxPayloadIn(res.getEntity()); - WorkflowsCommon updatedObjectExit = (WorkflowsCommon) extractPart(input, client.getCommonPartName(), WorkflowsCommon.class); - Assert.assertNotNull(updatedObjectExit); + WorkflowsCommon updatedWorkflowCommons = (WorkflowsCommon) extractPart(input, WorkflowClient.SERVICE_COMMONPART_NAME, WorkflowsCommon.class); + Assert.assertNotNull(updatedWorkflowCommons); + // + // Read the updated object and make sure it was updated correctly. + // + res = client.getWorkflow(resourceId); + assertStatusCode(res, testName); + logger.debug("Got workflow state of updated object with ID: " + resourceId); + input = new PoxPayloadIn(res.getEntity()); + updatedWorkflowCommons = (WorkflowsCommon) extractPart(input, WorkflowClient.SERVICE_COMMONPART_NAME, WorkflowsCommon.class); + Assert.assertNotNull(workflowCommons); + Assert.assertEquals(updatedWorkflowCommons.getCurrentLifeCycleState(), lifeCycleState); } @Override @@ -289,13 +313,63 @@ public class WorkflowServiceTest extends AbstractServiceTestImpl { } @Override + @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class) public void create(String testName) throws Exception { - //empty N/A + this.createTestObject(testName); } - @Override + private void readList(String testName, int expectedSize, String queryParam) { + // Perform setup. + setupReadList(); + + // Submit the request to the service and store the response. + DimensionClient client = new DimensionClient(); + ClientResponse res = client.readList(); + DimensionsCommonList list = res.getEntity(); + int statusCode = res.getStatus(); + // + // Check the status code of the response: does it match + // the expected response(s)? + // + if (logger.isDebugEnabled()) { + logger.debug(testName + ": status = " + statusCode); + } + Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode), + invalidStatusCodeMessage(REQUEST_TYPE, statusCode)); + Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE); + // + // Now check that list size is correct + // + List items = + list.getDimensionListItem(); + Assert.assertEquals(items.size(), expectedSize); + } + + /* + * This test assumes that no objects exist yet. + * + * http://localhost:8180/cspace-services/intakes?wf_deleted=false + */ + @Override + @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"update"}) public void readList(String testName) throws Exception { - //empty N/A + // + // Create 3 new objects + // + final int OBJECTS_TOTAL = 3; + for (int i = 0; i < OBJECTS_TOTAL; i++) { + this.createTestObject(testName); + } + // + // Mark one as soft deleted + // + int currentTotal = allResourceIdsCreated.size(); + String csid = allResourceIdsCreated.get(currentTotal - 1); //get the last one added + this.setupUpdate(); + this.updateLifeCycleState(testName, csid, WorkflowClient.WORKFLOWSTATE_DELETED); + // + // Read the list back + // } @Override