You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by rh...@apache.org on 2015/03/13 09:26:02 UTC

svn commit: r1666371 - in /manifoldcf/branches/CONNECTORS-1168/connectors/searchblox: ./ connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/ connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/

Author: rharo
Date: Fri Mar 13 08:26:02 2015
New Revision: 1666371

URL: http://svn.apache.org/r1666371
Log:
Updated SearchBlox Document Test and Fixed Bug for deletion

Modified:
    manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/SearchBloxDocument.java
    manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/SearchBloxDocumentTest.java
    manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/pom.xml

Modified: manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/SearchBloxDocument.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/SearchBloxDocument.java?rev=1666371&r1=1666370&r2=1666371&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/SearchBloxDocument.java (original)
+++ manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/main/java/org/apache/manifoldcf/agents/output/searchblox/SearchBloxDocument.java Fri Mar 13 08:26:02 2015
@@ -60,14 +60,13 @@ public class SearchBloxDocument {
 		ADD_UPDATE, DELETE, STATUS, CREATE, CLEAR
 	}
     static final List<String> xmlElements= Lists.newArrayList("searchblox","document","url","title","keywords","content","description","lastmodified","size",
-            "alpha","contenttype","category","meta","acl","uid");
+            "alpha","contenttype","category","meta","uid");
 
 	static final String COLNAME_ATTRIBUTE = "colname";
 	static final String APIKEY_ATTRIBUTE = "apikey";
 	static final String NAME_ATTRIBUTE = "name";
-	static final String LOCATION_ATTRIBUTE = "location";
+	static final String UID_ATTRIBUTE = "uid";
 	static final String BOOST_ATTRIBUTE = "boost";
-	static final String ACL_TYPE_ATTRIBUTE = "boost";
 
 	private Multimap<String, Object> data_fields = HashMultimap.create();
 
@@ -151,21 +150,20 @@ public class SearchBloxDocument {
 								+ name, e);
 			}
 		}
-		data_fields.put(xmlElements.get(12), metadata);
 
-		// ACLS
-		Multimap<String, String> acls = HashMultimap.create();
+		// ACLS must be stored as metadata, as Searchblox use that construct to index custom named fields
+        //the approach has been implemented and tested live
 		Iterator<String> aclTypes = rd.securityTypesIterator();
 		while (aclTypes.hasNext()) {
 			String aclType = aclTypes.next();
-			String[] tokens = rd.getSecurityACL(aclType);
-			for (String token : tokens)
-				acls.put(aclType, token);
-			tokens = rd.getSecurityDenyACL(aclType);
-			for (String token : tokens)
-				acls.put(aclType, token);
+			String[] allow_tokens = rd.getSecurityACL(aclType);
+			for (String token : allow_tokens)
+				metadata.put(aclType+"_allow", token);
+            String[] deny_tokens = rd.getSecurityDenyACL(aclType);
+            for (String token : deny_tokens)
+                metadata.put(aclType+"_deny", token);
 		}
-		data_fields.put(xmlElements.get(13), acls);
+        data_fields.put(xmlElements.get(12), metadata);
 	}
 
     /**
@@ -208,26 +206,20 @@ public class SearchBloxDocument {
 			throw new SearchBloxException(
 					"The Collection Name of the SearchBlox Server CAN'T be NULL");
 		document.setAttribute(COLNAME_ATTRIBUTE, colName);
+        if(action == DocumentAction.DELETE)
+            document.setAttribute(UID_ATTRIBUTE,uid);
 		root.appendChild(document);
 
-        // Uid
-        if (uid != null && !uid.isEmpty()) {
-            Element uidElement = doc.createElement(xmlElements.get(14));
-            uidElement.setTextContent(uid);
-            document.appendChild(uidElement);
-        }
-
 		if (action == DocumentAction.ADD_UPDATE) {
-			// Location
-			Collection<Object> location = data_fields.get(LOCATION_ATTRIBUTE);
-			if (location != null && !location.isEmpty()) {
-				document.setAttribute(LOCATION_ATTRIBUTE, (String) location.iterator().next());
-			}else{
-				document.setAttribute(LOCATION_ATTRIBUTE, "");
-			}
-				
+            // Uid
+            if (uid != null && !uid.isEmpty()) {
+                Element uidElement = doc.createElement(xmlElements.get(13));
+                uidElement.setTextContent(uid);
+                document.appendChild(uidElement);
+            }
+
             for(String element:xmlElements){
-                if (!element.equals(xmlElements.get(12)) && !element.equals(xmlElements.get(13)) ) {
+                if (!element.equals(xmlElements.get(12))) {
                     Collection<Object> values = data_fields.get(element);
                     if (values!=null && values.size()>0) {
                         Object next = values.iterator()
@@ -252,12 +244,10 @@ public class SearchBloxDocument {
                 }
             }
 
-
 			// Metadata
             Collection<Object> metadataSet = data_fields
                     .get(xmlElements.get(12));
             if(metadataSet!=null && metadataSet.size()>0){
-            @SuppressWarnings("unchecked")
 			Multimap<String, String> metadata = (Multimap<String, String>) metadataSet.iterator().next();
 			if (metadata != null && !metadata.isEmpty()) {
 				for (String name : metadata.keySet())
@@ -268,22 +258,6 @@ public class SearchBloxDocument {
 						document.appendChild(metaElement);
 					}
 			}  }
-
-			// ACL
-            Collection<Object> aclSet = data_fields
-                    .get(xmlElements.get(13));
-            if(aclSet!=null &&aclSet.size()>0){
-            @SuppressWarnings("unchecked")
-			Multimap<String, String> acls = (Multimap<String, String>) aclSet.iterator().next();
-			if (acls != null && !acls.isEmpty()) {
-				for (String type : acls.keySet())
-					for (String value : acls.get(type)) {
-						Element aclElement = doc.createElement(xmlElements.get(13));
-						aclElement.setAttribute(ACL_TYPE_ATTRIBUTE, type);
-						aclElement.setTextContent(value);
-						document.appendChild(aclElement);
-					}
-			}  }
 		}
 
 		return getStringFromDocument(doc);

Modified: manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/SearchBloxDocumentTest.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/SearchBloxDocumentTest.java?rev=1666371&r1=1666370&r2=1666371&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/SearchBloxDocumentTest.java (original)
+++ manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/connector/src/test/java/org/apache/manifoldcf/agents/output/searchblox/tests/SearchBloxDocumentTest.java Fri Mar 13 08:26:02 2015
@@ -26,6 +26,7 @@ import org.apache.manifoldcf.agents.outp
 import org.apache.manifoldcf.agents.output.searchblox.SearchBloxDocument.DocumentAction;
 import org.apache.manifoldcf.agents.output.searchblox.SearchBloxDocument.IndexingFormat;
 import org.apache.manifoldcf.agents.output.searchblox.SearchBloxException;
+import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
@@ -72,14 +73,41 @@ public class SearchBloxDocumentTest exte
         realRepoDoc.addField("content","I am a nice content in english!");
         realRepoDoc.addField("description","I am a little tiny description");
         realRepoDoc.addField("meta1","I am META1!");
+        realRepoDoc.addField("meta2","I am META2!");
         realRepoDoc.setMimeType("html");
         realRepoDoc.setBinary(stream,100);
         realRepoDoc.setCreatedDate(new Date(System.currentTimeMillis()));
+        realRepoDoc.setSecurityACL(RepositoryDocument.SECURITY_TYPE_SHARE,new String[]{"user1","user2","user3"});
+        realRepoDoc.setSecurityACL(RepositoryDocument.SECURITY_TYPE_DOCUMENT,new String[]{"user12","user22","user33"});
+        realRepoDoc.setSecurityDenyACL(RepositoryDocument.SECURITY_TYPE_SHARE, new String[]{"user4", "user5"});
+        realRepoDoc.setSecurityDenyACL(RepositoryDocument.SECURITY_TYPE_DOCUMENT, new String[]{"user42", "user52"});
+        //allowAttributeName + aclType
         return realRepoDoc;
     }
 
-    public void testXmlString() throws SearchBloxException {
+    @Test
+    public void testUpdateXmlString() throws SearchBloxException {
         String xmlGenerated=toTest.toString(IndexingFormat.XML, DocumentAction.ADD_UPDATE);
+        System.out.println(xmlGenerated);
+        String xmlExpected="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+                "<searchblox apikey=\"apikey\"><document colname=\"collection1\">" +
+                "<uid>URI</uid><title boost=\"1\">I am a nice title</title><content boost=\"2\">I am a nice content in english!</content>" +
+                "<description boost=\"4\">I am a little tiny description</description><size>100</size><contenttype>html</contenttype>" +
+                "<meta name=\"meta2\">I am META2!</meta><meta name=\"share_allow\">user3</meta>" +
+                "<meta name=\"share_allow\">user2</meta><meta name=\"share_allow\">user1</meta>" +
+                "<meta name=\"meta1\">I am META1!</meta><meta name=\"share_deny\">user4</meta>" +
+                "<meta name=\"share_deny\">user5</meta><meta name=\"document_deny\">user52</meta>" +
+                "<meta name=\"document_deny\">user42</meta><meta name=\"document_allow\">user22</meta>" +
+                "<meta name=\"document_allow\">user12</meta><meta name=\"document_allow\">user33</meta></document></searchblox>";
+        assertEquals(xmlExpected,xmlGenerated);
+    }
+
+    @Test
+    public void testDeleteXmlString() throws SearchBloxException {
+        String xmlGenerated=toTest.toString(IndexingFormat.XML, DocumentAction.DELETE);
+        System.out.println(xmlGenerated);
+        String xmlExpected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><searchblox apikey=\"apikey\"><document colname=\"collection1\" uid=\"URI\"/></searchblox>";
+        assertEquals(xmlExpected,xmlGenerated);
     }
 
 }

Modified: manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/pom.xml
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/pom.xml?rev=1666371&r1=1666370&r2=1666371&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/pom.xml (original)
+++ manifoldcf/branches/CONNECTORS-1168/connectors/searchblox/pom.xml Fri Mar 13 08:26:02 2015
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.apache.manifoldcf</groupId>
 		<artifactId>mcf-connectors</artifactId>
-		<version>2.1-SNAPSHOT</version>
+		<version>2.0.2</version>
 	</parent>
 
 	<artifactId>mcf-searchblox-connector</artifactId>
@@ -298,6 +298,13 @@
 			<artifactId>guava</artifactId>
 			<version>15.0</version>
 		</dependency>
+		
+		<dependency>
+			<!-- jsoup HTML parser library @ http://jsoup.org/ -->
+			<groupId>org.jsoup</groupId>
+			<artifactId>jsoup</artifactId>
+			<version>1.8.1</version>
+		</dependency>
 
 		<!-- Testing dependencies -->
 
@@ -454,11 +461,5 @@
 			<artifactId>mockito-all</artifactId>
 			<version>1.9.5</version>
 		</dependency>
-		<dependency>
-			<!-- jsoup HTML parser library @ http://jsoup.org/ -->
-			<groupId>org.jsoup</groupId>
-			<artifactId>jsoup</artifactId>
-			<version>1.8.1</version>
-		</dependency>
 	</dependencies>
 </project>