You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2011/11/24 20:18:53 UTC

svn commit: r1205962 [1/2] - in /chemistry/opencmis/trunk: chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/ chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/ma...

Author: fmui
Date: Thu Nov 24 19:18:48 2011
New Revision: 1205962

URL: http://svn.apache.org/viewvc?rev=1205962&view=rev
Log:
reorganized code in order to start browser binding client implementation 

Added:
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpUtils.java
    chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java
    chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java
    chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/TypeCache.java
Removed:
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/HttpUtils.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkAccess.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/TypeCache.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/json/
Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml
    chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/pom.xml
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/AclService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/CmisBrowserBindingServlet.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/DiscoveryService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultiFilingService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/NavigationService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ObjectService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/PolicyService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RelationshipService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/RepositoryService.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/VersioningService.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java

Added: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java?rev=1205962&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/LinkAccess.java Thu Nov 24 19:18:48 2011
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.client.bindings.spi;
+
+/**
+ * Provides access to internal links. It bypasses the CMIS domain model. Use
+ * with care!
+ */
+public interface LinkAccess {
+
+    /**
+     * Gets a link from the cache if it is there or loads it into the cache if
+     * it is not there.
+     */
+    String loadLink(String repositoryId, String objectId, String rel, String type);
+
+    /**
+     * Gets the content link from the cache if it is there or loads it into the
+     * cache if it is not there.
+     */
+    String loadContentLink(String repositoryId, String documentId);
+}

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java Thu Nov 24 19:18:48 2011
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
+import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomBase;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
@@ -38,6 +39,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
 import org.apache.chemistry.opencmis.commons.data.Ace;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -22,6 +22,7 @@ import static org.apache.chemistry.openc
 
 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomAcl;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.enums.AclPropagation;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -29,6 +29,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 import org.apache.chemistry.opencmis.commons.data.ObjectList;

Modified: 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/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.cl
 import java.io.OutputStream;
 
 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;

Modified: 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/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -30,6 +30,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -35,6 +35,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.AllowableActions;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -29,6 +29,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -28,6 +28,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 import org.apache.chemistry.opencmis.commons.data.ObjectList;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -29,6 +29,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -31,6 +31,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
 import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java Thu Nov 24 19:18:48 2011
@@ -18,8 +18,41 @@
  */
 package org.apache.chemistry.opencmis.client.bindings.spi.browser;
 
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.LinkAccess;
+import org.apache.chemistry.opencmis.client.bindings.spi.LinkAccess;
+import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpUtils;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisFilterNotValidException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisStreamNotSupportedException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisVersioningException;
+import org.apache.chemistry.opencmis.commons.impl.Constants;
+import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
+import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
+import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
 
 /**
  * Base class for all Browser Binding client services.
@@ -42,6 +75,193 @@ public abstract class AbstractBrowserBin
         return session;
     }
 
+    /**
+     * Returns the service URL of this session.
+     */
+    protected String getServiceURL() {
+        Object url = session.get(SessionParameter.BROWSER_URL);
+        if (url instanceof String) {
+            return (String) url;
+        }
+
+        return null;
+    }
+
+    // ---- exceptions ----
+
+    /**
+     * Converts an error message or a HTTP status code into an Exception.
+     */
+    protected CmisBaseException convertStatusCode(int code, String message, String errorContent, Throwable t) {
+
+        Object obj = null;
+        try {
+            JSONParser parser = new JSONParser();
+            obj = parser.parse(errorContent);
+        } catch (Exception pe) {
+        }
+
+        if (obj instanceof JSONObject) {
+            JSONObject json = (JSONObject) obj;
+            Object jsonError = json.get(JSONConstants.ERROR_EXCEPTION);
+            if (jsonError instanceof String) {
+                Object jsonMessage = json.get(JSONConstants.ERROR_MESSAGE);
+                if (jsonMessage != null) {
+                    message = jsonMessage.toString();
+                }
+
+                if (CmisConstraintException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisConstraintException(message, errorContent, t);
+                } else if (CmisContentAlreadyExistsException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisContentAlreadyExistsException(message, errorContent, t);
+                } else if (CmisFilterNotValidException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisFilterNotValidException(message, errorContent, t);
+                } else if (CmisInvalidArgumentException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisInvalidArgumentException(message, errorContent, t);
+                } else if (CmisNameConstraintViolationException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisNameConstraintViolationException(message, errorContent, t);
+                } else if (CmisNotSupportedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisNotSupportedException(message, errorContent, t);
+                } else if (CmisObjectNotFoundException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisObjectNotFoundException(message, errorContent, t);
+                } else if (CmisPermissionDeniedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisPermissionDeniedException(message, errorContent, t);
+                } else if (CmisStorageException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisStorageException(message, errorContent, t);
+                } else if (CmisStreamNotSupportedException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisStreamNotSupportedException(message, errorContent, t);
+                } else if (CmisUpdateConflictException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisUpdateConflictException(message, errorContent, t);
+                } else if (CmisVersioningException.EXCEPTION_NAME.equalsIgnoreCase((String) jsonError)) {
+                    return new CmisVersioningException(message, errorContent, t);
+                }
+            }
+        }
+
+        // fall back to status code
+        switch (code) {
+        case 400:
+            return new CmisInvalidArgumentException(message, errorContent, t);
+        case 401:
+            return new CmisUnauthorizedException(message, errorContent, t);
+        case 403:
+            return new CmisPermissionDeniedException(message, errorContent, t);
+        case 404:
+            return new CmisObjectNotFoundException(message, errorContent, t);
+        case 405:
+            return new CmisNotSupportedException(message, errorContent, t);
+        case 407:
+            return new CmisProxyAuthenticationException(message, errorContent, t);
+        case 409:
+            return new CmisConstraintException(message, errorContent, t);
+        default:
+            return new CmisRuntimeException(message, errorContent, t);
+        }
+    }
+
+    // ---- helpers ----
+
+    /**
+     * Parses an input stream.
+     */
+    protected Object parse(InputStream stream, String charset) {
+        Object obj = null;
+        try {
+            JSONParser parser = new JSONParser();
+            obj = parser.parse(new InputStreamReader(stream, charset));
+        } catch (Exception e) {
+            throw new CmisConnectionException("Parsing exception!", e);
+        } finally {
+            try {
+                stream.close();
+            } catch (Exception e) {
+            }
+        }
+
+        return obj;
+    }
+
+    /**
+     * Performs a GET on an URL, checks the response code and returns the
+     * result.
+     */
+    protected HttpUtils.Response read(UrlBuilder url) {
+        // make the call
+        HttpUtils.Response resp = HttpUtils.invokeGET(url, session);
+
+        // check response code
+        if (resp.getResponseCode() != 200) {
+            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
+        }
+
+        return resp;
+    }
+
+    /**
+     * Performs a POST on an URL, checks the response code and returns the
+     * result.
+     */
+    protected HttpUtils.Response post(UrlBuilder url, String contentType, HttpUtils.Output writer) {
+        // make the call
+        HttpUtils.Response resp = HttpUtils.invokePOST(url, contentType, writer, session);
+
+        // check response code
+        if (resp.getResponseCode() != 200 && resp.getResponseCode() != 201) {
+            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
+        }
+
+        return resp;
+    }
+
+    // ---- URL ----
+
+    /**
+     * Returns the repository URL cache or creates a new cache if it doesn't
+     * exist.
+     */
+    protected RepositoryUrlCache geRepositoryUrlCache() {
+        RepositoryUrlCache repositoryUrlCache = (RepositoryUrlCache) getSession().get(
+                SpiSessionParameter.REPOSITORY_URL_CACHE);
+        if (repositoryUrlCache == null) {
+            repositoryUrlCache = new RepositoryUrlCache();
+            getSession().put(SpiSessionParameter.REPOSITORY_URL_CACHE, repositoryUrlCache);
+        }
+
+        return repositoryUrlCache;
+    }
+
+    /**
+     * Retrieves the the repository info objects.
+     */
+    protected List<RepositoryInfo> getRepositoriesInternal(String repositoryId) {
+        // retrieve service doc
+        UrlBuilder url = new UrlBuilder(getServiceURL());
+        url.addParameter(Constants.PARAM_REPOSITORY_ID, repositoryId);
+
+        // read and parse
+        HttpUtils.Response resp = read(url);
+
+        Object json = parse(resp.getStream(), resp.getCharset());
+
+        if (json instanceof JSONObject) {
+            return Collections.singletonList(JSONConverter.convertRepositoryInfo((JSONObject) json));
+        }
+
+        if (json instanceof JSONArray) {
+            List<RepositoryInfo> repInfos = new ArrayList<RepositoryInfo>();
+
+            for (Object ri : ((JSONArray) json)) {
+                if (ri instanceof JSONObject) {
+                    repInfos.add(JSONConverter.convertRepositoryInfo((JSONObject) json));
+                }
+            }
+
+            return repInfos;
+        }
+
+        throw new CmisConnectionException("Repository Infos could not be read!");
+    }
+
     // ---- LinkAccess interface ----
 
     public String loadLink(String repositoryId, String objectId, String rel, String type) {
@@ -50,7 +270,7 @@ public abstract class AbstractBrowserBin
     }
 
     public String loadContentLink(String repositoryId, String documentId) {
-        // TODO Auto-generated method stub
-        return null;
+        UrlBuilder result = geRepositoryUrlCache().getObjectUrl(repositoryId, documentId, Constants.SELECTOR_CONTENT);
+        return result == null ? null : result.toString();
     }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/RepositoryServiceImpl.java Thu Nov 24 19:18:48 2011
@@ -27,6 +27,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
 import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
 
 /**
@@ -42,13 +43,24 @@ public class RepositoryServiceImpl exten
     }
 
     public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-        // TODO Auto-generated method stub
-        return null;
+        return getRepositoriesInternal(null);
     }
 
     public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-        // TODO Auto-generated method stub
-        return null;
+        List<RepositoryInfo> repositoryInfos = getRepositoriesInternal(repositoryId);
+
+        // find the repository
+        for (RepositoryInfo info : repositoryInfos) {
+            if (info.getId() == null) {
+                continue;
+            }
+
+            if (info.getId().equals(repositoryId)) {
+                return info;
+            }
+        }
+
+        throw new CmisObjectNotFoundException("Repository not found!");
     }
 
     public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,

Added: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpUtils.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpUtils.java?rev=1205962&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpUtils.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/HttpUtils.java Thu Nov 24 19:18:48 2011
@@ -0,0 +1,416 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.client.bindings.spi.http;
+
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.math.BigInteger;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+import java.util.zip.Inflater;
+import java.util.zip.InflaterInputStream;
+
+import org.apache.chemistry.opencmis.client.bindings.impl.ClientVersion;
+import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
+import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
+import org.apache.chemistry.opencmis.commons.impl.Base64;
+import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
+import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * HTTP helper methods.
+ */
+public class HttpUtils {
+
+    private static final Log log = LogFactory.getLog(HttpUtils.class);
+
+    private static final int BUFFER_SIZE = 2 * 1024 * 1024;
+
+    private HttpUtils() {
+    }
+
+    public static Response invokeGET(UrlBuilder url, BindingSession session) {
+        return invoke(url, "GET", null, null, null, session, null, null);
+    }
+
+    public static Response invokeGET(UrlBuilder url, BindingSession session, BigInteger offset, BigInteger length) {
+        return invoke(url, "GET", null, null, null, session, offset, length);
+    }
+
+    public static Response invokePOST(UrlBuilder url, String contentType, Output writer, BindingSession session) {
+        return invoke(url, "POST", contentType, null, writer, session, null, null);
+    }
+
+    public static Response invokePUT(UrlBuilder url, String contentType, Map<String, String> headers, Output writer,
+            BindingSession session) {
+        return invoke(url, "PUT", contentType, headers, writer, session, null, null);
+    }
+
+    public static Response invokeDELETE(UrlBuilder url, BindingSession session) {
+        return invoke(url, "DELETE", null, null, null, session, null, null);
+    }
+
+    private static Response invoke(UrlBuilder url, String method, String contentType, Map<String, String> headers,
+            Output writer, BindingSession session, BigInteger offset, BigInteger length) {
+        try {
+            // log before connect
+            if (log.isDebugEnabled()) {
+                log.debug(method + " " + url);
+            }
+
+            // connect
+            HttpURLConnection conn = (HttpURLConnection) (new URL(url.toString())).openConnection();
+            conn.setRequestMethod(method);
+            conn.setDoInput(true);
+            conn.setDoOutput(writer != null);
+            conn.setAllowUserInteraction(false);
+            conn.setUseCaches(false);
+            conn.setRequestProperty("User-Agent", ClientVersion.OPENCMIS_CLIENT);
+
+            // timeouts
+            int connectTimeout = session.get(SessionParameter.CONNECT_TIMEOUT, -1);
+            if (connectTimeout >= 0) {
+                conn.setConnectTimeout(connectTimeout);
+            }
+
+            int readTimeout = session.get(SessionParameter.READ_TIMEOUT, -1);
+            if (readTimeout >= 0) {
+                conn.setReadTimeout(readTimeout);
+            }
+
+            // set content type
+            if (contentType != null) {
+                conn.setRequestProperty("Content-Type", contentType);
+            }
+            // set other headers
+            if (headers != null) {
+                for (Map.Entry<String, String> header : headers.entrySet()) {
+                    conn.setRequestProperty(header.getKey(), header.getValue());
+                }
+            }
+
+            // authenticate
+            AuthenticationProvider authProvider = CmisBindingsHelper.getAuthenticationProvider(session);
+            if (authProvider != null) {
+                Map<String, List<String>> httpHeaders = authProvider.getHTTPHeaders(url.toString());
+                if (httpHeaders != null) {
+                    for (Map.Entry<String, List<String>> header : httpHeaders.entrySet()) {
+                        if (header.getValue() != null) {
+                            for (String value : header.getValue()) {
+                                conn.setRequestProperty(header.getKey(), value);
+                            }
+                        }
+                    }
+                }
+            }
+
+            // range
+            if ((offset != null) || (length != null)) {
+                StringBuilder sb = new StringBuilder("bytes=");
+
+                if ((offset == null) || (offset.signum() == -1)) {
+                    offset = BigInteger.ZERO;
+                }
+
+                sb.append(offset.toString());
+                sb.append("-");
+
+                if ((length != null) && (length.signum() == 1)) {
+                    sb.append(offset.add(length.subtract(BigInteger.ONE)).toString());
+                }
+
+                conn.setRequestProperty("Range", sb.toString());
+            }
+
+            // compression
+            Object compression = session.get(SessionParameter.COMPRESSION);
+            if ((compression != null) && Boolean.parseBoolean(compression.toString())) {
+                conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
+            }
+
+            // locale
+            if (session.get(CmisBindingsHelper.ACCEPT_LANGUAGE) instanceof String) {
+                conn.setRequestProperty("Accept-Language", session.get(CmisBindingsHelper.ACCEPT_LANGUAGE).toString());
+            }
+
+            // send data
+            if (writer != null) {
+                conn.setChunkedStreamingMode((64 * 1024) - 1);
+
+                OutputStream connOut = null;
+
+                Object clientCompression = session.get(SessionParameter.CLIENT_COMPRESSION);
+                if ((clientCompression != null) && Boolean.parseBoolean(clientCompression.toString())) {
+                    conn.setRequestProperty("Content-Encoding", "gzip");
+                    connOut = new GZIPOutputStream(conn.getOutputStream(), 4096);
+                } else {
+                    connOut = conn.getOutputStream();
+                }
+
+                OutputStream out = new BufferedOutputStream(connOut, BUFFER_SIZE);
+                writer.write(out);
+                out.flush();
+            }
+
+            // connect
+            conn.connect();
+
+            // get stream, if present
+            int respCode = conn.getResponseCode();
+            InputStream inputStream = null;
+            if ((respCode == 200) || (respCode == 201) || (respCode == 203) || (respCode == 206)) {
+                inputStream = conn.getInputStream();
+            }
+
+            // forward response HTTP headers
+            if (authProvider != null) {
+                authProvider.putResponseHeaders(url.toString(), respCode, conn.getHeaderFields());
+            }
+
+            // get the response
+            return new Response(respCode, conn.getResponseMessage(), conn.getHeaderFields(), inputStream,
+                    conn.getErrorStream());
+        } catch (Exception e) {
+            throw new CmisConnectionException("Cannot access " + url + ": " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * HTTP Response.
+     */
+    public static class Response {
+        private final int responseCode;
+        private final String responseMessage;
+        private final Map<String, List<String>> headers;
+        private InputStream stream;
+        private String errorContent;
+        private BigInteger length;
+        private String charset;
+
+        public Response(int responseCode, String responseMessage, Map<String, List<String>> headers,
+                InputStream responseStream, InputStream errorStream) {
+            this.responseCode = responseCode;
+            this.responseMessage = responseMessage;
+            stream = responseStream;
+
+            this.headers = new HashMap<String, List<String>>();
+            if (headers != null) {
+                for (Map.Entry<String, List<String>> e : headers.entrySet()) {
+                    this.headers.put(e.getKey() == null ? null : e.getKey().toLowerCase(), e.getValue());
+                }
+            }
+
+            // determine charset
+            charset = "UTF-8";
+            String contentType = getContentTypeHeader();
+            if (contentType != null) {
+                String[] parts = contentType.split(";");
+                for (int i = 1; i < parts.length; i++) {
+                    String part = parts[i].trim().toLowerCase();
+                    if (part.startsWith("charset")) {
+                        int x = part.indexOf('=');
+                        charset = part.substring(x + 1).trim();
+                        break;
+                    }
+                }
+            }
+
+            // if there is an error page, get it
+            if (errorStream != null) {
+                if (contentType != null) {
+                    String contentTypeLower = contentType.toLowerCase().split(";")[0];
+                    if (contentTypeLower.startsWith("text/") || contentTypeLower.endsWith("+xml")) {
+                        StringBuilder sb = new StringBuilder();
+
+                        try {
+                            String encoding = getContentEncoding();
+                            if (encoding != null) {
+                                if (encoding.toLowerCase().trim().equals("gzip")) {
+                                    try {
+                                        errorStream = new GZIPInputStream(errorStream, 4096);
+                                    } catch (IOException e) {
+                                    }
+                                } else if (encoding.toLowerCase().trim().equals("deflate")) {
+                                    errorStream = new InflaterInputStream(errorStream, new Inflater(true), 4096);
+                                }
+                            }
+
+                            InputStreamReader reader = new InputStreamReader(errorStream, charset);
+                            char[] buffer = new char[4096];
+                            int b;
+                            while ((b = reader.read(buffer)) > -1) {
+                                sb.append(buffer, 0, b);
+                            }
+                            reader.close();
+
+                            errorContent = sb.toString();
+                        } catch (IOException e) {
+                            errorContent = "Unable to retrieve content: " + e.getMessage();
+                        }
+                    }
+                } else {
+                    try {
+                        errorStream.close();
+                    } catch (IOException e) {
+                    }
+                }
+
+                if (responseStream != null) {
+                    try {
+                        responseStream.close();
+                    } catch (IOException e) {
+                    }
+                }
+
+                return;
+            }
+
+            // get the stream length
+            String lengthStr = getHeader("Content-Length");
+            if (lengthStr != null) {
+                try {
+                    length = new BigInteger(lengthStr);
+                } catch (NumberFormatException e) {
+                }
+            }
+
+            if (stream != null) {
+                String encoding = getContentEncoding();
+                if (encoding != null) {
+                    if (encoding.toLowerCase().trim().equals("gzip")) {
+                        // if the stream is gzip encoded, decode it
+                        length = null;
+                        try {
+                            stream = new GZIPInputStream(stream, 4096);
+                        } catch (IOException e) {
+                            errorContent = e.getMessage();
+                            stream = null;
+                            try {
+                                responseStream.close();
+                            } catch (IOException ec) {
+                            }
+                        }
+                    } else if (encoding.toLowerCase().trim().equals("deflate")) {
+                        // if the stream is deflate encoded, decode it
+                        length = null;
+                        stream = new InflaterInputStream(stream, new Inflater(true), 4096);
+                    }
+                }
+
+                String transferEncoding = getContentTransferEncoding();
+                if ((stream != null) && (transferEncoding != null)
+                        && (transferEncoding.toLowerCase().trim().equals("base64"))) {
+                    // if the stream is base64 encoded, decode it
+                    length = null;
+                    stream = new Base64.InputStream(stream);
+                }
+            }
+        }
+
+        public int getResponseCode() {
+            return responseCode;
+        }
+
+        public String getResponseMessage() {
+            return responseMessage;
+        }
+
+        public Map<String, List<String>> getHeaders() {
+            return headers;
+        }
+
+        public String getHeader(String name) {
+            List<String> list = headers.get(name.toLowerCase(Locale.US));
+            if ((list == null) || (list.isEmpty())) {
+                return null;
+            }
+
+            return list.get(0);
+        }
+
+        public String getContentTypeHeader() {
+            return getHeader("Content-Type");
+        }
+
+        public BigInteger getContentLengthHeader() {
+            String lengthStr = getHeader("Content-Length");
+            if (lengthStr == null) {
+                return null;
+            }
+
+            try {
+                return new BigInteger(lengthStr);
+            } catch (NumberFormatException e) {
+                return null;
+            }
+        }
+
+        public String getLocactionHeader() {
+            return getHeader("Location");
+        }
+
+        public String getContentLocactionHeader() {
+            return getHeader("Content-Location");
+        }
+
+        public String getContentTransferEncoding() {
+            return getHeader("Content-Transfer-Encoding");
+        }
+
+        public String getContentEncoding() {
+            return getHeader("Content-Encoding");
+        }
+
+        public String getCharset() {
+            return charset;
+        }
+
+        public BigInteger getContentLength() {
+            return length;
+        }
+
+        public InputStream getStream() {
+            return stream;
+        }
+
+        public String getErrorContent() {
+            return errorContent;
+        }
+    }
+
+    /**
+     * Output interface.
+     */
+    public interface Output {
+        void write(OutputStream out) throws Exception;
+    }
+}

Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/pom.xml Thu Nov 24 19:18:48 2011
@@ -43,6 +43,11 @@
             <version>2.1.7</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+             <groupId>com.googlecode.json-simple</groupId>
+             <artifactId>json-simple</artifactId>
+             <version>1.1</version>
+        </dependency>
     </dependencies>
 
     <build>

Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java?rev=1205962&r1=1205961&r2=1205962&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Constants.java Thu Nov 24 19:18:48 2011
@@ -93,6 +93,49 @@ public final class Constants {
     public static final String REP_REL_ROOTDESC = "http://docs.oasis-open.org/ns/cmis/link/200908/rootdescendants";
     public static final String REP_REL_CHANGES = "http://docs.oasis-open.org/ns/cmis/link/200908/changes";
 
+    // browser binding selectors
+    public static final String SELECTOR_LAST_RESULT = "lastResult";
+    public static final String SELECTOR_TYPE_CHILDREN = "typeChildren";
+    public static final String SELECTOR_TYPE_DESCENDANTS = "typeDescendants";
+    public static final String SELECTOR_TYPE_DEFINITION = "typeDefinition";
+    public static final String SELECTOR_CONTENT = "content";
+    public static final String SELECTOR_OBJECT = "object";
+    public static final String SELECTOR_PROPERTIES = "properties";
+    public static final String SELECTOR_RENDITIONS = "renditions";
+    public static final String SELECTOR_CHILDREN = "children";
+    public static final String SELECTOR_DESCENDANTS = "descendants";
+    public static final String SELECTOR_PARENTS = "parents";
+    public static final String SELECTOR_PARENT = "parent";
+    public static final String SELECTOR_FOLDER_TREE = "folder";
+    public static final String SELECTOR_QUERY = "query";
+    public static final String SELECTOR_VERSIONS = "versions";
+    public static final String SELECTOR_RELATIONSHIPS = "relationships";
+    public static final String SELECTOR_CHECKEDOUT = "checkedout";
+    public static final String SELECTOR_POLICIES = "policies";
+    public static final String SELECTOR_ACL = "acl";
+    public static final String SELECTOR_CONTENT_CHANGES = "contentChanges";
+
+    // browser binding actions
+    public static final String CMISACTION_CREATE_DOCUMENT = "createDocument";
+    public static final String CMISACTION_CREATE_DOCUMENT_FROM_SOURCE = "createDocumentFromSource";
+    public static final String CMISACTION_CREATE_FOLDER = "createFolder";
+    public static final String CMISACTION_CREATE_RELATIONSHIP = "createRelationship";
+    public static final String CMISACTION_CREATE_POLICY = "createPolicy";
+    public static final String CMISACTION_DELETE_CONTENT = "deleteContent";
+    public static final String CMISACTION_SET_CONTENT = "setContent";
+    public static final String CMISACTION_DELETE = "delete";
+    public static final String CMISACTION_DELETE_TREE = "deleteTree";
+    public static final String CMISACTION_MOVE = "move";
+    public static final String CMISACTION_ADD_OBJECT_TO_FOLDER = "addObjectToFolder";
+    public static final String CMISACTION_REMOVE_OBJECT_FROM_FOLDER = "removeObjectFromFolder";
+    public static final String CMISACTION_QUERY = "query";
+    public static final String CMISACTION_CHECK_OUT = "checkOut";
+    public static final String CMISACTION_CANCEL_CHECK_OUT = "cancelCheckOut";
+    public static final String CMISACTION_CHECK_IN = "checkIn";
+    public static final String CMISACTION_APPLY_POLICY = "applyPolicy";
+    public static final String CMISACTION_REMOVE_POLICY = "removePolicy";
+    public static final String CMISACTION_APPLY_ACL = "applyACL";
+
     // parameter
     public static final String PARAM_ACL = "includeACL";
     public static final String PARAM_ALLOWABLE_ACTIONS = "includeAllowableActions";

Added: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java?rev=1205962&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConstants.java Thu Nov 24 19:18:48 2011
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.commons.impl;
+
+/**
+ * JSON object constants.
+ */
+public class JSONConstants {
+
+    public static final String ERROR_EXCEPTION = "exception";
+    public static final String ERROR_MESSAGE = "message";
+    public static final String ERROR_STACKTRACE = "stacktrace";
+
+    public static final String REPINFO_ID = "repositoryId";
+    public static final String REPINFO_NAME = "repositoryName";
+    public static final String REPINFO_DESCRIPTION = "repositoryDescription";
+    public static final String REPINFO_VENDOR = "vendorName";
+    public static final String REPINFO_PRODUCT = "productName";
+    public static final String REPINFO_PRODUCT_VERSION = "productVersion";
+    public static final String REPINFO_ROOT_FOLDER_ID = "rootFolderId";
+    public static final String REPINFO_REPOSITORY_URL = "repositoryUrl";
+    public static final String REPINFO_ROOT_FOLDER_URL = "rootFolderUrl";
+    public static final String REPINFO_CAPABILITIES = "capabilities";
+    public static final String REPINFO_ACL_CAPABILITIES = "aclCapabilities";
+    public static final String REPINFO_CHANGE_LOCK_TOKEN = "latestChangeLogToken";
+    public static final String REPINFO_CMIS_VERSION_SUPPORTED = "cmisVersionSupported";
+    public static final String REPINFO_THIN_CLIENT_URI = "thinClientURI";
+    public static final String REPINFO_CHANGES_INCOMPLETE = "changesIncomplete";
+    public static final String REPINFO_CHANGES_ON_TYPE = "changesOnType";
+    public static final String REPINFO_PRINCIPAL_ID_ANONYMOUS = "principalIdAnonymous";
+    public static final String REPINFO_PRINCIPAL_ID_ANYONE = "principalIdAnyone";
+
+    public static final String JSON_CAP_CONTENT_STREAM_UPDATES = "capabilityContentStreamUpdatability";
+    public static final String JSON_CAP_CHANGES = "capabilityChanges";
+    public static final String JSON_CAP_RENDITIONS = "capabilityRenditions";
+    public static final String JSON_CAP_GET_DESCENDANTS = "capabilityGetDescendants";
+    public static final String JSON_CAP_GET_FOLDER_TREE = "capabilityGetFolderTree";
+    public static final String JSON_CAP_MULTIFILING = "capabilityMultifiling";
+    public static final String JSON_CAP_UNFILING = "capabilityUnfiling";
+    public static final String JSON_CAP_VERSION_SPECIFIC_FILING = "capabilityVersionSpecificFiling";
+    public static final String JSON_CAP_PWC_SEARCHABLE = "capabilityPWCSearchable";
+    public static final String JSON_CAP_PWC_UPDATABLE = "capabilityPWCUpdatable";
+    public static final String JSON_CAP_ALL_VERSIONS_SEARCHABLE = "capabilityAllVersionsSearchable";
+    public static final String JSON_CAP_QUERY = "capabilityQuery";
+    public static final String JSON_CAP_JOIN = "capabilityJoin";
+    public static final String JSON_CAP_ACL = "capabilityACL";
+
+    public static final String JSON_ACLCAP_SUPPORTED_PERMISSIONS = "supportedPermissions";
+    public static final String JSON_ACLCAP_ACL_PROPAGATION = "propagation";
+    public static final String JSON_ACLCAP_PERMISSIONS = "permissions";
+    public static final String JSON_ACLCAP_PERMISSION_MAPPING = "permissionMapping";
+
+    public static final String JSON_ACLCAP_PERMISSION_PERMISSION = "permission";
+    public static final String JSON_ACLCAP_PERMISSION_DESCRIPTION = "description";
+
+    public static final String JSON_ACLCAP_MAPPING_KEY = "key";
+    public static final String JSON_ACLCAP_MAPPING_PERMISSION = "permission";
+
+    public static final String JSON_OBJECT_PROPERTIES = "properties";
+    public static final String JSON_OBJECT_ALLOWABLE_ACTIONS = "allowableActions";
+    public static final String JSON_OBJECT_RELATIONSHIPS = "relationships";
+    public static final String JSON_OBJECT_CHANGE_EVENT_INFO = "changeEventInfo";
+    public static final String JSON_OBJECT_ACL = "acl";
+    public static final String JSON_OBJECT_EXACT_ACL = "exactACL";
+    public static final String JSON_OBJECT_POLICY_IDS = "policyIds";
+    public static final String JSON_OBJECT_RENDITIONS = "renditions";
+
+    public static final String JSON_OBJECTINFOLDER_OBJECT = "object";
+    public static final String JSON_OBJECTINFOLDER_PATH_SEGMENT = "pathSegment";
+    public static final String JSON_OBJECTPARENTS_OBJECT = "object";
+    public static final String JSON_OBJECTPARENTS_RELATIVE_PATH_SEGMENT = "relativePathSegment";
+
+    public static final String JSON_PROPERTY_ID = "id";
+    public static final String JSON_PROPERTY_LOCALNAME = "localName";
+    public static final String JSON_PROPERTY_DISPLAYNAME = "displayName";
+    public static final String JSON_PROPERTY_QUERYNAME = "queryName";
+    public static final String JSON_PROPERTY_VALUE = "value";
+    public static final String JSON_PROPERTY_DATATYPE = "type";
+    public static final String JSON_PROPERTY_CARDINALITY = "cardinality";
+
+    public static final String JSON_CHANGE_EVENT_TYPE = "changeType";
+    public static final String JSON_CHANGE_EVENT_TIME = "changeTime";
+
+    public static final String JSON_ACL_ACES = "aces";
+    public static final String JSON_ACL_IS_EXACT = "isExact";
+
+    public static final String JSON_ACE_PRINCIPAL = "princial";
+    public static final String JSON_ACE_PRINCIPAL_ID = "princialId";
+    public static final String JSON_ACE_PERMISSIONS = "permissions";
+    public static final String JSON_ACE_IS_DIRECT = "isDirect";
+
+    public static final String JSON_RENDITION_STREAM_ID = "streamId";
+    public static final String JSON_RENDITION_MIMETYPE = "mimeType";
+    public static final String JSON_RENDITION_LENGTH = "length";
+    public static final String JSON_RENDITION_KIND = "kind";
+    public static final String JSON_RENDITION_TITLE = "title";
+    public static final String JSON_RENDITION_HEIGHT = "height";
+    public static final String JSON_RENDITION_WIDTH = "width";
+    public static final String JSON_RENDITION_DOCUMENT_ID = "renditionDocumentId";
+
+    public static final String JSON_OBJECTLIST_OBJECTS = "objects";
+    public static final String JSON_OBJECTLIST_HAS_MORE_ITEMS = "hasMoreItems";
+    public static final String JSON_OBJECTLIST_NUM_ITEMS = "numItems";
+
+    public static final String JSON_OBJECTINFOLDERLIST_OBJECTS = "objects";
+    public static final String JSON_OBJECTINFOLDERLIST_HAS_MORE_ITEMS = "hasMoreItems";
+    public static final String JSON_OBJECTINFOLDERLIST_NUM_ITEMS = "numItems";
+
+    public static final String JSON_OBJECTINFOLDERCONTAINER_OBJECT = "object";
+    public static final String JSON_OBJECTINFOLDERCONTAINER_CHILDREN = "children";
+
+    public static final String JSON_TYPE_ID = "id";
+    public static final String JSON_TYPE_LOCALNAME = "localName";
+    public static final String JSON_TYPE_LOCALNAMESPACE = "localNamespace";
+    public static final String JSON_TYPE_DISPLAYNAME = "displayName";
+    public static final String JSON_TYPE_QUERYNAME = "queryName";
+    public static final String JSON_TYPE_DESCRIPTION = "description";
+    public static final String JSON_TYPE_BASE_ID = "baseId";
+    public static final String JSON_TYPE_PARENT_ID = "parentId";
+    public static final String JSON_TYPE_CREATABLE = "creatable";
+    public static final String JSON_TYPE_FILEABLE = "fileable";
+    public static final String JSON_TYPE_QUERYABLE = "queryable";
+    public static final String JSON_TYPE_FULLTEXT_INDEXED = "fulltextIndexed";
+    public static final String JSON_TYPE_INCLUDE_IN_SUPERTYPE_QUERY = "includedInSupertypeQuery";
+    public static final String JSON_TYPE_CONTROLABLE_POLICY = "controllablePolicy";
+    public static final String JSON_TYPE_CONTROLABLE_ACL = "controllableACL";
+    public static final String JSON_TYPE_PROPERTY_DEFINITIONS = "propertyDefinitions";
+
+    public static final String JSON_TYPE_VERSIONABLE = "versionable"; // document
+    public static final String JSON_TYPE_CONTENTSTREAM_ALLOWED = "contentStreamAllowed"; // document
+
+    public static final String JSON_TYPE_ALLOWED_SOURCE_TYPES = "allowedSourceTypes"; // relationship
+    public static final String JSON_TYPE_ALLOWED_TARGET_TYPES = "allowedTargetTypes"; // relationship
+
+    public static final String JSON_PROPERTYTYPE_ID = "id";
+    public static final String JSON_PROPERTYTYPE_LOCALNAME = "localName";
+    public static final String JSON_PROPERTYTYPE_LOCALNAMESPACE = "localNamespace";
+    public static final String JSON_PROPERTYTYPE_DISPLAYNAME = "displayName";
+    public static final String JSON_PROPERTYTYPE_QUERYNAME = "queryName";
+    public static final String JSON_PROPERTYTYPE_DESCRIPTION = "description";
+    public static final String JSON_PROPERTYTYPE_PROPERTY_TYPE = "propertyType";
+    public static final String JSON_PROPERTYTYPE_CARDINALITY = "cardinality";
+    public static final String JSON_PROPERTYTYPE_UPDATABILITY = "updatability";
+    public static final String JSON_PROPERTYTYPE_INHERITED = "inherited";
+    public static final String JSON_PROPERTYTYPE_REQUIRED = "required";
+    public static final String JSON_PROPERTYTYPE_QUERYABLE = "queryable";
+    public static final String JSON_PROPERTYTYPE_OPENCHOICE = "openChoice";
+
+    public static final String JSON_PROPERTYTYPE_DEAULT_VALUE = "defaultValue";
+
+    public static final String JSON_PROPERTYTYPE_MAX_LENGTH = "maxLength";
+    public static final String JSON_PROPERTYTYPE_MIN_VALUE = "minValue";
+    public static final String JSON_PROPERTYTYPE_MAX_VALUE = "maxValue";
+    public static final String JSON_PROPERTYTYPE_MAX_PRECISION = "precision";
+    public static final String JSON_PROPERTYTYPE_MAX_RESOLUTION = "resolution";
+
+    public static final String JSON_PROPERTYTYPE_CHOICE_DISPLAYNAME = "displayName";
+    public static final String JSON_PROPERTYTYPE_CHOICE_VALUE = "value";
+    public static final String JSON_PROPERTYTYPE_CHOICE_CHOICE = "choice";
+
+    public static final String JSON_TYPESLIST_TYPES = "types";
+    public static final String JSON_TYPESLIST_HAS_MORE_ITEMS = "hasMoreItems";
+    public static final String JSON_TYPESLIST_NUM_ITEMS = "numItems";
+
+    public static final String JSON_TYPESCONTAINER_TYPE = "type";
+    public static final String JSON_TYPESCONTAINER_CHILDREN = "children";
+
+    // Constant utility class.
+    private JSONConstants() {
+    }
+
+}