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 2010/03/02 13:35:11 UTC
svn commit: r918000 - in /incubator/chemistry/trunk/opencmis:
opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/
opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/
opencmis-client...
Author: fmui
Date: Tue Mar 2 12:35:10 2010
New Revision: 918000
URL: http://svn.apache.org/viewvc?rev=918000&view=rev
Log:
added more client API code
added a few more lines of test code and cleaned up a bit
Modified:
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/CmisObject.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/Document.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ObjectFactory.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentCmisObject.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentFilableCmisObject.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentDocumentImpl.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentPolicyImpl.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentRelationshipImpl.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/main/java/org/apache/opencmis/client/provider/spi/atompub/HttpUtils.java
incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/test/java/org/apache/opencmis/client/provider/framework/AbstractSimpleReadOnlyTests.java
incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-fit/src/test/java/org/apache/opencmis/fit/sample/AbstractSampleIT.java
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/CmisObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/CmisObject.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/CmisObject.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/CmisObject.java Tue Mar 2 12:35:10 2010
@@ -22,6 +22,7 @@
import java.util.List;
import org.apache.opencmis.client.api.objecttype.ObjectType;
+import org.apache.opencmis.client.api.util.PagingList;
import org.apache.opencmis.commons.enums.AclPropagation;
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.commons.enums.RelationshipDirection;
@@ -133,8 +134,9 @@
// relationship service
- List<Relationship> getRelationships(boolean includeSubRelationshipTypes,
- RelationshipDirection relationshipDirection, ObjectType type);
+ PagingList<Relationship> getRelationships(boolean includeSubRelationshipTypes,
+ RelationshipDirection relationshipDirection, ObjectType type, String filter,
+ Boolean includeAllowableActions, int itemsPerPage);
// policy service
@@ -157,7 +159,7 @@
void addAcl(List<Ace> addAces, AclPropagation aclPropagation);
void removeAcl(List<Ace> removeAces, AclPropagation aclPropagation);
-
+
// buffered stuff
<T> void setProperty(String id, T value);
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/Document.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/Document.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/Document.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/Document.java Tue Mar 2 12:35:10 2010
@@ -56,23 +56,23 @@
// document specific properties
- boolean isImmutable(); // cmis:isImmutable
+ Boolean isImmutable(); // cmis:isImmutable
- boolean isLatestVersion(); // cmis:isLatestVersion
+ Boolean isLatestVersion(); // cmis:isLatestVersion
- boolean isMajorVersion(); // cmis:isMajorVersion
+ Boolean isMajorVersion(); // cmis:isMajorVersion
- boolean isLatestMajorVersion(); // cmis:isLatestMajorVersion
+ Boolean isLatestMajorVersion(); // cmis:isLatestMajorVersion
String getVersionLabel(); // cmis:versionLabel
- String getVersionSeries(); // cmis:versionSeriesId
+ String getVersionSeriesId(); // cmis:versionSeriesId
- boolean isVersionSeriesCheckedOut(); // cmis:isVersionSeriesCheckedOut
+ Boolean isVersionSeriesCheckedOut(); // cmis:isVersionSeriesCheckedOut
String getVersionSeriesCheckedOutBy(); // cmis:versionSeriesCheckedOutBy
- String getVersionSeriesCheckedOut(); // cmis:versionSeriesCheckedOutId
+ String getVersionSeriesCheckedOutId(); // cmis:versionSeriesCheckedOutId
void deleteAllVersions();
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ObjectFactory.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ObjectFactory.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ObjectFactory.java Tue Mar 2 12:35:10 2010
@@ -24,7 +24,6 @@
import org.apache.opencmis.client.api.Ace;
import org.apache.opencmis.client.api.Acl;
-import org.apache.opencmis.client.api.AclPermission;
import org.apache.opencmis.client.api.AllowableActions;
import org.apache.opencmis.client.api.ContentStream;
import org.apache.opencmis.client.api.Document;
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentCmisObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentCmisObject.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentCmisObject.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentCmisObject.java Tue Mar 2 12:35:10 2010
@@ -18,7 +18,10 @@
*/
package org.apache.opencmis.client.runtime;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
@@ -31,14 +34,22 @@
import org.apache.opencmis.client.api.Property;
import org.apache.opencmis.client.api.Relationship;
import org.apache.opencmis.client.api.objecttype.ObjectType;
+import org.apache.opencmis.client.api.util.PagingList;
+import org.apache.opencmis.client.runtime.util.AbstractPagingList;
import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.api.PropertyDefinition;
import org.apache.opencmis.commons.enums.AclPropagation;
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.commons.enums.RelationshipDirection;
+import org.apache.opencmis.commons.enums.Updatability;
import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.opencmis.commons.provider.CmisProvider;
import org.apache.opencmis.commons.provider.Holder;
import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.ObjectList;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.PropertyIdData;
+import org.apache.opencmis.commons.provider.RelationshipService;
/**
* Base class for all persistent session object impl classes.
@@ -51,6 +62,7 @@
private AllowableActions allowableActions;
private Acl acl;
private List<Policy> policies;
+ private List<Relationship> relationships;
private boolean isChanged = false;
/**
@@ -66,6 +78,11 @@
throw new IllegalArgumentException("Object type must be set!");
}
+ if (objectType.getPropertyDefintions().size() >= 9) {
+ // there must be at least the 9 standard properties that all objects have
+ throw new IllegalArgumentException("Object type must have property defintions!");
+ }
+
this.session = session;
this.objectType = objectType;
@@ -97,6 +114,15 @@
}
}
}
+
+ // handle relationships
+ if (objectData.getRelationships() != null) {
+ relationships = new ArrayList<Relationship>();
+ for (ObjectData rod : objectData.getRelationships()) {
+ relationships.add(new PersistentRelationshipImpl(getSession(),
+ getTypeFromObjectData(rod), rod));
+ }
+ }
}
}
@@ -134,12 +160,31 @@
protected String getObjectId() {
String objectId = getId();
if (objectId == null) {
- throw new IllegalStateException("Object Id is unknown");
+ throw new IllegalStateException("Object Id is unknown!");
}
return objectId;
}
+ /**
+ * Extracts the type information from the given object data and returns the object type or
+ * <code>null</code> if there is no type information.
+ */
+ private ObjectType getTypeFromObjectData(ObjectData objectData) {
+ if ((objectData == null) || (objectData.getProperties() == null)
+ || (objectData.getProperties().getProperties() == null)) {
+ return null;
+ }
+
+ PropertyData<?> typeProperty = objectData.getProperties().getProperties().get(
+ PropertyIds.CMIS_OBJECT_TYPE_ID);
+ if (!(typeProperty instanceof PropertyIdData)) {
+ return null;
+ }
+
+ return getSession().getTypeDefinition((String) typeProperty.getFirstValue());
+ }
+
// --- operations ---
/*
@@ -318,8 +363,7 @@
* @see org.apache.opencmis.client.api.CmisObject#setProperty(java.lang.String, java.lang.Object)
*/
public <T> void setProperty(String id, T value) {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ setPropertyMultivalue(id, (value == null ? null : Collections.singletonList(value)));
}
/*
@@ -328,9 +372,69 @@
* @see org.apache.opencmis.client.api.CmisObject#setPropertyMultivalue(java.lang.String,
* java.util.List)
*/
+ @SuppressWarnings("unchecked")
public <T> void setPropertyMultivalue(String id, List<T> value) {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ // get and check property type
+ PropertyDefinition<?> propertyDefinition = getObjectType().getPropertyDefintions().get(id);
+ if (propertyDefinition == null) {
+ throw new IllegalArgumentException("Unknown property!");
+ }
+
+ // check updatability
+ if (propertyDefinition.getUpdatability() == Updatability.READONLY) {
+ throw new IllegalArgumentException("Property is read-only!");
+ }
+
+ boolean typeMatch = false;
+
+ if ((value == null) || (value.isEmpty())) {
+ typeMatch = true;
+ if (value.isEmpty()) {
+ value = null;
+ }
+ }
+ else {
+ // check if list contains null values
+ for (Object o : value) {
+ if (o == null) {
+ throw new IllegalArgumentException("List contains null values!");
+ }
+ }
+
+ // take a sample and test the data type
+ Object firstValue = value.get(0);
+
+ switch (propertyDefinition.getPropertyType()) {
+ case STRING:
+ case ID:
+ case URI:
+ case HTML:
+ typeMatch = (firstValue instanceof String);
+ break;
+ case INTEGER:
+ typeMatch = (firstValue instanceof BigInteger);
+ break;
+ case DECIMAL:
+ typeMatch = (firstValue instanceof BigDecimal);
+ break;
+ case BOOLEAN:
+ typeMatch = (firstValue instanceof Boolean);
+ break;
+ case DATETIME:
+ typeMatch = (firstValue instanceof GregorianCalendar);
+ break;
+ }
+ }
+
+ if (!typeMatch) {
+ throw new IllegalArgumentException("Value does not match property type!");
+ }
+
+ Property<T> newProperty = (Property<T>) getSession().getPropertyFactory()
+ .createPropertyMultivalue((PropertyDefinition<T>) propertyDefinition, value);
+
+ setChanged();
+ this.properties.put(id, newProperty);
}
/*
@@ -499,15 +603,70 @@
// --- relationships ---
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.CmisObject#getRelationships()
+ */
public List<Relationship> getRelationships() {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ return relationships;
}
- public List<Relationship> getRelationships(boolean includeSubRelationshipTypes,
- RelationshipDirection relationshipDirection, ObjectType type) {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.CmisObject#getRelationships(boolean,
+ * org.apache.opencmis.commons.enums.RelationshipDirection,
+ * org.apache.opencmis.client.api.objecttype.ObjectType, java.lang.String, java.lang.Boolean, int)
+ */
+ public PagingList<Relationship> getRelationships(final boolean includeSubRelationshipTypes,
+ final RelationshipDirection relationshipDirection, ObjectType type, final String filter,
+ final Boolean includeAllowableActions, final int itemsPerPage) {
+ if (itemsPerPage < 1) {
+ throw new IllegalArgumentException("itemsPerPage must be > 0!");
+ }
+
+ final String objectId = getObjectId();
+ final String typeId = (type == null ? null : type.getId());
+ final RelationshipService relationshipService = getProvider().getRelationshipService();
+
+ return new AbstractPagingList<Relationship>() {
+
+ @Override
+ protected List<Relationship> fetchPage(int pageNumber) {
+ int skipCount = pageNumber * getMaxItemsPerPage();
+
+ // fetch the relationships
+ ObjectList relList = relationshipService.getObjectRelationships(getRepositoryId(),
+ objectId, includeSubRelationshipTypes, relationshipDirection, typeId, filter,
+ includeAllowableActions, BigInteger.valueOf(getMaxItemsPerPage()), BigInteger
+ .valueOf(skipCount), null);
+
+ // set num items
+ if (relList.getNumItems() != null) {
+ setNumItems(relList.getNumItems().intValue());
+ }
+ else {
+ setNumItems(-1);
+ }
+
+ // convert relationship objects
+ List<Relationship> result = new ArrayList<Relationship>();
+ if (relList.getObjects() != null) {
+ for (ObjectData rod : relList.getObjects()) {
+ result
+ .add(new PersistentRelationshipImpl(getSession(), getTypeFromObjectData(rod), rod));
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public int getMaxItemsPerPage() {
+ return itemsPerPage;
+ }
+ };
}
// --- other ---
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentFilableCmisObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentFilableCmisObject.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentFilableCmisObject.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/AbstractPersistentFilableCmisObject.java Tue Mar 2 12:35:10 2010
@@ -18,25 +18,103 @@
*/
package org.apache.opencmis.client.runtime;
+import java.util.ArrayList;
import java.util.List;
import org.apache.opencmis.client.api.CmisObject;
import org.apache.opencmis.client.api.FileableCmisObject;
import org.apache.opencmis.client.api.Folder;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.opencmis.commons.provider.Holder;
+import org.apache.opencmis.commons.provider.ObjectParentData;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.PropertyIdData;
+import org.apache.opencmis.commons.provider.PropertyStringData;
public abstract class AbstractPersistentFilableCmisObject extends AbstractPersistentCmisObject
implements FileableCmisObject {
+ private List<Folder> parents;
+ private List<String> paths;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.FileableCmisObject#getParents()
+ */
public List<Folder> getParents() {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ if (this.parents != null) {
+ return this.parents;
+ }
+
+ // get object ids and paths of the parent folders
+ String objectId = getObjectId();
+ List<ObjectParentData> providerParents = getProvider().getNavigationService().getObjectParents(
+ getRepositoryId(), objectId, PropertyIds.CMIS_OBJECT_ID + "," + PropertyIds.CMIS_PATH,
+ false, IncludeRelationships.NONE, null, true, null);
+
+ this.parents = new ArrayList<Folder>();
+ this.paths = new ArrayList<String>();
+
+ for (ObjectParentData p : providerParents) {
+ if ((p == null) || (p.getObject() == null) || (p.getObject().getProperties() == null)) {
+ // should not happen...
+ throw new CmisRuntimeException("Repository sent invalid data!");
+ }
+
+ // get id property
+ PropertyData<?> idProperty = p.getObject().getProperties().getProperties().get(
+ PropertyIds.CMIS_OBJECT_ID);
+ if (!(idProperty instanceof PropertyIdData)) {
+ // the repository sent an object without a valid object id...
+ throw new CmisRuntimeException("Repository sent invalid data! No object id!");
+ }
+
+ // get path property
+ PropertyData<?> pathProperty = p.getObject().getProperties().getProperties().get(
+ PropertyIds.CMIS_PATH);
+ if (!(pathProperty instanceof PropertyStringData)) {
+ // the repository sent a folder without a valid path...
+ throw new CmisRuntimeException("Repository sent invalid data! No path property!");
+ }
+
+ if (p.getRelativePathSegment() == null) {
+ // the repository didn't send a relative path segment
+ throw new CmisRuntimeException("Repository sent invalid data! No relative path segement!");
+ }
+
+ // fetch the object and make sure it is a folder
+ CmisObject parentFolder = getSession().getObject((String) idProperty.getFirstValue());
+ if (!(parentFolder instanceof Folder)) {
+ // the repository sent an object that is not a folder...
+ throw new CmisRuntimeException("Repository sent invalid data! Object is not a folder!");
+ }
+
+ this.parents.add((Folder) parentFolder);
+
+ String folderPath = ((String) pathProperty.getFirstValue());
+ this.paths.add(folderPath + (folderPath.endsWith("/") ? "" : "/")
+ + p.getRelativePathSegment());
+ }
+
+ return this.parents;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.FileableCmisObject#getPaths()
+ */
public List<String> getPaths() {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ if (this.paths != null) {
+ return this.paths;
+ }
+
+ getParents(); // fills the paths list too
+
+ return this.paths;
}
/*
@@ -90,13 +168,47 @@
return null;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.FileableCmisObject#addToFolder(org.apache.opencmis.client.api
+ * .Folder, boolean)
+ */
public void addToFolder(Folder folder, boolean allVersions) {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ String objectId = getObjectId();
+
+ if (folder == null) {
+ throw new IllegalArgumentException("Folder must be set!");
+ }
+
+ if (folder.getId() == null) {
+ throw new IllegalArgumentException("Folder must contain an object id!");
+ }
+
+ getProvider().getMultiFilingService().addObjectToFolder(getRepositoryId(), objectId,
+ folder.getId(), allVersions, null);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.FileableCmisObject#removeFromFolder(org.apache.opencmis.client
+ * .api.Folder)
+ */
public void removeFromFolder(Folder folder) {
- // TODO Auto-generated method stub
- throw new CmisRuntimeException("not implemented");
+ String objectId = getObjectId();
+
+ if (folder == null) {
+ throw new IllegalArgumentException("Folder must be set!");
+ }
+
+ if (folder.getId() == null) {
+ throw new IllegalArgumentException("Folder must contain an object id!");
+ }
+
+ getProvider().getMultiFilingService().removeObjectFromFolder(getRepositoryId(), objectId,
+ folder.getId(), null);
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentDocumentImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentDocumentImpl.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentDocumentImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentDocumentImpl.java Tue Mar 2 12:35:10 2010
@@ -27,6 +27,7 @@
import org.apache.opencmis.client.api.Property;
import org.apache.opencmis.client.api.Rendition;
import org.apache.opencmis.client.api.objecttype.ObjectType;
+import org.apache.opencmis.commons.PropertyIds;
import org.apache.opencmis.commons.enums.VersioningState;
import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.opencmis.commons.provider.ObjectData;
@@ -41,98 +42,108 @@
initialize(session, objectType, objectData);
}
- public void cancelCheckOut() {
- throw new CmisRuntimeException("not implemented");
- }
+ // properties
- public void checkIn(boolean major, List<Property<?>> properties, ContentStream contentStream,
- String checkinComment, List<Policy> policies, List<Ace> addACEs, List<Ace> removeACEs) {
- throw new CmisRuntimeException("not implemented");
+ public String getCheckinComment() {
+ return getPropertyValue(PropertyIds.CMIS_CHECKIN_COMMENT);
+ }
+ public String getVersionLabel() {
+ return getPropertyValue(PropertyIds.CMIS_VERSION_LABEL);
}
- public boolean checkOut() {
- throw new CmisRuntimeException("not implemented");
+ public String getVersionSeriesId() {
+ return getPropertyValue(PropertyIds.CMIS_VERSION_SERIES_ID);
}
- public Document copy(List<Property<?>> properties, VersioningState versioningState,
- List<Policy> policies, List<Ace> addACEs, List<Ace> removeACEs) {
- throw new CmisRuntimeException("not implemented");
+ public String getVersionSeriesCheckedOutId() {
+ return getPropertyValue(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID);
}
- public void deleteAllVersions() {
- throw new CmisRuntimeException("not implemented");
+ public String getVersionSeriesCheckedOutBy() {
+ return getPropertyValue(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY);
}
- public void deleteContentStream() {
- throw new CmisRuntimeException("not implemented");
+ public Boolean isImmutable() {
+ return getPropertyValue(PropertyIds.CMIS_IS_IMMUTABLE);
}
- public List<Document> getAllVersions() {
- throw new CmisRuntimeException("not implemented");
+ public Boolean isLatestMajorVersion() {
+ return getPropertyValue(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION);
}
- public String getCheckinComment() {
- throw new CmisRuntimeException("not implemented");
+ public Boolean isLatestVersion() {
+ return getPropertyValue(PropertyIds.CMIS_IS_LATEST_VERSION);
}
- public ContentStream getContentStream() {
- throw new CmisRuntimeException("not implemented");
+ public Boolean isMajorVersion() {
+ return getPropertyValue(PropertyIds.CMIS_IS_MAJOR_VERSION);
}
- public Document getObjectOfLatestVersion(boolean major) {
- throw new CmisRuntimeException("not implemented");
+ public Boolean isVersionSeriesCheckedOut() {
+ return getPropertyValue(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT);
}
- public List<Property<?>> getPropertiesOfLatestVersion(boolean major) {
+ // operations
+
+ public Document copy(List<Property<?>> properties, VersioningState versioningState,
+ List<Policy> policies, List<Ace> addACEs, List<Ace> removeACEs) {
throw new CmisRuntimeException("not implemented");
}
- public List<Property<?>> getPropertiesOfLatestVersion(boolean major, String filter) {
- throw new CmisRuntimeException("not implemented");
+ public void deleteAllVersions() {
+ delete(true);
}
- public List<Rendition> getRenditions() {
+ // versioning
+
+ public boolean checkOut() {
throw new CmisRuntimeException("not implemented");
}
- public String getVersionLabel() {
+ public void cancelCheckOut() {
throw new CmisRuntimeException("not implemented");
}
- public String getVersionSeries() {
+ public void checkIn(boolean major, List<Property<?>> properties, ContentStream contentStream,
+ String checkinComment, List<Policy> policies, List<Ace> addACEs, List<Ace> removeACEs) {
throw new CmisRuntimeException("not implemented");
+
}
- public String getVersionSeriesCheckedOut() {
+ public List<Document> getAllVersions() {
throw new CmisRuntimeException("not implemented");
}
- public String getVersionSeriesCheckedOutBy() {
+ public Document getObjectOfLatestVersion(boolean major) {
throw new CmisRuntimeException("not implemented");
}
- public boolean isImmutable() {
+ public List<Property<?>> getPropertiesOfLatestVersion(boolean major) {
throw new CmisRuntimeException("not implemented");
}
- public boolean isLatestMajorVersion() {
+ public List<Property<?>> getPropertiesOfLatestVersion(boolean major, String filter) {
throw new CmisRuntimeException("not implemented");
}
- public boolean isLatestVersion() {
+ // content operations
+
+ public ContentStream getContentStream() {
throw new CmisRuntimeException("not implemented");
}
- public boolean isMajorVersion() {
+ public void setContentStream(boolean overwrite, ContentStream contentStream) {
throw new CmisRuntimeException("not implemented");
}
- public boolean isVersionSeriesCheckedOut() {
+ public void deleteContentStream() {
throw new CmisRuntimeException("not implemented");
}
- public void setContentStream(boolean overwrite, ContentStream contentStream) {
+ // renditions
+
+ public List<Rendition> getRenditions() {
throw new CmisRuntimeException("not implemented");
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentPolicyImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentPolicyImpl.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentPolicyImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentPolicyImpl.java Tue Mar 2 12:35:10 2010
@@ -20,7 +20,7 @@
import org.apache.opencmis.client.api.Policy;
import org.apache.opencmis.client.api.objecttype.ObjectType;
-import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.opencmis.commons.PropertyIds;
import org.apache.opencmis.commons.provider.ObjectData;
public class PersistentPolicyImpl extends AbstractPersistentFilableCmisObject implements Policy {
@@ -34,7 +34,7 @@
}
public String getPolicyText() {
- throw new CmisRuntimeException("not implemented");
+ return getPropertyValue(PropertyIds.CMIS_POLICY_TEXT);
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentRelationshipImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentRelationshipImpl.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentRelationshipImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentRelationshipImpl.java Tue Mar 2 12:35:10 2010
@@ -21,12 +21,15 @@
import org.apache.opencmis.client.api.CmisObject;
import org.apache.opencmis.client.api.Relationship;
import org.apache.opencmis.client.api.objecttype.ObjectType;
-import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.opencmis.commons.PropertyIds;
import org.apache.opencmis.commons.provider.ObjectData;
public class PersistentRelationshipImpl extends AbstractPersistentCmisObject implements
Relationship {
+ private CmisObject source;
+ private CmisObject target;
+
/**
* Constructor.
*/
@@ -35,13 +38,41 @@
initialize(session, objectType, objectData);
}
+ /* (non-Javadoc)
+ * @see org.apache.opencmis.client.api.Relationship#getSource()
+ */
public CmisObject getSource() {
- throw new CmisRuntimeException("not implemented");
+ if (this.source != null) {
+ return this.source;
+ }
+
+ String sourceId = getPropertyValue(PropertyIds.CMIS_SOURCE_ID);
+ if (sourceId == null) {
+ return null;
+ }
+
+ this.source = getSession().getObject(sourceId);
+ return this.source;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Relationship#getTarget()
+ */
public CmisObject getTarget() {
- throw new CmisRuntimeException("not implemented");
+ if (this.target != null) {
+ return this.target;
+ }
+
+ String targetId = getPropertyValue(PropertyIds.CMIS_TARGET_ID);
+ if (targetId == null) {
+ return null;
+ }
+
+ this.target = getSession().getObject(targetId);
+ return this.target;
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/main/java/org/apache/opencmis/client/provider/spi/atompub/HttpUtils.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/main/java/org/apache/opencmis/client/provider/spi/atompub/HttpUtils.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/main/java/org/apache/opencmis/client/provider/spi/atompub/HttpUtils.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/main/java/org/apache/opencmis/client/provider/spi/atompub/HttpUtils.java Tue Mar 2 12:35:10 2010
@@ -165,7 +165,6 @@
private String fResponseMessage;
private Map<String, List<String>> fHeaders;
private InputStream fStream;
- private InputStream fErrorStream;
private String fErrorContent;
public Response(int responseCode, String responseMessage, Map<String, List<String>> headers,
@@ -173,7 +172,6 @@
fResponseCode = responseCode;
fResponseMessage = responseMessage;
fStream = stream;
- fErrorStream = errorStream;
fHeaders = new HashMap<String, List<String>>();
if (headers != null) {
Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/test/java/org/apache/opencmis/client/provider/framework/AbstractSimpleReadOnlyTests.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/test/java/org/apache/opencmis/client/provider/framework/AbstractSimpleReadOnlyTests.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/test/java/org/apache/opencmis/client/provider/framework/AbstractSimpleReadOnlyTests.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-provider-impl/src/test/java/org/apache/opencmis/client/provider/framework/AbstractSimpleReadOnlyTests.java Tue Mar 2 12:35:10 2010
@@ -127,6 +127,8 @@
assertNotNull(types.hasMoreItems());
assertNotNull(types.getList());
assertFalse(types.getList().isEmpty());
+ assertTrue(types.getList().size() >= 2);
+ assertTrue(types.getList().size() <= 4);
getProvider().clearAllCaches();
Modified: incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-fit/src/test/java/org/apache/opencmis/fit/sample/AbstractSampleIT.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-fit/src/test/java/org/apache/opencmis/fit/sample/AbstractSampleIT.java?rev=918000&r1=917999&r2=918000&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-fit/src/test/java/org/apache/opencmis/fit/sample/AbstractSampleIT.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-test/opencmis-test-fit/src/test/java/org/apache/opencmis/fit/sample/AbstractSampleIT.java Tue Mar 2 12:35:10 2010
@@ -24,9 +24,13 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.List;
+
import org.apache.opencmis.client.api.Session;
import org.apache.opencmis.client.api.objecttype.ObjectType;
import org.apache.opencmis.client.api.repository.RepositoryInfo;
+import org.apache.opencmis.client.api.util.Container;
+import org.apache.opencmis.client.api.util.PagingList;
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.fit.SessionFactory;
import org.junit.Before;
@@ -75,6 +79,11 @@
RepositoryInfo ri = getSession().getRepositoryInfo();
assertNotNull(ri);
assertEquals(SessionFactory.getRepositoryId(), ri.getId());
+ assertNotNull(ri.getName());
+ assertNotNull(ri.getRootFolderId());
+ assertNotNull(ri.getCmisVersionSupported());
+ assertNotNull(ri.getCapabilities());
+ assertNotNull(ri.getAclCapabilities());
}
/**
@@ -82,27 +91,84 @@
*/
@Test
public void testTypes() {
- String documnetBaseId = "cmis:document";
+ String documentBaseId = "cmis:document";
String folderBaseId = "cmis:folder";
- ObjectType documentType = getSession().getTypeDefinition(documnetBaseId);
- assertNotNull(documentType);
- assertEquals(documnetBaseId, documentType.getId());
- assertEquals(BaseObjectTypeIds.CMIS_DOCUMENT, documentType.getBaseTypeId());
- assertTrue(documentType.isBaseType());
- assertNull(documentType.getBaseType());
- assertNull(documentType.getParent());
- assertNotNull(documentType.getPropertyDefintions());
- assertFalse(documentType.getPropertyDefintions().isEmpty());
+ // check document type definition
+ ObjectType documentType = getSession().getTypeDefinition(documentBaseId);
+ checkBaseType(documentBaseId, BaseObjectTypeIds.CMIS_DOCUMENT, documentType);
+ // check folder type definition
ObjectType folderType = getSession().getTypeDefinition(folderBaseId);
- assertNotNull(folderType);
- assertEquals(folderBaseId, folderType.getId());
- assertEquals(BaseObjectTypeIds.CMIS_FOLDER, folderType.getBaseTypeId());
- assertTrue(folderType.isBaseType());
- assertNull(folderType.getBaseType());
- assertNull(folderType.getParent());
- assertNotNull(folderType.getPropertyDefintions());
- assertFalse(folderType.getPropertyDefintions().isEmpty());
+ checkBaseType(folderBaseId, BaseObjectTypeIds.CMIS_FOLDER, folderType);
+
+ // get base types via getTypesChildren
+ PagingList<ObjectType> baseTypes = getSession().getTypeChildren(null, true, 10);
+ assertNotNull(baseTypes);
+
+ List<ObjectType> baseTypePage = baseTypes.get(0);
+ assertNotNull(baseTypePage);
+ assertTrue(baseTypePage.size() >= 2);
+ assertTrue(baseTypePage.size() <= 4);
+
+ assertEquals(1, baseTypes.size());
+ assertEquals(baseTypePage.size(), baseTypes.getNumItems());
+
+ boolean hasDocumentBaseType = false;
+ boolean hasFolderBaseType = false;
+ for (ObjectType ot : baseTypePage) {
+ checkBaseType(null, null, ot);
+
+ if (ot.getId().equals(documentBaseId)) {
+ hasDocumentBaseType = true;
+ }
+
+ if (ot.getId().equals(folderBaseId)) {
+ hasFolderBaseType = true;
+ }
+ }
+
+ assertTrue(hasDocumentBaseType);
+ assertTrue(hasFolderBaseType);
+
+ // get base types via getTypeDescendants
+ List<Container<ObjectType>> baseTypeDesc = getSession().getTypeDescendants(null, -1, true);
+ assertNotNull(baseTypeDesc);
+
+ hasDocumentBaseType = false;
+ hasFolderBaseType = false;
+ for (Container<ObjectType> cot : baseTypeDesc) {
+ assertNotNull(cot);
+ //checkBaseType(null, null, cot.getItem());
+
+ if (cot.getItem().getId().equals(documentBaseId)) {
+ hasDocumentBaseType = true;
+ }
+
+ if (cot.getItem().getId().equals(folderBaseId)) {
+ hasFolderBaseType = true;
+ }
+ }
+
+ assertTrue(hasDocumentBaseType);
+ assertTrue(hasFolderBaseType);
+ }
+
+ /**
+ * Checks a base type.
+ */
+ private void checkBaseType(String id, BaseObjectTypeIds baseType, ObjectType objectType) {
+ assertNotNull(objectType);
+ if (id != null) {
+ assertEquals(id, objectType.getId());
+ }
+ if (baseType != null) {
+ assertEquals(baseType, objectType.getBaseTypeId());
+ }
+ assertTrue(objectType.isBaseType());
+ assertNull(objectType.getBaseType());
+ assertNull(objectType.getParent());
+ assertNotNull(objectType.getPropertyDefintions());
+ assertFalse(objectType.getPropertyDefintions().isEmpty());
}
}