Code that transports display URL through to list item indexing

git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/branches/CONNECTORS-813@1544011 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/IFileStream.java b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/IFileStream.java
index 1b67fb1..97355de 100644
--- a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/IFileStream.java
+++ b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/IFileStream.java
@@ -20,6 +20,6 @@
 
 public interface IFileStream
 {
-  public void addFile(String relPath)
+  public void addFile(String relPath, String displayURI)
     throws ManifoldCFException;
 }
diff --git a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
index 87a8fd6..39d37b1 100644
--- a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
+++ b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
@@ -589,7 +589,7 @@
           Object node = nodeDocs.get(j);
           Logging.connectors.debug( node.toString() );
           String relPath = docs.getData( docs.getElement( node, "FileRef" ) );
-          fileStream.addFile( relPath );
+          fileStream.addFile( relPath, null );
         }
       }
       else
@@ -634,7 +634,8 @@
                 {
                   resultCount++;
                   String relPath = result.getAttribute("FileRef");
-                  fileStream.addFile( relPath );
+                  String displayURL = result.getAttribute("ListItemURL");
+                  fileStream.addFile( relPath, displayURL );
                 }
               }
               
diff --git a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java
index 74af464..c0a5225 100644
--- a/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java
+++ b/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java
@@ -782,13 +782,20 @@
                 String[] denyTokens = activities.retrieveParentData(documentIdentifier, "denyTokens");
                 String[] listIDs = activities.retrieveParentData(documentIdentifier, "guids");
                 String[] listFields = activities.retrieveParentData(documentIdentifier, "fields");
-
+                String[] displayURLs = activities.retrieveParentData(documentIdentifier, "displayURLs");
+                
                 String listID;
                 if (listIDs.length >= 1)
                   listID = listIDs[0];
                 else
                   listID = null;
 
+                String displayURL;
+                if (displayURLs.length >= 1)
+                  displayURL = displayURLs[0];
+                else
+                  displayURL = null;
+
                 if (listID != null)
                 {
                   String[] sortedMetadataFields = getInterestingFieldSetSorted(metadataInfo,listFields);
@@ -803,7 +810,6 @@
                   metadataDescription.add("Created");
                   metadataDescription.add("ID");
                   metadataDescription.add("GUID");
-                  metadataDescription.add("EncodedAbsUrl");
                   // The document path includes the library, with no leading slash, and is decoded.
                   String decodedItemPathWithoutSite = decodedItemPath.substring(cutoff+1);
                   Map<String,String> values = proxy.getFieldValues( metadataDescription, encodedSitePath, listID, "/Lists/" + decodedItemPathWithoutSite, dspStsWorks );
@@ -811,7 +817,6 @@
                   String createdDate = values.get("Created");
                   String id = values.get("ID");
                   String guid = values.get("GUID");
-                  String absURL = values.get("EncodedAbsUrl");
                   if (modifiedDate != null)
                   {
                     // Item has a modified date so we presume it exists.
@@ -833,7 +838,7 @@
                     packDate(sb,createdDateValue);
                     pack(sb,id,'+');
                     pack(sb,guid,'+');
-                    pack(sb,absURL,'+');
+                    pack(sb,displayURL,'+');
                     // The rest of this is unparseable
                     sb.append(versionToken);
                     sb.append(pathNameAttributeVersion);
@@ -1374,9 +1379,9 @@
               String guid = guidBuffer.toString();
               
               // List item URL
-              StringBuilder absURLBuffer = new StringBuilder();
-              startPosition = unpack(absURLBuffer,version,startPosition,'+');
-              String absURL = absURLBuffer.toString();
+              StringBuilder relURLBuffer = new StringBuilder();
+              startPosition = unpack(relURLBuffer,version,startPosition,'+');
+              String relURL = relURLBuffer.toString();
               
               // We need the list ID, which we've already fetched, so grab that from the parent data.
               String[] listIDs = activities.retrieveParentData(documentIdentifier, "guids");
@@ -1441,9 +1446,9 @@
                 // Convert the modified document path to an unmodified one, plus a library path.
                 String encodedItemPath = encodePath(decodedListPath.substring(0,listCutoff) + "/Lists/" + decodedItemPath.substring(listCutoff+1));
                 
-                
                 // Generate the URL we are going to use
-                String itemUrl = fileBaseUrl + encodedItemPath;
+                String itemUrl = fileBaseUrl + relURL;  //fileBaseUrl + encodedItemPath;
+                
                 if (Logging.connectors.isDebugEnabled())
                   Logging.connectors.debug( "SharePoint: Processing list item '"+documentIdentifier+"'; url: '" + itemUrl + "'" );
 
@@ -1492,7 +1497,7 @@
                     }
                     data.addField("GUID",guid);
                     
-                    activities.ingestDocument( documentIdentifier, version, absURL , data );
+                    activities.ingestDocument( documentIdentifier, version, itemUrl , data );
                   }
                   finally
                   {
@@ -2179,7 +2184,8 @@
       this.dataValues[3] = fields;
     }
     
-    public void addFile(String relPath)
+    @Override
+    public void addFile(String relPath, String displayURL)
       throws ManifoldCFException
     {
 
@@ -2217,7 +2223,7 @@
     }
   }
   
-  protected final static String[] listItemStreamDataNames = new String[]{"accessTokens", "denyTokens", "guids", "fields"};
+  protected final static String[] listItemStreamDataNames = new String[]{"accessTokens", "denyTokens", "guids", "fields", "displayURLs"};
 
   protected class ListItemStream implements IFileStream
   {
@@ -2247,7 +2253,8 @@
       this.dataValues[3] = fields;
     }
     
-    public void addFile(String relPath)
+    @Override
+    public void addFile(String relPath, String displayURL)
       throws ManifoldCFException
     {
       // First, convert the relative path to a full path
@@ -2256,6 +2263,8 @@
         relPath = rootPath + sitePath + "/" + relPath;
       }
 
+      String fullPath = relPath;
+
       // Now, strip away what we don't want - namely, the root path.  This makes the path relative to the root.
       if ( relPath.startsWith(rootPath) )
       {
@@ -2277,6 +2286,11 @@
                 // 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());
                 
+                if (displayURL != null)
+                  dataValues[4] = new String[]{displayURL};
+                else
+                  dataValues[4] = new String[]{fullPath};
+
                 activities.addDocumentReference( modifiedPath, documentIdentifier, null, listItemStreamDataNames, dataValues );
               }
               else