Author: kwright
Date: Tue Sep 24 09:12:44 2013
New Revision: 1525821

URL: http://svn.apache.org/r1525821
Log:
Clean up connector further; no longer require document or list guid lookup in 
documents or list items, and reduce number of documents processed at once to 1.

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=1525821&r1=1525820&r2=1525821&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 Sep 24 09:12:44 2013
@@ -356,8 +356,8 @@ public class SharePointRepository extend
   @Override
   public int getMaxDocumentRequest()
   {
-    // Since we pick up acls on a per-lib basis, it helps to have this bigger 
than 1.
-    return 10;
+    // Since we went to a carrydown-based implementation, having this greater 
than 1 does not help.
+    return 1;
   }
 
   /** Test the connection.  Returns a string describing the connection 
integrity.
@@ -765,6 +765,8 @@ public class SharePointRepository extend
                 String[] denyTokens = 
activities.retrieveParentData(documentIdentifier, "denyTokens");
                 String[] listIDs = 
activities.retrieveParentData(documentIdentifier, "guids");
                 String[] listFields = 
activities.retrieveParentData(documentIdentifier, "fields");
+                // Grab the ID from the carrydown data; it's needed to find 
the attachments.
+                String[] ids = 
activities.retrieveParentData(documentIdentifier, "ids");
 
                 String listID;
                 if (listIDs.length >= 1)
@@ -772,7 +774,13 @@ public class SharePointRepository extend
                 else
                   listID = null;
 
-                if (listID != null)
+                String id;
+                if (ids.length >= 1)
+                  id = ids[0];
+                else
+                  id = null;
+
+                if (listID != null && id != null)
                 {
                   String[] sortedMetadataFields = 
getInterestingFieldSetSorted(metadataInfo,listFields);
                   
@@ -808,6 +816,7 @@ public class SharePointRepository extend
                     packList(sb,denyTokens,'+');
                     packDate(sb,modifiedDateValue);
                     packDate(sb,createdDateValue);
+                    pack(sb,id,'+');
                     // The rest of this is unparseable
                     sb.append(versionToken);
                     sb.append(pathNameAttributeVersion);
@@ -949,7 +958,7 @@ public class SharePointRepository extend
           }
           else
           {
-            // Document path!
+            // == Document path ==
             // Convert the modified document path to an unmodified one, plus a 
library path.
             String decodedLibPath = 
documentIdentifier.substring(0,dLibSeparatorIndex);
             String decodedDocumentPath = decodedLibPath + 
documentIdentifier.substring(dLibSeparatorIndex+1);
@@ -1192,9 +1201,6 @@ public class SharePointRepository extend
     // Decode the system metadata part of the specification
     SystemMetadataDescription sDesc = new SystemMetadataDescription(spec);
 
-    Map<String,String> docLibIDMap = new HashMap<String,String>();
-    Map<String,String> listIDMap = new HashMap<String,String>();
-
     int i = 0;
     while (i < documentIdentifiers.length)
     {
@@ -1326,6 +1332,7 @@ public class SharePointRepository extend
               startPosition = unpackList(acls,version,startPosition,'+');
               startPosition = unpackList(denyAcls,version,startPosition,'+');
 
+              // Dates
               Date modifiedDate = new Date(0L);
               startPosition = unpackDate(version,startPosition,modifiedDate);
               if (modifiedDate.getTime() == 0L)
@@ -1335,38 +1342,34 @@ public class SharePointRepository extend
               if (createdDate.getTime() == 0L)
                 createdDate = null;
 
+              // ID (for looking up attachments)
+              StringBuilder idBuffer = new StringBuilder();
+              startPosition = unpack(idBuffer,version,startPosition,'+');
+
+              // We need the list ID, which we've already fetched, so grab 
that from the parent data.
+              String[] listIDs = 
activities.retrieveParentData(documentIdentifier, "guids");
+
+              String listID;
+              if (listIDs.length >= 1)
+                listID = listIDs[0];
+              else
+                listID = null;
+
+              if (listID == null)
+              {
+                if (Logging.connectors.isDebugEnabled())
+                  Logging.connectors.debug("SharePoint: List 
'"+decodedListPath+"' no longer exists - deleting item 
'"+documentIdentifier+"'");
+                activities.deleteDocument(documentIdentifier,version);
+                i++;
+                continue;
+              }
+
               // Now, do any queuing that is needed.
               if (attachmentsSupported)
               {
-                String itemID = itemAndAttachment.substring(1);
-                String listID = listIDMap.get(decodedListPath);
-                if (listID == null)
-                {
-                  listID = proxy.getListID( encodePath(site), site, listName );
-                  if (listID == null)
-                    listID = "";
-                  listIDMap.put(decodedListPath,listID);
-                }
-  
-                if (listID.length() == 0)
-                {
-                  if (Logging.connectors.isDebugEnabled())
-                    Logging.connectors.debug("SharePoint: List 
'"+decodedListPath+"' no longer exists - deleting item 
'"+documentIdentifier+"'");
-                  activities.deleteDocument(documentIdentifier,version);
-                  i++;
-                  continue;
-                }
+                String itemNumber = idBuffer.toString();
+
 
-                // Get the attachment names
-                // MHL: need to get the item number from somewhere
-                // This is a hack to see if everything else works.
-                int undIndex = itemID.indexOf("_");
-                String itemNumber;
-                if (undIndex != -1)
-                  itemNumber = itemID.substring(0,undIndex);
-                else
-                  itemNumber = itemID;
-                
                 List<NameValue> attachmentNames = proxy.getAttachmentNames( 
site, listID, itemNumber );
                 // Now, queue up each attachment as a separate entry
                 for (NameValue attachmentName : attachmentNames)
@@ -1416,24 +1419,6 @@ public class SharePointRepository extend
                 Map<String,String> metadataValues = null;
                 if (metadataDescription.size() > 0)
                 {
-                  String listID = listIDMap.get(decodedListPath);
-                  if (listID == null)
-                  {
-                    listID = proxy.getListID( encodePath(site), site, listName 
);
-                    if (listID == null)
-                      listID = "";
-                    listIDMap.put(decodedListPath,listID);
-                  }
-
-                  if (listID.length() == 0)
-                  {
-                    if (Logging.connectors.isDebugEnabled())
-                      Logging.connectors.debug("SharePoint: List 
'"+decodedListPath+"' no longer exists - deleting item 
'"+documentIdentifier+"'");
-                    activities.deleteDocument(documentIdentifier,version);
-                    i++;
-                    continue;
-                  }
-
                   metadataValues = proxy.getFieldValues( metadataDescription, 
encodePath(site), listID, "/Lists/" + decodedItemPath.substring(listCutoff+1), 
dspStsWorks );
                   if (metadataValues == null)
                   {
@@ -1668,16 +1653,16 @@ public class SharePointRepository extend
               Map<String,String> metadataValues = null;
               if (metadataDescription.size() > 0)
               {
-                String documentLibID = docLibIDMap.get(decodedLibPath);
-                if (documentLibID == null)
-                {
-                  documentLibID = proxy.getDocLibID( encodePath(site), site, 
libName );
-                  if (documentLibID == null)
-                    documentLibID = "";
-                  docLibIDMap.put(decodedLibPath,documentLibID);
-                }
+                // Retrieve the library guid from carrydown data
+                String[] libIDs = 
activities.retrieveParentData(documentIdentifier, "guids");
+
+                String documentLibID;
+                if (libIDs.length >= 1)
+                  documentLibID = libIDs[0];
+                else
+                  documentLibID = null;
 
-                if (documentLibID.length() == 0)
+                if (documentLibID == null)
                 {
                   if (Logging.connectors.isDebugEnabled())
                     Logging.connectors.debug("SharePoint: Library 
'"+decodedLibPath+"' no longer exists - deleting document 
'"+documentIdentifier+"'");
@@ -2169,7 +2154,7 @@ public class SharePointRepository extend
     }
   }
   
-  protected final static String[] listItemStreamDataNames = new 
String[]{"accessTokens", "denyTokens", "guids", "fields"};
+  protected final static String[] listItemStreamDataNames = new 
String[]{"accessTokens", "denyTokens", "guids", "fields", "ids"};
 
   protected class ListItemStream implements IFileStream
   {
@@ -2228,7 +2213,27 @@ public class SharePointRepository extend
               // Since the processing for a item needs to know the list path, 
we need a way to signal the cutoff between list and item levels.
               // The way I've chosen to do this is to use a triple slash at 
that point, as a separator.
               String modifiedPath = relPath.substring(0,siteListPath.length()) 
+ "//" + relPath.substring(siteListPath.length());
+              
+              // Evil hack!!!
+              // Come up with the ID based on the URL.  This SHOULD come from 
SharePoint via addFile, above, but
+              // this requires a new release of the plugin for SharePoint 
2010, and SPSProxyHelper revision and testing on SharePoint 2007.
+              String itemRef = relPath.substring(siteListPath.length());
+              String itemID;
+              if (itemRef.length() > 1)
+              {
+                int undIndex = itemRef.indexOf("_",1);
+                if (undIndex != -1)
+                  itemID = itemRef.substring(1,undIndex);
+                else
+                  itemID = itemRef.substring(1);
+              }
+              else
+                itemID = null;
 
+              if (itemID == null)
+                dataValues[4] = new String[0];
+              else
+                dataValues[4] = new String[]{itemID};
               activities.addDocumentReference( modifiedPath, 
documentIdentifier, null, listItemStreamDataNames, dataValues );
             }
             else


Reply via email to