You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by pi...@apache.org on 2015/09/29 10:05:41 UTC

svn commit: r1705809 - in /manifoldcf/trunk: ./ connectors/alfresco-webscript/ connectors/cmis/ connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler...

Author: piergiorgio
Date: Tue Sep 29 08:05:40 2015
New Revision: 1705809

URL: http://svn.apache.org/viewvc?rev=1705809&view=rev
Log:
Indexing all properties fetched with the cmis query (CONNECTORS-1235)
Upgrade the CMIS Connector to OpenCMIS 0.13.0 (CONNECTORS-1237)

Added:
    manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java   (with props)
    manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java   (with props)
Modified:
    manifoldcf/trunk/CHANGES.txt
    manifoldcf/trunk/build.xml
    manifoldcf/trunk/connectors/alfresco-webscript/pom.xml
    manifoldcf/trunk/connectors/cmis/build.xml
    manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnector.java
    manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnectorUtils.java
    manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/BaseITHSQLDB.java
    manifoldcf/trunk/connectors/cmis/pom.xml
    manifoldcf/trunk/framework/jetty-runner/src/main/resources/connectors.xml

Modified: manifoldcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Tue Sep 29 08:05:40 2015
@@ -3,6 +3,12 @@ $Id$
 
 ======================= 2.3-dev =====================
 
+CONNECTORS-1237: Upgrade the CMIS Connector to OpenCMIS 0.13.0
+(Piergiorgio Lucidi)
+
+CONNECTORS-1235: Indexing all properties fetched with the cmis query
+(Piergiorgio Lucidi, Christian Tiralosi, Deanna Delapasse, Elisa Croci)
+
 CONNECTORS-1244: Add support for LDAPS and TLS to LDAP
 authority connector.
 (Karl Wright)

Modified: manifoldcf/trunk/build.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/build.xml?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/build.xml (original)
+++ manifoldcf/trunk/build.xml Tue Sep 29 08:05:40 2015
@@ -1710,7 +1710,7 @@ Use Apache Forrest version forrest-0.9-d
             <param name="artifact-type" value="jar"/>
         </antcall>
     </target>
-	
+  
     <target name="download-jira-client">
         <mkdir dir="lib"/>
         <antcall target="download-via-maven">
@@ -2297,7 +2297,7 @@ Use Apache Forrest version forrest-0.9-d
             <param name="artifact-type" value="jar"/>
         </antcall>
     </target>
-	
+  
     <target name="make-core-deps" depends="download-joda-time,download-aws-sdk,download-resteasy,download-jsoup,download-mockito,download-alfresco-webscript-plugin,download-alfresco-indexer-client,download-mongo-java-driver,download-jira-client,download-google-api-client,download-dropbox-client,download-solrj,download-zookeeper,download-httpcomponents,download-json,download-hsqldb,download-xerces,download-commons,download-elasticsearch-plugin,download-solr-plugins,download-sharepoint-plugins,download-jstl,download-xmlgraphics-commons,download-woodstox,download-xmlsec,download-xml-apis,download-wss4j,download-velocity,download-streambuffer,download-stax,download-servlet-api,download-xml-resolver,download-osgi,download-opensaml,download-mimepull,download-mail,download-log4j,download-junit,download-jaxws,download-glassfish,download-jaxb,download-tomcat,download-h2,download-h2-support,download-geronimo-specs,download-fop,download-postgresql,download-axis,download-saaj,download-wsdl4j,do
 wnload-castor,download-jetty,download-slf4j,download-xalan,download-activation,download-avalon-framework,download-poi,download-chemistry,download-ecj,download-hadoop,download-htrace,download-protobuf,download-tika,download-jackson">
         <copy todir="lib">
             <fileset dir="lib-license" includes="*.txt"/>

Modified: manifoldcf/trunk/connectors/alfresco-webscript/pom.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/alfresco-webscript/pom.xml?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/alfresco-webscript/pom.xml (original)
+++ manifoldcf/trunk/connectors/alfresco-webscript/pom.xml Tue Sep 29 08:05:40 2015
@@ -247,7 +247,7 @@
         <dependency>
             <groupId>org.apache.chemistry.opencmis</groupId>
             <artifactId>chemistry-opencmis-client-impl</artifactId>
-            <version>0.10.0</version>
+            <version>0.13.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>

Modified: manifoldcf/trunk/connectors/cmis/build.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/build.xml?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/cmis/build.xml (original)
+++ manifoldcf/trunk/connectors/cmis/build.xml Tue Sep 29 08:05:40 2015
@@ -30,7 +30,7 @@
 
     <import file="${mcf-dist}/connector-build.xml"/>
     
-    <property name="chemistry.version" value="0.11.0"/>
+    <property name="chemistry.version" value="0.13.0"/>
     
     <target name="download-dependencies">
         <property name="chemistry-package" value="org/apache/chemistry/opencmis"/>
@@ -67,6 +67,7 @@
             <include name="resolver*.jar"/>
             <include name="org.osgi.core*.jar"/>
             <include name="commons-lang*.jar"/>
+        	  <include name="joda*.jar"/>
         </fileset>
     </path>
 
@@ -83,6 +84,7 @@
                 <include name="mimepull*.jar"/>
                 <include name="resolver*.jar"/>
                 <include name="org.osgi.core*.jar"/>
+            	  <include name="joda*.jar"/>
             </fileset>
         </copy>
     </target>

Modified: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnector.java?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnector.java (original)
+++ manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnector.java Tue Sep 29 08:05:40 2015
@@ -72,7 +72,7 @@ import org.apache.manifoldcf.crawler.sys
 
 /**
  * This is the "repository connector" for a CMIS-compliant repository.
- * 
+ *
  * @author Piergiorgio Lucidi
  */
 public class CmisRepositoryConnector extends BaseRepositoryConnector {
@@ -88,11 +88,11 @@ public class CmisRepositoryConnector ext
       "yyyy-MM-dd'T'HH:mm:ssZ");
 
   // Tab name properties
-  
+
   private static final String CMIS_SERVER_TAB_PROPERTY = "CmisRepositoryConnector.Server";
   private static final String CMIS_QUERY_TAB_PROPERTY = "CmisRepositoryConnector.CMISQuery";
 
-  
+
   // Template names
 
     /** Forward to the javascript to check the configuration parameters */
@@ -103,17 +103,17 @@ public class CmisRepositoryConnector ext
 
   /** Forward to the javascript to check the specification parameters for the job */
   private static final String EDIT_SPEC_HEADER_FORWARD = "editSpecification.js";
-  
+
   /** Forward to the template to edit the configuration parameters for the job */
   private static final String EDIT_SPEC_FORWARD_CMISQUERY = "editSpecification_CMISQuery.html";
-  
+
   /** Forward to the HTML template to view the configuration parameters */
   private static final String VIEW_CONFIG_FORWARD = "viewConfiguration.html";
-  
+
   /** Forward to the template to view the specification parameters for the job */
   private static final String VIEW_SPEC_FORWARD = "viewSpecification.html";
-  
-  
+
+
   /**
    * CMIS Session handle
    */
@@ -121,19 +121,19 @@ public class CmisRepositoryConnector ext
 
   protected String username = null;
   protected String password = null;
-  
+
   /** Endpoint protocol */
   protected String protocol = null;
-  
+
   /** Endpoint server name */
   protected String server = null;
-  
+
   /** Endpoint port */
   protected String port = null;
-  
+
   /** Endpoint context path of the Alfresco webapp */
   protected String path = null;
-  
+
   protected String repositoryId = null;
   protected String binding = null;
 
@@ -144,7 +144,7 @@ public class CmisRepositoryConnector ext
 
   protected static final long timeToRelease = 300000L;
   protected long lastSessionFetch = -1L;
-  
+
   /**
    * Constructor
    */
@@ -162,7 +162,7 @@ public class CmisRepositoryConnector ext
     return MODEL_CHAINED_ADD_CHANGE;
   }
 
-  /** 
+  /**
    * Return the list of activities that this connector supports (i.e. writes into the log).
    * @return the list.
    */
@@ -204,7 +204,7 @@ public class CmisRepositoryConnector ext
         parameters.put(SessionParameter.PASSWORD, password);
 
         String endpoint = protocol+"://"+server+":"+port+path;
-        
+
         // connection settings
         if(CmisConfig.BINDING_ATOM_VALUE.equals(binding)){
           //AtomPub protocol
@@ -237,20 +237,20 @@ public class CmisRepositoryConnector ext
             Logging.connectors.error("CMIS: Error during getting CMIS repositories. Please check the endpoint parameters: " + e.getMessage(), e);
             this.exception = e;
           }
-          
+
         } else {
 
           // get a session from the repository specified in the
           // configuration with its own ID
           parameters.put(SessionParameter.REPOSITORY_ID, repositoryId);
-          
+
           try {
             session = factory.createSession(parameters);
           } catch (Exception e) {
             Logging.connectors.error("CMIS: Error during the creation of the new session. Please check the endpoint parameters: " + e.getMessage(), e);
             this.exception = e;
           }
-        
+
         }
 
       } catch (Throwable e) {
@@ -308,7 +308,7 @@ public class CmisRepositoryConnector ext
 
   }
 
-  /** 
+  /**
    * Close the connection.  Call this before discarding the connection.
    */
   @Override
@@ -376,7 +376,7 @@ public class CmisRepositoryConnector ext
     server = params.getParameter(CmisConfig.SERVER_PARAM);
     port = params.getParameter(CmisConfig.PORT_PARAM);
     path = params.getParameter(CmisConfig.PATH_PARAM);
-    
+
     binding = params.getParameter(CmisConfig.BINDING_PARAM);
     if (StringUtils.isNotEmpty(params.getParameter(CmisConfig.REPOSITORY_ID_PARAM)))
       repositoryId = params.getParameter(CmisConfig.REPOSITORY_ID_PARAM);
@@ -401,11 +401,11 @@ public class CmisRepositoryConnector ext
   protected void getSession() throws ManifoldCFException, ServiceInterruption {
     if (session == null) {
       // Check for parameter validity
-      
+
       if (StringUtils.isEmpty(binding))
         throw new ManifoldCFException("Parameter " + CmisConfig.BINDING_PARAM
             + " required but not set");
-      
+
       if (StringUtils.isEmpty(username))
         throw new ManifoldCFException("Parameter " + CmisConfig.USERNAME_PARAM
             + " required but not set");
@@ -422,15 +422,15 @@ public class CmisRepositoryConnector ext
       if (StringUtils.isEmpty(protocol))
         throw new ManifoldCFException("Parameter " + CmisConfig.PROTOCOL_PARAM
             + " required but not set");
-      
+
       if (StringUtils.isEmpty(server))
         throw new ManifoldCFException("Parameter " + CmisConfig.SERVER_PARAM
             + " required but not set");
-      
+
       if (StringUtils.isEmpty(port))
         throw new ManifoldCFException("Parameter " + CmisConfig.PORT_PARAM
             + " required but not set");
-      
+
       if (StringUtils.isEmpty(path))
         throw new ManifoldCFException("Parameter " + CmisConfig.PATH_PARAM
             + " required but not set");
@@ -572,7 +572,7 @@ public class CmisRepositoryConnector ext
     }
   }
 
-  /** 
+  /**
    * This method is periodically called for all connectors that are connected but not
    * in active use.
    */
@@ -689,10 +689,10 @@ public class CmisRepositoryConnector ext
 
     return "";
   }
-  
-  
 
-  /** 
+
+
+  /**
    * Get the maximum number of documents to amalgamate together into one batch, for this connector.
    * @return the maximum number. 0 indicates "unlimited".
    */
@@ -703,7 +703,7 @@ public class CmisRepositoryConnector ext
 
   /**
    * Return the list of relationship types that this connector recognizes.
-   * 
+   *
    * @return the list.
    */
   @Override
@@ -714,7 +714,7 @@ public class CmisRepositoryConnector ext
   /**
    * Read the content of a resource, replace the variable ${PARAMNAME} with the
    * value and copy it to the out.
-   * 
+   *
    * @param resName
    * @param out
    * @throws ManifoldCFException
@@ -738,7 +738,7 @@ public class CmisRepositoryConnector ext
     String path = parameters.getParameter(CmisConfig.PATH_PARAM);
     String repositoryId = parameters.getParameter(CmisConfig.REPOSITORY_ID_PARAM);
     String binding = parameters.getParameter(CmisConfig.BINDING_PARAM);
-      
+
     if(username == null)
       username = StringUtils.EMPTY;
     if(password == null)
@@ -757,7 +757,7 @@ public class CmisRepositoryConnector ext
       repositoryId = StringUtils.EMPTY;
     if(binding == null)
       binding = CmisConfig.BINDING_ATOM_VALUE;
-      
+
     newMap.put(CmisConfig.USERNAME_PARAM, username);
     newMap.put(CmisConfig.PASSWORD_PARAM, password);
     newMap.put(CmisConfig.PROTOCOL_PARAM, protocol);
@@ -767,14 +767,14 @@ public class CmisRepositoryConnector ext
     newMap.put(CmisConfig.REPOSITORY_ID_PARAM, repositoryId);
     newMap.put(CmisConfig.BINDING_PARAM, binding);
   }
-  
+
   /**
    * View configuration. This method is called in the body section of the
    * connector's view configuration page. Its purpose is to present the
    * connection information to the user. The coder can presume that the HTML that
    * is output from this configuration will be within appropriate <html> and
    * <body> tags.
-   * 
+   *
    * @param threadContext
    *          is the local thread context.
    * @param out
@@ -787,7 +787,7 @@ public class CmisRepositoryConnector ext
   public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out,
       Locale locale, ConfigParams parameters) throws ManifoldCFException, IOException {
     Map<String,String> paramMap = new HashMap<String,String>();
-  
+
     // Fill in map from each tab
     fillInServerConfigurationMap(paramMap, out, parameters);
 
@@ -800,7 +800,7 @@ public class CmisRepositoryConnector ext
    * section of the connector's configuration page. Its purpose is to add the
    * required tabs to the list, and to output any javascript methods that might
    * be needed by the configuration editing HTML.
-   * 
+   *
    * @param threadContext
    *          is the local thread context.
    * @param out
@@ -842,7 +842,7 @@ public class CmisRepositoryConnector ext
     // Fill in the parameters
     fillInServerConfigurationMap(paramMap, out, parameters);
     outputResource(EDIT_CONFIG_FORWARD_SERVER, out, locale, paramMap);
-  
+
   }
 
   /**
@@ -851,7 +851,7 @@ public class CmisRepositoryConnector ext
    * data for a connection has been posted. Its purpose is to gather form
    * information and modify the configuration parameters accordingly. The name
    * of the posted form is "editconnection".
-   * 
+   *
    * @param threadContext
    *          is the local thread context.
    * @param variableContext
@@ -868,11 +868,11 @@ public class CmisRepositoryConnector ext
   public String processConfigurationPost(IThreadContext threadContext,
       IPostParameters variableContext, ConfigParams parameters)
       throws ManifoldCFException {
-    
+
     String binding = variableContext.getParameter(CmisConfig.BINDING_PARAM);
     if (binding != null)
       parameters.setParameter(CmisConfig.BINDING_PARAM, binding);
-    
+
     String username = variableContext.getParameter(CmisConfig.USERNAME_PARAM);
     if (username != null)
       parameters.setParameter(CmisConfig.USERNAME_PARAM, username);
@@ -885,22 +885,22 @@ public class CmisRepositoryConnector ext
     if (protocol != null) {
       parameters.setParameter(CmisConfig.PROTOCOL_PARAM, protocol);
     }
-    
+
     String server = variableContext.getParameter(CmisConfig.SERVER_PARAM);
     if (server != null && !StringUtils.contains(server, '/')) {
       parameters.setParameter(CmisConfig.SERVER_PARAM, server);
     }
-    
+
     String port = variableContext.getParameter(CmisConfig.PORT_PARAM);
     if (port != null){
       try {
         Integer.parseInt(port);
         parameters.setParameter(CmisConfig.PORT_PARAM, port);
       } catch (NumberFormatException e) {
-        
+
       }
     }
-    
+
     String path = variableContext.getParameter(CmisConfig.PATH_PARAM);
     if (path != null) {
       parameters.setParameter(CmisConfig.PATH_PARAM, path);
@@ -944,13 +944,13 @@ public class CmisRepositoryConnector ext
   public void viewSpecification(IHTTPOutput out, Locale locale, Specification ds,
     int connectionSequenceNumber)
     throws ManifoldCFException, IOException {
-  
+
     Map<String,String> paramMap = new HashMap<String,String>();
     paramMap.put("SeqNum", Integer.toString(connectionSequenceNumber));
 
     // Fill in the map with data from all tabs
     fillInCMISQuerySpecificationMap(paramMap, ds);
-  
+
     outputResource(VIEW_SPEC_FORWARD, out, locale, paramMap);
   }
 
@@ -1036,7 +1036,7 @@ public class CmisRepositoryConnector ext
     int connectionSequenceNumber, List<String> tabsArray)
     throws ManifoldCFException, IOException {
     tabsArray.add(Messages.getString(locale,CMIS_QUERY_TAB_PROPERTY));
-  
+
     Map<String,String> paramMap = new HashMap<String,String>();
     paramMap.put("SeqNum", Integer.toString(connectionSequenceNumber));
 
@@ -1077,17 +1077,17 @@ public class CmisRepositoryConnector ext
 
 
     for (String documentIdentifier : documentIdentifiers) {
-      
+
       if (Logging.connectors.isDebugEnabled())
         Logging.connectors.debug("CMIS: Processing document identifier '"
             + documentIdentifier + "'");
 
       getSession();
-      
+
       // Load the object.  If this fails, it has been deleted.
       CmisObject cmisObject;
       try {
-        cmisObject = session.getObject(documentIdentifier);
+       cmisObject = session.getObject(documentIdentifier);
       } catch (CmisObjectNotFoundException e) {
         cmisObject = null;
       }
@@ -1097,9 +1097,9 @@ public class CmisRepositoryConnector ext
         activities.deleteDocument(documentIdentifier);
         continue;
       }
-      
+
       String versionString;
-      
+
       if (cmisObject.getBaseType().getId().equals(CMIS_DOCUMENT_BASE_TYPE)) {
         Document document = (Document) cmisObject;
 
@@ -1114,7 +1114,10 @@ public class CmisRepositoryConnector ext
         }
         if (isCurrentVersion) {
           //System.out.println(" is latest version");
-          versionString = documentIdentifier + ":" + cmisQuery;
+          //versionString = documentIdentifier + ":" + cmisQuery;
+      // take into account of the last modification date
+            long lmdSeconds = document.getLastModificationDate().getTimeInMillis();
+            versionString = documentIdentifier + lmdSeconds + ":" + cmisQuery;
         } else {
           //System.out.println(" is NOT latest vrersion");
           activities.deleteDocument(documentIdentifier);
@@ -1125,7 +1128,7 @@ public class CmisRepositoryConnector ext
         //System.out.println(" is folder");
         versionString = StringUtils.EMPTY;
       }
-      
+
       if (versionString.length() == 0 || activities.checkDocumentNeedsReindexing(documentIdentifier,versionString)) {
         // Index this document
         String errorCode = null;
@@ -1149,7 +1152,7 @@ public class CmisRepositoryConnector ext
             // content ingestion
 
             Document document = (Document) cmisObject;
-            
+
             Date createdDate = document.getCreationDate().getTime();
             Date modifiedDate = document.getLastModificationDate().getTime();
             long fileLength = document.getContentStreamLength();
@@ -1157,7 +1160,7 @@ public class CmisRepositoryConnector ext
             String mimeType = document.getContentStreamMimeType();
             //documentURI
             String documentURI = CmisRepositoryConnectorUtils.getDocumentURL(document, session);
-            
+
             // Do any filtering (which will save us work)
             if (!activities.checkURLIndexable(documentURI))
             {
@@ -1166,7 +1169,7 @@ public class CmisRepositoryConnector ext
               errorDesc = "Excluding due to URL ('"+documentURI+"')";
               continue;
             }
-            
+
             if (!activities.checkMimeTypeIndexable(mimeType))
             {
               activities.noDocument(documentIdentifier,versionString);
@@ -1182,7 +1185,7 @@ public class CmisRepositoryConnector ext
               errorDesc = "Excluding due to length ("+fileLength+")";
               continue;
             }
-            
+
             if (!activities.checkDateIndexable(modifiedDate))
             {
               activities.noDocument(documentIdentifier,versionString);
@@ -1190,13 +1193,13 @@ public class CmisRepositoryConnector ext
               errorDesc = "Excluding due to date ("+modifiedDate+")";
               continue;
             }
-            
+
             RepositoryDocument rd = new RepositoryDocument();
             rd.setFileName(fileName);
             rd.setMimeType(mimeType);
             rd.setCreatedDate(createdDate);
             rd.setModifiedDate(modifiedDate);
-                
+
             InputStream is;
             try {
               if (fileLength > 0)
@@ -1208,7 +1211,7 @@ public class CmisRepositoryConnector ext
               activities.deleteDocument(documentIdentifier);
               continue;
             }
-              
+
             try {
               //binary
               if(is != null) {
@@ -1217,110 +1220,13 @@ public class CmisRepositoryConnector ext
                 rd.setBinary(new NullInputStream(0),0);
               }
 
-              //properties
-              List<Property<?>> properties = document.getProperties();
-              String id = StringUtils.EMPTY;
-              for (Property<?> property : properties) {
-                String propertyId = property.getId();
-                  
-                if(CmisRepositoryConnectorUtils.existsInSelectClause(cmisQuery, propertyId)){
-                    
-                  if (propertyId.endsWith(Constants.PARAM_OBJECT_ID)) {
-                    id = (String) property.getValue();
-        
-                    if (property.getValue() !=null 
-                        || property.getValues() != null) {
-                      PropertyType propertyType = property.getType();
-          
-                      switch (propertyType) {
-          
-                      case STRING:
-                      case ID:
-                      case URI:
-                      case HTML:
-                        if(property.isMultiValued()){
-                          List<String> htmlPropertyValues = (List<String>) property.getValues();
-                          for (String htmlPropertyValue : htmlPropertyValues) {
-                            rd.addField(propertyId, htmlPropertyValue);
-                          }
-                        } else {
-                          String stringValue = (String) property.getValue();
-                          if(StringUtils.isNotEmpty(stringValue)){
-                            rd.addField(propertyId, stringValue);
-                          }
-                        }
-                        break;
-               
-                      case BOOLEAN:
-                        if(property.isMultiValued()){
-                          List<Boolean> booleanPropertyValues = (List<Boolean>) property.getValues();
-                          for (Boolean booleanPropertyValue : booleanPropertyValues) {
-                            rd.addField(propertyId, booleanPropertyValue.toString());
-                          }
-                        } else {
-                          Boolean booleanValue = (Boolean) property.getValue();
-                          if(booleanValue!=null){
-                            rd.addField(propertyId, booleanValue.toString());
-                          }
-                        }
-                        break;
-          
-                      case INTEGER:
-                        if(property.isMultiValued()){
-                          List<BigInteger> integerPropertyValues = (List<BigInteger>) property.getValues();
-                          for (BigInteger integerPropertyValue : integerPropertyValues) {
-                            rd.addField(propertyId, integerPropertyValue.toString());
-                          }
-                        } else {
-                          BigInteger integerValue = (BigInteger) property.getValue();
-                          if(integerValue!=null){
-                            rd.addField(propertyId, integerValue.toString());
-                          }
-                        }
-                        break;
-          
-                      case DECIMAL:
-                        if(property.isMultiValued()){
-                          List<BigDecimal> decimalPropertyValues = (List<BigDecimal>) property.getValues();
-                          for (BigDecimal decimalPropertyValue : decimalPropertyValues) {
-                            rd.addField(propertyId, decimalPropertyValue.toString());
-                          }
-                        } else {
-                          BigDecimal decimalValue = (BigDecimal) property.getValue();
-                          if(decimalValue!=null){
-                            rd.addField(propertyId, decimalValue.toString());
-                          }
-                        }
-                        break;
-          
-                      case DATETIME:
-                        if(property.isMultiValued()){
-                          List<GregorianCalendar> datePropertyValues = (List<GregorianCalendar>) property.getValues();
-                          for (GregorianCalendar datePropertyValue : datePropertyValues) {
-                            rd.addField(propertyId,
-                                ISO8601_DATE_FORMATTER.format(datePropertyValue.getTime()));
-                          }
-                        } else {
-                          GregorianCalendar dateValue = (GregorianCalendar) property.getValue();
-                          if(dateValue!=null){
-                            rd.addField(propertyId, ISO8601_DATE_FORMATTER.format(dateValue.getTime()));
-                          }
-                        }
-                        break;
-          
-                      default:
-                        break;
-                      }
-                    }
-                      
-                  }
-                  
-                }
-              }
-              
+              //modify the query in order to get the cmis:objectId field
+              String modifiedQuery = CmisRepositoryConnectorUtils.getCmisQueryWithObjectId(cmisQuery);
+
+              //filter the fields selected in the query
+              CmisRepositoryConnectorUtils.addValuesOfProperties(cmisObject.getProperties(), rd, modifiedQuery);
               //ingestion
-                
-                
+
               try {
                 activities.ingestDocumentWithException(documentIdentifier, versionString, documentURI, rd);
                 fileLengthLong = new Long(fileLength);
@@ -1330,7 +1236,9 @@ public class CmisRepositoryConnector ext
                 errorDesc = e.getMessage();
                 handleIOException(e, "reading file input stream");
               }
-            } finally {
+            } catch (Exception ecc) {
+               ecc.printStackTrace();
+              } finally {
               try {
                 if(is!=null){
                   is.close();
@@ -1358,7 +1266,7 @@ public class CmisRepositoryConnector ext
         }
       }
     }
-    
+
   }
 
   protected static void handleIOException(IOException e, String context) throws ManifoldCFException, ServiceInterruption {
@@ -1373,4 +1281,4 @@ public class CmisRepositoryConnector ext
     }
   }
 
-}
+}
\ No newline at end of file

Modified: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnectorUtils.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnectorUtils.java?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnectorUtils.java (original)
+++ manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/CmisRepositoryConnectorUtils.java Tue Sep 29 08:05:40 2015
@@ -19,80 +19,117 @@
 package org.apache.manifoldcf.crawler.connectors.cmis;
 
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
-
 import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Property;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService;
 import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser;
+import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
+import org.apache.chemistry.opencmis.commons.enums.Cardinality;
+import org.apache.chemistry.opencmis.commons.enums.PropertyType;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.manifoldcf.crawler.system.Logging;
+import org.apache.manifoldcf.agents.interfaces.RepositoryDocument;
 import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
+import org.apache.manifoldcf.crawler.system.Logging;
+import org.joda.time.format.DateTimeFormatter;
+import org.joda.time.format.ISODateTimeFormat;
 
 /**
- * 
+ *
  * @author Piergiorgio Lucidi
  *
  */
 public class CmisRepositoryConnectorUtils {
 
-  private static final String LOAD_LINK_METHOD_NAME = "loadLink";
-  private static final String FROM_TOKEN = "from";
-  private static final String SEP = " ";
-  private static final String SELECT_STAR_CLAUSE = "select *";
-  private static final String OBJECT_ID_TERM = "cmis:objectId,";
-  private static final String SELECT_CLAUSE_TERM_SEP = ",";
-  
-  public static final String getDocumentURL(final Document document, final Session session)
-    throws ManifoldCFException {
-    String link = null;
-    try {
-        Method loadLink = AbstractAtomPubService.class.getDeclaredMethod(LOAD_LINK_METHOD_NAME, 
-            new Class[] { String.class, String.class, String.class, String.class });
-        
-        loadLink.setAccessible(true);
-        
-        link = (String) loadLink.invoke(session.getBinding().getObjectService(), session.getRepositoryInfo().getId(),
-            document.getId(), AtomPubParser.LINK_REL_CONTENT, null);
-    } catch (Exception e) {
-      Logging.connectors.error(
-          "CMIS: Error during getting the content stream url: "
-              + e.getMessage(), e);
-      throw new ManifoldCFException(e.getMessage(),e);
-    }
-
-    return link;
-  }
-  
-  /**
-   * Utility method to consider the objectId whenever it is not present in the select clause
-   * @param cmisQuery
-   * @return the cmisQuery with the cmis:objectId property added in the select clause
-   */
-  public static String getCmisQueryWithObjectId(String cmisQuery){
-    String cmisQueryResult = StringUtils.EMPTY;
-    String selectClause = getSelectClause(cmisQuery);
-    if(selectClause.equalsIgnoreCase(SELECT_STAR_CLAUSE)){
-      cmisQueryResult = cmisQuery;
-    } else {
-      //get the second term and add the cmis:objectId term
-      StringTokenizer selectClauseTokenized = new StringTokenizer(selectClause.trim());
-      boolean firstTermSelectClause = true;
-      String secondTerm = StringUtils.EMPTY;
-      while(selectClauseTokenized.hasMoreElements()){
-          String term = selectClauseTokenized.nextToken();
-          if(firstTermSelectClause){
-            firstTermSelectClause = false;
-          } else if(!firstTermSelectClause){
-            //this is the second term
-            secondTerm = term;
-            break;
-          }
-      }
-      cmisQueryResult = StringUtils.replaceOnce(cmisQuery, secondTerm, OBJECT_ID_TERM + secondTerm);
+    private static final String LOAD_LINK_METHOD_NAME = "loadLink";
+    private static final String FROM_TOKEN = "from";
+    private static final String SEP = " ";
+    private static final String SELECT_STAR_CLAUSE = "select *";
+    private static final String OBJECT_ID_PROPERTY = "cmis:objectId";
+    private static final String OBJECT_ID_TERM = OBJECT_ID_PROPERTY + ",";
+    private static final String SELECT_CLAUSE_TERM_SEP = ",";
+    private static final String SELECT_PREFIX = "select ";
+    private final static String TOKENIZER_SEP = ",\n\t";
+
+    public static final String getDocumentURL(final Document document, final Session session)
+            throws ManifoldCFException {
+        String link = null;
+        try {
+            Method loadLink = AbstractAtomPubService.class.getDeclaredMethod(LOAD_LINK_METHOD_NAME,
+                    new Class[]{String.class, String.class, String.class, String.class});
+
+            loadLink.setAccessible(true);
+
+            link = (String) loadLink.invoke(session.getBinding().getObjectService(), session.getRepositoryInfo().getId(),
+                    document.getId(), AtomPubParser.LINK_REL_CONTENT, null);
+        } catch (Exception e) {
+            Logging.connectors.error(
+                    "CMIS: Error during getting the content stream url: "
+                    + e.getMessage(), e);
+            throw new ManifoldCFException(e.getMessage(), e);
+        }
+
+        return link;
+    }
+
+    /**
+     * Utility method to consider the objectId whenever it is not present in the select clause
+     * @param cmisQuery
+     * @return the cmisQuery with the cmis:objectId property added in the select clause
+     */
+    public static String getCmisQueryWithObjectId(String cmisQuery) {
+        String cmisQueryResult = StringUtils.EMPTY;
+        String selectClause = getSelectClause(cmisQuery);
+        if (selectClause.equalsIgnoreCase(SELECT_STAR_CLAUSE)) {
+            cmisQueryResult = cmisQuery;
+        } else {
+            //get the select term and add the cmis:objectId term or prefix.cmis:objectId
+            StringTokenizer selectClauseTokenized = new StringTokenizer(selectClause.trim());
+            boolean firstTermSelectClause = true;
+            String selectTerm = StringUtils.EMPTY;
+            String prefix = StringUtils.EMPTY;
+            boolean foundObjIdClause = false;
+            boolean foundPrefixClause = false;
+            while (selectClauseTokenized.hasMoreElements()) {
+                String term = selectClauseTokenized.nextToken();
+                if (firstTermSelectClause) {
+                    selectTerm = term;
+                    firstTermSelectClause = false;
+                } else {
+                    if (term.contains(OBJECT_ID_PROPERTY)){
+                        foundObjIdClause = true;
+                        cmisQueryResult = cmisQuery;
+                        break;
+                    }
+                    //if a term use a prefix table, get the prefix
+                    if (!foundPrefixClause && term.contains(".")){
+                        int i = term.indexOf(".");
+                        prefix = term.substring(0,i);
+                        foundPrefixClause = true;
+                    }
+                }
+            }
+            // if the cmis:objectId term is not found, add it
+            if (!foundObjIdClause) {
+                String toReplace = selectTerm + " ";
+                if (foundPrefixClause) {
+                    toReplace += prefix + "." + OBJECT_ID_TERM;
+                } else {
+                    toReplace += OBJECT_ID_TERM;
+                }
+                cmisQueryResult = StringUtils.replaceOnce(cmisQuery, selectTerm, toReplace);
+            }
+        }
+        return cmisQueryResult;
     }
-    return cmisQueryResult;
-  }
 
   /**
    * Utility method to understand if a property must be indexed or not
@@ -101,53 +138,245 @@ public class CmisRepositoryConnectorUtil
    * @return TRUE if the property is included in the select clause of the query, otherwise it will return FALSE
    */
   public static boolean existsInSelectClause(String cmisQuery, String propertyId) {
-    String selectClause = getSelectClause(cmisQuery);
-    if(selectClause.startsWith(SELECT_STAR_CLAUSE)){
-      return true;
-    } else {
-      StringTokenizer cmisQueryTokenized = new StringTokenizer(cmisQuery.trim());
-      while(cmisQueryTokenized.hasMoreElements()){
-          String term = cmisQueryTokenized.nextToken();
-          if(!term.equalsIgnoreCase(FROM_TOKEN)){
-            if(term.equalsIgnoreCase(propertyId)){
-              return true;
-            } else if(StringUtils.contains(term, SELECT_CLAUSE_TERM_SEP)){
-              //in this case means that we have: select cmis:objectId,cmis:name from ...
-              StringTokenizer termsTokenized = new StringTokenizer(term, SELECT_CLAUSE_TERM_SEP);
-              while(termsTokenized.hasMoreElements()){
-                String termTokenized = termsTokenized.nextToken().trim();
-                if(termTokenized.equalsIgnoreCase(propertyId)){
-                  return true;
+        String selectClause = getSelectClause(cmisQuery);
+        if (selectClause.toLowerCase().startsWith(SELECT_STAR_CLAUSE)) {
+            return true;
+        } else {
+            StringTokenizer cmisQueryTokenized = new StringTokenizer(cmisQuery.trim());
+            while (cmisQueryTokenized.hasMoreElements()) {
+                String term = cmisQueryTokenized.nextToken();
+                if (!term.equalsIgnoreCase(FROM_TOKEN)) {
+                    if (term.equalsIgnoreCase(propertyId)) {
+                        return true;
+                    } else if (StringUtils.contains(term, SELECT_CLAUSE_TERM_SEP)) {
+                        //in this case means that we have: select cmis:objectId,cmis:name from ...
+                        StringTokenizer termsTokenized = new StringTokenizer(term, SELECT_CLAUSE_TERM_SEP);
+                        while (termsTokenized.hasMoreElements()) {
+                            String termTokenized = termsTokenized.nextToken().trim();
+                            if (termTokenized.equalsIgnoreCase(propertyId)) {
+                                return true;
+                            }
+                        }
+                    }
+                } else {
+                    break;
                 }
-              }
             }
-          } else {
-            break;
-          }
-      }
-      return false;
-    }
-  }
-
-  private static String getSelectClause(String cmisQuery) {
-    StringTokenizer cmisQueryTokenized = new StringTokenizer(cmisQuery.trim());
-    String selectClause = StringUtils.EMPTY;
-    boolean firstTerm = true;
-    while(cmisQueryTokenized.hasMoreElements()){
-        String term = cmisQueryTokenized.nextToken();
-        if(!term.equalsIgnoreCase(FROM_TOKEN)){
-          if(firstTerm){
-            selectClause+=term;
-            firstTerm = false;
-          } else {
-            selectClause+=SEP+term;
-          }
-          
-        } else {
-          break;
+            return false;
+        }
+    }
+
+    /**
+     * @param props : list properties of a document
+     * @param rd : object that contains the properties to pass to connector
+     * @param cmisQuery : cmis query
+     */
+    public static void addValuesOfProperties(final List<Property<?>> props, RepositoryDocument rd, String cmisQuery) {
+        Map<String, String> cmisQueryColumns = CmisRepositoryConnectorUtils.getSelectMap(cmisQuery);
+        boolean isWildcardQuery = CmisRepositoryConnectorUtils.isWildcardQuery(cmisQuery);
+        addValuesOfProperty(props, isWildcardQuery, cmisQueryColumns, rd);
+    }
+
+    /**
+     * @param props : list properties of a document
+     * @param isWildcardQuery : if the query select is of type '*'
+     * @param cmisQueryColumns : selectors query
+     * @param rd : object that contains the properties to pass to connector
+     */
+    public static void addValuesOfProperty(final List<Property<?>> props, final boolean isWildcardQuery, final Map<String, String> cmisQueryColumns, RepositoryDocument rd) {
+
+        for (Property<?> property : props) {
+            String propertyId = property.getId();
+            if (isWildcardQuery || cmisQueryColumns.containsKey(propertyId)) {
+                try {
+                    addPropertyValue(property, rd);
+                } catch (Exception e) {
+                    Logging.connectors.error("Error when adding property[" + propertyId + "] msg=[" + e.getMessage() + "]", e);
+                }
+
+            }
+        }
+    }
+
+    /**
+     * @param property : the property
+     * @param propertyDefinitionType : definition of the type of property
+     * @param rd : object to which we add the association property -> value
+     * @throws Exception
+     *
+     */
+    private static void addPropertyValue(Property<?> property, RepositoryDocument rd) throws Exception {
+
+        DateTimeFormatter format = ISODateTimeFormat.dateTime();
+        PropertyDefinition<?> propertyDefinitionType = property.getDefinition();
+        PropertyType propertyType = propertyDefinitionType.getPropertyType();
+        boolean isMultiValue = (propertyDefinitionType.getCardinality() == Cardinality.MULTI);
+        String currentProperty = property.getId();
+
+        switch (propertyType) {
+
+            case STRING:
+            case ID:
+            case URI:
+            case HTML:
+                List<String> listValues = (List<String>) property.getValues();
+                if (!CollectionUtils.isEmpty(listValues)) {
+                    if (isMultiValue) {
+                        for (String htmlPropertyValue : listValues) {
+                            rd.addField(currentProperty, htmlPropertyValue);
+                        }
+                    } else {
+                        String stringValue = (String) listValues.get(0);
+                        if (StringUtils.isNotEmpty(stringValue)) {
+                            rd.addField(currentProperty, stringValue);
+                        }
+                    }
+                }
+                break;
+
+            case BOOLEAN:
+                List<Boolean> booleanPropertyValues = (List<Boolean>) property.getValues();
+                if (!CollectionUtils.isEmpty(booleanPropertyValues)) {
+                    if (isMultiValue) {
+                        for (Boolean booleanPropertyValue : booleanPropertyValues) {
+                            rd.addField(currentProperty, booleanPropertyValue.toString());
+                        }
+                    } else {
+                        Boolean booleanValue = (Boolean) booleanPropertyValues.get(0);
+                        if (booleanValue != null) {
+                            rd.addField(currentProperty, booleanValue.toString());
+                        }
+                    }
+                }
+                break;
+
+            case INTEGER:
+                List<BigInteger> integerPropertyValues = (List<BigInteger>) property.getValues();
+                if (!CollectionUtils.isEmpty(integerPropertyValues)) {
+                    if (isMultiValue) {
+                        for (BigInteger integerPropertyValue : integerPropertyValues) {
+                            rd.addField(currentProperty, integerPropertyValue.toString());
+                        }
+                    } else {
+                        BigInteger integerValue = (BigInteger) integerPropertyValues.get(0);
+                        if (integerValue != null) {
+                            rd.addField(currentProperty, integerValue.toString());
+                        }
+                    }
+                }
+                break;
+
+            case DECIMAL:
+                List<BigDecimal> decimalPropertyValues = (List<BigDecimal>) property.getValues();
+                if (!CollectionUtils.isEmpty(decimalPropertyValues)) {
+                    if (isMultiValue) {
+                        for (BigDecimal decimalPropertyValue : decimalPropertyValues) {
+                            rd.addField(currentProperty, decimalPropertyValue.toString());
+                        }
+                    } else {
+                        BigDecimal decimalValue = (BigDecimal) decimalPropertyValues.get(0);
+                        if (decimalValue != null) {
+                            rd.addField(currentProperty, decimalValue.toString());
+                        }
+                    }
+                }
+                break;
+
+            case DATETIME:
+                List<GregorianCalendar> datePropertyValues = (List<GregorianCalendar>) property.getValues();
+                if (!CollectionUtils.isEmpty(datePropertyValues)) {
+                    if (isMultiValue) {
+                        for (GregorianCalendar datePropertyValue : datePropertyValues) {
+                            rd.addField(currentProperty, format.print(datePropertyValue.getTimeInMillis()));
+                        }
+                    } else {
+                        GregorianCalendar dateValue = (GregorianCalendar) datePropertyValues.get(0);
+                        if (dateValue != null) {
+                            rd.addField(currentProperty, format.print(dateValue.getTimeInMillis()));
+                        }
+                    }
+                }
+                break;
+
+            default:
+                break;
         }
     }
-    return selectClause;
-  }
-  
+
+    private static String getSelectClause(String cmisQuery) {
+        StringTokenizer cmisQueryTokenized = new StringTokenizer(cmisQuery.trim());
+        String selectClause = StringUtils.EMPTY;
+        boolean firstTerm = true;
+        while (cmisQueryTokenized.hasMoreElements()) {
+            String term = cmisQueryTokenized.nextToken();
+            if (!term.equalsIgnoreCase(FROM_TOKEN)) {
+                if (firstTerm) {
+                    selectClause += term;
+                    firstTerm = false;
+                } else {
+                    selectClause += SEP + term;
+                }
+
+            } else {
+                break;
+            }
+        }
+        return selectClause;
+    }
+
+
+    //create a map with the field term and the alias (if present)
+    public static Map<String, String> getSelectMap(String cmisQuery) {
+        Map<String, String> cmisQueryColumns = new HashMap<>();
+        String selectClause = getSelectClause(cmisQuery.trim());
+
+        StringTokenizer cmisQueryTokenized = new StringTokenizer(selectClause.substring(SELECT_PREFIX.length()), TOKENIZER_SEP);
+        while (cmisQueryTokenized.hasMoreElements()) {
+            String term = cmisQueryTokenized.nextToken();
+            ColumnSet column = getColumnName(term);
+            cmisQueryColumns.put(column.getName(), column.getAlias());
+        }
+        return cmisQueryColumns;
+    }
+
+    //get a columset object given a term of the select clause
+    private static ColumnSet getColumnName(String orig) {
+        final String sep = " as ";
+        final int sepLen = sep.length();
+        String justColumnName = null;
+        String alias = null;
+
+        if (orig == null) {
+            return null;
+        }
+
+        justColumnName = orig.trim();
+
+        int idx = orig.indexOf(sep);
+        if (idx < 0) {
+            idx = orig.indexOf(sep.toUpperCase());
+        }
+
+        if (idx > 1) {
+            alias = orig.substring(idx + sepLen).trim();
+            justColumnName = orig.substring(0, idx).trim();
+        }
+
+        // Now we identify the column name and the prefix as alias if it's null,
+        idx = justColumnName.indexOf(".");
+        if(idx > 0){
+            justColumnName = justColumnName.substring(idx + 1);
+        }
+
+        if (alias == null) {
+            alias = justColumnName;
+        }
+
+        return new ColumnSet(justColumnName, alias);
+    }
+
+    //check if the query is a select *
+    public static boolean isWildcardQuery(String selectClause) {
+        return selectClause.toLowerCase().startsWith(SELECT_STAR_CLAUSE);
+    }
 }
\ No newline at end of file

Added: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java?rev=1705809&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java (added)
+++ manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java Tue Sep 29 08:05:40 2015
@@ -0,0 +1,61 @@
+/* $Id$ */
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.manifoldcf.crawler.connectors.cmis;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 
+ * @author Piergiorgio Lucidi
+ *
+ */
+public class ColumnSet {
+
+    private String name = StringUtils.EMPTY;
+    private String alias = StringUtils.EMPTY;
+
+    public ColumnSet() {}
+
+    public ColumnSet(String name, String alias) {
+        this.name = name;
+        this.alias = alias;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    @Override
+    public String toString() {
+        return "ColumnSet{name=" + name + ", alias=" + alias + '}';
+    }
+
+}

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/cmis/ColumnSet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/BaseITHSQLDB.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/BaseITHSQLDB.java?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/BaseITHSQLDB.java (original)
+++ manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/BaseITHSQLDB.java Tue Sep 29 08:05:40 2015
@@ -18,7 +18,6 @@
 */
 package org.apache.manifoldcf.crawler.connectors.cmis.tests;
 
-import org.apache.manifoldcf.crawler.system.ManifoldCF;
 import org.junit.After;
 import org.junit.Before;
 

Added: manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java?rev=1705809&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java (added)
+++ manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java Tue Sep 29 08:05:40 2015
@@ -0,0 +1,14 @@
+package org.apache.manifoldcf.crawler.connectors.cmis.tests;
+
+import org.apache.manifoldcf.crawler.connectors.cmis.CmisRepositoryConnectorUtils;
+
+public class CheckObjectIDTest {
+
+  public static void main(String[] args) {
+    String cmisQuery = " select cmis:name from cmis:folder where cmis:name='Colacem'";
+    cmisQuery = CmisRepositoryConnectorUtils.getCmisQueryWithObjectId(cmisQuery);
+    System.out.println(cmisQuery);
+    System.exit(0);
+  }
+  
+}

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: manifoldcf/trunk/connectors/cmis/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/cmis/tests/CheckObjectIDTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: manifoldcf/trunk/connectors/cmis/pom.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/cmis/pom.xml?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/cmis/pom.xml (original)
+++ manifoldcf/trunk/connectors/cmis/pom.xml Tue Sep 29 08:05:40 2015
@@ -131,7 +131,7 @@
                 <artifactItem>
                   <groupId>org.apache.chemistry.opencmis</groupId>
                   <artifactId>chemistry-opencmis-server-inmemory</artifactId>
-                  <version>0.11.0</version>
+                  <version>0.13.0</version>
                   <type>war</type>
                   <overWrite>false</overWrite>
                   <destFileName>chemistry-opencmis-server-inmemory.war</destFileName>
@@ -193,6 +193,39 @@
       </plugin>
 
     </plugins>
+    <pluginManagement>
+    	<plugins>
+    		<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+    		<plugin>
+    			<groupId>org.eclipse.m2e</groupId>
+    			<artifactId>lifecycle-mapping</artifactId>
+    			<version>1.0.0</version>
+    			<configuration>
+    				<lifecycleMappingMetadata>
+    					<pluginExecutions>
+    						<pluginExecution>
+    							<pluginExecutionFilter>
+    								<groupId>org.codehaus.mojo</groupId>
+    								<artifactId>
+    									native2ascii-maven-plugin
+    								</artifactId>
+    								<versionRange>
+    									[1.0-beta-1,)
+    								</versionRange>
+    								<goals>
+    									<goal>native2ascii</goal>
+    								</goals>
+    							</pluginExecutionFilter>
+    							<action>
+    								<ignore></ignore>
+    							</action>
+    						</pluginExecution>
+    					</pluginExecutions>
+    				</lifecycleMappingMetadata>
+    			</configuration>
+    		</plugin>
+    	</plugins>
+    </pluginManagement>
   </build>
 
   <dependencies>
@@ -224,7 +257,7 @@
     <dependency>
         <groupId>org.apache.chemistry.opencmis</groupId>
         <artifactId>chemistry-opencmis-client-impl</artifactId>
-        <version>0.11.0</version>
+        <version>0.13.0</version>
      </dependency>
      <dependency>
         <groupId>commons-lang</groupId>
@@ -236,6 +269,11 @@
         <artifactId>commons-io</artifactId>
         <version>${commons-io.version}</version>
     </dependency>
+    <dependency>
+		  <groupId>joda-time</groupId>
+		  <artifactId>joda-time</artifactId>
+		  <version>2.8.1</version>
+    </dependency>
     
     <!-- Test scope -->
     <dependency>
@@ -269,7 +307,7 @@
     <dependency>
       <groupId>org.apache.chemistry.opencmis</groupId>
       <artifactId>chemistry-opencmis-server-inmemory</artifactId>
-      <version>0.11.0</version>
+      <version>0.13.0</version>
       <type>war</type>
       <scope>test</scope>
     </dependency>

Modified: manifoldcf/trunk/framework/jetty-runner/src/main/resources/connectors.xml
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/jetty-runner/src/main/resources/connectors.xml?rev=1705809&r1=1705808&r2=1705809&view=diff
==============================================================================
--- manifoldcf/trunk/framework/jetty-runner/src/main/resources/connectors.xml (original)
+++ manifoldcf/trunk/framework/jetty-runner/src/main/resources/connectors.xml Tue Sep 29 08:05:40 2015
@@ -28,7 +28,7 @@
   <outputconnector name="MetaCarta GTS" class="org.apache.manifoldcf.agents.output.gts.GTSConnector"/>
     <!-- Add your authority connectors here -->
   <authorityconnector name="Null" class="org.apache.manifoldcf.authorities.authorities.nullauthority.NullAuthority"/>
-  <authorityconnector name="CMIS" class="org.apache.manifoldcf.crawler.connectors.cmis.CmisAuthorityConnector"/>
+  <authorityconnector name="CMIS" class="org.apache.manifoldcf.authorities.authorities.cmis.CmisAuthorityConnector"/>
   <authorityconnector name="Active Directory" class="org.apache.manifoldcf.authorities.authorities.activedirectory.ActiveDirectoryAuthority"/>
     <!-- Add your repository connectors here -->
   <repositoryconnector name="Web" class="org.apache.manifoldcf.crawler.connectors.webcrawler.WebcrawlerConnector"/>