Add Steph van Schalkwyk's patch -- work in progress.

git-svn-id: https://svn.apache.org/repos/asf/manifoldcf/integration/elasticsearch-5.5/trunk@1807497 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizer.java b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizer.java
index 7010493..c035998 100644
--- a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizer.java
+++ b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizer.java
@@ -26,8 +26,9 @@
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.TermQueryBuilder;
 
-import org.elasticsearch.common.logging.Loggers;
-import org.elasticsearch.common.logging.ESLogger;
+import org.apache.logging.log4j.Logger;
+import org.elasticsearch.common.logging.ESLoggerFactory;
+
 
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
@@ -51,7 +52,7 @@
   static final public String NOSECURITY_TOKEN = "__nosecurity__";
 
   /** A logger we can use */
-  private static final ESLogger LOG = Loggers.getLogger(MCFAuthorizer.class);
+  private static final Logger LOG = ESLoggerFactory.getLogger(MCFAuthorizer.class);
 
   // Member variables
 
diff --git a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerException.java b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerException.java
index 2a03821..420eac4 100644
--- a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerException.java
+++ b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerException.java
@@ -26,6 +26,9 @@
 */
 public class MCFAuthorizerException extends ElasticsearchException
 {
+  // default serialVersionID
+	private static final long serialVersionUID = 1L;
+
   /** Constructor */
   public MCFAuthorizerException(String message)
   {
diff --git a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerPlugin.java b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerPlugin.java
index 5311ec4..ee957a8 100644
--- a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerPlugin.java
+++ b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerPlugin.java
@@ -18,27 +18,30 @@
 */
 package org.apache.manifoldcf.elasticsearch;
 
-import org.elasticsearch.common.logging.ESLogger;
-import org.elasticsearch.common.logging.Loggers;
+import org.apache.logging.log4j.Logger;
+import org.elasticsearch.common.logging.ESLoggerFactory;
 
 import org.elasticsearch.plugins.Plugin;
-import org.elasticsearch.rest.RestModule;
+//import org.elasticsearch.rest.RestModule;
+import org.elasticsearch.rest.BytesRestResponse;
+import org.elasticsearch.rest.RestController;
+import org.elasticsearch.rest.RestRequest;
+import org.elasticsearch.rest.action.cat.AbstractCatAction;
+import org.elasticsearch.rest.action.cat.RestTable;
 
 public class MCFAuthorizerPlugin extends Plugin
 {
 
-  private final ESLogger log = Loggers.getLogger(this.getClass());
+  private final Logger log = ESLoggerFactory.getLogger(this.getClass());
 
   public MCFAuthorizerPlugin() {
     log.info("Starting ManifoldCF Authorizer Plugin");
   }
 
-  @Override
   public String name() {
     return "elasticsearch-plugin-mcf";
   }
 
-  @Override
   public String description() {
     return "Plugin to connect elasticsearch with ManifoldCF";
   }
diff --git a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerRestSearchAction.java b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerRestSearchAction.java
index d03c760..4f34d1c 100644
--- a/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerRestSearchAction.java
+++ b/src/main/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerRestSearchAction.java
@@ -24,25 +24,26 @@
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.rest.*;
 import org.elasticsearch.rest.action.search.RestSearchAction;
-import org.elasticsearch.rest.action.support.RestStatusToXContentListener;
+import org.elasticsearch.rest.action.RestStatusToXContentListener;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.elasticsearch.action.support.IndicesOptions;
-import org.elasticsearch.common.ParseFieldMatcher;
+/**import org.elasticsearch.common.ParseFieldMatcher;*/
 import org.elasticsearch.common.bytes.BytesReference;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.index.query.*;
 import org.elasticsearch.rest.RestRequest;
-import org.elasticsearch.rest.action.support.RestActions;
+import org.elasticsearch.rest.action.RestActions;
 import org.elasticsearch.search.Scroll;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.elasticsearch.search.fetch.source.FetchSourceContext;
+import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
 import org.elasticsearch.search.sort.SortOrder;
 import org.elasticsearch.search.suggest.SuggestBuilders;
 import org.elasticsearch.search.suggest.term.TermSuggestionBuilder;
 import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.common.xcontent.XContentParser;
 
 import java.io.*;
 
@@ -51,22 +52,22 @@
   protected final MCFAuthorizer authorizer;
   
   @Inject
-  public MCFAuthorizerRestSearchAction(Settings settings, final RestController restController, Client client) {
-    super(settings,restController,client);
+  public MCFAuthorizerRestSearchAction(Settings settings, final RestController restController) {
+    super(settings,restController);
     final MCFConfigurationParameters conf = new MCFConfigurationParameters(settings);
     authorizer = new MCFAuthorizer(conf);
   }
 
-  @Override
   public void handleRequest(RestRequest request, RestChannel channel, Client client) {
     SearchRequest searchRequest;
-    searchRequest = parseSearchRequestMCF(request, parseFieldMatcher);
+    searchRequest = parseSearchRequestMCF(request); //, parseFieldMatcher);
     client.search(searchRequest, new RestStatusToXContentListener(channel));
   }
   
   protected SearchRequest parseSearchRequestMCF(
-    final RestRequest request,
-    final ParseFieldMatcher parseFieldMatcher) throws MCFAuthorizerException {
+    final RestRequest request //,
+//    final ParseFieldMatcher parseFieldMatcher
+    ) throws MCFAuthorizerException {
     final SearchRequest searchRequest;
     if(request.param("u")!=null) {
       searchRequest = new SearchRequest();
@@ -77,24 +78,31 @@
 
       if(request.hasContent() || request.hasParam("source")) {
         QueryBuilder authorizationFilter = authorizer.buildAuthorizationFilter(authenticatedUserNamesAndDomains);
-        FilteredQueryBuilder filteredQueryBuilder;
+        QueryBuilder filteredQueryBuilder;
 
         ObjectMapper objectMapper = new ObjectMapper();
         ObjectNode modifiedJSON, innerJSON;
         JsonNode requestJSON;
 
         try {
-          requestJSON = objectMapper.readTree(RestActions.getRestContent(request).toBytes());
+          requestJSON = objectMapper.readTree(RestActions.getQueryContent((XContentParser) request).toString());
           if (isTemplateRequest) {
             modifiedJSON = (ObjectNode) requestJSON;
             innerJSON = (ObjectNode)requestJSON.findValue("template");
-            filteredQueryBuilder = QueryBuilders.filteredQuery(QueryBuilders.wrapperQuery(innerJSON.findValue("query").toString()), authorizationFilter);
-            modifiedJSON.replace("template",innerJSON.set("query", objectMapper.readTree(filteredQueryBuilder.buildAsBytes().toBytes())));
+            filteredQueryBuilder = QueryBuilders.boolQuery()
+            		.must (QueryBuilders.wrapperQuery(innerJSON.findValue("query").toString()))
+            		.must(authorizationFilter);      		
+            		
+            modifiedJSON.replace("template",innerJSON.set("query", objectMapper.readTree(filteredQueryBuilder.toString())));
             searchRequest.templateSource(modifiedJSON.toString());
+            searchRequest.set
           } else {
-            filteredQueryBuilder = QueryBuilders.filteredQuery(QueryBuilders.wrapperQuery(requestJSON.findValue("query").toString()), authorizationFilter);
+            filteredQueryBuilder = QueryBuilders.boolQuery()
+            		.must(QueryBuilders.wrapperQuery(requestJSON.findValue("query").toString()))
+            		.must(authorizationFilter);
+            				
             modifiedJSON = (ObjectNode) requestJSON;
-            modifiedJSON.set("query", objectMapper.readTree(filteredQueryBuilder.buildAsBytes().toBytes()));
+            modifiedJSON.set("query", objectMapper.readTree(filteredQueryBuilder.toString()));
             searchRequest.source(modifiedJSON.toString());
           }
         } catch (IOException e) {
@@ -103,7 +111,7 @@
       }
 
       //parseSearchSource(searchRequest.source(), request);
-      searchRequest.extraSource(parseSearchSourceMCF(request));
+      searchRequest.source(parseSearchSourceMCF(request));
       searchRequest.searchType(request.param("search_type"));
       
       // Should this be done?
@@ -120,7 +128,7 @@
       searchRequest.indicesOptions(IndicesOptions.fromRequest(request, searchRequest.indicesOptions()));
     }
     else {
-      searchRequest = parseSearchRequest(request, parseFieldMatcher);
+      searchRequest = parseSearchRequest(request);//, parseFieldMatcher);
     }
     return searchRequest;
   }
@@ -135,18 +143,18 @@
       from.defaultField(request.param("df"));
       from.analyzer(request.param("analyzer"));
       from.analyzeWildcard(request.paramAsBoolean("analyze_wildcard", false));
-      from.lowercaseExpandedTerms(request.paramAsBoolean("lowercase_expanded_terms", true));
+//      from.lowercaseExpandedTerms(request.paramAsBoolean("lowercase_expanded_terms", true));
       from.lenient(request.paramAsBoolean("lenient", (Boolean)null));
       String size = request.param("default_operator");
       if(size != null) {
         if("OR".equals(size)) {
-          from.defaultOperator(QueryStringQueryBuilder.Operator.OR);
+          from.defaultOperator(Operator.OR);
         } else {
           if(!"AND".equals(size)) {
             throw new IllegalArgumentException("Unsupported defaultOperator [" + size + "], can either be [OR] or [AND]");
           }
 
-          from.defaultOperator(QueryStringQueryBuilder.Operator.AND);
+          from.defaultOperator(Operator.AND);
         }
       }
 
@@ -154,7 +162,9 @@
         searchSourceBuilder = new SearchSourceBuilder();
       }
 
-      searchSourceBuilder.query(QueryBuilders.filteredQuery(from, authorizationFilter));
+      searchSourceBuilder.query(QueryBuilders.boolQuery()
+    		  .must(from)
+    		  .must(authorizationFilter));
     }
     else {
         if(!(request.hasContent() || request.hasParam("source"))){
@@ -162,7 +172,8 @@
             searchSourceBuilder = new SearchSourceBuilder();
           }
           QueryBuilder authorizationFilter = authorizer.buildAuthorizationFilter(request.param("u"));
-          searchSourceBuilder.query(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),authorizationFilter));
+          searchSourceBuilder.query(QueryBuilders.boolQuery()
+        		  .must(authorizationFilter));
         }
     }
 
diff --git a/src/main/resources/plugin-descriptor.properties b/src/main/resources/plugin-descriptor.properties
index 7d26767..8b49136 100644
--- a/src/main/resources/plugin-descriptor.properties
+++ b/src/main/resources/plugin-descriptor.properties
@@ -19,7 +19,7 @@
 description=ApacheManifoldCF Auth Plugin
 #
 # 'version': plugin's version
-version=2.1
+version=5.5
 #
 # 'name': the plugin name
 name=ApacheManifoldCFAuthPlugin
@@ -40,14 +40,14 @@
 # use the system property java.specification.version
 # version string must be a sequence of nonnegative decimal integers
 # separated by "."'s and may have leading zeros
-java.version=1.7
+java.version=1.8
 #
 # 'elasticsearch.version' version of elasticsearch compiled against
 # You will have to release a new version of the plugin for each new
 # elasticsearch release. This version is checked when the plugin
 # is loaded so Elasticsearch will refuse to start in the presence of
 # plugins with the incorrect elasticsearch.version.
-elasticsearch.version=2.0.2
+elasticsearch.version=5.5.2
 #
 ### deprecated elements for jvm plugins :
 #