From 7b1574050e41e46502953db376ecdf40d17a176e Mon Sep 17 00:00:00 2001 From: ruan-wei Date: Wed, 25 May 2016 15:02:13 +0800 Subject: [PATCH] add support for link/unlink/move/copy --- .../client/sample/client/DCTMRestClient.java | 46 +++ .../sample/client/DCTMRestClientSample.java | 336 +++++++++++------- .../impl/AbstractRestTemplateClient.java | 36 ++ .../impl/jackson/DCTMJacksonClient.java | 161 ++++++--- .../client/impl/jaxb/DCTMJaxbClient.java | 160 ++++++--- .../rest/client/sample/model/FolderLink.java | 13 + .../rest/client/sample/model/Linkable.java | 5 + .../sample/model/{json => }/LinkableBase.java | 15 +- .../client/sample/model/ObjectAspects.java | 3 + .../client/sample/model/PlainFolderLink.java | 75 ++++ .../client/sample/model/PlainRestObject.java | 5 + .../sample/model/json/InlineLinkableBase.java | 1 + .../client/sample/model/json/JsonEntry.java | 1 + .../client/sample/model/json/JsonFeed.java | 1 + .../client/sample/model/json/JsonFeeds.java | 7 + .../sample/model/json/JsonFolderLink.java | 81 +++++ .../sample/model/json/JsonHomeDocument.java | 1 + .../sample/model/json/JsonObjectAspects.java | 1 + .../model/json/JsonValueAssistance.java | 1 + .../sample/model/xml/jaxb/JaxbEntry.java | 1 + .../sample/model/xml/jaxb/JaxbFeed.java | 1 + .../sample/model/xml/jaxb/JaxbFolderLink.java | 89 +++++ .../model/xml/jaxb/JaxbHomeDocument.java | 1 + .../sample/model/xml/jaxb/JaxbObject.java | 1 + .../model/xml/jaxb/JaxbObjectAspects.java | 1 + .../sample/model/xml/jaxb/JaxbRepository.java | 3 +- .../sample/model/xml/jaxb/JaxbType.java | 1 + .../model/xml/jaxb/JaxbValueAssistance.java | 1 + .../sample/model/xml/jaxb/LinkableBase.java | 61 ---- .../client/sample/model/xml/jaxb/jaxb.index | 1 + 30 files changed, 808 insertions(+), 302 deletions(-) create mode 100644 src/main/java/com/emc/documentum/rest/client/sample/model/FolderLink.java rename src/main/java/com/emc/documentum/rest/client/sample/model/{json => }/LinkableBase.java (86%) create mode 100644 src/main/java/com/emc/documentum/rest/client/sample/model/PlainFolderLink.java create mode 100644 src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFolderLink.java create mode 100644 src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFolderLink.java delete mode 100644 src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/LinkableBase.java diff --git a/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClient.java b/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClient.java index 1a076ae..c0fbaff 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClient.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClient.java @@ -6,9 +6,11 @@ import javax.annotation.concurrent.NotThreadSafe; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import com.emc.documentum.rest.client.sample.model.Feed; +import com.emc.documentum.rest.client.sample.model.FolderLink; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.LinkRelation; import com.emc.documentum.rest.client.sample.model.Linkable; @@ -190,6 +192,17 @@ public interface DCTMRestClient { */ public RestObject update(RestObject oldObject, RestObject newObject, String... params); + /** + * update the RestObject with new properties + * @param oldObject + * @param rel + * @param newObject + * @param method + * @param params + * @return + */ + public RestObject update(RestObject oldObject, LinkRelation rel, RestObject newObject, HttpMethod method, String... params); + /** * delete the resource * @param linkable @@ -516,4 +529,37 @@ public interface DCTMRestClient { * @return */ public RestObject getNetworkLocation(String uri, String... params); + + /** + * get folder links of the object + * @param params + * @return + */ + public Feed getFolderLinks(RestObject object, LinkRelation rel, String... params); + + /** + * get single folder link + * @param uri + * @param params + * @return + */ + public FolderLink getFolderLink(String uri, String... params); + + /** + * move the object by the folder link + * @param oldLink + * @param newLink + * @param params + * @return + */ + public FolderLink move(FolderLink oldLink, FolderLink newLink, String... params); + + /** + * link an object to another place + * @param object + * @param rel + * @param link + * @return + */ + public FolderLink link(RestObject object, LinkRelation rel, FolderLink link); } diff --git a/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClientSample.java b/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClientSample.java index 852be9b..622fdce 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClientSample.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/client/DCTMRestClientSample.java @@ -12,11 +12,13 @@ import com.emc.documentum.rest.client.sample.client.util.Randoms; import com.emc.documentum.rest.client.sample.model.Entry; import com.emc.documentum.rest.client.sample.model.Feed; +import com.emc.documentum.rest.client.sample.model.FolderLink; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.Link; import com.emc.documentum.rest.client.sample.model.LinkRelation; import com.emc.documentum.rest.client.sample.model.Linkable; import com.emc.documentum.rest.client.sample.model.ObjectAspects; +import com.emc.documentum.rest.client.sample.model.PlainFolderLink; import com.emc.documentum.rest.client.sample.model.PlainRestObject; import com.emc.documentum.rest.client.sample.model.PlainValueAssistantRequest; import com.emc.documentum.rest.client.sample.model.Repository; @@ -24,6 +26,16 @@ import com.emc.documentum.rest.client.sample.model.RestType; import com.emc.documentum.rest.client.sample.model.ValueAssistant; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHILD_LINKS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DEFAULT_FOLDER; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DEMATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ENCLOSURE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.LIGHTWEIGHT_OBJECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.MATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.OBJECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_NEXT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PARENT_LINKS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SELF; /** * sample application uses DCTMRestClient @@ -63,21 +75,22 @@ public static void main(String[] args) throws Exception { sb = new StringBuilder(); sb.append(productInfo.getProperties().get("product") + " " + productInfo.getProperties().get("product_version")).append(NEWLINE) .append("Please input the number of the sample operation which need be executed:").append(NEWLINE) - .append("0 Exit").append(NEWLINE) - .append("1 Navigation").append(NEWLINE) - .append("2 Folder Create/Update/Delete").append(NEWLINE) - .append("3 Sysobject Create/Update/Delete").append(NEWLINE) - .append("4 Document Create/Update/Delete").append(NEWLINE) - .append("5 Content Management").append(NEWLINE) - .append("6 Version Management").append(NEWLINE) - .append("7 DQL Query").append(NEWLINE) - .append("8 Type(REST Services 7.x) and Value Assistance (REST Services 7.3+)").append(NEWLINE) - .append("9 Lightweight Object Type/Create/Materialize/Dematerialize/Reparent (REST Services 7.3+)").append(NEWLINE) + .append(" 0 Exit").append(NEWLINE) + .append(" 1 Navigation").append(NEWLINE) + .append(" 2 Folder Create/Update/Delete").append(NEWLINE) + .append(" 3 Sysobject Create/Update/Delete").append(NEWLINE) + .append(" 4 Document Create/Update/Delete").append(NEWLINE) + .append(" 5 Content Management").append(NEWLINE) + .append(" 6 Version Management").append(NEWLINE) + .append(" 7 DQL Query").append(NEWLINE) + .append(" 8 Type(REST Services 7.x) and Value Assistance (REST Services 7.3+)").append(NEWLINE) + .append(" 9 Lightweight Object Type/Create/Materialize/Dematerialize/Reparent (REST Services 7.3+)").append(NEWLINE) .append("10 Aspect AspectType/Attach/Detach (REST Services 7.3+)").append(NEWLINE) .append("11 Get Group(s)/User(s)/Default Folder (REST Services 7.x) and Create/Update/Delete User/Group Add/Remove User to/from Group (REST Services 7.3+)").append(NEWLINE) .append("12 Get Relation Typs(s) and Relation Create/Delete/Get").append(NEWLINE) .append("13 Get Format(s)").append(NEWLINE) - .append("14 Get Network Location(s)").append(NEWLINE); + .append("14 Get Network Location(s)").append(NEWLINE) + .append("15 Copy, Move, Link, Unlink").append(NEWLINE); while(true) { String sample = read(sb.toString()); @@ -131,6 +144,9 @@ public static void main(String[] args) throws Exception { case 14: networkLocation(); break; + case 15: + copyMoveLinkUnlink(); + break; default: System.out.println("Unsupported " + op); } @@ -188,7 +204,7 @@ private static String read(String prompt, String defaultValue) { private static void navigation() { System.out.println("start Navigation sample"); - System.out.println("-------------get home document resource"); + printStep("get home document resource"); HomeDocument home = client.getHomeDocument(); List list = home.getLinks(); for(Link l : list) { @@ -196,13 +212,13 @@ private static void navigation() { } printNewLine(); - System.out.println("-------------get repositories collection"); + printStep("get repositories collection"); Feed repositories = client.getRepositories(); System.out.println("There are " + repositories.getTotal() + " repositories in total."); printEntryContentSrc(repositories); printNewLine(); - System.out.println("-------------get the repository"); + printStep("get the repository"); Repository repository = client.getRepository(); System.out.println(repository.getName()); for(Repository.Server s : repository.getServers()) { @@ -213,67 +229,67 @@ private static void navigation() { } printNewLine(); - System.out.println("-------------get cabinets"); + printStep("get cabinets"); Feed cabinets = client.getCabinets(); printEntryContentSrc(cabinets); printNewLine(); - System.out.println("-------------get cabinets by page with 2 cabinets per page"); + printStep("get cabinets by page with 2 cabinets per page"); cabinets = client.getCabinets("items-per-page", "2", "include-total", "true"); System.out.println("There are " + cabinets.getTotal() + " cabinets in total."); printEntryContentSrc(cabinets); printNewLine(); - System.out.println("-------------get cabinets of the next page"); + printStep("get cabinets of the next page"); cabinets = client.nextPage(cabinets); printEntryContentSrc(cabinets); printNewLine(); - System.out.println("-------------get cabinets of the last page"); + printStep("get cabinets of the last page"); cabinets = client.lastPage(cabinets); printEntryContentSrc(cabinets); printNewLine(); - System.out.println("-------------get cabinets of the previous page"); + printStep("get cabinets of the previous page"); cabinets = client.previousPage(cabinets); printEntryContentSrc(cabinets); printNewLine(); - System.out.println("-------------get the Temp cabinet"); + printStep("get the Temp cabinet"); RestObject tempCabinet = client.getCabinet("Temp"); printRestObject(tempCabinet); printNewLine(); - System.out.println("-------------get folders under the Temp cabinet"); + printStep("get folders under the Temp cabinet"); Feed folders = client.getFolders(tempCabinet); printEntryContentSrc(folders); printNewLine(); - System.out.println("-------------get documents under the Temp cabinet"); + printStep("get documents under the Temp cabinet"); Feed documents = client.getDocuments(tempCabinet); printEntryContentSrc(documents); printNewLine(); - System.out.println("-------------get sysobjects under the Temp cabinet"); + printStep("get sysobjects under the Temp cabinet"); Feed objects = client.getDocuments(tempCabinet); printEntryContentSrc(objects); printNewLine(); - System.out.println("-------------get cabinets with the content embedded in the feed entry"); + printStep("get cabinets with the content embedded in the feed entry"); cabinets = client.getCabinets("inline", "true"); for(Entry e : cabinets.getEntries()) { RestObject o = e.getContentObject(); printRestObject(o); - printLinkRel(o, LinkRelation.SELF); + printLinkRel(o, SELF); } printNewLine(); - System.out.println("-------------get folders under the Temp cabinet with the content embedded in the feed entry"); + printStep("get folders under the Temp cabinet with the content embedded in the feed entry"); folders = client.getFolders(tempCabinet, "inline", "true"); for(Entry e : folders.getEntries()) { RestObject o = e.getContentObject(); printRestObject(o); - printLinkRel(o, LinkRelation.SELF); + printLinkRel(o, SELF); } printNewLine(); @@ -289,40 +305,40 @@ private static void crudFolder() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create a folder under the Temp cabinet"); + printStep("create a folder under the Temp cabinet"); RestObject newFolder = new PlainRestObject("object_name", "my_new_folder"); RestObject createdFolder = client.createFolder(tempCabinet, newFolder); printHttpStatus(); printRestObject(createdFolder); printNewLine(); - System.out.println("-------------update the folder name"); + printStep("update the folder name"); RestObject updateFolder = new PlainRestObject("object_name", "my_new_folder_updated"); RestObject updatedFolder = client.update(createdFolder, updateFolder); printHttpStatus(); printRestObject(updatedFolder); printNewLine(); - System.out.println("-------------delete the created folder"); + printStep("delete the created folder"); client.delete(createdFolder); printHttpStatus(); printNewLine(); - System.out.println("-------------create a folder under the Temp cabinet"); + printStep("create a folder under the Temp cabinet"); RestObject newFolder1 = new PlainRestObject("object_name", "my_new_folder1"); RestObject createdFolder1 = client.createFolder(tempCabinet, newFolder1); printHttpStatus(); printRestObject(createdFolder1); printNewLine(); - System.out.println("-------------create a folder under the folder just created"); + printStep("create a folder under the folder just created"); RestObject newFolder2 = new PlainRestObject("object_name", "my_new_folder2"); RestObject createdFolder2 = client.createFolder(createdFolder1, newFolder2); printHttpStatus(); printRestObject(createdFolder2); printNewLine(); - System.out.println("-------------delete the created folder with a folder in it"); + printStep("delete the created folder with a folder in it"); client.delete(createdFolder1, "del-non-empty", "true"); printHttpStatus(); printNewLine(); @@ -339,26 +355,26 @@ private static void crudSysobject() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create an object without binary content under the Temp cabinet"); + printStep("create an object without binary content under the Temp cabinet"); RestObject newObjectWithoutContent = new PlainRestObject("object_name", "obj_without_content"); RestObject createdObjectWithoutContent = client.createObject(tempCabinet, newObjectWithoutContent, null); printHttpStatus(); printRestObject(createdObjectWithoutContent); printNewLine(); - System.out.println("-------------update the object with a new name"); + printStep("update the object with a new name"); RestObject updateObjectName = new PlainRestObject("object_name", "new_object_name"); RestObject updatedObjectWithObjectName = client.update(createdObjectWithoutContent, updateObjectName); printHttpStatus(); printRestObject(updatedObjectWithObjectName); printNewLine(); - System.out.println("-------------delete the created object"); + printStep("delete the created object"); client.delete(updatedObjectWithObjectName); printHttpStatus(); printNewLine(); - System.out.println("-------------create an object with repeating properties and specify dm_docment type under the Temp cabinet"); + printStep("create an object with repeating properties and specify dm_docment type under the Temp cabinet"); Map newPropertiesMap = new HashMap(); newPropertiesMap.put("r_object_type", "dm_document"); newPropertiesMap.put("object_name", "obj_with_repeating_properties"); @@ -369,31 +385,31 @@ private static void crudSysobject() { printRestObject(createdObjectWithRepeatingProperties, "r_object_id", "object_name", "r_object_type", "keywords"); printNewLine(); - System.out.println("-------------delete the created object"); + printStep("delete the created object"); client.delete(createdObjectWithRepeatingProperties); printHttpStatus(); printNewLine(); - System.out.println("-------------create an object with specify object type in another place to override the r_object_type"); + printStep("create an object with specify object type in another place to override the r_object_type"); RestObject newObjectWithOverwriteType = new PlainRestObject("dm_sysobject", newPropertiesMap); RestObject createdObjectWithOverwriteType = client.createObject(tempCabinet, newObjectWithOverwriteType, null); printHttpStatus(); printRestObject(createdObjectWithOverwriteType); printNewLine(); - System.out.println("-------------delete the created object"); + printStep("delete the created object"); client.delete(createdObjectWithOverwriteType); printHttpStatus(); printNewLine(); - System.out.println("-------------create an object with binary content under the Temp cabinet"); + printStep("create an object with binary content under the Temp cabinet"); RestObject newObjectWithContent = new PlainRestObject("object_name", "obj_with_content"); RestObject createdObjectWithContent = client.createObject(tempCabinet, newObjectWithContent, "I'm the content of the object", "format", "crtext"); printHttpStatus(); printRestObject(createdObjectWithContent); printNewLine(); - System.out.println("-------------delete the created object"); + printStep("delete the created object"); client.delete(createdObjectWithContent); printHttpStatus(); printNewLine(); @@ -410,33 +426,33 @@ private static void crudDocument() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create a document without binary content under the Temp cabinet"); + printStep("create a document without binary content under the Temp cabinet"); RestObject newObjectWithoutContent = new PlainRestObject("object_name", "obj_without_content"); RestObject createdObjectWithoutContent = client.createDocument(tempCabinet, newObjectWithoutContent, null); printHttpStatus(); printRestObject(createdObjectWithoutContent); printNewLine(); - System.out.println("-------------update the document with a new name"); + printStep("update the document with a new name"); RestObject updateObjectName = new PlainRestObject("object_name", "new_object_name"); RestObject updatedObjectWithObjectName = client.update(createdObjectWithoutContent, updateObjectName); printHttpStatus(); printRestObject(updatedObjectWithObjectName); printNewLine(); - System.out.println("-------------delete the created document"); + printStep("delete the created document"); client.delete(updatedObjectWithObjectName); printHttpStatus(); printNewLine(); - System.out.println("-------------create a document with binary content under the Temp cabinet"); + printStep("create a document with binary content under the Temp cabinet"); RestObject newObjectWithContent = new PlainRestObject("object_name", "obj_with_content"); RestObject createdObjectWithContent = client.createDocument(tempCabinet, newObjectWithContent, "I'm the content of the object", "format", "crtext"); printHttpStatus(); printRestObject(createdObjectWithContent); printNewLine(); - System.out.println("-------------delete the created object"); + printStep("delete the created object"); client.delete(createdObjectWithContent); printHttpStatus(); printNewLine(); @@ -454,35 +470,35 @@ private static void contentManagement() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create a document with binary content under the Temp cabinet"); + printStep("create a document with binary content under the Temp cabinet"); RestObject newObjectWithContent = new PlainRestObject("object_name", "obj_with_content"); RestObject createdObjectWithContent = client.createDocument(tempCabinet, newObjectWithContent, "I'm the content of the object", "format", "crtext"); printHttpStatus(); printRestObject(createdObjectWithContent); printNewLine(); - System.out.println("-------------get primary content of the document"); + printStep("get primary content of the document"); RestObject primaryContent = client.getPrimaryContent(createdObjectWithContent, "media-url-policy", "all"); - System.out.println("the ACS link: " + primaryContent.getHref(LinkRelation.ENCLOSURE, "ACS")); - System.out.println("the local link: " + primaryContent.getHref(LinkRelation.ENCLOSURE, "LOCAL")); + System.out.println("the ACS link: " + primaryContent.getHref(ENCLOSURE, "ACS")); + System.out.println("the local link: " + primaryContent.getHref(ENCLOSURE, "LOCAL")); printNewLine(); - System.out.println("-------------create a new rendition to the document"); + printStep("create a new rendition to the document"); client.enableStreamingForNextRequest(); client.createContent(createdObjectWithContent, "I'm the rendition content", "text/html", "primary", "false"); printHttpStatus(); printNewLine(); - System.out.println("-------------get primary content and rendition collection of the document"); + printStep("get primary content and rendition collection of the document"); Feed renditionList = client.getContents(createdObjectWithContent); for(Entry renditionEntry : renditionList.getEntries()) { System.out.println(renditionEntry.getTitle()); RestObject rendition = client.getContent(renditionEntry.getContentSrc()); - System.out.println("the content link: " + rendition.getHref(LinkRelation.ENCLOSURE)); + System.out.println("the content link: " + rendition.getHref(ENCLOSURE)); } printNewLine(); - System.out.println("-------------delete the created document"); + printStep("delete the created document"); client.delete(createdObjectWithContent); printHttpStatus(); printNewLine(); @@ -500,64 +516,64 @@ private static void versionManagement() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create a document without binary content under the Temp cabinet"); + printStep("create a document without binary content under the Temp cabinet"); RestObject newObjectWithoutContent = new PlainRestObject("object_name", "obj_without_content"); RestObject createdObjectWithoutContent = client.createDocument(tempCabinet, newObjectWithoutContent, null); printHttpStatus(); printRestObject(createdObjectWithoutContent, "r_object_id", "r_lock_owner"); printNewLine(); - System.out.println("-------------check out the created document"); + printStep("check out the created document"); RestObject checkedOutObject = client.checkout(createdObjectWithoutContent); printHttpStatus(); printRestObject(checkedOutObject, "r_object_id", "r_lock_owner"); printNewLine(); - System.out.println("-------------cancel check out the created document"); + printStep("cancel check out the created document"); client.cancelCheckout(checkedOutObject); printHttpStatus(); printNewLine(); - System.out.println("-------------check out the created document"); + printStep("check out the created document"); createdObjectWithoutContent = client.get(createdObjectWithoutContent); checkedOutObject = client.checkout(createdObjectWithoutContent); printHttpStatus(); printRestObject(checkedOutObject, "r_object_id", "r_lock_owner"); printNewLine(); - System.out.println("-------------check in the created document next minor version with new name"); + printStep("check in the created document next minor version with new name"); RestObject newObjectWithName = new PlainRestObject("object_name", "obj_without_content_checked_in"); RestObject checkedInObject = client.checkinNextMinor(checkedOutObject, newObjectWithName, null); printHttpStatus(); printRestObject(checkedInObject, "r_object_id", "r_lock_owner", "r_version_label"); printNewLine(); - System.out.println("-------------check out the created document"); + printStep("check out the created document"); checkedOutObject = client.checkout(createdObjectWithoutContent); printHttpStatus(); printRestObject(checkedOutObject, "r_object_id", "r_lock_owner"); printNewLine(); - System.out.println("-------------check in the created document branch version with new binary content"); + printStep("check in the created document branch version with new binary content"); checkedInObject = client.checkinBranch(checkedOutObject, null, "new content"); printHttpStatus(); printRestObject(checkedInObject, "r_object_id", "r_lock_owner", "r_version_label"); printNewLine(); - System.out.println("-------------check out the checked in document"); + printStep("check out the checked in document"); checkedOutObject = client.checkout(checkedInObject); printHttpStatus(); printRestObject(checkedOutObject, "r_object_id", "r_lock_owner"); printNewLine(); - System.out.println("-------------check in the created document next major version with both new anme and new binary content"); + printStep("check in the created document next major version with both new anme and new binary content"); newObjectWithName = new PlainRestObject("object_name", "new object name"); checkedInObject = client.checkinNextMajor(checkedOutObject, newObjectWithName, "new content"); printHttpStatus(); printRestObject(checkedInObject, "r_object_id", "r_lock_owner", "r_version_label"); printNewLine(); - System.out.println("-------------delete the created document with all versions"); + printStep("delete the created document with all versions"); client.delete(checkedInObject, "del-version", "all"); printHttpStatus(); printNewLine(); @@ -572,16 +588,16 @@ private static void versionManagement() { private static void dqlQuery() { System.out.println("start DQL Query sample"); - System.out.println("-------------execute dql 'select * from dm_cabinet' with 5 items per page"); + printStep("execute dql 'select * from dm_cabinet' with 5 items per page"); Feed queryResult = client.dql("select * from dm_user", "items-per-page", "5"); for(Entry e : queryResult.getEntries()) { RestObject o = e.getContentObject(); printRestObject(o, "r_object_id", "user_name"); } - System.out.println(queryResult.getHref(LinkRelation.PAGING_NEXT)); + System.out.println(queryResult.getHref(PAGING_NEXT)); printNewLine(); - System.out.println("-------------get the next page of dql 'select * from dm_cabinet' with 5 items per page"); + printStep("get the next page of dql 'select * from dm_cabinet' with 5 items per page"); queryResult = client.nextPage(queryResult); for(Entry e : queryResult.getEntries()) { RestObject o = e.getContentObject(); @@ -589,7 +605,7 @@ private static void dqlQuery() { } printNewLine(); - System.out.println("-------------execute dql 'select * from dm_format' with 5 items per page"); + printStep("execute dql 'select * from dm_format' with 5 items per page"); queryResult = client.dql("select name,description from dm_format", "items-per-page", "5"); for(Entry e : queryResult.getEntries()) { RestObject o = e.getContentObject(); @@ -597,7 +613,7 @@ private static void dqlQuery() { } printNewLine(); - System.out.println("-------------get the next page of dql 'select * from dm_format' with 5 items per page"); + printStep("get the next page of dql 'select * from dm_format' with 5 items per page"); queryResult = client.nextPage(queryResult); for(Entry e : queryResult.getEntries()) { RestObject o = e.getContentObject(); @@ -615,19 +631,19 @@ private static void dqlQuery() { private static void type() { System.out.println("get Type and Value Assistance sample"); - System.out.println("-------------get types"); + printStep("get types"); Feed types = client.getTypes(); printEntryContentSrc(types); printNewLine(); - System.out.println("-------------get inline types"); + printStep("get inline types"); types = client.getTypes("inline", "true", "items-per-page", "1"); for(Entry e : types.getEntries()) { System.out.println(e.getContentObject().getName() + " " + e.getContentObject().getCategory()); } printNewLine(); - System.out.println("-------------get type resource"); + printStep("get type resource"); RestType type = client.getType("dm_document"); List list = type.getLinks(); for(Link l : list) { @@ -640,7 +656,7 @@ private static void type() { } printNewLine(); - System.out.println("-------------get type value assistance of the fixed list"); + printStep("get type value assistance of the fixed list"); String typeWithFixedVAList = read("Please input the type name with the fixed value assistance list(no such type press 'return' directly to skip):", ""); if(!typeWithFixedVAList.isEmpty()) { String attrWithFixedVAList = read("Please input the attribute name of " + typeWithFixedVAList + " with the fixed assistance list:"); @@ -655,7 +671,7 @@ private static void type() { } printNewLine(); - System.out.println("-------------get type value assistance depencencies"); + printStep("get type value assistance depencencies"); String typeWithDenpendency = read("Please input the type name with value assistance dependencies(no such type press 'return' directly to skip):", ""); if(!typeWithDenpendency.isEmpty()) { RestType dependenciesVAType = client.getType(typeWithDenpendency); @@ -664,7 +680,7 @@ private static void type() { System.out.println(map.get("name") + ": " + map.get("dependencies")); } - System.out.println("-------------get type value assistance query values with depencencies"); + printStep("get type value assistance query values with depencencies"); String attrWithDependencies = read("Please input the attribute name of " + typeWithDenpendency + " with the query dependencies:"); String dependency = read("Please input the dependency name of " + typeWithDenpendency + "." + attrWithDependencies + ":"); String dependencyValue = read("Please input the dependency value of " + dependency + ":"); @@ -688,12 +704,12 @@ private static void type() { private static void cmdrLightweightObject() { System.out.println("start Lightweight Object Create/Materialize/Dematerialize/Reparent sample"); - System.out.println("-------------get all shareable types"); + printStep("get all shareable types"); Feed shareableTypes = client.getTypes("filter", "type_category=2"); printEntryContentSrc(shareableTypes); printNewLine(); - System.out.println("-------------get all lightweight types"); + printStep("get all lightweight types"); Feed lightweightTypes = client.getTypes("filter", "type_category=4"); printEntryContentSrc(lightweightTypes); printNewLine(); @@ -703,59 +719,59 @@ private static void cmdrLightweightObject() { RestObject tempCabinet = client.getCabinet("Temp"); - System.out.println("-------------create a shreable object under the Temp cabinet"); + printStep("create a shreable object under the Temp cabinet"); RestObject newShareableObject1 = new PlainRestObject("object_name", "shareable_object_1", "r_object_type", shareableType, "title", "shared title 1"); RestObject createdShareableObject1 = client.createObject(tempCabinet, newShareableObject1, null); printHttpStatus(); printRestObject(createdShareableObject1); printNewLine(); - System.out.println("-------------create a lightweight object sharing the " + createdShareableObject1.getObjectName()); + printStep("create a lightweight object sharing the " + createdShareableObject1.getObjectName()); RestObject newLightweightObject1 = new PlainRestObject("object_name", "lightweight_object_1", "r_object_type", lightweightType); - RestObject createdLightweightObject1 = client.createObject(createdShareableObject1, LinkRelation.LIGHTWEIGHT_OBJECTS, newLightweightObject1, null); + RestObject createdLightweightObject1 = client.createObject(createdShareableObject1, LIGHTWEIGHT_OBJECTS, newLightweightObject1, null); printHttpStatus(); printRestObject(createdLightweightObject1); printNewLine(); - System.out.println("-------------materialize the lightweight object " + createdLightweightObject1.getObjectName()); + printStep("materialize the lightweight object " + createdLightweightObject1.getObjectName()); RestObject materializedObject = client.materialize(createdLightweightObject1); printHttpStatus(); - if(materializedObject.getHref(LinkRelation.DEMATERIALIZE) != null) { + if(materializedObject.getHref(DEMATERIALIZE) != null) { System.out.println(createdLightweightObject1.getObjectName() + " materialized"); } printNewLine(); - System.out.println("-------------dematerialize the lightweight object " + createdLightweightObject1.getObjectName()); + printStep("dematerialize the lightweight object " + createdLightweightObject1.getObjectName()); client.dematerialize(materializedObject); RestObject dematerializedObject = client.get(createdLightweightObject1); printHttpStatus(); - if(materializedObject.getHref(LinkRelation.MATERIALIZE) != null) { + if(materializedObject.getHref(MATERIALIZE) != null) { System.out.println(createdLightweightObject1.getObjectName() + " dematerialized"); } printNewLine(); - System.out.println("-------------create another shreable object under the Temp cabinet"); + printStep("create another shreable object under the Temp cabinet"); RestObject newShareableObject2 = new PlainRestObject("object_name", "shareable_object_2", "r_object_type", shareableType, "title", "shared title 2"); RestObject createdShareableObject2 = client.createObject(tempCabinet, newShareableObject2, null); printHttpStatus(); printRestObject(createdShareableObject2); printNewLine(); - System.out.println("-------------reparent the lightweight to the new shareable object " + createdShareableObject2.getObjectName()); + printStep("reparent the lightweight to the new shareable object " + createdShareableObject2.getObjectName()); RestObject reparentedObject = client.reparent(dematerializedObject, createdShareableObject2); printHttpStatus(); printRestObject(reparentedObject, "title"); printNewLine(); - System.out.println("-------------delete the lightweight object " + reparentedObject.getObjectName()); + printStep("delete the lightweight object " + reparentedObject.getObjectName()); client.delete(reparentedObject); printHttpStatus(); - System.out.println("-------------delete the shareable object " + createdShareableObject2.getObjectName()); + printStep("delete the shareable object " + createdShareableObject2.getObjectName()); client.delete(createdShareableObject2); printHttpStatus(); - System.out.println("-------------delete the shareable object " + createdShareableObject1.getObjectName()); + printStep("delete the shareable object " + createdShareableObject1.getObjectName()); client.delete(createdShareableObject1); printHttpStatus(); @@ -769,12 +785,12 @@ private static void cmdrLightweightObject() { private static void aspect() { System.out.println("start AspectType/Attach/Detach sample"); - System.out.println("-------------get all aspect types"); + printStep("get all aspect types"); Feed aspectTypes = client.getAspectTypes(); printEntryContentSrc(aspectTypes); printNewLine(); - System.out.println("-------------attach an aspect to an object"); + printStep("attach an aspect to an object"); String aspectType = read("Please input the aspect type to be attached:"); RestObject aspect = client.getAspectType(aspectType); for(Map.Entry entry : aspect.getProperties().entrySet()) { @@ -789,11 +805,11 @@ private static void aspect() { System.out.println("attached aspects: " + objectAspects.getAspects()); printNewLine(); - System.out.println("-------------detach an aspect from an object"); + printStep("detach an aspect from an object"); client.detach(objectAspects, aspectType); printHttpStatus(); - System.out.println("-------------delete the created object " + object.getObjectId()); + printStep("delete the created object " + object.getObjectId()); client.delete(object); printHttpStatus(); @@ -807,82 +823,82 @@ private static void aspect() { private static void userGroup() { System.out.println("start User(s)/Group(s) samples"); - System.out.println("-------------get all users"); + printStep("get all users"); Feed users = client.getUsers(); printEntryContentSrc(users); printNewLine(); - System.out.println("-------------get a single user"); + printStep("get a single user"); RestObject user = client.getUser(users.getEntries().get(0).getContentSrc()); printRestObject(user, "user_name", "user_login_name", "user_privileges", "user_address"); printNewLine(); - System.out.println("-------------get all groups"); + printStep("get all groups"); Feed groups = client.getGroups(); printEntryContentSrc(groups); printNewLine(); - System.out.println("-------------get a single group"); + printStep("get a single group"); RestObject group = client.getGroup(groups.getEntries().get(0).getContentSrc()); printRestObject(group, "group_name", "owner_name", "group_display_name"); printNewLine(); String newUser = "user_" + Randoms.nextString(10); - System.out.println("-------------create the user " + newUser); + printStep("create the user " + newUser); RestObject createdUser = client.createUser(new PlainRestObject("user_name", newUser, "user_login_name", newUser, "user_address", newUser + "@test.com")); printRestObject(createdUser, "user_name", "user_login_name", "user_privileges", "user_address"); printNewLine(); - System.out.println("-------------update the user " + newUser); + printStep("update the user " + newUser); RestObject updatedUser = client.update(createdUser, new PlainRestObject("user_address", "updated " + newUser + "@test.com")); printRestObject(updatedUser, "user_name", "user_login_name", "user_privileges", "user_address"); printNewLine(); String newGroup = "group_" + Randoms.nextString(10); - System.out.println("-------------create the group " + newGroup); + printStep("create the group " + newGroup); RestObject createdGroup = client.createGroup(new PlainRestObject("group_name", newGroup)); printRestObject(createdGroup, "group_name", "owner_name", "group_display_name"); printNewLine(); - System.out.println("-------------update the group " + newGroup); + printStep("update the group " + newGroup); RestObject updatedGroup = client.update(createdGroup, new PlainRestObject("group_display_name", "updated " + newGroup)); printRestObject(updatedGroup, "group_name", "owner_name", "group_display_name"); printNewLine(); - System.out.println("-------------get the group " + newGroup + " member users"); + printStep("get the group " + newGroup + " member users"); Feed groupUsers = client.getUsers(updatedGroup); if(groupUsers.getEntries() == null) { System.out.println("there are 0 users in the group " + newGroup); } printNewLine(); - System.out.println("-------------add the user " + newUser + " to the group " + newGroup); + printStep("add the user " + newUser + " to the group " + newGroup); client.addUserToGroup(updatedGroup, updatedUser); printHttpStatus(); printNewLine(); - System.out.println("-------------get the group " + newGroup + " member users"); + printStep("get the group " + newGroup + " member users"); groupUsers = client.getUsers(updatedGroup); System.out.println("there are " + groupUsers.getEntries().size() + " users in the group " + newGroup); printEntryContentSrc(groupUsers); printNewLine(); - System.out.println("-------------get the user " + newUser + "'s default folder"); - RestObject defaultFolder = client.getFolder(updatedUser.getHref(LinkRelation.DEFAULT_FOLDER)); + printStep("get the user " + newUser + "'s default folder"); + RestObject defaultFolder = client.getFolder(updatedUser.getHref(DEFAULT_FOLDER)); printRestObject(defaultFolder); printNewLine(); - System.out.println("-------------remove the user " + newUser + " from the group " + newGroup); + printStep("remove the user " + newUser + " from the group " + newGroup); client.delete(groupUsers.getEntries().get(0)); printHttpStatus(); printNewLine(); - System.out.println("-------------delete user " + newUser); + printStep("delete user " + newUser); client.delete(updatedUser); printHttpStatus(); printNewLine(); - System.out.println("-------------delete group " + newGroup); + printStep("delete group " + newGroup); client.delete(updatedGroup); printHttpStatus(); printNewLine(); @@ -897,31 +913,31 @@ private static void userGroup() { private static void relation() { System.out.println("start Relation samples"); - System.out.println("-------------get all relation types"); + printStep("get all relation types"); Feed relationTypes = client.getRelationTypes(); printEntryContentSrc(relationTypes); printNewLine(); - System.out.println("-------------get a single relation type"); + printStep("get a single relation type"); RestObject relationType = client.getRelationType(relationTypes.getEntries().get(0).getContentSrc()); printRestObject(relationType, "relation_name", "parent_type", "child_type"); printNewLine(); - System.out.println("-------------get all relations"); + printStep("get all relations"); Feed relations = client.getRelations(); printEntryContentSrc(relations); printNewLine(); - System.out.println("-------------create a relation"); + printStep("create a relation"); RestObject tempCabinet = client.getCabinet("Temp"); - RestObject parent = client.createObject(tempCabinet, LinkRelation.OBJECTS, new PlainRestObject("object_name", "parent_object", "r_object_type", "dm_sysobject"), null); - RestObject child = client.createObject(tempCabinet, LinkRelation.OBJECTS, new PlainRestObject("object_name", "child_object", "r_object_type", "dm_sysobject"), null); + RestObject parent = client.createObject(tempCabinet, OBJECTS, new PlainRestObject("object_name", "parent_object", "r_object_type", "dm_sysobject"), null); + RestObject child = client.createObject(tempCabinet, OBJECTS, new PlainRestObject("object_name", "child_object", "r_object_type", "dm_sysobject"), null); RestObject createdRelation = client.createRelation(new PlainRestObject("relation_name", "peer", "parent_id", parent.getObjectId(), "child_id", child.getObjectId())); printRestObject(createdRelation, "relation_name", "parent_id", "child_id", "r_object_id"); printNewLine(); - System.out.println("-------------delete a relation"); - client.delete(createdRelation.getHref(LinkRelation.SELF)); + printStep("delete a relation"); + client.delete(createdRelation); printHttpStatus(); printNewLine(); @@ -938,12 +954,12 @@ private static void relation() { private static void format() { System.out.println("start Format samples"); - System.out.println("-------------get all formats"); + printStep("get all formats"); Feed formats = client.getFormats(); printEntryContentSrc(formats); printNewLine(); - System.out.println("-------------get a single format"); + printStep("get a single format"); RestObject format = client.getFormat(formats.getEntries().get(0).getContentSrc()); printRestObject(format, "name", "description", "dos_extension"); printNewLine(); @@ -958,13 +974,13 @@ private static void format() { private static void networkLocation() { System.out.println("start Network Location samples"); - System.out.println("-------------get all network locations"); + printStep("get all network locations"); Feed networkLocations = client.getNetworkLocations(); printEntryContentSrc(networkLocations); printNewLine(); if(networkLocations.getEntries().size() > 0) { - System.out.println("-------------get a single network location"); + printStep("get a single network location"); RestObject networkLocation = client.getNetworkLocation(networkLocations.getEntries().get(0).getContentSrc()); printRestObject(networkLocation, "object_name", "r_object_type", "netloc_ident", "netloc_display_name", "begin_near_ip_address", "end_near_ip_address"); printNewLine(); @@ -974,6 +990,76 @@ private static void networkLocation() { printNewLine(); } + /** + * samples to get the Copy, Move, Link and Unlink + */ + private static void copyMoveLinkUnlink() { + System.out.println("start Copy, Move, Link and Unlink samples"); + + RestObject tempCabinet = client.getCabinet("Temp"); + RestObject objectToBeChanged = client.createObject(tempCabinet, OBJECTS, new PlainRestObject("object_name", "object_to_be_copied", "r_object_type", "dm_sysobject"), null); + RestObject destFolder = client.createFolder(tempCabinet, new PlainRestObject("object_name", "my_dest_folder")); + printStep("copy the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " from " + tempCabinet.getObjectName() + "(" + tempCabinet.getObjectId() + ")" + + " to " + destFolder.getObjectName() + "(" + destFolder.getObjectId() + ")"); + RestObject copiedObject = client.createObject(destFolder, OBJECTS, new PlainRestObject(objectToBeChanged.self()), null); + printHttpStatus(); + printRestObject(copiedObject, "r_object_id", "object_name", "i_folder_id"); + printNewLine(); + + printStep("get the parent folder links of the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")"); + Feed parentFolderLinks = client.getFolderLinks(objectToBeChanged, PARENT_LINKS); + printEntryContentSrc(parentFolderLinks); + printNewLine(); + + printStep("move the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " from " + tempCabinet.getObjectName() + "(" + tempCabinet.getObjectId() + ")" + + " to " + destFolder.getObjectName() + "(" + destFolder.getObjectId() + ")"); + FolderLink parentLinkToBeMove = client.getFolderLink(parentFolderLinks.getEntries().get(0).getContentSrc()); + if(parentLinkToBeMove.getChildId().equals(objectToBeChanged.getObjectId()) && parentLinkToBeMove.getParentId().equals(tempCabinet.getObjectId())) { + FolderLink movedLink = client.move(parentLinkToBeMove, new PlainFolderLink(destFolder.self())); + System.out.println("href:" + movedLink.getHref() + ", parent id:" + movedLink.getParentId() + ", child id:" + movedLink.getChildId()); + } else { + System.out.println("nothing to be moved"); + } + printNewLine(); + + printStep("link the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " to " + tempCabinet.getObjectName() + "(" + tempCabinet.getObjectId() + ")" + " by parent links"); + FolderLink linkedByTheParentLinks = client.link(objectToBeChanged, PARENT_LINKS, new PlainFolderLink(tempCabinet.self())); + System.out.println("href:" + linkedByTheParentLinks.getHref() + ", parent id:" + linkedByTheParentLinks.getParentId() + ", child id:" + linkedByTheParentLinks.getChildId()); + printNewLine(); + + printStep("unlink the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " from " + destFolder.getObjectName() + "(" + destFolder.getObjectId() + ")" + " by parent link"); + parentFolderLinks = client.getFolderLinks(objectToBeChanged, PARENT_LINKS, "inline", "true"); + for(Entry e : parentFolderLinks.getEntries()) { + if(e.getContentObject().getChildId().equals(objectToBeChanged.getObjectId()) && e.getContentObject().getParentId().equals(destFolder.getObjectId())) { + client.delete(e); + printHttpStatus(); + } + } + printNewLine(); + + printStep("link the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " to " + destFolder.getObjectName() + "(" + destFolder.getObjectId() + ")" + " by child links"); + FolderLink linkedByTheChildLinks = client.link(destFolder, CHILD_LINKS, new PlainFolderLink(objectToBeChanged.self())); + System.out.println("href:" + linkedByTheChildLinks.getHref() + ", parent id:" + linkedByTheChildLinks.getParentId() + ", child id:" + linkedByTheChildLinks.getChildId()); + printNewLine(); + + printStep("unlink the object " + objectToBeChanged.getObjectName() + "(" + objectToBeChanged.getObjectId() + ")" + " from " + destFolder.getObjectName() + "(" + destFolder.getObjectId() + ")" + " by child link"); + Feed childFolderLinks = client.getFolderLinks(destFolder, CHILD_LINKS, "inline", "true"); + for(Entry e : childFolderLinks.getEntries()) { + if(e.getContentObject().getChildId().equals(objectToBeChanged.getObjectId()) && e.getContentObject().getParentId().equals(destFolder.getObjectId())) { + client.delete(e); + printHttpStatus(); + } + } + printNewLine(); + + client.delete(copiedObject); + client.delete(objectToBeChanged); + client.delete(destFolder); + + System.out.println("finish Copy, Move, Link and Unlink samples"); + printNewLine(); + } + private static void printEntryContentSrc(Feed feed) { for(Entry e : feed.getEntries()) { System.out.println(e.getTitle() + " -> " + e.getContentSrc()); @@ -1005,7 +1091,11 @@ private static void printNewLine() { private static void printLinkRel(Linkable linkable, LinkRelation... rels) { for(LinkRelation rel : rels) { - System.out.println(rel.rel() + " -> " + linkable.getHref(LinkRelation.SELF)); + System.out.println(rel.rel() + " -> " + linkable.getHref(rel)); } } + + private static void printStep(String step) { + System.out.println("-------------" + step); + } } diff --git a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/AbstractRestTemplateClient.java b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/AbstractRestTemplateClient.java index 5c896ce..8e619d0 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/AbstractRestTemplateClient.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/AbstractRestTemplateClient.java @@ -30,10 +30,15 @@ import com.emc.documentum.rest.client.sample.model.Feed; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.LinkRelation; +import com.emc.documentum.rest.client.sample.model.Linkable; import com.emc.documentum.rest.client.sample.model.Repository; import com.emc.documentum.rest.client.sample.model.RestError; import com.emc.documentum.rest.client.sample.model.RestObject; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DELETE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.EDIT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SELF; + /** * the basic implementation with Spring RestTemplate */ @@ -268,6 +273,19 @@ public void delete(String uri, String... params) { sendRequest(uri, HttpMethod.DELETE, isXml()?Headers.ACCEPT_XML_HEADERS:Headers.ACCEPT_JSON_HEADERS, null, null, params); } + @Override + public void delete(Linkable linkable, String... params) { + if(linkable.getHref(DELETE) != null) { + delete(linkable.getHref(DELETE), params); + } else if(linkable.getHref(SELF) != null) { + delete(linkable.getHref(SELF), params); + } else if(linkable.getHref(EDIT) != null) { + delete(linkable.getHref(EDIT), params); + } else { + throw new IllegalArgumentException(String.valueOf(linkable)); + } + } + protected T post(String uri, Object body, Class responseBodyClass, String... params) { return sendRequest(uri, HttpMethod.POST, isXml()?Headers.ACCEPT_XML_HEADERS_WITH_CONTENT:Headers.ACCEPT_JSON_HEADERS_WITH_CONTENT, body, responseBodyClass, params); } @@ -281,6 +299,24 @@ protected T put(String uri, Class responseBodyClass, String... return sendRequest(uri, HttpMethod.PUT, isXml()?Headers.ACCEPT_XML_HEADERS:Headers.ACCEPT_JSON_HEADERS, null, responseBodyClass, params); } + @Override + public RestObject update(RestObject oldObject, LinkRelation rel, RestObject newObject, HttpMethod method, String... params) { + try { + RestObject newRestObject = newRestObject(oldObject, newObject); + if(method == HttpMethod.PUT) { + return put(oldObject.getHref(rel), newRestObject, newRestObject.getClass(), params); + } else { + return post(oldObject.getHref(rel), newRestObject, newRestObject.getClass(), params); + } + } catch (Exception e) { + throw new IllegalArgumentException(oldObject.getClass().getName()); + } + } + + protected T put(String uri, Object body, Class responseBodyClass, String... params) { + return sendRequest(uri, HttpMethod.PUT, isXml()?Headers.ACCEPT_XML_HEADERS_WITH_CONTENT:Headers.ACCEPT_JSON_HEADERS_WITH_CONTENT, body, responseBodyClass, params); + } + protected T post(String uri, T object, Object content, Class responseBodyClass, String... params) { T t = null; if(content == null) { diff --git a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jackson/DCTMJacksonClient.java b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jackson/DCTMJacksonClient.java index f4d0582..f4aa403 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jackson/DCTMJacksonClient.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jackson/DCTMJacksonClient.java @@ -8,6 +8,7 @@ import javax.annotation.concurrent.NotThreadSafe; +import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; @@ -20,6 +21,7 @@ import com.emc.documentum.rest.client.sample.client.util.UriHelper; import com.emc.documentum.rest.client.sample.model.Entry; import com.emc.documentum.rest.client.sample.model.Feed; +import com.emc.documentum.rest.client.sample.model.FolderLink; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.LinkRelation; import com.emc.documentum.rest.client.sample.model.Linkable; @@ -30,6 +32,7 @@ import com.emc.documentum.rest.client.sample.model.ValueAssistant; import com.emc.documentum.rest.client.sample.model.ValueAssistantRequest; import com.emc.documentum.rest.client.sample.model.json.JsonFeeds; +import com.emc.documentum.rest.client.sample.model.json.JsonFolderLink; import com.emc.documentum.rest.client.sample.model.json.JsonHomeDocument; import com.emc.documentum.rest.client.sample.model.json.JsonObject; import com.emc.documentum.rest.client.sample.model.json.JsonObjectAspects; @@ -39,6 +42,41 @@ import com.emc.documentum.rest.client.sample.model.json.JsonValueAssistantRequest; import com.fasterxml.jackson.annotation.JsonInclude; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ABOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ASPECT_TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ASSIS_VALUES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CABINETS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CANCEL_CHECKOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_BRANCH_VERSION; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_NEXT_MAJOR; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_NEXT_MINOR; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CONTENTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DELETE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DEMATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DOCUMENTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.EDIT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.FOLDERS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.FORMATS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.GROUPS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.MATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.NETWORK_LOCATIONS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.OBJECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.OBJECT_ASPECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_FIRST; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_LAST; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_NEXT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_PREV; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PRIMARY_CONTENT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.RELATIONS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.RELATION_TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.REPOSITORIES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SELF; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SHARED_PARENT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.USERS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.VERSIONS; + /** * the DCTMRestClient implementation by Jackson json support */ @@ -60,7 +98,7 @@ public HomeDocument getHomeDocument() { @Override public RestObject getProductInfo() { if(productInfo == null) { - productInfo = get(getHomeDocument().getHref(LinkRelation.ABOUT), false, JsonObject.class); + productInfo = get(getHomeDocument().getHref(ABOUT), false, JsonObject.class); } return productInfo; } @@ -68,7 +106,7 @@ public RestObject getProductInfo() { @Override public Feed getRepositories() { if(repositories == null) { - String repositoriesUri = getHomeDocument().getHref(LinkRelation.REPOSITORIES); + String repositoriesUri = getHomeDocument().getHref(REPOSITORIES); Feed feed = get(repositoriesUri, true, JsonFeeds.RepositoryFeed.class); repositories = (Feed)feed; } @@ -94,14 +132,14 @@ public Repository getRepository() { @Override public Feed dql(String dql, String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.SELF), true, JsonFeeds.ObjectFeed.class, UriHelper.append(params, "dql", dql)); + Feed feed = get(getRepository().getHref(SELF), true, JsonFeeds.ObjectFeed.class, UriHelper.append(params, "dql", dql)); return (Feed)feed; } @Override public Feed getCabinets(String... params) { Repository repository = getRepository(); - String cabinetsUri = repository.getHref(LinkRelation.CABINETS); + String cabinetsUri = repository.getHref(CABINETS); Feed feed = get(cabinetsUri, true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -124,30 +162,30 @@ public RestObject getCabinet(String cabinet, String... params) { @Override public RestObject get(RestObject object, String... params) { - return get(object.getHref(LinkRelation.SELF), false, object.getClass(), params); + return get(object.getHref(SELF), false, object.getClass(), params); } @Override public Feed getFolders(RestObject parent, String... params) { - Feed feed = get(parent.getHref(LinkRelation.FOLDERS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(parent.getHref(FOLDERS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public Feed getObjects(RestObject parent, String... params) { - Feed feed = get(parent.getHref(LinkRelation.OBJECTS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(parent.getHref(OBJECTS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public Feed getDocuments(RestObject parent, String... params) { - Feed feed = get(parent.getHref(LinkRelation.DOCUMENTS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(parent.getHref(DOCUMENTS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public RestObject createFolder(RestObject parent, RestObject newFolder, String... params) { - return post(parent.getHref(LinkRelation.FOLDERS), new JsonObject(newFolder), JsonObject.class, params); + return post(parent.getHref(FOLDERS), new JsonObject(newFolder), JsonObject.class, params); } @Override @@ -167,7 +205,7 @@ public RestObject getObject(String objectUri, String... params) { @Override public RestObject createDocument(RestObject parent, RestObject objectToCreate, Object content, String... params) { - return post(parent.getHref(LinkRelation.DOCUMENTS), new JsonObject(objectToCreate), content, JsonObject.class, params); + return post(parent.getHref(DOCUMENTS), new JsonObject(objectToCreate), content, JsonObject.class, params); } @Override @@ -177,27 +215,17 @@ public RestObject getDocument(String documentUri, String... params) { @Override public RestObject update(RestObject oldObject, RestObject newObject, String... params) { - try { - RestObject newRestObject = newRestObject(oldObject, newObject); - return post(oldObject.getHref(LinkRelation.EDIT), newRestObject, newRestObject.getClass(), params); - } catch (Exception e) { - throw new IllegalArgumentException(oldObject.getClass().getName()); - } - } - - @Override - public void delete(Linkable linkable, String... params) { - delete(linkable.getHref(LinkRelation.DELETE), params); + return update(oldObject, EDIT, newObject, HttpMethod.POST, params); } @Override public RestObject createContent(RestObject object, Object content, String mediaType, String... params) { - return post(object.getHref(LinkRelation.CONTENTS), content, mediaType, JsonObject.class, params); + return post(object.getHref(CONTENTS), content, mediaType, JsonObject.class, params); } @Override public RestObject getPrimaryContent(RestObject object, String... params) { - return getContent(object.getHref(LinkRelation.PRIMARY_CONTENT), params); + return getContent(object.getHref(PRIMARY_CONTENT), params); } @Override @@ -207,67 +235,67 @@ public RestObject getContent(String contentUri, String... params) { @Override public Feed getContents(RestObject object, String... params) { - Feed feed = get(object.getHref(LinkRelation.CONTENTS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(object.getHref(CONTENTS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public RestObject checkout(RestObject object, String... params) { - return put(object.getHref(LinkRelation.CHECKOUT), JsonObject.class, params); + return put(object.getHref(CHECKOUT), JsonObject.class, params); } @Override public void cancelCheckout(RestObject object) { - delete(object.getHref(LinkRelation.CANCEL_CHECKOUT)); + delete(object.getHref(CANCEL_CHECKOUT)); } @Override public RestObject checkinNextMajor(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_NEXT_MAJOR, newObject, content, params); + return checkin(oldObject, CHECKIN_NEXT_MAJOR, newObject, content, params); } @Override public RestObject checkinNextMinor(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_NEXT_MINOR, newObject, content, params); + return checkin(oldObject, CHECKIN_NEXT_MINOR, newObject, content, params); } @Override public RestObject checkinBranch(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_BRANCH_VERSION, newObject, content, params); + return checkin(oldObject, CHECKIN_BRANCH_VERSION, newObject, content, params); } @Override public Feed getVersions(RestObject object, String... params) { - Feed feed = get(object.getHref(LinkRelation.VERSIONS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(object.getHref(VERSIONS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public RestObject materialize(RestObject oldObject) { - return put(oldObject.getHref(LinkRelation.MATERIALIZE), JsonObject.class); + return put(oldObject.getHref(MATERIALIZE), JsonObject.class); } @Override public void dematerialize(RestObject oldObject) { - delete(oldObject.getHref(LinkRelation.DEMATERIALIZE)); + delete(oldObject.getHref(DEMATERIALIZE)); } @Override public RestObject reparent(RestObject oldObject, RestObject newParent) { JsonObject parent = new JsonObject(); - parent.setHref(newParent.getHref(LinkRelation.SELF)); - return post(oldObject.getHref(LinkRelation.SHARED_PARENT), parent, JsonObject.class); + parent.setHref(newParent.getHref(SELF)); + return post(oldObject.getHref(SHARED_PARENT), parent, JsonObject.class); } @Override public RestType getType(String name, String... params) { - return get(getRepository().getHref(LinkRelation.TYPES)+"/"+name, false, JsonType.class, params); + return get(getRepository().getHref(TYPES)+"/"+name, false, JsonType.class, params); } @Override public Feed getTypes(String... params) { Repository repository = getRepository(); - String typesUri = repository.getHref(LinkRelation.TYPES); + String typesUri = repository.getHref(TYPES); Feed feed = get(typesUri, true, JsonFeeds.TypeFeed.class, params); return (Feed)feed; } @@ -275,29 +303,29 @@ public Feed getTypes(String... params) { @Override public Feed getAspectTypes(String... params) { Repository repository = getRepository(); - String aspectTypesUri = repository.getHref(LinkRelation.ASPECT_TYPES); + String aspectTypesUri = repository.getHref(ASPECT_TYPES); Feed feed = get(aspectTypesUri, true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public RestObject getAspectType(String aspectType, String... params) { - return get(getRepository().getHref(LinkRelation.ASPECT_TYPES)+"/"+aspectType, false, JsonObject.class, params); + return get(getRepository().getHref(ASPECT_TYPES)+"/"+aspectType, false, JsonObject.class, params); } @Override public ValueAssistant getValueAssistant(RestType type, ValueAssistantRequest request, String... params) { - return post(type.getHref(LinkRelation.ASSIS_VALUES), new JsonValueAssistantRequest(request), JsonValueAssistance.class, params); + return post(type.getHref(ASSIS_VALUES), new JsonValueAssistantRequest(request), JsonValueAssistance.class, params); } @Override public ObjectAspects attach(RestObject object, String... aspects) { - return post(object.getHref(LinkRelation.OBJECT_ASPECTS), new JsonObjectAspects(aspects), JsonObjectAspects.class); + return post(object.getHref(OBJECT_ASPECTS), new JsonObjectAspects(aspects), JsonObjectAspects.class); } @Override public void detach(ObjectAspects objectAspects, String aspect) { - delete(objectAspects.getHref(LinkRelation.DELETE, aspect)); + delete(objectAspects.getHref(DELETE, aspect)); } @Override @@ -307,13 +335,13 @@ public Feed getUsers(String... params) { @Override public Feed getUsers(Linkable parent, String... params) { - Feed feed = get(parent.getHref(LinkRelation.USERS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(parent.getHref(USERS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @Override public Feed getGroups(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.GROUPS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(getRepository().getHref(GROUPS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -329,24 +357,24 @@ public RestObject getGroup(String groupUri, String... params) { @Override public RestObject createUser(RestObject userToCreate) { - return post(getRepository().getHref(LinkRelation.USERS), new JsonObject(userToCreate), JsonObject.class); + return post(getRepository().getHref(USERS), new JsonObject(userToCreate), JsonObject.class); } @Override public RestObject createGroup(RestObject groupToCreate) { - return post(getRepository().getHref(LinkRelation.GROUPS), new JsonObject(groupToCreate), JsonObject.class); + return post(getRepository().getHref(GROUPS), new JsonObject(groupToCreate), JsonObject.class); } @Override public void addUserToGroup(RestObject group, RestObject user) { JsonObject groupUser = new JsonObject(); - groupUser.setHref(user.getHref(LinkRelation.SELF)); - post(group.getHref(LinkRelation.USERS), groupUser, null); + groupUser.setHref(user.getHref(SELF)); + post(group.getHref(USERS), groupUser, null); } @Override public Feed getRelationTypes(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.RELATION_TYPES), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(getRepository().getHref(RELATION_TYPES), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -357,7 +385,7 @@ public RestObject getRelationType(String uri, String... params) { @Override public Feed getRelations(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.RELATIONS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(getRepository().getHref(RELATIONS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -368,12 +396,12 @@ public RestObject getRelation(String uri, String... params) { @Override public RestObject createRelation(RestObject object) { - return post(getRepository().getHref(LinkRelation.RELATIONS), new JsonObject(object), JsonObject.class); + return post(getRepository().getHref(RELATIONS), new JsonObject(object), JsonObject.class); } @Override public Feed getFormats(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.FORMATS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(getRepository().getHref(FORMATS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -384,7 +412,7 @@ public RestObject getFormat(String uri, String... params) { @Override public Feed getNetworkLocations(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.NETWORK_LOCATIONS), true, JsonFeeds.ObjectFeed.class, params); + Feed feed = get(getRepository().getHref(NETWORK_LOCATIONS), true, JsonFeeds.ObjectFeed.class, params); return (Feed)feed; } @@ -392,25 +420,46 @@ public Feed getNetworkLocations(String... params) { public RestObject getNetworkLocation(String uri, String... params) { return get(uri, false, JsonObject.class, params); } + + @Override + public Feed getFolderLinks(RestObject object, LinkRelation rel, String... params) { + Feed feed = get(object.getHref(rel), true, JsonFeeds.FolderLinkFeed.class, params); + return (Feed)feed; + } + + @Override + public FolderLink getFolderLink(String uri, String... params) { + return get(uri, false, JsonFolderLink.class, params); + } + + @Override + public FolderLink move(FolderLink oldLink, FolderLink newLink, String... params) { + return put(oldLink.getHref(SELF), new JsonFolderLink(newLink), JsonFolderLink.class, params); + } + + @Override + public FolderLink link(RestObject object, LinkRelation rel, FolderLink link) { + return post(object.getHref(rel), new JsonFolderLink(link), JsonFolderLink.class); + } @Override public Feed nextPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_NEXT), feed.getClass()); + return page(feed.getHref(PAGING_NEXT), feed.getClass()); } @Override public Feed previousPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_PREV), feed.getClass()); + return page(feed.getHref(PAGING_PREV), feed.getClass()); } @Override public Feed firstPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_FIRST), feed.getClass()); + return page(feed.getHref(PAGING_FIRST), feed.getClass()); } @Override public Feed lastPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_LAST), feed.getClass()); + return page(feed.getHref(PAGING_LAST), feed.getClass()); } private Feed page(String uri, Class clazz) { diff --git a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jaxb/DCTMJaxbClient.java b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jaxb/DCTMJaxbClient.java index 94a34dd..1c1aae8 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jaxb/DCTMJaxbClient.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/client/impl/jaxb/DCTMJaxbClient.java @@ -7,6 +7,7 @@ import javax.annotation.concurrent.NotThreadSafe; +import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; @@ -19,6 +20,7 @@ import com.emc.documentum.rest.client.sample.client.util.UriHelper; import com.emc.documentum.rest.client.sample.model.Entry; import com.emc.documentum.rest.client.sample.model.Feed; +import com.emc.documentum.rest.client.sample.model.FolderLink; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.LinkRelation; import com.emc.documentum.rest.client.sample.model.Linkable; @@ -35,6 +37,7 @@ import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbDocument; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbFeed; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbFolder; +import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbFolderLink; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbFormat; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbGroup; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbHomeDocument; @@ -51,6 +54,40 @@ import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbValueAssistance; import com.emc.documentum.rest.client.sample.model.xml.jaxb.JaxbValueAssistantRequest; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ABOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ASPECT_TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.ASSIS_VALUES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CABINETS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CANCEL_CHECKOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_BRANCH_VERSION; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_NEXT_MAJOR; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKIN_NEXT_MINOR; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CHECKOUT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.CONTENTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DELETE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DEMATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.DOCUMENTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.EDIT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.FOLDERS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.FORMATS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.GROUPS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.MATERIALIZE; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.NETWORK_LOCATIONS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.OBJECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.OBJECT_ASPECTS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_FIRST; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_LAST; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_NEXT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PAGING_PREV; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.PRIMARY_CONTENT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.RELATIONS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.RELATION_TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.REPOSITORIES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SELF; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.SHARED_PARENT; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.TYPES; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.USERS; +import static com.emc.documentum.rest.client.sample.model.LinkRelation.VERSIONS; /** * the DCTMRestClient implementation by JAXB xml support */ @@ -72,7 +109,7 @@ public HomeDocument getHomeDocument() { @Override public RestObject getProductInfo() { if(productInfo == null) { - productInfo = get(getHomeDocument().getHref(LinkRelation.ABOUT), false, JaxbProductInfo.class); + productInfo = get(getHomeDocument().getHref(ABOUT), false, JaxbProductInfo.class); } return productInfo; } @@ -80,7 +117,7 @@ public RestObject getProductInfo() { @Override public Feed getRepositories() { if(repositories == null) { - String repositoriesUri = getHomeDocument().getHref(LinkRelation.REPOSITORIES); + String repositoriesUri = getHomeDocument().getHref(REPOSITORIES); repositories = get(repositoriesUri, true, JaxbFeed.class); } return repositories; @@ -105,13 +142,13 @@ public Repository getRepository() { @Override public Feed dql(String dql, String... params) { - return get(getRepository().getHref(LinkRelation.SELF), true, JaxbFeed.class, UriHelper.append(params, "dql", dql)); + return get(getRepository().getHref(SELF), true, JaxbFeed.class, UriHelper.append(params, "dql", dql)); } @Override public Feed getCabinets(String... params) { Repository repository = getRepository(); - String cabinetsUri = repository.getHref(LinkRelation.CABINETS); + String cabinetsUri = repository.getHref(CABINETS); return get(cabinetsUri, true, JaxbFeed.class, params); } @@ -133,27 +170,27 @@ public RestObject getCabinet(String cabinet, String... params) { @Override public RestObject get(RestObject object, String... params) { - return get(object.getHref(LinkRelation.SELF), false, object.getClass(), params); + return get(object.getHref(SELF), false, object.getClass(), params); } @Override public Feed getFolders(RestObject parent, String... params) { - return get(parent.getHref(LinkRelation.FOLDERS), true, JaxbFeed.class, params); + return get(parent.getHref(FOLDERS), true, JaxbFeed.class, params); } @Override public Feed getObjects(RestObject parent, String... params) { - return get(parent.getHref(LinkRelation.OBJECTS), true, JaxbFeed.class, params); + return get(parent.getHref(OBJECTS), true, JaxbFeed.class, params); } @Override public Feed getDocuments(RestObject parent, String... params) { - return get(parent.getHref(LinkRelation.DOCUMENTS), true, JaxbFeed.class, params); + return get(parent.getHref(DOCUMENTS), true, JaxbFeed.class, params); } @Override public RestObject createFolder(RestObject parent, RestObject newFolder, String... params) { - return post(parent.getHref(LinkRelation.FOLDERS), new JaxbFolder(newFolder), JaxbFolder.class, params); + return post(parent.getHref(FOLDERS), new JaxbFolder(newFolder), JaxbFolder.class, params); } @Override @@ -173,7 +210,7 @@ public RestObject getObject(String objectUri, String... params) { @Override public RestObject createDocument(RestObject parent, RestObject objectToCreate, Object content, String... params) { - return post(parent.getHref(LinkRelation.DOCUMENTS), new JaxbDocument(objectToCreate), content, JaxbDocument.class, params); + return post(parent.getHref(DOCUMENTS), new JaxbDocument(objectToCreate), content, JaxbDocument.class, params); } @Override @@ -183,27 +220,17 @@ public RestObject getDocument(String documentUri, String... params) { @Override public RestObject update(RestObject oldObject, RestObject newObject, String... params) { - try { - RestObject newRestObject = newRestObject(oldObject, newObject); - return post(oldObject.getHref(LinkRelation.EDIT), newRestObject, newRestObject.getClass(), params); - } catch (Exception e) { - throw new IllegalArgumentException(oldObject.getClass().getName()); - } - } - - @Override - public void delete(Linkable linkable, String... params) { - delete(linkable.getHref(LinkRelation.DELETE), params); + return update(oldObject, EDIT, newObject, HttpMethod.POST, params); } @Override public RestObject createContent(RestObject object, Object content, String mediaType, String... params) { - return post(object.getHref(LinkRelation.CONTENTS), content, mediaType, JaxbContent.class, params); + return post(object.getHref(CONTENTS), content, mediaType, JaxbContent.class, params); } @Override public RestObject getPrimaryContent(RestObject object, String... params) { - return getContent(object.getHref(LinkRelation.PRIMARY_CONTENT), params); + return getContent(object.getHref(PRIMARY_CONTENT), params); } @Override @@ -213,54 +240,54 @@ public RestObject getContent(String contentUri, String... params) { @Override public Feed getContents(RestObject object, String... params) { - return get(object.getHref(LinkRelation.CONTENTS), true, JaxbFeed.class, params); + return get(object.getHref(CONTENTS), true, JaxbFeed.class, params); } @Override public RestObject checkout(RestObject object, String... params) { - return put(object.getHref(LinkRelation.CHECKOUT), JaxbSysObject.class, params); + return put(object.getHref(CHECKOUT), JaxbSysObject.class, params); } @Override public void cancelCheckout(RestObject object) { - delete(object.getHref(LinkRelation.CANCEL_CHECKOUT)); + delete(object.getHref(CANCEL_CHECKOUT)); } @Override public RestObject checkinNextMajor(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_NEXT_MAJOR, newObject, content, params); + return checkin(oldObject, CHECKIN_NEXT_MAJOR, newObject, content, params); } @Override public RestObject checkinNextMinor(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_NEXT_MINOR, newObject, content, params); + return checkin(oldObject, CHECKIN_NEXT_MINOR, newObject, content, params); } @Override public RestObject checkinBranch(RestObject oldObject, RestObject newObject, Object content, String... params) { - return checkin(oldObject, LinkRelation.CHECKIN_BRANCH_VERSION, newObject, content, params); + return checkin(oldObject, CHECKIN_BRANCH_VERSION, newObject, content, params); } @Override public Feed getVersions(RestObject object, String... params) { - return get(object.getHref(LinkRelation.VERSIONS), true, JaxbFeed.class, params); + return get(object.getHref(VERSIONS), true, JaxbFeed.class, params); } @Override public RestObject materialize(RestObject oldObject) { - return put(oldObject.getHref(LinkRelation.MATERIALIZE), JaxbSysObject.class); + return put(oldObject.getHref(MATERIALIZE), JaxbSysObject.class); } @Override public void dematerialize(RestObject oldObject) { - delete(oldObject.getHref(LinkRelation.DEMATERIALIZE)); + delete(oldObject.getHref(DEMATERIALIZE)); } @Override public RestObject reparent(RestObject oldObject, RestObject newParent) { try { - RestObject newRestObject = newRestObject(oldObject, new PlainRestObject(newParent.getHref(LinkRelation.SELF))); - return post(oldObject.getHref(LinkRelation.SHARED_PARENT), newRestObject, newRestObject.getClass()); + RestObject newRestObject = newRestObject(oldObject, new PlainRestObject(newParent.getHref(SELF))); + return post(oldObject.getHref(SHARED_PARENT), newRestObject, newRestObject.getClass()); } catch (Exception e) { throw new IllegalArgumentException(oldObject.getClass().getName()); } @@ -268,41 +295,41 @@ public RestObject reparent(RestObject oldObject, RestObject newParent) { @Override public RestType getType(String name, String... params) { - return get(getRepository().getHref(LinkRelation.TYPES)+"/"+name, false, JaxbType.class, params); + return get(getRepository().getHref(TYPES)+"/"+name, false, JaxbType.class, params); } @Override public Feed getTypes(String... params) { Repository repository = getRepository(); - String typesUri = repository.getHref(LinkRelation.TYPES); + String typesUri = repository.getHref(TYPES); return get(typesUri, true, JaxbFeed.class, params); } @Override public Feed getAspectTypes(String... params) { Repository repository = getRepository(); - String aspectTypesUri = repository.getHref(LinkRelation.ASPECT_TYPES); + String aspectTypesUri = repository.getHref(ASPECT_TYPES); return get(aspectTypesUri, true, JaxbFeed.class, params); } @Override public RestObject getAspectType(String aspectType, String... params) { - return get(getRepository().getHref(LinkRelation.ASPECT_TYPES)+"/"+aspectType, false, JaxbAspectType.class, params); + return get(getRepository().getHref(ASPECT_TYPES)+"/"+aspectType, false, JaxbAspectType.class, params); } @Override public ValueAssistant getValueAssistant(RestType type, ValueAssistantRequest request, String... params) { - return post(type.getHref(LinkRelation.ASSIS_VALUES), new JaxbValueAssistantRequest(request), JaxbValueAssistance.class, params); + return post(type.getHref(ASSIS_VALUES), new JaxbValueAssistantRequest(request), JaxbValueAssistance.class, params); } @Override public ObjectAspects attach(RestObject object, String... aspects) { - return post(object.getHref(LinkRelation.OBJECT_ASPECTS), new JaxbObjectAspects(aspects), JaxbObjectAspects.class); + return post(object.getHref(OBJECT_ASPECTS), new JaxbObjectAspects(aspects), JaxbObjectAspects.class); } @Override public void detach(ObjectAspects objectAspects, String aspect) { - delete(objectAspects.getHref(LinkRelation.DELETE, aspect)); + delete(objectAspects.getHref(DELETE, aspect)); } @Override @@ -312,12 +339,12 @@ public Feed getUsers(String... params) { @Override public Feed getUsers(Linkable parent, String... params) { - return get(parent.getHref(LinkRelation.USERS), true, JaxbFeed.class, params); + return get(parent.getHref(USERS), true, JaxbFeed.class, params); } @Override public Feed getGroups(String... params) { - return get(getRepository().getHref(LinkRelation.GROUPS), true, JaxbFeed.class, params); + return get(getRepository().getHref(GROUPS), true, JaxbFeed.class, params); } @Override @@ -332,24 +359,24 @@ public RestObject getGroup(String groupUri, String... params) { @Override public RestObject createUser(RestObject userToCreate) { - return post(getRepository().getHref(LinkRelation.USERS), new JaxbUser(userToCreate), JaxbUser.class); + return post(getRepository().getHref(USERS), new JaxbUser(userToCreate), JaxbUser.class); } @Override public RestObject createGroup(RestObject groupToCreate) { - return post(getRepository().getHref(LinkRelation.GROUPS), new JaxbGroup(groupToCreate), JaxbGroup.class); + return post(getRepository().getHref(GROUPS), new JaxbGroup(groupToCreate), JaxbGroup.class); } @Override public void addUserToGroup(RestObject group, RestObject user) { JaxbUser groupUser = new JaxbUser(); - groupUser.setHref(user.getHref(LinkRelation.SELF)); - post(group.getHref(LinkRelation.USERS), groupUser, null); + groupUser.setHref(user.getHref(SELF)); + post(group.getHref(USERS), groupUser, null); } @Override public Feed getRelationTypes(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.RELATION_TYPES), true, JaxbFeed.class, params); + Feed feed = get(getRepository().getHref(RELATION_TYPES), true, JaxbFeed.class, params); return (Feed)feed; } @@ -360,7 +387,7 @@ public RestObject getRelationType(String uri, String... params) { @Override public Feed getRelations(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.RELATION_TYPES), true, JaxbFeed.class, params); + Feed feed = get(getRepository().getHref(RELATION_TYPES), true, JaxbFeed.class, params); return (Feed)feed; } @@ -371,12 +398,12 @@ public RestObject getRelation(String uri, String... params) { @Override public RestObject createRelation(RestObject object) { - return post(getRepository().getHref(LinkRelation.RELATIONS), new JaxbRelation(object), JaxbRelation.class); + return post(getRepository().getHref(RELATIONS), new JaxbRelation(object), JaxbRelation.class); } @Override public Feed getFormats(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.FORMATS), true, JaxbFeed.class, params); + Feed feed = get(getRepository().getHref(FORMATS), true, JaxbFeed.class, params); return (Feed)feed; } @@ -387,7 +414,7 @@ public RestObject getFormat(String uri, String... params) { @Override public Feed getNetworkLocations(String... params) { - Feed feed = get(getRepository().getHref(LinkRelation.NETWORK_LOCATIONS), true, JaxbFeed.class, params); + Feed feed = get(getRepository().getHref(NETWORK_LOCATIONS), true, JaxbFeed.class, params); return (Feed)feed; } @@ -396,24 +423,45 @@ public RestObject getNetworkLocation(String uri, String... params) { return get(uri, false, JaxbNetworkLocation.class, params); } + @Override + public Feed getFolderLinks(RestObject object, LinkRelation rel, String... params) { + Feed feed = get(object.getHref(rel), true, JaxbFeed.class, params); + return (Feed)feed; + } + + @Override + public FolderLink getFolderLink(String uri, String... params) { + return get(uri, false, JaxbFolderLink.class, params); + } + + @Override + public FolderLink move(FolderLink oldLink, FolderLink newLink, String... params) { + return put(oldLink.getHref(SELF), new JaxbFolderLink(newLink), JaxbFolderLink.class, params); + } + + @Override + public FolderLink link(RestObject object, LinkRelation rel, FolderLink link) { + return post(object.getHref(rel), new JaxbFolderLink(link), JaxbFolderLink.class); + } + @Override public Feed nextPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_NEXT)); + return page(feed.getHref(PAGING_NEXT)); } @Override public Feed previousPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_PREV)); + return page(feed.getHref(PAGING_PREV)); } @Override public Feed firstPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_FIRST)); + return page(feed.getHref(PAGING_FIRST)); } @Override public Feed lastPage(Feed feed) { - return page(feed.getHref(LinkRelation.PAGING_LAST)); + return page(feed.getHref(PAGING_LAST)); } private Feed page(String uri) { diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/FolderLink.java b/src/main/java/com/emc/documentum/rest/client/sample/model/FolderLink.java new file mode 100644 index 0000000..6b7abda --- /dev/null +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/FolderLink.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ +package com.emc.documentum.rest.client.sample.model; + +/** + * represents Folder Link provided by REST server + */ +public interface FolderLink extends Linkable { + public String getHref(); + public String getParentId(); + public String getChildId(); +} diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/Linkable.java b/src/main/java/com/emc/documentum/rest/client/sample/model/Linkable.java index 6691a53..289329f 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/Linkable.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/Linkable.java @@ -26,4 +26,9 @@ public interface Linkable { * @return specified link by relation and title */ String getHref(LinkRelation rel, String title); + + /** + * @return self link + */ + String self(); } diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/LinkableBase.java b/src/main/java/com/emc/documentum/rest/client/sample/model/LinkableBase.java similarity index 86% rename from src/main/java/com/emc/documentum/rest/client/sample/model/json/LinkableBase.java rename to src/main/java/com/emc/documentum/rest/client/sample/model/LinkableBase.java index 8b7f06d..5e8a9cb 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/LinkableBase.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/LinkableBase.java @@ -1,19 +1,19 @@ /* * Copyright (c) 2016. EMC Corporation. All Rights Reserved. */ -package com.emc.documentum.rest.client.sample.model.json; +package com.emc.documentum.rest.client.sample.model; import java.util.List; +import javax.xml.bind.annotation.XmlTransient; + import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import com.emc.documentum.rest.client.sample.model.Link; -import com.emc.documentum.rest.client.sample.model.LinkRelation; -import com.emc.documentum.rest.client.sample.model.Linkable; import com.fasterxml.jackson.annotation.JsonIgnore; public abstract class LinkableBase implements Linkable { + @XmlTransient @JsonIgnore private MultiValueMap linksMap; @@ -26,7 +26,12 @@ public String getHref(LinkRelation rel) { public String getHref(LinkRelation rel, String title) { return getValue(rel, title); } - + + @Override + public String self() { + return getHref(LinkRelation.SELF); + } + private String getValue(LinkRelation rel, String title) { if(linksMap == null && getLinks() != null) { linksMap = new LinkedMultiValueMap(); diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/ObjectAspects.java b/src/main/java/com/emc/documentum/rest/client/sample/model/ObjectAspects.java index 743f217..f0bbe7f 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/ObjectAspects.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/ObjectAspects.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ package com.emc.documentum.rest.client.sample.model; import java.util.List; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/PlainFolderLink.java b/src/main/java/com/emc/documentum/rest/client/sample/model/PlainFolderLink.java new file mode 100644 index 0000000..e38502b --- /dev/null +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/PlainFolderLink.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ +package com.emc.documentum.rest.client.sample.model; + +import java.util.List; + + +/** + * the plain FolderLink implementation + */ +public class PlainFolderLink implements FolderLink { + private String href; + private String parentId; + private String childId; + + public PlainFolderLink() { + } + + public PlainFolderLink(String href) { + this.href = href; + } + + public PlainFolderLink(String parentId, String childId) { + this.parentId = parentId; + this.childId = childId; + } + + @Override + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + @Override + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + @Override + public String getChildId() { + return childId; + } + + public void setChildId(String childId) { + this.childId = childId; + } + + @Override + public List getLinks() { + return null; + } + + @Override + public String getHref(LinkRelation rel) { + return null; + } + + @Override + public String getHref(LinkRelation rel, String title) { + return null; + } + + @Override + public String self() { + return null; + } +} diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/PlainRestObject.java b/src/main/java/com/emc/documentum/rest/client/sample/model/PlainRestObject.java index 2024299..0e96cdd 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/PlainRestObject.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/PlainRestObject.java @@ -104,4 +104,9 @@ public String getPropertiesType() { public String getHref(LinkRelation rel, String title) { return null; } + + @Override + public String self() { + return null; + } } diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/InlineLinkableBase.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/InlineLinkableBase.java index a1de051..21c6613 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/InlineLinkableBase.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/InlineLinkableBase.java @@ -8,6 +8,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.InlineLinkable; import com.emc.documentum.rest.client.sample.model.Linkable; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonEntry.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonEntry.java index d492baa..808377a 100755 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonEntry.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonEntry.java @@ -11,6 +11,7 @@ import com.emc.documentum.rest.client.sample.model.Entry; import com.emc.documentum.rest.client.sample.model.InlineLinkable; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.fasterxml.jackson.annotation.JsonProperty; public class JsonEntry extends LinkableBase implements Entry { diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeed.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeed.java index 4055f20..bad9f4c 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeed.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeed.java @@ -12,6 +12,7 @@ import com.emc.documentum.rest.client.sample.model.Feed; import com.emc.documentum.rest.client.sample.model.InlineLinkable; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeeds.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeeds.java index 80fa498..57b0865 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeeds.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFeeds.java @@ -1,5 +1,9 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ package com.emc.documentum.rest.client.sample.model.json; + public class JsonFeeds { public static class ObjectFeed extends JsonFeed{ } @@ -9,4 +13,7 @@ public static class RepositoryFeed extends JsonFeed{ public static class TypeFeed extends JsonFeed{ } + + public static class FolderLinkFeed extends JsonFeed{ + } } diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFolderLink.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFolderLink.java new file mode 100644 index 0000000..5b170ad --- /dev/null +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonFolderLink.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ +package com.emc.documentum.rest.client.sample.model.json; + +import java.util.List; +import java.util.Objects; + +import com.emc.documentum.rest.client.sample.client.util.Equals; +import com.emc.documentum.rest.client.sample.model.FolderLink; +import com.emc.documentum.rest.client.sample.model.Link; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class JsonFolderLink extends InlineLinkableBase implements FolderLink { + @JsonProperty + private String href; + @JsonProperty("parent-id") + private String parentId; + @JsonProperty("child-id") + private String childId; + @JsonProperty + private List links; + + public JsonFolderLink() { + } + + public JsonFolderLink(FolderLink folderLink) { + this.href = folderLink.getHref(); + this.parentId = folderLink.getParentId(); + this.childId = folderLink.getChildId(); + } + + @Override + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + @Override + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + @Override + public String getChildId() { + return childId; + } + + public void setChildId(String childId) { + this.childId = childId; + } + + @Override + public boolean equals(Object obj) { + JsonFolderLink that = (JsonFolderLink)obj; + return Equals.equal(href, that.href) && + Equals.equal(parentId, that.parentId) && + Equals.equal(childId, that.childId); + } + + @Override + public int hashCode() { + return Objects.hash(href, parentId, childId); + } + + @Override + public List getLinks() { + return links; + } + + public void setLinks(List links) { + this.links = links; + } +} diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonHomeDocument.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonHomeDocument.java index adffc31..59b137e 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonHomeDocument.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonHomeDocument.java @@ -11,6 +11,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; public class JsonHomeDocument extends LinkableBase implements HomeDocument { private Map> resources; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonObjectAspects.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonObjectAspects.java index 57e5f7f..78579b5 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonObjectAspects.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonObjectAspects.java @@ -9,6 +9,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.ObjectAspects; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonValueAssistance.java b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonValueAssistance.java index b490086..b265699 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonValueAssistance.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/json/JsonValueAssistance.java @@ -10,6 +10,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.ValueAssistant; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbEntry.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbEntry.java index bbc0fba..b8a8c8e 100755 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbEntry.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbEntry.java @@ -20,6 +20,7 @@ import com.emc.documentum.rest.client.sample.model.Inlineable; import com.emc.documentum.rest.client.sample.model.Link; import com.emc.documentum.rest.client.sample.model.Linkable; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; @XmlRootElement(name = "entry", namespace = XMLNamespace.ATOM_NAMESPACE) diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFeed.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFeed.java index 8e42910..557574a 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFeed.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFeed.java @@ -15,6 +15,7 @@ import com.emc.documentum.rest.client.sample.model.Feed; import com.emc.documentum.rest.client.sample.model.Link; import com.emc.documentum.rest.client.sample.model.Linkable; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; @XmlRootElement(name="feed", namespace=XMLNamespace.ATOM_NAMESPACE) diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFolderLink.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFolderLink.java new file mode 100644 index 0000000..6ff9383 --- /dev/null +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbFolderLink.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2016. EMC Corporation. All Rights Reserved. + */ +package com.emc.documentum.rest.client.sample.model.xml.jaxb; + +import java.util.List; +import java.util.Objects; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; + +import com.emc.documentum.rest.client.sample.client.util.Equals; +import com.emc.documentum.rest.client.sample.model.FolderLink; +import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; +import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; + +@XmlRootElement(name="folder-link", namespace=XMLNamespace.DM_NAMESPACE) +public class JaxbFolderLink extends LinkableBase implements FolderLink { + private String href; + private String parentId; + private String childId; + private List links; + + public JaxbFolderLink() { + } + + public JaxbFolderLink(FolderLink folderLink) { + this.href = folderLink.getHref(); + this.parentId = folderLink.getParentId(); + this.childId = folderLink.getChildId(); + } + + @Override + @XmlAttribute + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + @Override + @XmlAttribute(name="parent-id") + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + @Override + @XmlAttribute(name="child-id") + public String getChildId() { + return childId; + } + + public void setChildId(String childId) { + this.childId = childId; + } + + @Override + public boolean equals(Object obj) { + JaxbFolderLink that = (JaxbFolderLink)obj; + return Equals.equal(href, that.href) && + Equals.equal(parentId, that.parentId) && + Equals.equal(childId, that.childId); + } + + @Override + public int hashCode() { + return Objects.hash(href, parentId, childId); + } + + @Override + @XmlElementWrapper(name = "links") + @XmlElement(name = "link", type = JaxbLink.class, namespace = XMLNamespace.DM_NAMESPACE) + public List getLinks() { + return links; + } + + public void setLinks(List links) { + this.links = links; + } +} diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbHomeDocument.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbHomeDocument.java index 3a9ccf5..5683d9a 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbHomeDocument.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbHomeDocument.java @@ -11,6 +11,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.HomeDocument; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; @XmlRootElement(name="resources", namespace=XMLNamespace.DM_NAMESPACE) diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObject.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObject.java index 1b05c07..2c254a1 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObject.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObject.java @@ -21,6 +21,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.RestObject; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObjectAspects.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObjectAspects.java index 5d2f6c0..60012ab 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObjectAspects.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbObjectAspects.java @@ -13,6 +13,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.ObjectAspects; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbRepository.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbRepository.java index 8bf0ef6..122390f 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbRepository.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbRepository.java @@ -12,6 +12,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.Repository; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; @@ -61,7 +62,7 @@ public void setServers(List servers) { } @Override - @XmlElementWrapper(name="links") + @XmlElementWrapper(name="links", namespace=XMLNamespace.DM_NAMESPACE) @XmlElement(name="link", type=JaxbLink.class, namespace=XMLNamespace.DM_NAMESPACE) public List getLinks() { return links; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbType.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbType.java index 2b9ee6a..c759935 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbType.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbType.java @@ -22,6 +22,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.RestType; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbValueAssistance.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbValueAssistance.java index 8c40362..3e0f184 100644 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbValueAssistance.java +++ b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/JaxbValueAssistance.java @@ -19,6 +19,7 @@ import com.emc.documentum.rest.client.sample.client.util.Equals; import com.emc.documentum.rest.client.sample.model.Link; +import com.emc.documentum.rest.client.sample.model.LinkableBase; import com.emc.documentum.rest.client.sample.model.ValueAssistant; import com.emc.documentum.rest.client.sample.model.xml.XMLNamespace; diff --git a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/LinkableBase.java b/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/LinkableBase.java deleted file mode 100644 index f3eec9a..0000000 --- a/src/main/java/com/emc/documentum/rest/client/sample/model/xml/jaxb/LinkableBase.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2016. EMC Corporation. All Rights Reserved. - */ -package com.emc.documentum.rest.client.sample.model.xml.jaxb; - -import java.util.List; - -import javax.xml.bind.annotation.XmlTransient; - -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import com.emc.documentum.rest.client.sample.model.Link; -import com.emc.documentum.rest.client.sample.model.LinkRelation; -import com.emc.documentum.rest.client.sample.model.Linkable; - -public abstract class LinkableBase implements Linkable { - @XmlTransient - private MultiValueMap linksMap; - - @Override - public String getHref(LinkRelation rel) { - return getValue(rel, null); - } - - @Override - public String getHref(LinkRelation rel, String title) { - return getValue(rel, title); - } - - - private String getValue(LinkRelation rel, String title) { - if(linksMap == null && getLinks() != null) { - linksMap = new LinkedMultiValueMap(); - for(Link l : getLinks()) { - linksMap.add(l.getRel(), l); - } - } - String href = null; - if(linksMap != null) { - List list = linksMap.get(rel.rel()); - if(list != null) { - Link link = null; - if(title == null) { - link = list.get(0); - } else { - for(Link lk : list) { - if(title.equals(lk.getTitle())) { - link = lk; - break; - } - } - } - if(link != null) { - href = link.isTemplate()?link.getHreftemplate():link.getHref(); - } - } - } - return href; - } -} diff --git a/src/main/resources/com/emc/documentum/rest/client/sample/model/xml/jaxb/jaxb.index b/src/main/resources/com/emc/documentum/rest/client/sample/model/xml/jaxb/jaxb.index index 72a300d..757c640 100644 --- a/src/main/resources/com/emc/documentum/rest/client/sample/model/xml/jaxb/jaxb.index +++ b/src/main/resources/com/emc/documentum/rest/client/sample/model/xml/jaxb/jaxb.index @@ -7,6 +7,7 @@ JaxbDocument JaxbEntry JaxbFeed JaxbFolder +JaxbFolderLink JaxbFormat JaxbGroup JaxbHomeDocument