manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r1359653 - /manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
Date Tue, 10 Jul 2012 13:08:05 GMT
Author: kwright
Date: Tue Jul 10 13:08:05 2012
New Revision: 1359653

URL: http://svn.apache.org/viewvc?rev=1359653&view=rev
Log:
Add first try at code that fetches attributes for a document

Modified:
    manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java

Modified: manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java?rev=1359653&r1=1359652&r2=1359653&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
(original)
+++ manifoldcf/branches/CONNECTORS-470/connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SPSProxyHelper.java
Tue Jul 10 13:08:05 2012
@@ -1663,42 +1663,63 @@ public class SPSProxyHelper {
         // Sharepoint 2010; use Lists service instead
         ListsWS lservice = new ListsWS(baseUrl + site, userName, password, myFactory, configuration,
connectionManager );
         ListsSoapStub stub1 = (ListsSoapStub)lservice.getListsSoapHandler();
-        GetListItemsQuery q = new GetListItemsQuery();
-
-        // MHL - we need to specify the actual document ID in the query somehow.
-        // The docId variable contains the document ID, which is of the exact same form as
was returned as the last segment in the relpath,
-        // so in theory we can iterate through the contents of the library each time looking
for the info.  But this is horrendously expensive.
-        
-        // Alternatively, we can change the flow through the entire connector to instead
encode the metadata information in the version string,
-        // since the metadata values are all available then.  Right now, only the metadata
names are placed in the version string; the values would
-        // have to be added.  This will work, but means a version string format change.
-        
-        // We could also decide what to put in the version string based on whether there's
a working dspsts service or not.  But I'm a bit
-        // unhappy with this answer because the connector's data is incompatible across changes
in the configuration info.
         
-        // To get this working as currently spec'd, see http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems%28v=office.12%29.aspx.
-        // It looks like you can specify the ID of the document as search criteria, and even
page through the results.  The query is in XML form.
-        
-        GetListItemsResponseGetListItemsResult items =  stub1.getListItems(docLibrary, "",
null, null, "1", null, site);
+        GetListItemsQuery q = buildMatchQuery("FileRef","Text",docId);
+        GetListItemsViewFields viewFields = buildViewFields(fieldNames);
+
+        GetListItemsResponseGetListItemsResult items =  stub1.getListItems(docLibrary, "",
q, viewFields, "1", null, site);
         if (items == null)
           return result;
 
-        org.apache.axis.message.MessageElement[] list = items.get_any();
+        MessageElement[] list = items.get_any();
 
-        if (Logging.connectors.isInfoEnabled())
-        {
-          Logging.connectors.info("SharePoint: getListItems xml response: '" + list[0].toString()
+ "'");
+        if (Logging.connectors.isInfoEnabled()){
+          Logging.connectors.info("SharePoint: getListItems for '"+docId+"' xml response:
'" + list[0].toString() + "'");
         }
 
-        // MHL to parse the result
-
         ArrayList nodeList = new ArrayList();
-
         XMLDoc doc = new XMLDoc(list[0].toString());
 
+        doc.processPath(nodeList, "*", null);
+        if (nodeList.size() != 1)
+          throw new ManifoldCFException("Bad xml - expecting one outer 'ns1:listitems' node
- there are " + Integer.toString(nodeList.size()) + " nodes");
+
+        Object parent = nodeList.get(0);
+        if (!"ns1:listitems".equals(doc.getNodeName(parent)))
+          throw new ManifoldCFException("Bad xml - outer node is not 'ns1:listitems'");
+
+        nodeList.clear();
+        doc.processPath(nodeList, "*", parent);
 
-        // MHL
+        if (nodeList.size() != 1)
+          throw new ManifoldCFException("Expected rsdata result but no results found.");
 
+        Object rsData = nodeList.get(0);
+
+        int itemCount = Integer.parseInt(doc.getValue(rsData, "ItemCount"));
+        if (itemCount == 0)
+          return result;
+          
+        // Now, extract the files from the response document
+        ArrayList nodeDocs = new ArrayList();
+
+        doc.processPath(nodeDocs, "*", rsData);
+
+        if (nodeDocs.size() != itemCount)
+          throw new ManifoldCFException("itemCount does not match with nodeDocs.size()");
+
+        if (itemCount != 1)
+          throw new ManifoldCFException("Expecting only one item, instead saw '"+itemCount+"'");
+        
+        Object o = nodeDocs.get(0);
+        
+        // Look for all the specified attributes in the record
+        for (Object attrName : fieldNames)
+        {
+          String attrValue = doc.getValue(o,"ows_"+(String)attrName);
+          if (attrValue != null)
+            result.put(attrName,attrValue);
+        }
       }
 
       return result;



Mime
View raw message