Modified: 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java?rev=936922&r1=936921&r2=936922&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
 (original)
+++ 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
 Thu Apr 22 16:04:19 2010
@@ -36,79 +36,79 @@ import org.apache.chemistry.opencmis.com
  */
 public class MultiFilingServiceImpl extends AbstractAtomPubService implements 
MultiFilingService {
 
-       /**
-        * Constructor.
-        */
-       public MultiFilingServiceImpl(Session session) {
-               setSession(session);
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.MultiFilingService#addObjectToFolder
-        * (java.lang.String, java.lang.String, java.lang.String, 
java.lang.Boolean,
-        * org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public void addObjectToFolder(String repositoryId, String objectId, 
String folderId, Boolean allVersions,
-                       ExtensionsData extension) {
-               if (objectId == null) {
-                       throw new CmisInvalidArgumentException("Object id must 
be set!");
-               }
-
-               // find the link
-               String link = loadLink(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
-
-               // set up object and writer
-               final AtomEntryWriter entryWriter = new 
AtomEntryWriter(createIdObject(objectId));
-
-               // post addObjectToFolder request
-               post(url, Constants.MEDIATYPE_ENTRY, new HttpUtils.Output() {
-                       public void write(OutputStream out) throws Exception {
-                               entryWriter.write(out);
-                       }
-               });
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.MultiFilingService#removeObjectFromFolder
-        * (java.lang.String, java.lang.String, java.lang.String,
-        * org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public void removeObjectFromFolder(String repositoryId, String 
objectId, String folderId, ExtensionsData extension) {
-               if (objectId == null) {
-                       throw new CmisInvalidArgumentException("Object id must 
be set!");
-               }
-
-               // find the link
-               String link = loadCollection(repositoryId, 
Constants.COLLECTION_UNFILED);
-
-               if (link == null) {
-                       throw new CmisObjectNotFoundException("Unknown 
repository or unfiling not supported!");
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_REMOVE_FROM, folderId);
-
-               // set up object and writer
-               final AtomEntryWriter entryWriter = new 
AtomEntryWriter(createIdObject(objectId));
-
-               // post removeObjectFromFolder request
-               post(url, Constants.MEDIATYPE_ENTRY, new HttpUtils.Output() {
-                       public void write(OutputStream out) throws Exception {
-                               entryWriter.write(out);
-                       }
-               });
-       }
+    /**
+     * Constructor.
+     */
+    public MultiFilingServiceImpl(Session session) {
+        setSession(session);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.MultiFilingService#addObjectToFolder
+     * (java.lang.String, java.lang.String, java.lang.String, 
java.lang.Boolean,
+     * org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public void addObjectToFolder(String repositoryId, String objectId, String 
folderId, Boolean allVersions,
+            ExtensionsData extension) {
+        if (objectId == null) {
+            throw new CmisInvalidArgumentException("Object id must be set!");
+        }
+
+        // find the link
+        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_CHILDREN);
+
+        if (link == null) {
+            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_CHILDREN);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
+
+        // set up object and writer
+        final AtomEntryWriter entryWriter = new 
AtomEntryWriter(createIdObject(objectId));
+
+        // post addObjectToFolder request
+        post(url, Constants.MEDIATYPE_ENTRY, new HttpUtils.Output() {
+            public void write(OutputStream out) throws Exception {
+                entryWriter.write(out);
+            }
+        });
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * 
org.apache.opencmis.client.provider.MultiFilingService#removeObjectFromFolder
+     * (java.lang.String, java.lang.String, java.lang.String,
+     * org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public void removeObjectFromFolder(String repositoryId, String objectId, 
String folderId, ExtensionsData extension) {
+        if (objectId == null) {
+            throw new CmisInvalidArgumentException("Object id must be set!");
+        }
+
+        // find the link
+        String link = loadCollection(repositoryId, 
Constants.COLLECTION_UNFILED);
+
+        if (link == null) {
+            throw new CmisObjectNotFoundException("Unknown repository or 
unfiling not supported!");
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_REMOVE_FROM, folderId);
+
+        // set up object and writer
+        final AtomEntryWriter entryWriter = new 
AtomEntryWriter(createIdObject(objectId));
+
+        // post removeObjectFromFolder request
+        post(url, Constants.MEDIATYPE_ENTRY, new HttpUtils.Output() {
+            public void write(OutputStream out) throws Exception {
+                entryWriter.write(out);
+            }
+        });
+    }
 }

Modified: 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java?rev=936922&r1=936921&r2=936922&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
 (original)
+++ 
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
 Thu Apr 22 16:04:19 2010
@@ -58,452 +58,452 @@ import org.apache.chemistry.opencmis.com
  */
 public class NavigationServiceImpl extends AbstractAtomPubService implements 
NavigationService {
 
-       /**
-        * Constructor.
-        */
-       public NavigationServiceImpl(Session session) {
-               setSession(session);
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.NavigationService#getChildren(java
-        * .lang.String, java.lang.String, java.lang.String, java.lang.String,
-        * java.lang.Boolean,
-        * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
-        * java.lang.Boolean, java.math.BigInteger, java.math.BigInteger,
-        * org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public ObjectInFolderList getChildren(String repositoryId, String 
folderId, String filter, String orderBy,
-                       Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
-                       Boolean includePathSegment, BigInteger maxItems, 
BigInteger skipCount, ExtensionsData extension) {
-               ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-
-               // find the link
-               String link = loadLink(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_CHILDREN);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-               url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-               url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
-               url.addParameter(Constants.PARAM_RELATIONSHIPS, 
includeRelationships);
-               url.addParameter(Constants.PARAM_RENDITION_FILTER, 
renditionFilter);
-               url.addParameter(Constants.PARAM_PATH_SEGMENT, 
includePathSegment);
-               url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-               url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-               // read and parse
-               HttpUtils.Response resp = read(url);
-               AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-               // handle top level
-               for (AtomElement element : feed.getElements()) {
-                       if (element.getObject() instanceof AtomLink) {
-                               if (isNextLink(element)) {
-                                       result.setHasMoreItems(Boolean.TRUE);
-                               }
-                       } else if (isInt(NAME_NUM_ITEMS, element)) {
-                               result.setNumItems((BigInteger) 
element.getObject());
-                       }
-               }
-
-               // get the children
-               if (!feed.getEntries().isEmpty()) {
-                       result.setObjects(new 
ArrayList<ObjectInFolderData>(feed.getEntries().size()));
-
-                       for (AtomEntry entry : feed.getEntries()) {
-                               ObjectInFolderDataImpl child = null;
-                               String pathSegment = null;
-
-                               lockLinks();
-                               try {
-                                       // clean up cache
-                                       removeLinks(repositoryId, 
entry.getId());
-
-                                       // walk through the entry
-                                       for (AtomElement element : 
entry.getElements()) {
-                                               if (element.getObject() 
instanceof AtomLink) {
-                                                       addLink(repositoryId, 
entry.getId(), (AtomLink) element.getObject());
-                                               } else if 
(isStr(NAME_PATH_SEGMENT, element)) {
-                                                       pathSegment = (String) 
element.getObject();
-                                               } else if (element.getObject() 
instanceof CmisObjectType) {
-                                                       child = new 
ObjectInFolderDataImpl();
-                                                       
child.setObject(convert((CmisObjectType) element.getObject()));
-                                               }
-                                       }
-                               } finally {
-                                       unlockLinks();
-                               }
-
-                               if (child != null) {
-                                       child.setPathSegment(pathSegment);
-                                       result.getObjects().add(child);
-                               }
-                       }
-               }
-
-               return result;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * org.apache.opencmis.client.provider.NavigationService#getDescendants(
-        * java.lang.String, java.lang.String, java.math.BigInteger,
-        * java.lang.String, java.lang.Boolean,
-        * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
-        * java.lang.Boolean, 
org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public List<ObjectInFolderContainer> getDescendants(String 
repositoryId, String folderId, BigInteger depth,
-                       String filter, Boolean includeAllowableActions, 
IncludeRelationships includeRelationships,
-                       String renditionFilter, Boolean includePathSegment, 
ExtensionsData extension) {
-               List<ObjectInFolderContainer> result = new 
ArrayList<ObjectInFolderContainer>();
-
-               // find the link
-               String link = loadLink(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, folderId, 
Constants.REL_DOWN, Constants.MEDIATYPE_DESCENDANTS);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_DEPTH, depth);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-               url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
-               url.addParameter(Constants.PARAM_RELATIONSHIPS, 
includeRelationships);
-               url.addParameter(Constants.PARAM_RENDITION_FILTER, 
renditionFilter);
-               url.addParameter(Constants.PARAM_PATH_SEGMENT, 
includePathSegment);
-
-               // read and parse
-               HttpUtils.Response resp = read(url);
-               AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-               // process tree
-               addDescendantsLevel(repositoryId, feed, result);
-
-               return result;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * org.apache.opencmis.client.provider.NavigationService#getFolderParent
-        * (java.lang.String, java.lang.String, java.lang.String,
-        * org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public ObjectData getFolderParent(String repositoryId, String folderId, 
String filter, ExtensionsData extension) {
-               ObjectData result = null;
-
-               // find the link
-               String link = loadLink(repositoryId, folderId, 
Constants.REL_UP, Constants.MEDIATYPE_ENTRY);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, folderId, 
Constants.REL_UP, Constants.MEDIATYPE_ENTRY);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-
-               // read
-               HttpUtils.Response resp = read(url);
-
-               AtomBase base = parse(resp.getStream(), AtomBase.class);
-
-               // get the entry
-               AtomEntry entry = null;
-               if (base instanceof AtomFeed) {
-                       AtomFeed feed = (AtomFeed) base;
-                       if (feed.getEntries().isEmpty()) {
-                               throw new CmisRuntimeException("Parent feed is 
empty!");
-                       }
-                       entry = feed.getEntries().get(0);
-               } else if (base instanceof AtomEntry) {
-                       entry = (AtomEntry) base;
-               } else {
-                       throw new CmisRuntimeException("Unexpected document!");
-               }
-
-               lockLinks();
-               try {
-                       // clean up cache
-                       removeLinks(repositoryId, entry.getId());
-
-                       // walk through the entry
-                       for (AtomElement element : entry.getElements()) {
-                               if (element.getObject() instanceof AtomLink) {
-                                       addLink(repositoryId, entry.getId(), 
(AtomLink) element.getObject());
-                               } else if (element.getObject() instanceof 
CmisObjectType) {
-                                       result = convert((CmisObjectType) 
element.getObject());
-                               }
-                       }
-               } finally {
-                       unlockLinks();
-               }
-
-               return result;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.NavigationService#getFolderTree(java
-        * .lang.String, java.lang.String, java.math.BigInteger, 
java.lang.String,
-        * java.lang.Boolean,
-        * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
-        * java.lang.Boolean, 
org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public List<ObjectInFolderContainer> getFolderTree(String repositoryId, 
String folderId, BigInteger depth,
-                       String filter, Boolean includeAllowableActions, 
IncludeRelationships includeRelationships,
-                       String renditionFilter, Boolean includePathSegment, 
ExtensionsData extension) {
-               List<ObjectInFolderContainer> result = new 
ArrayList<ObjectInFolderContainer>();
-
-               // find the link
-               String link = loadLink(repositoryId, folderId, 
Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, folderId, 
Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_DEPTH, depth);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-               url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
-               url.addParameter(Constants.PARAM_RELATIONSHIPS, 
includeRelationships);
-               url.addParameter(Constants.PARAM_RENDITION_FILTER, 
renditionFilter);
-               url.addParameter(Constants.PARAM_PATH_SEGMENT, 
includePathSegment);
-
-               // read and parse
-               HttpUtils.Response resp = read(url);
-               AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-               // process tree
-               addDescendantsLevel(repositoryId, feed, result);
-
-               return result;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.NavigationService#getObjectParents
-        * (java.lang.String, java.lang.String, java.lang.String, 
java.lang.Boolean,
-        * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
-        * java.lang.Boolean, 
org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public List<ObjectParentData> getObjectParents(String repositoryId, 
String objectId, String filter,
-                       Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
-                       Boolean includeRelativePathSegment, ExtensionsData 
extension) {
-               List<ObjectParentData> result = new 
ArrayList<ObjectParentData>();
-
-               // find the link
-               String link = loadLink(repositoryId, objectId, 
Constants.REL_UP, Constants.MEDIATYPE_FEED);
-
-               if (link == null) {
-                       throwLinkException(repositoryId, objectId, 
Constants.REL_UP, Constants.MEDIATYPE_FEED);
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-               url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
-               url.addParameter(Constants.PARAM_RELATIONSHIPS, 
includeRelationships);
-               url.addParameter(Constants.PARAM_RENDITION_FILTER, 
renditionFilter);
-               url.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, 
includeRelativePathSegment);
-
-               // read and parse
-               HttpUtils.Response resp = read(url);
-
-               AtomBase base = parse(resp.getStream(), AtomBase.class);
-
-               if (base instanceof AtomFeed) {
-                       // it's a feed
-                       AtomFeed feed = (AtomFeed) base;
-
-                       // walk through the feed
-                       for (AtomEntry entry : feed.getEntries()) {
-                               ObjectParentDataImpl objectParent = 
processParentEntry(entry, repositoryId);
-
-                               if (objectParent != null) {
-                                       result.add(objectParent);
-                               }
-                       }
-               } else if (base instanceof AtomEntry) {
-                       // it's an entry
-                       AtomEntry entry = (AtomEntry) base;
-
-                       ObjectParentDataImpl objectParent = 
processParentEntry(entry, repositoryId);
-
-                       if (objectParent != null) {
-                               result.add(objectParent);
-                       }
-               }
-
-               return result;
-       }
-
-       private ObjectParentDataImpl processParentEntry(AtomEntry entry, String 
repositoryId) {
-               ObjectParentDataImpl result = null;
-               String relativePathSegment = null;
-
-               lockLinks();
-               try {
-                       // clean up cache
-                       removeLinks(repositoryId, entry.getId());
-
-                       // walk through the entry
-                       for (AtomElement element : entry.getElements()) {
-                               if (element.getObject() instanceof AtomLink) {
-                                       addLink(repositoryId, entry.getId(), 
(AtomLink) element.getObject());
-                               } else if (element.getObject() instanceof 
CmisObjectType) {
-                                       result = new 
ObjectParentDataImpl(convert((CmisObjectType) element.getObject()));
-                               } else if (is(NAME_RELATIVE_PATH_SEGMENT, 
element)) {
-                                       relativePathSegment = (String) 
element.getObject();
-                               }
-                       }
-               } finally {
-                       unlockLinks();
-               }
-
-               if (result != null) {
-                       result.setRelativePathSegment(relativePathSegment);
-               }
-
-               return result;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.opencmis.client.provider.NavigationService#getCheckedOutDocs
-        * (java.lang.String, java.lang.String, java.lang.String, 
java.lang.String,
-        * java.lang.Boolean,
-        * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
-        * java.math.BigInteger, java.math.BigInteger,
-        * org.apache.opencmis.client.provider.ExtensionsData)
-        */
-       public ObjectList getCheckedOutDocs(String repositoryId, String 
folderId, String filter, String orderBy,
-                       Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
-                       BigInteger maxItems, BigInteger skipCount, 
ExtensionsData extension) {
-               ObjectListImpl result = new ObjectListImpl();
-
-               // find the link
-               String link = loadCollection(repositoryId, 
Constants.COLLECTION_CHECKEDOUT);
-
-               if (link == null) {
-                       throw new CmisObjectNotFoundException("Unknown 
repository or checkedout collection not supported!");
-               }
-
-               UrlBuilder url = new UrlBuilder(link);
-               url.addParameter(Constants.PARAM_FOLDER_ID, folderId);
-               url.addParameter(Constants.PARAM_FILTER, filter);
-               url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
-               url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
-               url.addParameter(Constants.PARAM_RELATIONSHIPS, 
includeRelationships);
-               url.addParameter(Constants.PARAM_RENDITION_FILTER, 
renditionFilter);
-               url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
-               url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
-
-               // read and parse
-               HttpUtils.Response resp = read(url);
-               AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
-
-               // handle top level
-               for (AtomElement element : feed.getElements()) {
-                       if (element.getObject() instanceof AtomLink) {
-                               if (isNextLink(element)) {
-                                       result.setHasMoreItems(Boolean.TRUE);
-                               }
-                       } else if (isInt(NAME_NUM_ITEMS, element)) {
-                               result.setNumItems((BigInteger) 
element.getObject());
-                       }
-               }
-
-               // get the documents
-               if (!feed.getEntries().isEmpty()) {
-                       result.setObjects(new 
ArrayList<ObjectData>(feed.getEntries().size()));
-
-                       for (AtomEntry entry : feed.getEntries()) {
-                               ObjectData child = null;
-
-                               lockLinks();
-                               try {
-                                       // clean up cache
-                                       removeLinks(repositoryId, 
entry.getId());
-
-                                       // walk through the entry
-                                       for (AtomElement element : 
entry.getElements()) {
-                                               if (element.getObject() 
instanceof AtomLink) {
-                                                       addLink(repositoryId, 
entry.getId(), (AtomLink) element.getObject());
-                                               } else if (element.getObject() 
instanceof CmisObjectType) {
-                                                       child = 
convert((CmisObjectType) element.getObject());
-                                               }
-                                       }
-                               } finally {
-                                       unlockLinks();
-                               }
-
-                               if (child != null) {
-                                       result.getObjects().add(child);
-                               }
-                       }
-               }
-
-               return result;
-       }
-
-       // ---- internal ----
-
-       /**
-        * Adds descendants level recursively.
-        */
-       private void addDescendantsLevel(String repositoryId, AtomFeed feed, 
List<ObjectInFolderContainer> containerList) {
-               if ((feed == null) || (feed.getEntries().isEmpty())) {
-                       return;
-               }
-
-               // walk through the feed
-               for (AtomEntry entry : feed.getEntries()) {
-                       ObjectInFolderDataImpl objectInFolder = null;
-                       String pathSegment = null;
-                       List<ObjectInFolderContainer> childContainerList = new 
ArrayList<ObjectInFolderContainer>();
-
-                       lockLinks();
-                       try {
-                               // clean up cache
-                               removeLinks(repositoryId, entry.getId());
-
-                               // walk through the entry
-                               for (AtomElement element : entry.getElements()) 
{
-                                       if (element.getObject() instanceof 
AtomLink) {
-                                               addLink(repositoryId, 
entry.getId(), (AtomLink) element.getObject());
-                                       } else if (element.getObject() 
instanceof CmisObjectType) {
-                                               objectInFolder = new 
ObjectInFolderDataImpl(convert((CmisObjectType) element.getObject()));
-                                       } else if (is(NAME_PATH_SEGMENT, 
element)) {
-                                               pathSegment = (String) 
element.getObject();
-                                       } else if (element.getObject() 
instanceof AtomFeed) {
-                                               
addDescendantsLevel(repositoryId, (AtomFeed) element.getObject(), 
childContainerList);
-                                       }
-                               }
-                       } finally {
-                               unlockLinks();
-                       }
-
-                       if (objectInFolder != null) {
-                               objectInFolder.setPathSegment(pathSegment);
-                               ObjectInFolderContainerImpl childContainer = 
new ObjectInFolderContainerImpl(objectInFolder);
-                               childContainer.setChildren(childContainerList);
-                               containerList.add(childContainer);
-                       }
-               }
-       }
+    /**
+     * Constructor.
+     */
+    public NavigationServiceImpl(Session session) {
+        setSession(session);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getChildren(java
+     * .lang.String, java.lang.String, java.lang.String, java.lang.String,
+     * java.lang.Boolean,
+     * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
+     * java.lang.Boolean, java.math.BigInteger, java.math.BigInteger,
+     * org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public ObjectInFolderList getChildren(String repositoryId, String 
folderId, String filter, String orderBy,
+            Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
+            Boolean includePathSegment, BigInteger maxItems, BigInteger 
skipCount, ExtensionsData extension) {
+        ObjectInFolderListImpl result = new ObjectInFolderListImpl();
+
+        // find the link
+        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_CHILDREN);
+
+        if (link == null) {
+            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_CHILDREN);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
+        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
+        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
+
+        // handle top level
+        for (AtomElement element : feed.getElements()) {
+            if (element.getObject() instanceof AtomLink) {
+                if (isNextLink(element)) {
+                    result.setHasMoreItems(Boolean.TRUE);
+                }
+            } else if (isInt(NAME_NUM_ITEMS, element)) {
+                result.setNumItems((BigInteger) element.getObject());
+            }
+        }
+
+        // get the children
+        if (!feed.getEntries().isEmpty()) {
+            result.setObjects(new 
ArrayList<ObjectInFolderData>(feed.getEntries().size()));
+
+            for (AtomEntry entry : feed.getEntries()) {
+                ObjectInFolderDataImpl child = null;
+                String pathSegment = null;
+
+                lockLinks();
+                try {
+                    // clean up cache
+                    removeLinks(repositoryId, entry.getId());
+
+                    // walk through the entry
+                    for (AtomElement element : entry.getElements()) {
+                        if (element.getObject() instanceof AtomLink) {
+                            addLink(repositoryId, entry.getId(), (AtomLink) 
element.getObject());
+                        } else if (isStr(NAME_PATH_SEGMENT, element)) {
+                            pathSegment = (String) element.getObject();
+                        } else if (element.getObject() instanceof 
CmisObjectType) {
+                            child = new ObjectInFolderDataImpl();
+                            child.setObject(convert((CmisObjectType) 
element.getObject()));
+                        }
+                    }
+                } finally {
+                    unlockLinks();
+                }
+
+                if (child != null) {
+                    child.setPathSegment(pathSegment);
+                    result.getObjects().add(child);
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getDescendants(
+     * java.lang.String, java.lang.String, java.math.BigInteger,
+     * java.lang.String, java.lang.Boolean,
+     * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
+     * java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public List<ObjectInFolderContainer> getDescendants(String repositoryId, 
String folderId, BigInteger depth,
+            String filter, Boolean includeAllowableActions, 
IncludeRelationships includeRelationships,
+            String renditionFilter, Boolean includePathSegment, ExtensionsData 
extension) {
+        List<ObjectInFolderContainer> result = new 
ArrayList<ObjectInFolderContainer>();
+
+        // find the link
+        String link = loadLink(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_DESCENDANTS);
+
+        if (link == null) {
+            throwLinkException(repositoryId, folderId, Constants.REL_DOWN, 
Constants.MEDIATYPE_DESCENDANTS);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_DEPTH, depth);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
+        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
+
+        // process tree
+        addDescendantsLevel(repositoryId, feed, result);
+
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getFolderParent
+     * (java.lang.String, java.lang.String, java.lang.String,
+     * org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public ObjectData getFolderParent(String repositoryId, String folderId, 
String filter, ExtensionsData extension) {
+        ObjectData result = null;
+
+        // find the link
+        String link = loadLink(repositoryId, folderId, Constants.REL_UP, 
Constants.MEDIATYPE_ENTRY);
+
+        if (link == null) {
+            throwLinkException(repositoryId, folderId, Constants.REL_UP, 
Constants.MEDIATYPE_ENTRY);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+
+        // read
+        HttpUtils.Response resp = read(url);
+
+        AtomBase base = parse(resp.getStream(), AtomBase.class);
+
+        // get the entry
+        AtomEntry entry = null;
+        if (base instanceof AtomFeed) {
+            AtomFeed feed = (AtomFeed) base;
+            if (feed.getEntries().isEmpty()) {
+                throw new CmisRuntimeException("Parent feed is empty!");
+            }
+            entry = feed.getEntries().get(0);
+        } else if (base instanceof AtomEntry) {
+            entry = (AtomEntry) base;
+        } else {
+            throw new CmisRuntimeException("Unexpected document!");
+        }
+
+        lockLinks();
+        try {
+            // clean up cache
+            removeLinks(repositoryId, entry.getId());
+
+            // walk through the entry
+            for (AtomElement element : entry.getElements()) {
+                if (element.getObject() instanceof AtomLink) {
+                    addLink(repositoryId, entry.getId(), (AtomLink) 
element.getObject());
+                } else if (element.getObject() instanceof CmisObjectType) {
+                    result = convert((CmisObjectType) element.getObject());
+                }
+            }
+        } finally {
+            unlockLinks();
+        }
+
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getFolderTree(java
+     * .lang.String, java.lang.String, java.math.BigInteger, java.lang.String,
+     * java.lang.Boolean,
+     * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
+     * java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public List<ObjectInFolderContainer> getFolderTree(String repositoryId, 
String folderId, BigInteger depth,
+            String filter, Boolean includeAllowableActions, 
IncludeRelationships includeRelationships,
+            String renditionFilter, Boolean includePathSegment, ExtensionsData 
extension) {
+        List<ObjectInFolderContainer> result = new 
ArrayList<ObjectInFolderContainer>();
+
+        // find the link
+        String link = loadLink(repositoryId, folderId, 
Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
+
+        if (link == null) {
+            throwLinkException(repositoryId, folderId, 
Constants.REL_FOLDERTREE, Constants.MEDIATYPE_DESCENDANTS);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_DEPTH, depth);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
+        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+        url.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
+
+        // process tree
+        addDescendantsLevel(repositoryId, feed, result);
+
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getObjectParents
+     * (java.lang.String, java.lang.String, java.lang.String, 
java.lang.Boolean,
+     * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
+     * java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public List<ObjectParentData> getObjectParents(String repositoryId, String 
objectId, String filter,
+            Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
+            Boolean includeRelativePathSegment, ExtensionsData extension) {
+        List<ObjectParentData> result = new ArrayList<ObjectParentData>();
+
+        // find the link
+        String link = loadLink(repositoryId, objectId, Constants.REL_UP, 
Constants.MEDIATYPE_FEED);
+
+        if (link == null) {
+            throwLinkException(repositoryId, objectId, Constants.REL_UP, 
Constants.MEDIATYPE_FEED);
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
+        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+        url.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, 
includeRelativePathSegment);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+
+        AtomBase base = parse(resp.getStream(), AtomBase.class);
+
+        if (base instanceof AtomFeed) {
+            // it's a feed
+            AtomFeed feed = (AtomFeed) base;
+
+            // walk through the feed
+            for (AtomEntry entry : feed.getEntries()) {
+                ObjectParentDataImpl objectParent = processParentEntry(entry, 
repositoryId);
+
+                if (objectParent != null) {
+                    result.add(objectParent);
+                }
+            }
+        } else if (base instanceof AtomEntry) {
+            // it's an entry
+            AtomEntry entry = (AtomEntry) base;
+
+            ObjectParentDataImpl objectParent = processParentEntry(entry, 
repositoryId);
+
+            if (objectParent != null) {
+                result.add(objectParent);
+            }
+        }
+
+        return result;
+    }
+
+    private ObjectParentDataImpl processParentEntry(AtomEntry entry, String 
repositoryId) {
+        ObjectParentDataImpl result = null;
+        String relativePathSegment = null;
+
+        lockLinks();
+        try {
+            // clean up cache
+            removeLinks(repositoryId, entry.getId());
+
+            // walk through the entry
+            for (AtomElement element : entry.getElements()) {
+                if (element.getObject() instanceof AtomLink) {
+                    addLink(repositoryId, entry.getId(), (AtomLink) 
element.getObject());
+                } else if (element.getObject() instanceof CmisObjectType) {
+                    result = new ObjectParentDataImpl(convert((CmisObjectType) 
element.getObject()));
+                } else if (is(NAME_RELATIVE_PATH_SEGMENT, element)) {
+                    relativePathSegment = (String) element.getObject();
+                }
+            }
+        } finally {
+            unlockLinks();
+        }
+
+        if (result != null) {
+            result.setRelativePathSegment(relativePathSegment);
+        }
+
+        return result;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.opencmis.client.provider.NavigationService#getCheckedOutDocs
+     * (java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+     * java.lang.Boolean,
+     * org.apache.opencmis.commons.enums.IncludeRelationships, 
java.lang.String,
+     * java.math.BigInteger, java.math.BigInteger,
+     * org.apache.opencmis.client.provider.ExtensionsData)
+     */
+    public ObjectList getCheckedOutDocs(String repositoryId, String folderId, 
String filter, String orderBy,
+            Boolean includeAllowableActions, IncludeRelationships 
includeRelationships, String renditionFilter,
+            BigInteger maxItems, BigInteger skipCount, ExtensionsData 
extension) {
+        ObjectListImpl result = new ObjectListImpl();
+
+        // find the link
+        String link = loadCollection(repositoryId, 
Constants.COLLECTION_CHECKEDOUT);
+
+        if (link == null) {
+            throw new CmisObjectNotFoundException("Unknown repository or 
checkedout collection not supported!");
+        }
+
+        UrlBuilder url = new UrlBuilder(link);
+        url.addParameter(Constants.PARAM_FOLDER_ID, folderId);
+        url.addParameter(Constants.PARAM_FILTER, filter);
+        url.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+        url.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, 
includeAllowableActions);
+        url.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+        url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+        url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
+        url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+        AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
+
+        // handle top level
+        for (AtomElement element : feed.getElements()) {
+            if (element.getObject() instanceof AtomLink) {
+                if (isNextLink(element)) {
+                    result.setHasMoreItems(Boolean.TRUE);
+                }
+            } else if (isInt(NAME_NUM_ITEMS, element)) {
+                result.setNumItems((BigInteger) element.getObject());
+            }
+        }
+
+        // get the documents
+        if (!feed.getEntries().isEmpty()) {
+            result.setObjects(new 
ArrayList<ObjectData>(feed.getEntries().size()));
+
+            for (AtomEntry entry : feed.getEntries()) {
+                ObjectData child = null;
+
+                lockLinks();
+                try {
+                    // clean up cache
+                    removeLinks(repositoryId, entry.getId());
+
+                    // walk through the entry
+                    for (AtomElement element : entry.getElements()) {
+                        if (element.getObject() instanceof AtomLink) {
+                            addLink(repositoryId, entry.getId(), (AtomLink) 
element.getObject());
+                        } else if (element.getObject() instanceof 
CmisObjectType) {
+                            child = convert((CmisObjectType) 
element.getObject());
+                        }
+                    }
+                } finally {
+                    unlockLinks();
+                }
+
+                if (child != null) {
+                    result.getObjects().add(child);
+                }
+            }
+        }
+
+        return result;
+    }
+
+    // ---- internal ----
+
+    /**
+     * Adds descendants level recursively.
+     */
+    private void addDescendantsLevel(String repositoryId, AtomFeed feed, 
List<ObjectInFolderContainer> containerList) {
+        if ((feed == null) || (feed.getEntries().isEmpty())) {
+            return;
+        }
+
+        // walk through the feed
+        for (AtomEntry entry : feed.getEntries()) {
+            ObjectInFolderDataImpl objectInFolder = null;
+            String pathSegment = null;
+            List<ObjectInFolderContainer> childContainerList = new 
ArrayList<ObjectInFolderContainer>();
+
+            lockLinks();
+            try {
+                // clean up cache
+                removeLinks(repositoryId, entry.getId());
+
+                // walk through the entry
+                for (AtomElement element : entry.getElements()) {
+                    if (element.getObject() instanceof AtomLink) {
+                        addLink(repositoryId, entry.getId(), (AtomLink) 
element.getObject());
+                    } else if (element.getObject() instanceof CmisObjectType) {
+                        objectInFolder = new 
ObjectInFolderDataImpl(convert((CmisObjectType) element.getObject()));
+                    } else if (is(NAME_PATH_SEGMENT, element)) {
+                        pathSegment = (String) element.getObject();
+                    } else if (element.getObject() instanceof AtomFeed) {
+                        addDescendantsLevel(repositoryId, (AtomFeed) 
element.getObject(), childContainerList);
+                    }
+                }
+            } finally {
+                unlockLinks();
+            }
+
+            if (objectInFolder != null) {
+                objectInFolder.setPathSegment(pathSegment);
+                ObjectInFolderContainerImpl childContainer = new 
ObjectInFolderContainerImpl(objectInFolder);
+                childContainer.setChildren(childContainerList);
+                containerList.add(childContainer);
+            }
+        }
+    }
 }


Reply via email to