Return-Path: Delivered-To: apmail-incubator-chemistry-commits-archive@minotaur.apache.org Received: (qmail 76256 invoked from network); 3 Mar 2010 16:23:14 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 3 Mar 2010 16:23:14 -0000 Received: (qmail 10424 invoked by uid 500); 3 Mar 2010 16:23:07 -0000 Delivered-To: apmail-incubator-chemistry-commits-archive@incubator.apache.org Received: (qmail 10388 invoked by uid 500); 3 Mar 2010 16:23:07 -0000 Mailing-List: contact chemistry-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: chemistry-dev@incubator.apache.org Delivered-To: mailing list chemistry-commits@incubator.apache.org Received: (qmail 10380 invoked by uid 99); 3 Mar 2010 16:23:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Mar 2010 16:23:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Mar 2010 16:23:05 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 94704238888A; Wed, 3 Mar 2010 16:22:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r918547 - in /incubator/chemistry/trunk/chemistry: chemistry-api/src/main/java/org/apache/chemistry/ chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/ chemistry-atompub-client/src/main/java/org/apache/chemistry/ato... Date: Wed, 03 Mar 2010 16:22:45 -0000 To: chemistry-commits@incubator.apache.org From: fguillaume@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100303162245.94704238888A@eris.apache.org> Author: fguillaume Date: Wed Mar 3 16:22:44 2010 New Revision: 918547 URL: http://svn.apache.org/viewvc?rev=918547&view=rev Log: Framework for Allowable Actions. Added: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java (with props) incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java (with props) incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java (with props) Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/AllowableAction.java incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/ObjectEntry.java incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPConnection.java incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntry.java incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntryReader.java incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/stax/AbstractObjectReader.java incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISCollection.java incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsElement.java incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/ObjectElement.java incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleObjectEntry.java incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrConnection.java incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrObjectEntry.java incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/AllowableAction.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/AllowableAction.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/AllowableAction.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/AllowableAction.java Wed Mar 3 16:22:44 2010 @@ -33,162 +33,155 @@ private AllowableAction() { } - public static final QName CAN_DELETE_OBJECT = CMISName("canDeleteObject"); + public static final QName CAN_GET_DESCENDANTS = CMISName("canGetDescendants"); - public static final QName CAN_UPDATE_PROPERTIES = CMISName("canUpdateProperties"); + public static final QName CAN_GET_FOLDER_TREE = CMISName("canGetFolderTree"); - public static final QName CAN_GET_PROPERTIES = CMISName("canGetProperties"); + public static final QName CAN_GET_CHILDREN = CMISName("canGetChildren"); - public static final QName CAN_GET_OBJECT_RELATIONSHIPS = CMISName("canGetRelationships"); + public static final QName CAN_GET_FOLDER_PARENT = CMISName("canGetFolderParent"); public static final QName CAN_GET_OBJECT_PARENTS = CMISName("canGetObjectParents"); - public static final QName CAN_GET_FOLDER_PARENT = CMISName("canGetFolderParent"); + public static final QName CAN_CREATE_DOCUMENT = CMISName("canCreateDocument"); - public static final QName CAN_GET_DESCENDANTS = CMISName("canGetDescendants"); + public static final QName CAN_CREATE_FOLDER = CMISName("canCreateFolder"); - public static final QName CAN_GET_FOLDER_TREE = CMISName("canGetFolderTree"); + public static final QName CAN_CREATE_RELATIONSHIP = CMISName("canCreateRelationship"); - public static final QName CAN_MOVE_OBJECT = CMISName("canMoveObject"); + public static final QName CAN_GET_PROPERTIES = CMISName("canGetProperties"); - public static final QName CAN_DELETE_CONTENT_STREAM = CMISName("canDeleteContentStream"); + public static final QName CAN_GET_RENDITIONS = CMISName("canGetRenditions"); - public static final QName CAN_CHECK_OUT = CMISName("canCheckOut"); + public static final QName CAN_GET_CONTENT_STREAM = CMISName("canGetContentStream"); - public static final QName CAN_CANCEL_CHECK_OUT = CMISName("canCancelCheckOut"); + public static final QName CAN_UPDATE_PROPERTIES = CMISName("canUpdateProperties"); - public static final QName CAN_CHECK_IN = CMISName("canCheckIn"); + public static final QName CAN_MOVE_OBJECT = CMISName("canMoveObject"); + + public static final QName CAN_DELETE_OBJECT = CMISName("canDeleteObject"); public static final QName CAN_SET_CONTENT_STREAM = CMISName("canSetContentStream"); - public static final QName CAN_GET_ALL_VERSIONS = CMISName("canGetAllVersions"); + public static final QName CAN_DELETE_CONTENT_STREAM = CMISName("canDeleteContentStream"); + + public static final QName CAN_DELETE_TREE = CMISName("canDeleteTree"); public static final QName CAN_ADD_OBJECT_TO_FOLDER = CMISName("canAddObjectToFolder"); public static final QName CAN_REMOVE_OBJECT_FROM_FOLDER = CMISName("canRemoveObjectFromFolder"); - public static final QName CAN_GET_CONTENT_STREAM = CMISName("canGetContentStream"); - - public static final QName CAN_APPLY_POLICY = CMISName("canApplyPolicy"); - - public static final QName CAN_GET_APPLIED_POLICIES = CMISName("canGetAppliedPolicies"); - - public static final QName CAN_REMOVE_POLICY = CMISName("canRemovePolicy"); + public static final QName CAN_CHECK_OUT = CMISName("canCheckOut"); - public static final QName CAN_GET_CHILDREN = CMISName("canGetChildren"); + public static final QName CAN_CANCEL_CHECK_OUT = CMISName("canCancelCheckOut"); - public static final QName CAN_CREATE_DOCUMENT = CMISName("canCreateDocument"); + public static final QName CAN_CHECK_IN = CMISName("canCheckIn"); - public static final QName CAN_CREATE_FOLDER = CMISName("canCreateFolder"); + public static final QName CAN_GET_ALL_VERSIONS = CMISName("canGetAllVersions"); - public static final QName CAN_CREATE_RELATIONSHIP = CMISName("canCreateRelationship"); + public static final QName CAN_GET_OBJECT_RELATIONSHIPS = CMISName("canGetObjectRelationships"); - public static final QName CAN_CREATE_POLICY = CMISName("canCreatePolicy"); + public static final QName CAN_APPLY_POLICY = CMISName("canApplyPolicy"); - public static final QName CAN_DELETE_TREE = CMISName("canDeleteTree"); + public static final QName CAN_REMOVE_POLICY = CMISName("canRemovePolicy"); - public static final QName CAN_GET_RENDITIONS = CMISName("canGetRenditions"); + public static final QName CAN_GET_APPLIED_POLICIES = CMISName("canGetAppliedPolicies"); public static final QName CAN_GET_ACL = CMISName("canGetACL"); public static final QName CAN_APPLY_ACL = CMISName("canApplyACL"); public static List DEFAULT = Collections.unmodifiableList(Arrays.asList( - CAN_DELETE_OBJECT, // - CAN_UPDATE_PROPERTIES, // - CAN_GET_PROPERTIES, // - CAN_GET_OBJECT_RELATIONSHIPS, // - CAN_GET_OBJECT_PARENTS, // - CAN_GET_FOLDER_PARENT, // CAN_GET_DESCENDANTS, // CAN_GET_FOLDER_TREE, // + CAN_GET_CHILDREN, // + CAN_GET_FOLDER_PARENT, // + CAN_GET_OBJECT_PARENTS, // + CAN_CREATE_DOCUMENT, // + CAN_CREATE_FOLDER, // + CAN_CREATE_RELATIONSHIP, // + CAN_GET_PROPERTIES, // + CAN_GET_RENDITIONS, // + CAN_GET_CONTENT_STREAM, // + CAN_UPDATE_PROPERTIES, // CAN_MOVE_OBJECT, // + CAN_DELETE_OBJECT, // + CAN_SET_CONTENT_STREAM, // CAN_DELETE_CONTENT_STREAM, // + CAN_DELETE_TREE, // + CAN_ADD_OBJECT_TO_FOLDER, // + CAN_REMOVE_OBJECT_FROM_FOLDER, // CAN_CHECK_OUT, // CAN_CANCEL_CHECK_OUT, // CAN_CHECK_IN, // - CAN_SET_CONTENT_STREAM, // CAN_GET_ALL_VERSIONS, // - CAN_ADD_OBJECT_TO_FOLDER, // - CAN_REMOVE_OBJECT_FROM_FOLDER, // - CAN_GET_CONTENT_STREAM, // + CAN_GET_OBJECT_RELATIONSHIPS, // CAN_APPLY_POLICY, // - CAN_GET_APPLIED_POLICIES, // CAN_REMOVE_POLICY, // - CAN_GET_CHILDREN, // - CAN_CREATE_DOCUMENT, // - CAN_CREATE_FOLDER, // - CAN_CREATE_RELATIONSHIP, // - CAN_CREATE_POLICY, // - CAN_DELETE_TREE, // - CAN_GET_RENDITIONS, // + CAN_GET_APPLIED_POLICIES, // CAN_GET_ACL, // CAN_APPLY_ACL // )); - // keys for permissions mapping TODO - public static final String GET_DESCENDENTS_FOLDER = "canGetDescendents.Folder"; - public static final String GET_CHILDREN_FOLDER = "canGetChildren.Folder"; + public static final String GET_FOLDER_TREE_FOLDER = "canGetFolderTree.Folder"; - public static final String GET_PARENTS_FOLDER = "canGetParents.Folder"; + public static final String GET_CHILDREN_FOLDER = "canGetChildren.Folder"; - public static final String GET_FOLDER_PARENT_OBJECT = "canGetFolderParent.Object"; + public static final String GET_FOLDER_PARENT_FOLDER = "canGetFolderParent.Folder"; - public static final String CREATE_DOCUMENT_TYPE = "canCreateDocument.Type"; + public static final String GET_OBJECT_PARENTS_OBJECT = "canGetObjectParents.Object"; public static final String CREATE_DOCUMENT_FOLDER = "canCreateDocument.Folder"; - public static final String CREATE_FOLDER_TYPE = "canCreateFolder.Type"; - public static final String CREATE_FOLDER_FOLDER = "canCreateFolder.Folder"; - public static final String CREATE_RELATIONSHIP_TYPE = "canCreateRelationship.Type"; - public static final String CREATE_RELATIONSHIP_SOURCE = "canCreateRelationship.Source"; public static final String CREATE_RELATIONSHIP_TARGET = "canCreateRelationship.Target"; - public static final String CREATE_POLICY_TYPE = "canCreatePolicy.Type"; - public static final String GET_PROPERTIES_OBJECT = "canGetProperties.Object"; - public static final String VIEW_CONTENT_OBJECT = "canViewContent.Object"; + public static final String GET_RENDITIONS_OBJECT = "canGetRenditions.Object"; + + public static final String GET_CONTENT_STREAM_OBJECT = "canGetContentStream.Object"; public static final String UPDATE_PROPERTIES_OBJECT = "canUpdateProperties.Object"; - public static final String MOVE_OBJECT = "canMove.Object"; + public static final String MOVE_OBJECT_OBJECT = "canMoveObject.Object"; - public static final String MOVE_TARGET = "canMove.Target"; + public static final String MOVE_OBJECT_TARGET = "canMoveObject.Target"; - public static final String MOVE_SOURCE = "canMove.Source"; + public static final String MOVE_OBJECT_SOURCE = "canMoveObject.Source"; public static final String DELETE_OBJECT = "canDelete.Object"; - public static final String DELETE_TREE_FOLDER = "canDeleteTree.Folder"; + public static final String DELETE_FOLDER = "canDelete.Folder"; - public static final String SET_CONTENT_DOCUMENT = "canSetContent.Document"; + public static final String SET_CONTENT_STREAM_DOCUMENT = "canSetContentStream.Document"; - public static final String DELETE_CONTENT_DOCUMENT = "canDeleteContent.Document"; + public static final String DELETE_CONTENT_STREAM_DOCUMENT = "canDeleteContentStream.Document"; + + public static final String DELETE_TREE_FOLDER = "canDeleteTree.Folder"; public static final String ADD_TO_FOLDER_OBJECT = "canAddToFolder.Object"; public static final String ADD_TO_FOLDER_FOLDER = "canAddToFolder.Folder"; - public static final String REMOVE_FROM_FOLDER_OBJECT = "canRemoveFromFolder.Object"; + public static final String REMOVE_FROM_OBJECT_FROM_FOLDER_OBJECT = "canRemoveObjectFromFolder.Object"; - public static final String REMOVE_FROM_FOLDER_FOLDER = "canRemoveFromFolder.Folder"; + public static final String REMOVE_FROM_OBJECT_FROM_FOLDER_FOLDER = "canRemoveObjectFromFolder.Folder"; public static final String CHECK_OUT_DOCUMENT = "canCheckOut.Document"; - public static final String CANCEL_CHECK_OUT_DOCUMENT = "canCancelCheckOut.Document"; + public static final String CANCEL_CHECK_OUT_DOCUMENT = "canCancelCheckout.Document"; public static final String CHECK_IN_DOCUMENT = "canCheckIn.Document"; - public static final String GET_ALL_VERSIONS_VERSIONSERIES = "canGetAllVersions.VersionSeries"; + public static final String GET_ALL_VERSIONS_DOCUMENT = "canGetAllVersions.Document"; - public static final String GET_RELATIONSHIP_OBJECT = "canGetRelationship.Object"; + public static final String GET_OBJECT_RELATIONSHIPS_OBJECT = "canGetObjectRelationships.Object"; public static final String ADD_POLICY_OBJECT = "canAddPolicy.Object"; Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/ObjectEntry.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/ObjectEntry.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/ObjectEntry.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/ObjectEntry.java Wed Mar 3 16:22:44 2010 @@ -19,6 +19,7 @@ import java.io.Serializable; import java.util.Collection; import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; @@ -114,8 +115,10 @@ /** * The allowable actions, if fetched. + * + * @return a set of allowable actions, or {@code null} if not fecthed */ - Map getAllowableActions(); + Set getAllowableActions(); /** * The relationships in relation to this document, if fetched. Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java Wed Mar 3 16:22:44 2010 @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; @@ -318,14 +319,16 @@ /** * Gets the allowable actions. *

- * Returns the list of allowable actions on an object based on the current + * Returns the set of allowable actions on an object based on the current * user's context, subject to any access constraints that are currently * imposed by the repository. * * @param object the object - * @return the allowable actions + * @return the set of allowable actions + * @see AllowableAction + * @see AllowableAction#DEFAULT */ - Collection getAllowableActions(ObjectId object); + Set getAllowableActions(ObjectId object); // TODO 1.0 getObject Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPConnection.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPConnection.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPConnection.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPConnection.java Wed Mar 3 16:22:44 2010 @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Map.Entry; import javax.xml.namespace.QName; @@ -81,8 +82,8 @@ public APPConnection(APPRepository repository, Map params) { this.repository = repository; - connector = new Connector(repository.getClient(params), - new APPContext(this)); + connector = new Connector(repository.getClient(params), new APPContext( + this)); } public Connection getConnection() { @@ -289,23 +290,30 @@ * ----- Object Services ----- */ - // TODO add hints about what we'd like to fetch from the entry (stream, - // props, etc.) - protected APPObjectEntry getObjectEntry(ObjectId objectId) { + protected APPObjectEntry getObjectEntryOrNull(ObjectId objectId) { if (objectId instanceof APPObjectEntry) { return (APPObjectEntry) objectId; } else if (objectId instanceof APPObject) { return ((APPObject) objectId).getEntry(); + } else { + return null; + } + } + + protected APPObjectEntry getObjectEntry(ObjectId objectId) { + return getObjectEntry(objectId, null); + } + + protected APPObjectEntry getObjectEntry(ObjectId objectId, + Inclusion inclusion) { + APPObjectEntry entry = getObjectEntryOrNull(objectId); + if (entry != null) { + return entry; } URITemplate uriTemplate = repository.getURITemplate(AtomPubCMIS.URITMPL_OBJECT_BY_ID); String href = uriTemplate.template; href = replace(href, AtomPubCMIS.PARAM_ID, objectId.getId()); - href = replace(href, AtomPubCMIS.PARAM_FILTER, ""); - href = replace(href, AtomPubCMIS.PARAM_RENDITION_FILTER, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_RELATIONSHIPS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ALLOWABLE_ACTIONS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_POLICY_IDS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ACL, ""); + href = replaceInclusion(href, inclusion); return connector.getEntry(href, objectId.getId()); } @@ -317,6 +325,25 @@ return entry; } + protected String replaceInclusion(String href, Inclusion inclusion) { + if (inclusion == null) { + inclusion = new Inclusion(null, null, null, false, false, false); + } + href = replace(href, AtomPubCMIS.PARAM_FILTER, + inclusion.properties == null ? "" : inclusion.properties); + href = replace(href, AtomPubCMIS.PARAM_RENDITION_FILTER, + inclusion.renditions == null ? "" : inclusion.renditions); + href = replace(href, AtomPubCMIS.PARAM_INCLUDE_RELATIONSHIPS, + RelationshipDirection.toInclusion(inclusion.relationships)); + href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ALLOWABLE_ACTIONS, + Boolean.toString(inclusion.allowableActions)); + href = replace(href, AtomPubCMIS.PARAM_INCLUDE_POLICY_IDS, + Boolean.toString(inclusion.policies)); + href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ACL, + Boolean.toString(inclusion.acls)); + return href; + } + protected String replace(String template, String param, String value) { return template.replace('{' + param + '}', value); } @@ -409,9 +436,25 @@ throw new UnsupportedOperationException(); } - public Collection getAllowableActions(ObjectId object) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); + public Set getAllowableActions(ObjectId object) { + APPObjectEntry entry = getObjectEntryOrNull(object); + if (entry != null && entry.getAllowableActions() == null) { + // use the allowable action link + String href = entry.getLink(AtomPubCMIS.LINK_ALLOWABLE_ACTIONS); + if (href == null) { + throw new CMISRuntimeException("Missing allowableactions link"); + } + Set allowableActions = connector.getAllowableActions(href); + entry.setAllowableActions(allowableActions); + return allowableActions; + } + if (entry == null) { + // fetch including allowableActions + Inclusion inclusion = new Inclusion(null, null, null, true, false, + false); + entry = getObjectEntry(object, inclusion); + } + return entry.getAllowableActions(); } public ObjectEntry getProperties(ObjectId object, Inclusion inclusion) { @@ -445,12 +488,7 @@ String encodedPath = path.replace(" ", "%20"); String href = uriTemplate.template; href = replace(href, AtomPubCMIS.PARAM_PATH, encodedPath); - href = replace(href, AtomPubCMIS.PARAM_FILTER, ""); - href = replace(href, AtomPubCMIS.PARAM_RENDITION_FILTER, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_RELATIONSHIPS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ALLOWABLE_ACTIONS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_POLICY_IDS, ""); - href = replace(href, AtomPubCMIS.PARAM_INCLUDE_ACL, ""); + href = replaceInclusion(href, inclusion); try { return connector.getEntry(href, path); // TODO fill current Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntry.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntry.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntry.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntry.java Wed Mar 3 16:22:44 2010 @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Map.Entry; import java.util.regex.Pattern; @@ -62,7 +63,7 @@ protected ContentStream localContentStream = REMOTE_CONTENT_STREAM; - protected Map allowableActions; + protected Set allowableActions; protected String remoteContentHref; @@ -112,22 +113,19 @@ protected APPObjectEntry(APPRepository repository, APPConnection connection, Map properties, - Map allowableActions) { + Set allowableActions) { this.repository = repository; this.connection = connection; this.properties = properties; - if (allowableActions == null) { - allowableActions = Collections.emptyMap(); - } else { - allowableActions = Collections.unmodifiableMap(allowableActions); + if (allowableActions != null) { + allowableActions = Collections.unmodifiableSet(allowableActions); } this.allowableActions = allowableActions; links = new ArrayList(); } public APPObjectEntry(APPConnection connection, - Map properties, - Map allowableActions) { + Map properties, Set allowableActions) { this((APPRepository) connection.getRepository(), connection, properties, allowableActions); } @@ -296,7 +294,11 @@ // return null; // } - public Map getAllowableActions() { + public void setAllowableActions(Set allowableActions) { + this.allowableActions = allowableActions; + } + + public Set getAllowableActions() { return allowableActions; } Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntryReader.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntryReader.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntryReader.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObjectEntryReader.java Wed Mar 3 16:22:44 2010 @@ -20,7 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; @@ -51,8 +51,8 @@ @Override protected void setAllowableActions(APPObjectEntry object, - Map allowableActions) { - object.allowableActions = Collections.unmodifiableMap(allowableActions); + Set allowableActions) { + object.allowableActions = Collections.unmodifiableSet(allowableActions); } @Override Added: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java?rev=918547&view=auto ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java (added) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java Wed Mar 3 16:22:44 2010 @@ -0,0 +1,68 @@ +/* + * Licensed 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. + * + * Authors: + * Florent Guillaume, Nuxeo + */ +package org.apache.chemistry.atompub.client; + +import java.io.InputStream; +import java.util.HashSet; +import java.util.Set; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.apache.chemistry.CMIS; +import org.apache.chemistry.atompub.client.stax.EntryReader; +import org.apache.chemistry.xml.stax.ChildrenNavigator; +import org.apache.chemistry.xml.stax.StaxReader; + +/** + * Reader for AllowableActions objects. + */ +public class AllowableActionsReader implements EntryReader> { + + private static final String AA_PREFIX = "can"; + + public Set read(APPContext ctx, InputStream in) + throws XMLStreamException { + return read(ctx, StaxReader.newReader(in)); + } + + public Set read(APPContext ctx, XMLStreamReader reader) + throws XMLStreamException { + return read(ctx, StaxReader.newReader(reader)); + } + + public Set read(APPContext ctx, StaxReader reader) + throws XMLStreamException { + if (!reader.getFirstTag(CMIS.ALLOWABLE_ACTIONS)) { + return null; + } + Set set = new HashSet(); + ChildrenNavigator children = reader.getChildren(); + while (children.next()) { + if (reader.getNamespaceURI().equals(CMIS.CMIS_NS) + || reader.getLocalName().startsWith(AA_PREFIX)) { + boolean bool = Boolean.parseBoolean(reader.getElementText()); + if (bool) { + set.add(reader.getName()); + } + } + } + return set; + } + +} Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/AllowableActionsReader.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java Wed Mar 3 16:22:44 2010 @@ -22,7 +22,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.List; +import java.util.Set; +import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import org.apache.chemistry.ConstraintViolationException; @@ -185,6 +187,11 @@ } + public Set getAllowableActions(String href) { + return getObject(href, "", new AllowableActionsReader()); + } + + public APPObjectEntry putEntry(String href, Header header, APPObjectEntry entry) { RequestEntity requestEntity = new XmlObjectWriterRequestEntity( Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/stax/AbstractObjectReader.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/stax/AbstractObjectReader.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/stax/AbstractObjectReader.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/stax/AbstractObjectReader.java Wed Mar 3 16:22:44 2010 @@ -18,9 +18,9 @@ */ package org.apache.chemistry.atompub.client.stax; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; -import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; @@ -44,7 +44,7 @@ protected abstract void setProperty(T object, XmlProperty p); protected abstract void setAllowableActions(T object, - Map allowableActions); + Set allowableActions); protected abstract void setPathSegment(T object, String pathSegment); @@ -114,12 +114,12 @@ protected void readAllowableActions(APPContext ctx, StaxReader reader, T object) throws XMLStreamException { - Map allowableActions = new HashMap(); + Set allowableActions = new HashSet(); ChildrenNavigator children = reader.getChildren(); while (children.next()) { - QName qname = reader.getName(); - Boolean bool = Boolean.valueOf(reader.getElementText()); - allowableActions.put(qname, bool); + if (Boolean.parseBoolean(reader.getElementText())) { + allowableActions.add(reader.getName()); + } } setAllowableActions(object, allowableActions); } @@ -142,7 +142,8 @@ protected void readChildren(APPContext ctx, StaxReader reader, T object) throws XMLStreamException { // TODO better use of generics - List> list = new APPObjectFeedTreeReader().read(ctx, reader); + List> list = new APPObjectFeedTreeReader().read(ctx, + reader); setChildren(object, list); } Added: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java?rev=918547&view=auto ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java (added) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java Wed Mar 3 16:22:44 2010 @@ -0,0 +1,124 @@ +/* + * Licensed 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. + * + * Authors: + * Florent Guillaume, Nuxeo + */ +package org.apache.chemistry.atompub.server; + +import java.io.Serializable; +import java.util.Map; + +import org.apache.abdera.factory.Factory; +import org.apache.abdera.i18n.text.UrlEncoding; +import org.apache.abdera.model.Document; +import org.apache.abdera.model.Element; +import org.apache.abdera.protocol.server.CollectionAdapter; +import org.apache.abdera.protocol.server.RequestContext; +import org.apache.abdera.protocol.server.ResponseContext; +import org.apache.abdera.protocol.server.context.BaseResponseContext; +import org.apache.abdera.protocol.server.context.EmptyResponseContext; +import org.apache.axiom.om.OMContainer; +import org.apache.chemistry.Inclusion; +import org.apache.chemistry.ObjectEntry; +import org.apache.chemistry.Repository; +import org.apache.chemistry.SPI; +import org.apache.chemistry.atompub.abdera.AllowableActionsDocument; + +/** + * CMIS allowableActions document (fetched through {@link #getEntry}). + */ +public class CMISAllowableActionsEntry implements CollectionAdapter { + + protected final Repository repository; + + public CMISAllowableActionsEntry(Repository repository) { + this.repository = repository; + } + + public ResponseContext getEntry(RequestContext request) { + SPI spi = getSPI(request); + try { + String id = getResourceName(request); + Inclusion inclusion = new Inclusion(null, null, null, true, false, + false); + ObjectEntry object = spi.getProperties(spi.newObjectId(id), + inclusion); + if (object == null) { + return new EmptyResponseContext(404); + } + // create resulting document + Factory factory = request.getAbdera().getFactory(); + Document doc = factory.newDocument(); + AllowableActionsDocument el = new AllowableActionsDocument( + (OMContainer) doc, factory); + el.setAllowableActions(object.getAllowableActions()); + return new BaseResponseContext>(doc); + } catch (Exception e) { + return new EmptyResponseContext(500, e.toString()); + } finally { + spi.close(); + } + } + + // duplicated in CMISCollection + public SPI getSPI(RequestContext request) { + return repository.getSPI(getConnectionParams(request)); + } + + // duplicated in CMISCollection + protected Map getConnectionParams( + RequestContext request) { + return null; // TODO username, password + } + + // duplicated in CMISCollection + protected String getResourceName(RequestContext request) { + String resourceName = request.getTarget().getParameter("objectid"); + return UrlEncoding.decode(resourceName); + } + + public ResponseContext headEntry(RequestContext request) { + // TODO just in case + return getEntry(request); + } + + public ResponseContext deleteEntry(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext extensionRequest(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext getCategories(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext getFeed(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext optionsEntry(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext postEntry(RequestContext request) { + throw new UnsupportedOperationException(); + } + + public ResponseContext putEntry(RequestContext request) { + throw new UnsupportedOperationException(); + } + +} Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISAllowableActionsEntry.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISCollection.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISCollection.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISCollection.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISCollection.java Wed Mar 3 16:22:44 2010 @@ -179,6 +179,10 @@ return getEntrylink("file", id, request); } + public String getAllowableActionsLink(String id, RequestContext request) { + return getEntrylink("allowableactions", id, request); + } + public String getTypeChildrenLink(String tid, RequestContext request) { return getCollectionLink("typechildren", tid, request); } Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java Wed Mar 3 16:22:44 2010 @@ -295,7 +295,9 @@ entry.addLink(getParentsLink(oid, request), AtomPub.LINK_UP, AtomPub.MEDIA_TYPE_ATOM_FEED, null, null, -1); } - // entry.addLink("XXX", CMIS.LINK_ALLOWABLE_ACTIONS); + entry.addLink(getAllowableActionsLink(oid, request), + AtomPubCMIS.LINK_ALLOWABLE_ACTIONS, + AtomPubCMIS.MEDIA_TYPE_CMIS_ALLOWABLE_ACTIONS, null, null, -1); // entry.addLink("XXX", CMIS.LINK_RELATIONSHIPS); Type objectType = repository.getType(typeId); Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java Wed Mar 3 16:22:44 2010 @@ -69,7 +69,7 @@ targetResolver.setPattern("/object(?:/?)([^/?]*)(\\?.*)?", TargetType.TYPE_ENTRY, "objectid"); targetResolver.setPattern("/allowableactions/([^/?]+)", - TargetType.TYPE_ENTRY, "objectid"); // XXX entry? + TargetType.TYPE_ENTRY, "objectid"); targetResolver.setPattern("/type/([^/?]+)(\\?.*)?", TargetType.TYPE_ENTRY, "typeid"); targetResolver.setPattern("/path/([^?]*)(\\?.*)?", Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java Wed Mar 3 16:22:44 2010 @@ -102,6 +102,9 @@ if (paths.startsWith("/query/") || paths.startsWith("/query?")) { return new CMISQueryFeed(repository); } + if (paths.startsWith("/allowableactions/")) { + return new CMISAllowableActionsEntry(repository); + } return null; } Added: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java?rev=918547&view=auto ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java (added) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java Wed Mar 3 16:22:44 2010 @@ -0,0 +1,46 @@ +/* + * Licensed 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. + * + * Authors: + * Florent Guillaume, Nuxeo + */ +package org.apache.chemistry.atompub.abdera; + +import java.util.Set; + +import javax.xml.namespace.QName; + +import org.apache.abdera.factory.Factory; +import org.apache.abdera.model.Element; +import org.apache.abdera.parser.stax.FOMExtensibleElement; +import org.apache.axiom.om.OMContainer; +import org.apache.axiom.om.OMFactory; +import org.apache.chemistry.CMIS; + +/** + * FOM extensible element for a cmis:allowableActions document. + */ +public class AllowableActionsDocument extends FOMExtensibleElement { + + public AllowableActionsDocument(OMContainer parent, Factory factory) { + super(CMIS.ALLOWABLE_ACTIONS, parent, (OMFactory) factory); + } + + public void setAllowableActions(Set set) { + for (QName qname : set) { + Element el = addExtension(qname); + el.setText("true"); + } + } + +} Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsDocument.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsElement.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsElement.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsElement.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/AllowableActionsElement.java Wed Mar 3 16:22:44 2010 @@ -16,7 +16,12 @@ */ package org.apache.chemistry.atompub.abdera; +import java.util.Set; + +import javax.xml.namespace.QName; + import org.apache.abdera.factory.Factory; +import org.apache.abdera.model.Element; import org.apache.abdera.model.ExtensibleElementWrapper; import org.apache.chemistry.CMIS; @@ -29,4 +34,11 @@ super(factory, CMIS.ALLOWABLE_ACTIONS); } + public void setAllowableActions(Set set) { + for (QName qname : set) { + Element el = addExtension(qname); + el.setText("true"); + } + } + } Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/ObjectElement.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/ObjectElement.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/ObjectElement.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/abdera/ObjectElement.java Wed Mar 3 16:22:44 2010 @@ -19,6 +19,9 @@ import java.io.Serializable; import java.util.Collections; import java.util.Map; +import java.util.Set; + +import javax.xml.namespace.QName; import org.apache.abdera.factory.Factory; import org.apache.abdera.model.Element; @@ -34,7 +37,9 @@ */ public class ObjectElement extends ExtensibleElementWrapper { - protected final PropertiesElement properties; + protected PropertiesElement properties; + + protected AllowableActionsElement allowableActions; /** * Constructor used when parsing XML. @@ -51,9 +56,8 @@ */ public ObjectElement(Factory factory, ObjectEntry object, Type type) { super(factory, AtomPubCMIS.OBJECT); - properties = new PropertiesElement(getFactory()); - addExtension(properties); setProperties(object.getValues(), type); + setAllowableActions(object.getAllowableActions()); } public Map getProperties(String typeId) { @@ -64,10 +68,20 @@ } public void setProperties(Map values, Type type) { + properties = new PropertiesElement(getFactory()); + addExtension(properties); properties.setProperties(values, type); } - // TODO allowable actions + public void setAllowableActions(Set aa) { + if (aa == null) { + allowableActions = null; + } else { + allowableActions = new AllowableActionsElement(getFactory()); + addExtension(allowableActions); + allowableActions.setAllowableActions(aa); + } + } // TODO change event info Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleConnection.java Wed Mar 3 16:22:44 2010 @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -42,6 +43,7 @@ import org.antlr.runtime.tree.CommonTreeNodeStream; import org.apache.chemistry.ACE; import org.apache.chemistry.ACLPropagation; +import org.apache.chemistry.AllowableAction; import org.apache.chemistry.BaseType; import org.apache.chemistry.CMISObject; import org.apache.chemistry.CMISRuntimeException; @@ -478,9 +480,11 @@ throw new UnsupportedOperationException(); } - public Collection getAllowableActions(ObjectId object) { - // TODO Auto-generated method stub - return SimpleListPage.emptyList(); + public Set getAllowableActions(ObjectId object) { + // TODO see SimpleObjectEntry.getAllowableActions + Set set = new HashSet(); + set.add(AllowableAction.CAN_UPDATE_PROPERTIES); + return set; } public ObjectEntry getProperties(ObjectId object, Inclusion inclusion) { Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleObjectEntry.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleObjectEntry.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleObjectEntry.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleObjectEntry.java Wed Mar 3 16:22:44 2010 @@ -19,10 +19,13 @@ import java.io.Serializable; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; +import org.apache.chemistry.AllowableAction; import org.apache.chemistry.BaseType; import org.apache.chemistry.ChangeInfo; import org.apache.chemistry.Connection; @@ -145,9 +148,11 @@ } } - public Map getAllowableActions() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); + public Set getAllowableActions() { + // TODO see SimpleConnection.getAllowableActions + Set set = new HashSet(); + set.add(AllowableAction.CAN_UPDATE_PROPERTIES); + return set; } public Collection getRelationships() { Modified: incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrConnection.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrConnection.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrConnection.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrConnection.java Wed Mar 3 16:22:44 2010 @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import javax.jcr.Node; import javax.jcr.NodeIterator; @@ -265,9 +266,9 @@ throw new UnsupportedOperationException(); } - public Collection getAllowableActions(ObjectId objectId) { + public Set getAllowableActions(ObjectId objectId) { // TODO Auto-generated method stub - throw new UnsupportedOperationException(); + return null; } public Collection getAppliedPolicies(ObjectId objectId, Modified: incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrObjectEntry.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrObjectEntry.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrObjectEntry.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-jcr/src/main/java/org/apache/chemistry/jcr/JcrObjectEntry.java Wed Mar 3 16:22:44 2010 @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.jcr.Item; import javax.jcr.Node; @@ -72,8 +73,8 @@ return connection; } - public Map getAllowableActions() { - throw new UnsupportedOperationException(); + public Set getAllowableActions() { + throw null; } public String getPathSegment() { Modified: incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java?rev=918547&r1=918546&r2=918547&view=diff ============================================================================== --- incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java (original) +++ incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/BasicTestCase.java Wed Mar 3 16:22:44 2010 @@ -29,8 +29,11 @@ import java.util.Set; import java.util.TimeZone; +import javax.xml.namespace.QName; + import junit.framework.TestCase; +import org.apache.chemistry.AllowableAction; import org.apache.chemistry.BaseType; import org.apache.chemistry.CMISObject; import org.apache.chemistry.CMISRuntimeException; @@ -56,6 +59,7 @@ import org.apache.chemistry.SPI; import org.apache.chemistry.Tree; import org.apache.chemistry.Type; +import org.apache.chemistry.atompub.client.APPObjectEntry; import org.apache.chemistry.impl.simple.SimpleContentStream; import org.apache.chemistry.impl.simple.SimpleObjectId; import org.apache.chemistry.util.GregorianCalendar; @@ -772,4 +776,35 @@ assertNotNull(d); } + public void testObjectAllowableActions() throws Exception { + ObjectEntry fold = spi.getObjectByPath("/folder 1", null); + Set aa = fold.getAllowableActions(); + assertNotNull(aa); + assertTrue(aa.contains(AllowableAction.CAN_UPDATE_PROPERTIES)); + } + + public void testAllowableActionsSPI() throws Exception { + ObjectEntry foldentry = spi.getObjectByPath("/folder 1", null); + // fetch from existing entry + assertNotNull(foldentry.getAllowableActions()); + Set aa = spi.getAllowableActions(foldentry); + assertNotNull(aa); + assertTrue(aa.contains(AllowableAction.CAN_UPDATE_PROPERTIES)); + + // check can refetch part of entry if missing aa + if (foldentry instanceof APPObjectEntry) { + ((APPObjectEntry) foldentry).setAllowableActions(null); + aa = spi.getAllowableActions(foldentry); + assertNotNull(aa); + assertTrue(aa.contains(AllowableAction.CAN_UPDATE_PROPERTIES)); + assertNotNull(foldentry.getAllowableActions()); + } + + // fetch from just id + ObjectId foldid = spi.newObjectId(foldentry.getId()); + aa = spi.getAllowableActions(foldid); + assertNotNull(aa); + assertTrue(aa.contains(AllowableAction.CAN_UPDATE_PROPERTIES)); + } + }