In my previous post, I
explained how to query types using cmis workbench. Most of the time, we want to
embed this CMIS query support in our applications. In this post, I am going to
explain how can you query repository programmatically.
Once you got the
reference to Session object, by calling the query method of session object, you
can execute a query.
For example, following
snippet gets you all the records in the type ‘cmis;document’.
String query =
"SELECT * FROM cmis:document";
ItemIterable<QueryResult>
queryResults = session.query(query, true);
Find the following
complete working application.
TestCmis.java
package com.sample.util; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.chemistry.opencmis.client.api.ItemIterable; import org.apache.chemistry.opencmis.client.api.QueryResult; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.client.api.SessionFactory; import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; import org.apache.chemistry.opencmis.commons.SessionParameter; import org.apache.chemistry.opencmis.commons.data.PropertyData; import org.apache.chemistry.opencmis.commons.enums.BindingType; import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException; public class TestCmis { private static String serverURL = "http://localhost:8080/chemistry-opencmis-server-inmemory-1.1.0/browser"; private static String repositoryId = "A1"; public static Session getSession() { Map<String, String> parameters = new HashMap<>(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value()); parameters.put(SessionParameter.USER, ""); parameters.put(SessionParameter.PASSWORD, ""); parameters.put(SessionParameter.REPOSITORY_ID, repositoryId); parameters.put(SessionParameter.BROWSER_URL, serverURL); SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); return sessionFactory.createSession(parameters); } public static void main(String args[]) throws IOException, JSONParseException { Session session = getSession(); String query = "SELECT * FROM cmis:document"; ItemIterable<QueryResult> queryResults = session.query(query, true); for (QueryResult queryResult : queryResults) { List<PropertyData<?>> propertiesData = queryResult.getProperties(); System.out.println("*********************************************************"); for (PropertyData<?> propData : propertiesData) { System.out.println(propData.getId() + " : " + propData.getValues()); } System.out.println("*********************************************************\n\n"); } } }
Output
********************************************************* cmis:isImmutable : [false] cmis:objectTypeId : [ComplexType] cmis:versionLabel : [] cmis:description : [] cmis:createdBy : [unknown] cmis:checkinComment : [] cmis:creationDate : [java.util.GregorianCalendar[time=1495546132425,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=425,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamFileName : [data.txt] cmis:isMajorVersion : [true] cmis:name : [My_Document-0-0] cmis:isLatestVersion : [true] cmis:lastModificationDate : [java.util.GregorianCalendar[time=1495546132425,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=425,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamLength : [33871] cmis:objectId : [133] cmis:lastModifiedBy : [unknown] cmis:secondaryObjectTypeIds : [] cmis:contentStreamId : [] cmis:contentStreamMimeType : [text/plain] cmis:baseTypeId : [cmis:document] cmis:changeToken : [1495546132425] cmis:isPrivateWorkingCopy : [false] cmis:isVersionSeriesCheckedOut : [false] cmis:versionSeriesCheckedOutBy : [] cmis:versionSeriesId : [133] cmis:isLatestMajorVersion : [true] cmis:versionSeriesCheckedOutId : [] ********************************************************* ********************************************************* cmis:isImmutable : [false] cmis:objectTypeId : [ComplexType] cmis:versionLabel : [] cmis:description : [] cmis:createdBy : [unknown] cmis:checkinComment : [] cmis:creationDate : [java.util.GregorianCalendar[time=1495546132617,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=617,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamFileName : [data.txt] cmis:isMajorVersion : [true] cmis:name : [My_Document-0-1] cmis:isLatestVersion : [true] cmis:lastModificationDate : [java.util.GregorianCalendar[time=1495546132617,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=617,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamLength : [33878] cmis:objectId : [134] cmis:lastModifiedBy : [unknown] cmis:secondaryObjectTypeIds : [] cmis:contentStreamId : [] cmis:contentStreamMimeType : [text/plain] cmis:baseTypeId : [cmis:document] cmis:changeToken : [1495546132617] cmis:isPrivateWorkingCopy : [false] cmis:isVersionSeriesCheckedOut : [false] cmis:versionSeriesCheckedOutBy : [] cmis:versionSeriesId : [134] cmis:isLatestMajorVersion : [true] cmis:versionSeriesCheckedOutId : [] ********************************************************* ********************************************************* cmis:isImmutable : [false] cmis:objectTypeId : [ComplexType] cmis:versionLabel : [] cmis:description : [] cmis:createdBy : [unknown] cmis:checkinComment : [] cmis:creationDate : [java.util.GregorianCalendar[time=1495546132770,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=770,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamFileName : [data.txt] cmis:isMajorVersion : [true] cmis:name : [My_Document-0-2] cmis:isLatestVersion : [true] cmis:lastModificationDate : [java.util.GregorianCalendar[time=1495546132770,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=28,SECOND=52,MILLISECOND=770,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamLength : [33844] cmis:objectId : [135] cmis:lastModifiedBy : [unknown] cmis:secondaryObjectTypeIds : [] cmis:contentStreamId : [] cmis:contentStreamMimeType : [text/plain] cmis:baseTypeId : [cmis:document] cmis:changeToken : [1495546132770] cmis:isPrivateWorkingCopy : [false] cmis:isVersionSeriesCheckedOut : [false] cmis:versionSeriesCheckedOutBy : [] cmis:versionSeriesId : [135] cmis:isLatestMajorVersion : [true] cmis:versionSeriesCheckedOutId : [] ********************************************************* ********************************************************* cmis:isImmutable : [false] cmis:objectTypeId : [cmis:document] cmis:versionLabel : [] cmis:description : [] cmis:createdBy : [] cmis:checkinComment : [] cmis:creationDate : [java.util.GregorianCalendar[time=1495550196056,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=36,SECOND=36,MILLISECOND=56,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamFileName : [a.txt] cmis:isMajorVersion : [true] cmis:name : [a.txt] cmis:isLatestVersion : [true] cmis:lastModificationDate : [java.util.GregorianCalendar[time=1495550196056,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=143,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=36,SECOND=36,MILLISECOND=56,ZONE_OFFSET=0,DST_OFFSET=0]] cmis:contentStreamLength : [0] cmis:objectId : [137] cmis:lastModifiedBy : [] cmis:secondaryObjectTypeIds : [] cmis:contentStreamId : [] cmis:contentStreamMimeType : [application/octet-stream] cmis:baseTypeId : [cmis:document] cmis:changeToken : [1495550196056] cmis:isPrivateWorkingCopy : [false] cmis:isVersionSeriesCheckedOut : [false] cmis:versionSeriesCheckedOutBy : [] cmis:versionSeriesId : [137] cmis:isLatestMajorVersion : [true] cmis:versionSeriesCheckedOutId : [] *********************************************************
Is all repositories support queries capability?
Not necessarily. You can
check whether the repository support query capability or not by using following
statement.
CapabilityQuery
queryCapability =
session.getRepositoryInfo().getCapabilities().getQueryCapability();
if(queryCapability ==
null){
System.out.println("Repository don't support
querys");
return;
}
System.out.println("Query
capability supported");
TestCmis.java
package com.sample.util; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.client.api.SessionFactory; import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; import org.apache.chemistry.opencmis.commons.SessionParameter; import org.apache.chemistry.opencmis.commons.enums.BindingType; import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery; import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException; public class TestCmis { private static String serverURL = "http://localhost:8080/chemistry-opencmis-server-inmemory-1.1.0/browser"; private static String repositoryId = "A1"; public static Session getSession() { Map<String, String> parameters = new HashMap<>(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value()); parameters.put(SessionParameter.USER, ""); parameters.put(SessionParameter.PASSWORD, ""); parameters.put(SessionParameter.REPOSITORY_ID, repositoryId); parameters.put(SessionParameter.BROWSER_URL, serverURL); SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); return sessionFactory.createSession(parameters); } public static void main(String args[]) throws IOException, JSONParseException { Session session = getSession(); CapabilityQuery queryCapability = session.getRepositoryInfo().getCapabilities().getQueryCapability(); if(queryCapability == null){ System.out.println("Repository don't support querys"); return; } System.out.println("Query capability supported"); System.out.println("Query capability : " + queryCapability); } }
Output
Query capability :
BOTHCOMBINED
Is all the types are queryable?
Nope, for example CMIS
specification has a type ‘cmis:relationship’, it is used to establish a
relationship between two objects. It is not queryable.
Can I query on every properties of object types?
No, not all the
properties are queryable. If the property has ‘queryable’ attribute set to
true, then you can query, otherwise not.
For example, observe
following image, ‘Queryable’ attribute of the property ‘Created By’ is set to
true. So you can query on the property ‘Created By’.
Observe following image, ‘Queryable’ attribute of the property ‘MIME
Type’ is set to false. So you can not query on the property ‘MIME Type’.
No comments:
Post a Comment