You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/06/22 12:37:41 UTC
svn commit: r956843 - in
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/query/
test/java/org/apache/chemistry/opencmis/inmemory/query/
Author: jens
Date: Tue Jun 22 10:37:40 2010
New Revision: 956843
URL: http://svn.apache.org/viewvc?rev=956843&view=rev
Log:
CMIS-216
evaluate parameter searchAllVersions
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java?rev=956843&r1=956842&r2=956843&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java Tue Jun 22 10:37:40 2010
@@ -51,10 +51,12 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
import org.apache.chemistry.opencmis.inmemory.TypeManager;
import org.apache.chemistry.opencmis.inmemory.query.QueryObject.SortSpec;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ObjectStoreImpl;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
import org.apache.chemistry.opencmis.server.support.query.CalendarHelper;
@@ -96,7 +98,7 @@ public class InMemoryQueryProcessor impl
// iterate over all the objects and check for each if the query matches
for (String objectId : ((ObjectStoreImpl) objectStore).getIds()) {
StoredObject so = objectStore.getObjectById(objectId);
- checkMatch(so);
+ match(so, searchAllVersions==null ? true : searchAllVersions.booleanValue());
}
ObjectList objList = buildResultList(tm, user, includeAllowableActions, includeRelationships, renditionFilter,
@@ -155,18 +157,6 @@ public class InMemoryQueryProcessor impl
// log.debug("onStopProcessing()");
}
- /**
- * Check for each object contained in the in-memory repository if it matches the current query
- * expression. If yes add it to the list of matched objects.
- *
- * @param so
- * object stored in the in-memory repository
- */
- public void checkMatch(StoredObject so) {
- // log.debug("checkMatch() for object: " + so.getId());
- match(so);
- }
-
public ObjectList buildResultList(TypeManager tm, String user,
Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
BigInteger maxItems, BigInteger skipCount) {
@@ -257,14 +247,24 @@ public class InMemoryQueryProcessor impl
}
- private void match(StoredObject so) {
- // log.debug("Tree is: " + (whereTree == null ? "(empty)" : whereTree.toStringTree()));
+ /**
+ * Check for each object contained in the in-memory repository if it matches the current query
+ * expression. If yes add it to the list of matched objects.
+ *
+ * @param so
+ * object stored in the in-memory repository
+ */
+ private void match(StoredObject so, boolean searchAllVersions) {
+ // log.debug("checkMatch() for object: " + so.getId());
// first check if type is matching...
String queryName = queryObj.getTypes().values().iterator().next(); // as we don't support JOINS take first type
TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
+ boolean skip = so instanceof VersionedDocument; // we are only interested in versions not in the series
boolean typeMatches = typeMatches(td, so);
+ if (!searchAllVersions && so instanceof DocumentVersion && ((DocumentVersion)so).getParentDocument().getLatestVersion(false) != so)
+ skip = true;
// ... then check expression...
- if (typeMatches)
+ if (typeMatches && !skip)
evalWhereTree(whereTree, so);
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java?rev=956843&r1=956842&r2=956843&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java Tue Jun 22 10:37:40 2010
@@ -23,10 +23,11 @@ import static org.apache.chemistry.openc
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DATETIME;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DECIMAL;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_INT;
-import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
@@ -52,7 +53,7 @@ public class EvalQueryTest extends Abstr
super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
super.setUp();
//create test data
- dataCreator = new QueryTestDataCreator(fRepositoryId, fRootFolderId, fObjSvc );
+ dataCreator = new QueryTestDataCreator(fRepositoryId, fRootFolderId, fObjSvc, fVerSvc);
dataCreator.createBasicTestData();
}
@@ -730,6 +731,24 @@ public class EvalQueryTest extends Abstr
}
}
+ @Test
+ public void testVersionsWithQuery() {
+ String id = dataCreator.createVersionedDocument();
+ assertNotNull(id);
+ String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSION_DOCUMENT_TYPE_ID;
+ ObjectList res = doQueryAllVersions(statement);
+ assertEquals(2, res.getObjects().size());
+ assertTrue(resultContains("ver123", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
+ assertTrue(resultContains("ver456", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
+ assertTrue(resultContains("V 1.0", PropertyIds.VERSION_LABEL, res));
+ assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
+
+ res = doQuery(statement);
+ assertEquals(1, res.getObjects().size());
+ assertFalse(resultContains("V 1.0", PropertyIds.VERSION_LABEL, res));
+ assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
+ }
+
private ObjectList doQuery(String queryString) {
log.debug("\nExecuting query: " + queryString);
ObjectList res = fDiscSvc.query(fRepositoryId, queryString, false, false,
@@ -740,15 +759,29 @@ public class EvalQueryTest extends Abstr
return res;
}
- private boolean resultContains(String name, ObjectList results) {
+ private ObjectList doQueryAllVersions(String queryString) {
+ log.debug("\nExecuting query: " + queryString);
+ ObjectList res = fDiscSvc.query(fRepositoryId, queryString, true, false,
+ IncludeRelationships.NONE, null, null, null, null);
+ log.debug("Query result, number of matching objects: " + res.getNumItems());
+ for (ObjectData od : res.getObjects())
+ log.debug("Found matching object: " + od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
+ return res;
+ }
+
+ private boolean resultContains(String name, String propId, ObjectList results) {
for (ObjectData od : results.getObjects()) {
- String nameProp = (String) od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue();
+ String nameProp = (String) od.getProperties().getProperties().get(propId).getFirstValue();
if (name.equals(nameProp))
return true;
}
return false;
}
+ private boolean resultContains(String name, ObjectList results) {
+ return resultContains(name, PropertyIds.NAME, results);
+ }
+
private boolean resultContainsAtPos(String name, int index, ObjectList results) {
String nameProp = (String) results.getObjects().get(index).getProperties().getProperties().get(PropertyIds.NAME).getFirstValue();
return name.equals(nameProp);
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java?rev=956843&r1=956842&r2=956843&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java Tue Jun 22 10:37:40 2010
@@ -18,6 +18,7 @@
*/
package org.apache.chemistry.opencmis.inmemory.query;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.math.BigDecimal;
@@ -33,12 +34,20 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.data.Acl;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
+import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
+import org.apache.chemistry.opencmis.commons.data.PropertyId;
+import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
+import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.apache.chemistry.opencmis.commons.spi.ObjectService;
+import org.apache.chemistry.opencmis.commons.spi.VersioningService;
+import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
+import org.apache.chemistry.opencmis.inmemory.VersioningTest.VersionTestTypeSystemCreator;
+
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.*;
/**
@@ -68,16 +77,18 @@ public class QueryTestDataCreator {
private String rootFolderId;
private String repositoryId;
private ObjectService fObjSvc;
+ private VersioningService fVerSvc;
private String doc1, doc2, doc3, doc4, doc5;
private String folder1;
private String folder2;
private String folder11;
private static final TimeZone TZ = TimeZone.getTimeZone("Zulu");
- public QueryTestDataCreator(String repositoryId, String rootFolderId, ObjectService objSvc) {
+ public QueryTestDataCreator(String repositoryId, String rootFolderId, ObjectService objSvc, VersioningService verSvc) {
this.rootFolderId = rootFolderId;
this.repositoryId = repositoryId;
fObjSvc = objSvc;
+ fVerSvc = verSvc;
}
public String getFolder1() {
@@ -269,6 +280,41 @@ public class QueryTestDataCreator {
createDocument("likedoc3", folderId, COMPLEX_TYPE, propertyMap3);
}
+ @SuppressWarnings("serial")
+ public String createVersionedDocument() {
+ final Map<String, Object> propertyMap1 =
+ new HashMap<String, Object>() {
+ {
+ put(VERSION_PROPERTY_ID, "ver123");
+ }};
+
+ String verIdV1 = createDocument("verdoc1", rootFolderId, UnitTestTypeSystemCreator.VERSION_DOCUMENT_TYPE_ID, propertyMap1, VersioningState.MAJOR);
+ ObjectData version = fObjSvc.getObject(repositoryId, verIdV1, "*", false, IncludeRelationships.NONE, null,
+ false, false, null);
+
+ // get version series id
+ String verIdSer = (String) version.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID).getFirstValue();
+
+ // create second version
+ final Map<String, Object> propertyMap2 =
+ new HashMap<String, Object>() {
+ {
+ put(VERSION_PROPERTY_ID, "ver456");
+ }};
+ Properties propsV2 = createDocumentProperties("dummy", UnitTestTypeSystemCreator.VERSION_DOCUMENT_TYPE_ID, propertyMap2);
+
+ Holder<String> idHolder = new Holder<String>(verIdV1);
+ Holder<Boolean> contentCopied = new Holder<Boolean>(false);
+ fVerSvc.checkOut(repositoryId, idHolder, null, contentCopied);
+
+ idHolder = new Holder<String>(verIdV1);
+ // Test check-in and pass content and properties
+ String checkinComment = "Here comes next version.";
+ fVerSvc.checkIn(repositoryId, idHolder, true, propsV2, null, checkinComment, null, null, null, null);
+ // String verIdV2 = idHolder.getValue();
+ return verIdSer;
+ }
+
private String createFolder(String folderName, String parentFolderId, String typeId, Map<String, Object> properties) {
Properties props = createFolderProperties(folderName, typeId, properties);
String id = null;
@@ -283,6 +329,10 @@ public class QueryTestDataCreator {
}
private String createDocument(String name, String folderId, String typeId, Map<String, Object> properties) {
+ return createDocument(name, folderId, typeId, properties, VersioningState.NONE);
+ }
+
+ private String createDocument(String name, String folderId, String typeId, Map<String, Object> properties, VersioningState verState) {
ContentStream contentStream = null;
List<String> policies = null;
Acl addACEs = null;
@@ -293,7 +343,7 @@ public class QueryTestDataCreator {
String id = null;
try {
- id = fObjSvc.createDocument(repositoryId, props, folderId, contentStream, VersioningState.NONE, policies,
+ id = fObjSvc.createDocument(repositoryId, props, folderId, contentStream, verState, policies,
addACEs, removeACEs, extension);
if (null == id)
fail("createDocument failed.");