You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/03/05 09:47:54 UTC

svn commit: r1452696 - /manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java

Author: kwright
Date: Tue Mar  5 08:47:54 2013
New Revision: 1452696

URL: http://svn.apache.org/r1452696
Log:
Add support for common created and modified dates to SharePoint connector.

Modified:
    manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java

Modified: manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java?rev=1452696&r1=1452695&r2=1452696&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java (original)
+++ manifoldcf/trunk/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java Tue Mar  5 08:47:54 2013
@@ -27,6 +27,7 @@ import org.apache.manifoldcf.core.common
 import org.apache.manifoldcf.core.extmimemap.ExtensionMimeMap;
 
 import java.io.*;
+import java.util.Date;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -769,15 +770,23 @@ public class SharePointRepository extend
                   // Next, get the actual timestamp field for the file.
                   ArrayList metadataDescription = new ArrayList();
                   metadataDescription.add("Modified");
+                  metadataDescription.add("Created");
                   // The document path includes the library, with no leading slash, and is decoded.
                   int cutoff = decodedListPath.lastIndexOf("/");
                   String decodedItemPathWithoutSite = decodedItemPath.substring(cutoff+1);
                   Map values = proxy.getFieldValues( metadataDescription, encodedSitePath, listID, "/Lists/" + decodedItemPathWithoutSite, dspStsWorks );
-                  String modifyDate = (String)values.get("Modified");
-                  if (modifyDate != null)
+                  String modifiedDate = (String)values.get("Modified");
+                  String createdDate = (String)values.get("Created");
+                  if (modifiedDate != null)
                   {
+                    // Item has a modified date so we presume it exists.
+                    
+                    Date modifiedDateValue = parseDate(modifiedDate);
+                    Date createdDateValue = parseDate(createdDate);
+                    
                     // Build version string
-                    String versionToken = modifyDate;
+                    String versionToken = modifiedDate;
+                    
                     // Revamped version string on 11/8/2006 to make parseability better
 
                     StringBuilder sb = new StringBuilder();
@@ -817,6 +826,8 @@ public class SharePointRepository extend
                       sb.append('-');
                     if (foundAcls)
                     {
+                      packDate(sb,modifiedDateValue);
+                      packDate(sb,createdDateValue);
                       // The rest of this is unparseable
                       sb.append(versionToken);
                       sb.append(pathNameAttributeVersion);
@@ -914,13 +925,23 @@ public class SharePointRepository extend
                   // Next, get the actual timestamp field for the file.
                   ArrayList metadataDescription = new ArrayList();
                   metadataDescription.add("Last_x0020_Modified");
+                  metadataDescription.add("Modified");
+                  metadataDescription.add("Created");
                   // The document path includes the library, with no leading slash, and is decoded.
                   int cutoff = decodedLibPath.lastIndexOf("/");
                   String decodedDocumentPathWithoutSite = decodedDocumentPath.substring(cutoff+1);
                   Map values = proxy.getFieldValues( metadataDescription, encodedSitePath, libID, decodedDocumentPathWithoutSite, dspStsWorks );
+
+                  String modifiedDate = (String)values.get("Modified");
+                  String createdDate = (String)values.get("Created");
+                  
                   String modifyDate = (String)values.get("Last_x0020_Modified");
                   if (modifyDate != null)
                   {
+                    // Item has a modified date, so we presume it exists
+                    Date modifiedDateValue = parseDate(modifiedDate);
+                    Date createdDateValue = parseDate(createdDate);
+
                     // Build version string
                     String versionToken = modifyDate;
                     // Revamped version string on 11/8/2006 to make parseability better
@@ -980,6 +1001,8 @@ public class SharePointRepository extend
                       sb.append('-');
                     if (foundAcls)
                     {
+                      packDate(sb,modifiedDateValue);
+                      packDate(sb,createdDateValue);
                       // The rest of this is unparseable
                       sb.append(versionToken);
                       sb.append(pathNameAttributeVersion);
@@ -1050,6 +1073,49 @@ public class SharePointRepository extend
     return rval;
   }
 
+  protected static void packDate(StringBuilder sb, Date dateValue)
+  {
+    if (dateValue != null)
+    {
+      sb.append("+");
+      pack(sb,new Long(dateValue.getTime()).toString(),'+');
+    }
+    else
+      sb.append("-");
+  }
+
+  protected static int unpackDate(String value, int index, Date theDate)
+  {
+    if (value.length() > index)
+    {
+      if (value.charAt(index++) == '+')
+      {
+        StringBuilder sb = new StringBuilder();
+        index = unpack(sb,value,index,'+');
+        if (sb.length() > 0)
+        {
+          theDate.setTime(new Long(sb.toString()).longValue());
+        }
+      }
+    }
+    return index;
+  }
+  
+  protected static Date parseDate(String dateTimeValue)
+  {
+    if (dateTimeValue == null)
+      return null;
+    java.text.DateFormat iso8601Format = new java.text.SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ssZ");
+    try
+    {
+      return iso8601Format.parse(dateTimeValue);
+    }
+    catch (java.text.ParseException e)
+    {
+      return null;
+    }
+  }
+  
   protected String[] lookupAccessTokensSorted(String encodedSitePath, String guid, Map<String,String[]> ACLmap)
     throws ManifoldCFException, ServiceInterruption
   {
@@ -1238,6 +1304,15 @@ public class SharePointRepository extend
                 }
               }
 
+              Date modifiedDate = new Date(0L);
+              startPosition = unpackDate(version,startPosition,modifiedDate);
+              if (modifiedDate.getTime() == 0L)
+                modifiedDate = null;
+              Date createdDate = new Date(0L);
+              startPosition = unpackDate(version,startPosition,createdDate);
+              if (createdDate.getTime() == 0L)
+                createdDate = null;
+              
               // Generate the URL we are going to use
               String itemUrl = fileBaseUrl + encodedItemPath;
               if (Logging.connectors.isDebugEnabled())
@@ -1251,6 +1326,11 @@ public class SharePointRepository extend
                   RepositoryDocument data = new RepositoryDocument();
                   data.setBinary( is, 0L );
 
+                  if (modifiedDate != null)
+                    data.setModifiedDate(modifiedDate);
+                  if (createdDate != null)
+                    data.setCreatedDate(createdDate);
+                  
                   setDataACLs(data,acls,denyAcl);
                   
                   setPathAttribute(data,sDesc,documentIdentifier);
@@ -1394,7 +1474,15 @@ public class SharePointRepository extend
                 }
               }
 
-
+              Date modifiedDate = new Date(0L);
+              startPosition = unpackDate(version,startPosition,modifiedDate);
+              if (modifiedDate.getTime() == 0L)
+                modifiedDate = null;
+              Date createdDate = new Date(0L);
+              startPosition = unpackDate(version,startPosition,createdDate);
+              if (createdDate.getTime() == 0L)
+                createdDate = null;
+              
               // Generate the URL we are going to use
               String fileUrl = fileBaseUrl + encodedDocumentPath;
               if (Logging.connectors.isDebugEnabled())
@@ -1534,6 +1622,11 @@ public class SharePointRepository extend
 
                       setPathAttribute(data,sDesc,documentIdentifier);
                       
+                      if (modifiedDate != null)
+                        data.setModifiedDate(modifiedDate);
+                      if (createdDate != null)
+                        data.setCreatedDate(createdDate);
+
                       // Retrieve field values from SharePoint
                       if (metadataDescription.size() > 0)
                       {