Format Java code to ONAP standard 55/68455/1
authormark.j.leonard <mark.j.leonard@gmail.com>
Fri, 21 Sep 2018 15:16:04 +0000 (16:16 +0100)
committermark.j.leonard <mark.j.leonard@gmail.com>
Fri, 21 Sep 2018 15:16:04 +0000 (16:16 +0100)
Use the Eclipse formatter to automatically format the code to adhere
to the defined standards.

Change-Id: I42a8c90c5b272facc4cc2a0c85233061ed64ba3f
Issue-ID: AAI-1650
Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
84 files changed:
src/main/java/org/onap/aai/sa/Application.java
src/main/java/org/onap/aai/sa/auth/SearchDbServiceAuth.java
src/main/java/org/onap/aai/sa/auth/SearchDbServiceAuthCore.java
src/main/java/org/onap/aai/sa/rest/AnalysisConfiguration.java
src/main/java/org/onap/aai/sa/rest/AnalyzerApi.java
src/main/java/org/onap/aai/sa/rest/ApiUtils.java
src/main/java/org/onap/aai/sa/rest/BulkApi.java
src/main/java/org/onap/aai/sa/rest/BulkMetaData.java
src/main/java/org/onap/aai/sa/rest/BulkOperation.java
src/main/java/org/onap/aai/sa/rest/BulkRequest.java
src/main/java/org/onap/aai/sa/rest/Document.java
src/main/java/org/onap/aai/sa/rest/DocumentApi.java
src/main/java/org/onap/aai/sa/rest/IndexApi.java
src/main/java/org/onap/aai/sa/rest/SearchServiceApi.java
src/main/java/org/onap/aai/sa/searchdbabstraction/RestEchoService.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/config/ElasticSearchConfig.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/DocumentStoreDataEntity.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/DocumentStoreDataEntityImpl.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/DocumentStoreInterface.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchBulkOperationResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchCause.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchError.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchOperationStatus.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchResultItem.java
src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchShardStatus.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/AggregationBucket.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/AggregationResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/AggregationResults.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/Document.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/DocumentOperationResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/ErrorResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/OperationResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/SearchHit.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/SearchHits.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/SearchOperationResult.java
src/main/java/org/onap/aai/sa/searchdbabstraction/entity/SuggestHit.java
src/main/java/org/onap/aai/sa/searchdbabstraction/logging/SearchDbMsgs.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/AbstractAggregation.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/Aggregation.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/AggregationStatement.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateHistogramAggregation.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateRange.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateRangeAggregation.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/Filter.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/GroupByAggregation.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/ParsedQuery.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/Query.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/QueryStatement.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/RangeQuery.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/SearchStatement.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/Sort.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/SuggestionStatement.java
src/main/java/org/onap/aai/sa/searchdbabstraction/searchapi/TermQuery.java
src/main/java/org/onap/aai/sa/searchdbabstraction/service/SearchService.java
src/main/java/org/onap/aai/sa/searchdbabstraction/util/AggregationParsingUtil.java
src/main/java/org/onap/aai/sa/searchdbabstraction/util/DocumentSchemaUtil.java
src/main/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslator.java
src/main/java/org/onap/aai/sa/searchdbabstraction/util/SearchDbConstants.java
src/test/java/org/onap/aai/sa/auth/SearchDbServiceAuthTest.java
src/test/java/org/onap/aai/sa/rest/ApiUtilsTest.java
src/test/java/org/onap/aai/sa/rest/BulkApiTest.java
src/test/java/org/onap/aai/sa/rest/BulkRequestTest.java
src/test/java/org/onap/aai/sa/rest/DocumentApiTest.java
src/test/java/org/onap/aai/sa/rest/DocumentSchemaTest.java
src/test/java/org/onap/aai/sa/rest/DocumentTest.java
src/test/java/org/onap/aai/sa/rest/IndexApiTest.java
src/test/java/org/onap/aai/sa/rest/SearchServiceApiHarness.java
src/test/java/org/onap/aai/sa/rest/StubEsController.java
src/test/java/org/onap/aai/sa/rest/TestUtils.java
src/test/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/config/ElasticSearchConfigTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/AggregationResponseParsingTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchResultItemTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/AggregationStatementTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/AggregationTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateHistogramAggregationTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateRangeAggregationTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/DateRangeTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/FilterTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/GroupByAggregationTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/QueryTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/RangeQueryTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/SearchStatementTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/searchapi/SortTest.java
src/test/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslatorTest.java

index cd253c6..4fe2202 100644 (file)
@@ -33,11 +33,11 @@ public class Application extends SpringBootServletInitializer {
     public static void main(String[] args) {\r
 \r
         String keyStorePassword = System.getProperty("KEY_STORE_PASSWORD");\r
-        if(keyStorePassword==null || keyStorePassword.isEmpty()){\r
+        if (keyStorePassword == null || keyStorePassword.isEmpty()) {\r
             throw new RuntimeException("Env property KEY_STORE_PASSWORD not set");\r
         }\r
         HashMap<String, Object> props = new HashMap<>();\r
         props.put("server.ssl.key-store-password", Password.deobfuscate(keyStorePassword));\r
-        new Application().configure(new SpringApplicationBuilder (Application.class).properties(props)).run(args);\r
+        new Application().configure(new SpringApplicationBuilder(Application.class).properties(props)).run(args);\r
     }\r
 }\r
index 1ef3dde..b64cb74 100644 (file)
  */
 package org.onap.aai.sa.auth;
 
- import javax.servlet.http.Cookie;
+import javax.servlet.http.Cookie;
 import org.springframework.http.HttpHeaders;
 
 public class SearchDbServiceAuth {
 
-  public SearchDbServiceAuth() {
-  }
+    public SearchDbServiceAuth() {}
 
-  public boolean authBasic(String username, String authFunction) {
-    return SearchDbServiceAuthCore.authorize(username, authFunction);
-  }
+    public boolean authBasic(String username, String authFunction) {
+        return SearchDbServiceAuthCore.authorize(username, authFunction);
+    }
 
-  public String authUser(HttpHeaders headers, String authUser, String authFunction) {
+    public String authUser(HttpHeaders headers, String authUser, String authFunction) {
 
 
-    SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();
+        SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();
 
-    StringBuilder username = new StringBuilder();
+        StringBuilder username = new StringBuilder();
 
-    username.append(authUser);
-    if (aaiAuth.authBasic(username.toString(), authFunction) == false) {
-      return "AAI_9101";
+        username.append(authUser);
+        if (aaiAuth.authBasic(username.toString(), authFunction) == false) {
+            return "AAI_9101";
 
+        }
+        return "OK";
     }
-    return "OK";
-  }
 
-  public boolean authCookie(Cookie cookie, String authFunction, StringBuilder username) {
+    public boolean authCookie(Cookie cookie, String authFunction, StringBuilder username) {
 
-    if (cookie == null) {
-      return false;
+        if (cookie == null) {
+            return false;
+        }
+        return SearchDbServiceAuthCore.authorize(username.toString(), authFunction);
     }
-    return SearchDbServiceAuthCore.authorize(username.toString(), authFunction);
-  }
 }
index 1bd922f..48743b6 100644 (file)
@@ -40,207 +40,206 @@ import org.onap.aai.sa.searchdbabstraction.util.SearchDbConstants;
 
 public class SearchDbServiceAuthCore {
 
-  private static Logger logger = LoggerFactory.getInstance()
-    .getLogger(SearchDbServiceAuthCore.class.getName());
+    private static Logger logger = LoggerFactory.getInstance().getLogger(SearchDbServiceAuthCore.class.getName());
 
-  private static String GlobalAuthFileName = SearchDbConstants.SDB_AUTH_CONFIG_FILENAME;
+    private static String GlobalAuthFileName = SearchDbConstants.SDB_AUTH_CONFIG_FILENAME;
 
-  private static enum HTTP_METHODS {
-    POST, GET, PUT, DELETE
-  }
-
-  ;
-
-  // Don't instantiate
-  private SearchDbServiceAuthCore() {
-  }
+    private enum HTTP_METHODS {
+        POST,
+        GET,
+        PUT,
+        DELETE
+    }
 
-  private static boolean usersInitialized = false;
-  private static HashMap<String, SearchDbAuthUser> users;
-  private static boolean timerSet = false;
-  private static Timer timer = null;
+    // Don't instantiate
+    private SearchDbServiceAuthCore() {}
 
-  public synchronized static void init() {
+    private static boolean usersInitialized = false;
+    private static HashMap<String, SearchDbAuthUser> users;
+    private static boolean timerSet = false;
+    private static Timer timer = null;
 
+    public synchronized static void init() {
 
-    SearchDbServiceAuthCore.getConfigFile();
-    SearchDbServiceAuthCore.reloadUsers();
 
-  }
+        SearchDbServiceAuthCore.getConfigFile();
+        SearchDbServiceAuthCore.reloadUsers();
 
-  public static void cleanup() {
-    timer.cancel();
-  }
+    }
 
-  public static String getConfigFile() {
-    if (GlobalAuthFileName == null) {
-      String nc = GlobalAuthFileName;
-      if (nc == null) {
-        nc = "/home/aaiadmin/etc/aaipolicy.json";
-      }
-      GlobalAuthFileName = nc;
+    public static void cleanup() {
+        timer.cancel();
     }
-    return GlobalAuthFileName;
-  }
-
-  public synchronized static void reloadUsers() {
-    users = new HashMap<String, SearchDbAuthUser>();
-    ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
-    JSONParser parser = new JSONParser();
-    try {
-      Object obj = parser.parse(new FileReader(GlobalAuthFileName));
-      JsonNode rootNode = mapper.readTree(new File(GlobalAuthFileName));
-      JsonNode rolesNode = rootNode.path("roles");
-
-      for (JsonNode roleNode : rolesNode) {
-        String roleName = roleNode.path("name").asText();
-
-        TabularAuthRole authRole = new TabularAuthRole();
-        JsonNode usersNode = roleNode.path("users");
-        JsonNode functionsNode = roleNode.path("functions");
-        for (JsonNode functionNode : functionsNode) {
-          String function = functionNode.path("name").asText();
-          JsonNode methodsNode = functionNode.path("methods");
-          boolean hasMethods = false;
-          for (JsonNode methodNode : methodsNode) {
-            String methodName = methodNode.path("name").asText();
-            hasMethods = true;
-            String thisFunction = methodName + ":" + function;
-
-            authRole.addAllowedFunction(thisFunction);
-          }
-
-          if (hasMethods == false) {
-            // iterate the list from HTTP_METHODS
-            for (HTTP_METHODS meth : HTTP_METHODS.values()) {
-              String thisFunction = meth.toString() + ":" + function;
-
-              authRole.addAllowedFunction(thisFunction);
-            }
-          }
 
+    public static String getConfigFile() {
+        if (GlobalAuthFileName == null) {
+            String nc = GlobalAuthFileName;
+            if (nc == null) {
+                nc = "/home/aaiadmin/etc/aaipolicy.json";
+            }
+            GlobalAuthFileName = nc;
         }
-        for (JsonNode userNode : usersNode) {
-          // make the user lower case
-          String username = userNode.path("username").asText().toLowerCase();
-          SearchDbAuthUser authUser = null;
-          if (users.containsKey(username)) {
-            authUser = users.get(username);
-          } else {
-            authUser = new SearchDbAuthUser();
-          }
-
-
-          authUser.setUser(username);
-          authUser.addRole(roleName, authRole);
-          users.put(username, authUser);
-        }
-      }
-    } catch (FileNotFoundException fnfe) {
-      logger.debug("Failed to load the policy file ");
+        return GlobalAuthFileName;
+    }
 
-    } catch (ParseException e) {
-      logger.debug("Failed to Parse the policy file ");
+    public synchronized static void reloadUsers() {
+        users = new HashMap<>();
+        ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
+        JSONParser parser = new JSONParser();
+        try {
+            parser.parse(new FileReader(GlobalAuthFileName));
+            JsonNode rootNode = mapper.readTree(new File(GlobalAuthFileName));
+            JsonNode rolesNode = rootNode.path("roles");
+
+            for (JsonNode roleNode : rolesNode) {
+                String roleName = roleNode.path("name").asText();
+
+                TabularAuthRole authRole = new TabularAuthRole();
+                JsonNode usersNode = roleNode.path("users");
+                JsonNode functionsNode = roleNode.path("functions");
+                for (JsonNode functionNode : functionsNode) {
+                    String function = functionNode.path("name").asText();
+                    JsonNode methodsNode = functionNode.path("methods");
+                    boolean hasMethods = false;
+                    for (JsonNode methodNode : methodsNode) {
+                        String methodName = methodNode.path("name").asText();
+                        hasMethods = true;
+                        String thisFunction = methodName + ":" + function;
+
+                        authRole.addAllowedFunction(thisFunction);
+                    }
+
+                    if (hasMethods == false) {
+                        // iterate the list from HTTP_METHODS
+                        for (HTTP_METHODS meth : HTTP_METHODS.values()) {
+                            String thisFunction = meth.toString() + ":" + function;
+
+                            authRole.addAllowedFunction(thisFunction);
+                        }
+                    }
+
+                }
+                for (JsonNode userNode : usersNode) {
+                    // make the user lower case
+                    String username = userNode.path("username").asText().toLowerCase();
+                    SearchDbAuthUser authUser = null;
+                    if (users.containsKey(username)) {
+                        authUser = users.get(username);
+                    } else {
+                        authUser = new SearchDbAuthUser();
+                    }
+
+
+                    authUser.setUser(username);
+                    authUser.addRole(roleName, authRole);
+                    users.put(username, authUser);
+                }
+            }
+        } catch (FileNotFoundException fnfe) {
+            logger.debug("Failed to load the policy file ");
 
-    } catch (JsonProcessingException e) {
-      logger.debug("JSON processing error while parsing policy file: " + e.getMessage());
+        } catch (ParseException e) {
+            logger.debug("Failed to Parse the policy file ");
 
-    } catch (IOException e) {
-      logger.debug("IO Exception while parsing policy file: " + e.getMessage());
-    }
+        } catch (JsonProcessingException e) {
+            logger.debug("JSON processing error while parsing policy file: " + e.getMessage());
 
-    usersInitialized = true;
+        } catch (IOException e) {
+            logger.debug("IO Exception while parsing policy file: " + e.getMessage());
+        }
 
-  }
+        usersInitialized = true;
 
-  public static class SearchDbAuthUser {
-    public SearchDbAuthUser() {
-      this.roles = new HashMap<String, TabularAuthRole>();
     }
 
-    private String username;
-    private HashMap<String, TabularAuthRole> roles;
+    public static class SearchDbAuthUser {
+        public SearchDbAuthUser() {
+            this.roles = new HashMap<>();
+        }
 
-    public String getUser() {
-      return this.username;
-    }
+        private String username;
+        private HashMap<String, TabularAuthRole> roles;
 
-    public HashMap<String, TabularAuthRole> getRoles() {
-      return this.roles;
-    }
+        public String getUser() {
+            return this.username;
+        }
 
-    public void addRole(String roleName, TabularAuthRole authRole) {
-      this.roles.put(roleName, authRole);
-    }
+        public HashMap<String, TabularAuthRole> getRoles() {
+            return this.roles;
+        }
 
-    public boolean checkAllowed(String checkFunc) {
-      for (Map.Entry<String, TabularAuthRole> roleEntry : this.roles.entrySet()) {
-        TabularAuthRole role = roleEntry.getValue();
-        if (role.hasAllowedFunction(checkFunc)) {
-          // break out as soon as we find it
-          return true;
+        public void addRole(String roleName, TabularAuthRole authRole) {
+            this.roles.put(roleName, authRole);
         }
-      }
-      // we would have got positive confirmation had it been there
-      return false;
-    }
 
-    public void setUser(String myuser) {
-      this.username = myuser;
-    }
+        public boolean checkAllowed(String checkFunc) {
+            for (Map.Entry<String, TabularAuthRole> roleEntry : this.roles.entrySet()) {
+                TabularAuthRole role = roleEntry.getValue();
+                if (role.hasAllowedFunction(checkFunc)) {
+                    // break out as soon as we find it
+                    return true;
+                }
+            }
+            // we would have got positive confirmation had it been there
+            return false;
+        }
 
-  }
+        public void setUser(String myuser) {
+            this.username = myuser;
+        }
 
-  public static class TabularAuthRole {
-    public TabularAuthRole() {
-      this.allowedFunctions = new ArrayList<String>();
     }
 
-    private List<String> allowedFunctions;
+    public static class TabularAuthRole {
+        public TabularAuthRole() {
+            this.allowedFunctions = new ArrayList<>();
+        }
 
-    public void addAllowedFunction(String func) {
-      this.allowedFunctions.add(func);
-    }
+        private List<String> allowedFunctions;
 
-    public void delAllowedFunction(String delFunc) {
-      if (this.allowedFunctions.contains(delFunc)) {
-        this.allowedFunctions.remove(delFunc);
-      }
-    }
+        public void addAllowedFunction(String func) {
+            this.allowedFunctions.add(func);
+        }
+
+        public void delAllowedFunction(String delFunc) {
+            if (this.allowedFunctions.contains(delFunc)) {
+                this.allowedFunctions.remove(delFunc);
+            }
+        }
 
-    public boolean hasAllowedFunction(String afunc) {
-      if (this.allowedFunctions.contains(afunc)) {
-        return true;
-      } else {
-        return false;
-      }
+        public boolean hasAllowedFunction(String afunc) {
+            if (this.allowedFunctions.contains(afunc)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
     }
-  }
 
-  public static HashMap<String, SearchDbAuthUser> getUsers(String key) {
-    if (!usersInitialized || (users == null)) {
-      reloadUsers();
+    public static HashMap<String, SearchDbAuthUser> getUsers(String key) {
+        if (!usersInitialized || (users == null)) {
+            reloadUsers();
+        }
+        return users;
     }
-    return users;
-  }
 
-  public static boolean authorize(String username, String authFunction) {
+    public static boolean authorize(String username, String authFunction) {
 
-    if (!usersInitialized || (users == null)) {
-      init();
-    }
-    if (users.containsKey(username)) {
-      if (users.get(username).checkAllowed(authFunction) == true) {
+        if (!usersInitialized || (users == null)) {
+            init();
+        }
+        if (users.containsKey(username)) {
+            if (users.get(username).checkAllowed(authFunction) == true) {
 
-        return true;
-      } else {
+                return true;
+            } else {
 
 
-        return false;
-      }
-    } else {
+                return false;
+            }
+        } else {
 
-      return false;
+            return false;
+        }
     }
-  }
 }
index f30075a..0b8947e 100644 (file)
@@ -30,207 +30,200 @@ import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs;
 import org.onap.aai.sa.searchdbabstraction.util.SearchDbConstants;
 
 /**
- * This class encapsulates the configuration of the predefined
- * Analyzer and Filter behaviours that help to tell the document
- * store how to index the documents that are provided to it.
+ * This class encapsulates the configuration of the predefined Analyzer and Filter behaviours that help to tell the
+ * document store how to index the documents that are provided to it.
  */
 public class AnalysisConfiguration {
 
-  /**
-   * Contains all of the predefined indexing filters.
-   */
-  private FilterSchema[] customFilters;
-
-  /**
-   * Contains all of the predefined indexing analyzers.
-   */
-  private AnalyzerSchema[] customAnalysers;
-
-  /**
-   * Indicates whether or not we have imported the filter and
-   * analyzer configurations.
-   */
-  private AtomicBoolean configured = new AtomicBoolean(false);
-
-  /**
-   * A json format string which is readable by Elastic Search and defines
-   * all of the custom filters and analyzers that we need Elastic Search
-   * to know about.
-   */
-  private String esSettings = null;
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(AnalysisConfiguration.class.getName());
-
-
-  /**
-   * Imports the filter and analyzer configuration files and
-   * builds an Elastic Search readable settings file from the
-   * contents.
-   *
-   * @param filterConfigFile   - Location of filter configuration json file
-   * @param analyzerConfigFile - Location of analyzer configuration json file
-   */
-  public void init(String filterConfigFile, String analyzerConfigFile) {
-
-    if (configured.compareAndSet(false, true)) {
-      ObjectMapper mapper = new ObjectMapper();
-
-      File filtersConfig = new File(filterConfigFile);
-      try {
-        customFilters = mapper.readValue(filtersConfig, FilterSchema[].class);
-      } catch (IOException e) {
-
-        // generate log
-        logger.warn(SearchDbMsgs.FILTERS_CONFIG_FAILURE, filterConfigFile, e.getMessage());
-      }
-
-      File analysersConfig = new File(analyzerConfigFile);
-      try {
-        customAnalysers = mapper.readValue(analysersConfig, AnalyzerSchema[].class);
-      } catch (IOException e) {
-
-        // generate log
-        logger.warn(SearchDbMsgs.ANALYSYS_CONFIG_FAILURE, analyzerConfigFile, e.getMessage());
-      }
-
-      esSettings = buildEsIndexSettings();
+    /**
+     * Contains all of the predefined indexing filters.
+     */
+    private FilterSchema[] customFilters;
+
+    /**
+     * Contains all of the predefined indexing analyzers.
+     */
+    private AnalyzerSchema[] customAnalysers;
+
+    /**
+     * Indicates whether or not we have imported the filter and analyzer configurations.
+     */
+    private AtomicBoolean configured = new AtomicBoolean(false);
+
+    /**
+     * A json format string which is readable by Elastic Search and defines all of the custom filters and analyzers that
+     * we need Elastic Search to know about.
+     */
+    private String esSettings = null;
+
+    private static Logger logger = LoggerFactory.getInstance().getLogger(AnalysisConfiguration.class.getName());
+
+
+    /**
+     * Imports the filter and analyzer configuration files and builds an Elastic Search readable settings file from the
+     * contents.
+     *
+     * @param filterConfigFile - Location of filter configuration json file
+     * @param analyzerConfigFile - Location of analyzer configuration json file
+     */
+    public void init(String filterConfigFile, String analyzerConfigFile) {
+
+        if (configured.compareAndSet(false, true)) {
+            ObjectMapper mapper = new ObjectMapper();
+
+            File filtersConfig = new File(filterConfigFile);
+            try {
+                customFilters = mapper.readValue(filtersConfig, FilterSchema[].class);
+            } catch (IOException e) {
+
+                // generate log
+                logger.warn(SearchDbMsgs.FILTERS_CONFIG_FAILURE, filterConfigFile, e.getMessage());
+            }
+
+            File analysersConfig = new File(analyzerConfigFile);
+            try {
+                customAnalysers = mapper.readValue(analysersConfig, AnalyzerSchema[].class);
+            } catch (IOException e) {
+
+                // generate log
+                logger.warn(SearchDbMsgs.ANALYSYS_CONFIG_FAILURE, analyzerConfigFile, e.getMessage());
+            }
+
+            esSettings = buildEsIndexSettings();
+        }
     }
-  }
-
-
-  /**
-   * Returns the set of pre-configured filters.
-   *
-   * @return - An array of filters.
-   */
-  public FilterSchema[] getFilters() {
-    return customFilters;
-  }
-
-
-  /**
-   * Returns the set of pre-configured analyzers.
-   *
-   * @return - An array of analyzers.
-   */
-  public AnalyzerSchema[] getAnalyzers() {
-    init(SearchDbConstants.SDB_FILTER_CONFIG_FILE, SearchDbConstants.SDB_ANALYSIS_CONFIG_FILE);
-    return customAnalysers;
-  }
-
-
-  /**
-   * Imports the filter and analyzer configurations and translates those
-   * into a settings string that will be parseable by Elastic Search.
-   *
-   * @return - Elastic Search formatted settings string.
-   */
-  public String getEsIndexSettings() {
-
-    // Generate the es-settings string from our filter and analyzer
-    // configurations if we have not already done so.
-    init(SearchDbConstants.SDB_FILTER_CONFIG_FILE, SearchDbConstants.SDB_ANALYSIS_CONFIG_FILE);
-
-    // Now, return the es-settings string.
-    return esSettings;
-  }
-
-
-  /**
-   * Constructs a settings string that is readable by Elastic Search based
-   * on the contents of the filter and analyzer configuration files.
-   *
-   * @return Elastic Search formatted settings string.
-   */
-  public String buildEsIndexSettings() {
-
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("{");
-    sb.append("\"analysis\": {");
-
-    // Define the custom filters.
-    boolean atLeastOneFilter = false;
-    sb.append("\"filter\": {");
-    AtomicBoolean firstFilter = new AtomicBoolean(true);
-    for (FilterSchema filter : customFilters) {
-
-      // Append a comma before the next entry, unless it is the
-      // first one.
-      if (!firstFilter.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
-
-      // Now, build the filter entry.
-      buildFilterEntry(filter, sb);
-      atLeastOneFilter = true;
+
+
+    /**
+     * Returns the set of pre-configured filters.
+     *
+     * @return - An array of filters.
+     */
+    public FilterSchema[] getFilters() {
+        return customFilters;
+    }
+
+
+    /**
+     * Returns the set of pre-configured analyzers.
+     *
+     * @return - An array of analyzers.
+     */
+    public AnalyzerSchema[] getAnalyzers() {
+        init(SearchDbConstants.SDB_FILTER_CONFIG_FILE, SearchDbConstants.SDB_ANALYSIS_CONFIG_FILE);
+        return customAnalysers;
     }
-    sb.append((atLeastOneFilter) ? "}," : "}");
 
-    // Define the custom analyzers.
-    sb.append("\"analyzer\": {");
-    AtomicBoolean firstAnalyzer = new AtomicBoolean(true);
-    for (AnalyzerSchema analyzer : customAnalysers) {
 
-      // Prepend a comma before the entry, unless it is the
-      // first one.
-      if (!firstAnalyzer.compareAndSet(true, false)) {
-        sb.append(",");
-      }
+    /**
+     * Imports the filter and analyzer configurations and translates those into a settings string that will be parseable
+     * by Elastic Search.
+     *
+     * @return - Elastic Search formatted settings string.
+     */
+    public String getEsIndexSettings() {
+
+        // Generate the es-settings string from our filter and analyzer
+        // configurations if we have not already done so.
+        init(SearchDbConstants.SDB_FILTER_CONFIG_FILE, SearchDbConstants.SDB_ANALYSIS_CONFIG_FILE);
+
+        // Now, return the es-settings string.
+        return esSettings;
+    }
+
 
-      // Now, construct the entry for this analyzer.
-      buildAnalyzerEntry(analyzer, sb);
+    /**
+     * Constructs a settings string that is readable by Elastic Search based on the contents of the filter and analyzer
+     * configuration files.
+     *
+     * @return Elastic Search formatted settings string.
+     */
+    public String buildEsIndexSettings() {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("{");
+        sb.append("\"analysis\": {");
+
+        // Define the custom filters.
+        boolean atLeastOneFilter = false;
+        sb.append("\"filter\": {");
+        AtomicBoolean firstFilter = new AtomicBoolean(true);
+        for (FilterSchema filter : customFilters) {
+
+            // Append a comma before the next entry, unless it is the
+            // first one.
+            if (!firstFilter.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
+
+            // Now, build the filter entry.
+            buildFilterEntry(filter, sb);
+            atLeastOneFilter = true;
+        }
+        sb.append((atLeastOneFilter) ? "}," : "}");
+
+        // Define the custom analyzers.
+        sb.append("\"analyzer\": {");
+        AtomicBoolean firstAnalyzer = new AtomicBoolean(true);
+        for (AnalyzerSchema analyzer : customAnalysers) {
+
+            // Prepend a comma before the entry, unless it is the
+            // first one.
+            if (!firstAnalyzer.compareAndSet(true, false)) {
+                sb.append(",");
+            }
+
+            // Now, construct the entry for this analyzer.
+            buildAnalyzerEntry(analyzer, sb);
+        }
+        sb.append("}");
+
+        sb.append("}");
+        sb.append("}");
+
+        return sb.toString();
     }
-    sb.append("}");
-
-    sb.append("}");
-    sb.append("}");
-
-    return sb.toString();
-  }
-
-
-  /**
-   * Constructs an ElasticSearch friendly custom filter definition.
-   *
-   * @param filter - The filter to generate ElasticSearch json for.
-   * @param sb     - The string builder to append the filter definition
-   *               to.
-   */
-  private void buildFilterEntry(FilterSchema filter, StringBuilder sb) {
-
-    sb.append("\"" + filter.getName()).append("\": {");
-
-    sb.append(filter.getConfiguration());
-
-    sb.append("}");
-  }
-
-
-  /**
-   * Constructs an ElasticSearch friendly custom analyzer definition.
-   *
-   * @param analyzer - The analyzer to generate ElasticSearch json for.
-   * @param sb       - The string builder to append the analyzer definition
-   *                 to.
-   */
-  private void buildAnalyzerEntry(AnalyzerSchema analyzer, StringBuilder sb) {
-
-    sb.append("\"").append(analyzer.getName()).append("\": {");
-    sb.append("\"type\": \"custom\",");
-    sb.append("\"tokenizer\": ").append("\"").append(analyzer.getTokenizer()).append("\",");
-    sb.append("\"filter\": [");
-    boolean firstFilter = true;
-    for (String filter : analyzer.getFilters()) {
-      if (!firstFilter) {
-        sb.append(",");
-      } else {
-        firstFilter = false;
-      }
-      sb.append("\"").append(filter).append("\"");
+
+
+    /**
+     * Constructs an ElasticSearch friendly custom filter definition.
+     *
+     * @param filter - The filter to generate ElasticSearch json for.
+     * @param sb - The string builder to append the filter definition to.
+     */
+    private void buildFilterEntry(FilterSchema filter, StringBuilder sb) {
+
+        sb.append("\"" + filter.getName()).append("\": {");
+
+        sb.append(filter.getConfiguration());
+
+        sb.append("}");
+    }
+
+
+    /**
+     * Constructs an ElasticSearch friendly custom analyzer definition.
+     *
+     * @param analyzer - The analyzer to generate ElasticSearch json for.
+     * @param sb - The string builder to append the analyzer definition to.
+     */
+    private void buildAnalyzerEntry(AnalyzerSchema analyzer, StringBuilder sb) {
+
+        sb.append("\"").append(analyzer.getName()).append("\": {");
+        sb.append("\"type\": \"custom\",");
+        sb.append("\"tokenizer\": ").append("\"").append(analyzer.getTokenizer()).append("\",");
+        sb.append("\"filter\": [");
+        boolean firstFilter = true;
+        for (String filter : analyzer.getFilters()) {
+            if (!firstFilter) {
+                sb.append(",");
+            } else {
+                firstFilter = false;
+            }
+            sb.append("\"").append(filter).append("\"");
+        }
+        sb.append("]");
+        sb.append("}");
     }
-    sb.append("]");
-    sb.append("}");
-  }
 }
index 210953d..59b526f 100644 (file)
@@ -46,121 +46,116 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/services/search-data-service/v1/analyzers/search")
 public class AnalyzerApi {
 
-  private SearchServiceApi searchService = null;
+    private SearchServiceApi searchService = null;
 
-  // Set up the loggers.
-  private static Logger logger = LoggerFactory.getInstance().getLogger(IndexApi.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(IndexApi.class.getName());
+    // Set up the loggers.
+    private static Logger logger = LoggerFactory.getInstance().getLogger(IndexApi.class.getName());
+    private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(IndexApi.class.getName());
 
-  public AnalyzerApi( @Qualifier("searchServiceApi") SearchServiceApi searchService) {
-    this.searchService = searchService;
-  }
+    public AnalyzerApi(@Qualifier("searchServiceApi") SearchServiceApi searchService) {
+        this.searchService = searchService;
+    }
 
-  @RequestMapping(method = RequestMethod.GET,
-          consumes = {"application/json"},
-          produces = {"application/json"})
-  public ResponseEntity<String> processGet(HttpServletRequest request,
-                                           @RequestHeader HttpHeaders headers,
-                                           ApiUtils apiUtils) {
+    @RequestMapping(method = RequestMethod.GET, consumes = {"application/json"}, produces = {"application/json"})
+    public ResponseEntity<String> processGet(HttpServletRequest request, @RequestHeader HttpHeaders headers,
+            ApiUtils apiUtils) {
 
-    HttpStatus responseCode = HttpStatus.INTERNAL_SERVER_ERROR;
-    String responseString = "Undefined error";
+        HttpStatus responseCode = HttpStatus.INTERNAL_SERVER_ERROR;
+        String responseString = "Undefined error";
 
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
 
-    // Validate that the request is correctly authenticated before going
-    // any further.
-    try {
+        // Validate that the request is correctly authenticated before going
+        // any further.
+        try {
 
-      if (!searchService.validateRequest(headers, request,
-          ApiUtils.Action.GET, ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
-        logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE, "Authentication failure.");
-        return ResponseEntity.status(HttpStatus.FORBIDDEN).contentType ( MediaType.APPLICATION_JSON ).body("Authentication failure.");
-      }
+            if (!searchService.validateRequest(headers, request, ApiUtils.Action.GET,
+                    ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
+                logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE, "Authentication failure.");
+                return ResponseEntity.status(HttpStatus.FORBIDDEN).contentType(MediaType.APPLICATION_JSON)
+                        .body("Authentication failure.");
+            }
 
-    } catch (Exception e) {
+        } catch (Exception e) {
 
-      logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE,
-          "Unexpected authentication failure - cause: " + e.getMessage());
-      return ResponseEntity.status(HttpStatus.FORBIDDEN).contentType ( MediaType.APPLICATION_JSON ).body("Authentication failure.");
-    }
+            logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE,
+                    "Unexpected authentication failure - cause: " + e.getMessage());
+            return ResponseEntity.status(HttpStatus.FORBIDDEN).contentType(MediaType.APPLICATION_JSON)
+                    .body("Authentication failure.");
+        }
 
 
-    // Now, build the list of analyzers.
-    try {
-      responseString = buildAnalyzerList(ElasticSearchHttpController.getInstance()
-          .getAnalysisConfig());
-      responseCode = HttpStatus.OK;
+        // Now, build the list of analyzers.
+        try {
+            responseString = buildAnalyzerList(ElasticSearchHttpController.getInstance().getAnalysisConfig());
+            responseCode = HttpStatus.OK;
+
+        } catch (Exception e) {
+
+            logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE,
+                    "Unexpected failure retrieving analysis configuration - cause: " + e.getMessage());
+            responseString = "Failed to retrieve analysis configuration.  Cause: " + e.getMessage();
+        }
 
-    } catch (Exception e) {
+        // Build the HTTP response.
+        ResponseEntity response =
+                ResponseEntity.status(responseCode).contentType(MediaType.APPLICATION_JSON).body(responseString);
 
-      logger.warn(SearchDbMsgs.GET_ANALYZERS_FAILURE,
-          "Unexpected failure retrieving analysis configuration - cause: " + e.getMessage());
-      responseString = "Failed to retrieve analysis configuration.  Cause: " + e.getMessage();
+        // Generate our audit log.
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, responseCode.value())
+                        .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, responseCode.value()),
+                (request != null) ? request.getMethod() : "Unknown",
+                (request != null) ? request.getRequestURL().toString() : "Unknown",
+                (request != null) ? request.getRemoteHost() : "Unknown",
+                Integer.toString(response.getStatusCodeValue()));
+
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
+
+        return response;
     }
 
-    // Build the HTTP response.
-    ResponseEntity response = ResponseEntity.status(responseCode).contentType ( MediaType.APPLICATION_JSON ).body(responseString);
-
-    // Generate our audit log.
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-        new LogFields()
-            .setField(LogLine.DefinedFields.RESPONSE_CODE, responseCode.value ())
-            .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, responseCode.value()),
-        (request != null) ? request.getMethod() : "Unknown",
-        (request != null) ? request.getRequestURL ().toString () : "Unknown",
-        (request != null) ? request.getRemoteHost () : "Unknown",
-        Integer.toString(response.getStatusCodeValue ()));
-
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
-
-    return response;
-  }
-
-
-  /**
-   * This method takes a list of analyzer objects and generates a simple json
-   * structure to enumerate them.
-   *
-   * <p>Note, this includes only the aspects of the analyzer object that we want
-   * to make public to an external client.
-   *
-   * @param analysisConfig - The analysis configuration object to extract the
-   *                       analyzers from.
-   * @return - A json string enumerating the defined analyzers.
-   */
-  private String buildAnalyzerList(AnalysisConfiguration analysisConfig) {
-
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("{");
-    AtomicBoolean firstAnalyzer = new AtomicBoolean(true);
-    for (AnalyzerSchema analyzer : analysisConfig.getAnalyzers()) {
-
-      if (!firstAnalyzer.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
-
-      sb.append("{");
-      sb.append("\"name\": \"").append(analyzer.getName()).append("\", ");
-      sb.append("\"description\": \"").append(analyzer.getDescription()).append("\", ");
-      sb.append("\"behaviours\": [");
-      AtomicBoolean firstBehaviour = new AtomicBoolean(true);
-      for (String behaviour : analyzer.getBehaviours()) {
-        if (!firstBehaviour.compareAndSet(true, false)) {
-          sb.append(", ");
+
+    /**
+     * This method takes a list of analyzer objects and generates a simple json structure to enumerate them.
+     *
+     * <p>
+     * Note, this includes only the aspects of the analyzer object that we want to make public to an external client.
+     *
+     * @param analysisConfig - The analysis configuration object to extract the analyzers from.
+     * @return - A json string enumerating the defined analyzers.
+     */
+    private String buildAnalyzerList(AnalysisConfiguration analysisConfig) {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("{");
+        AtomicBoolean firstAnalyzer = new AtomicBoolean(true);
+        for (AnalyzerSchema analyzer : analysisConfig.getAnalyzers()) {
+
+            if (!firstAnalyzer.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
+
+            sb.append("{");
+            sb.append("\"name\": \"").append(analyzer.getName()).append("\", ");
+            sb.append("\"description\": \"").append(analyzer.getDescription()).append("\", ");
+            sb.append("\"behaviours\": [");
+            AtomicBoolean firstBehaviour = new AtomicBoolean(true);
+            for (String behaviour : analyzer.getBehaviours()) {
+                if (!firstBehaviour.compareAndSet(true, false)) {
+                    sb.append(", ");
+                }
+                sb.append("\"").append(behaviour).append("\"");
+            }
+            sb.append("]");
+            sb.append("}");
         }
-        sb.append("\"").append(behaviour).append("\"");
-      }
-      sb.append("]");
-      sb.append("}");
-    }
-    sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 }
index a2ef2b1..bbbc02b 100644 (file)
@@ -32,167 +32,150 @@ import org.springframework.http.HttpStatus;
 
 public class ApiUtils {
 
-  public static final String SEARCH_AUTH_POLICY_NAME = "search";
-  public static final String URL_PREFIX = "services/search-data-service/v1/search";
-
-  public enum Action {
-    POST, GET, PUT, DELETE
-  };
-
-  /**
-   * This method uses the contents of the supplied HTTP headers and request
-   * structures to populate the MDC Context used for logging purposes.
-   *
-   * @param httpReq - HTTP request structure.
-   * @param headers - HTTP headers
-   */
-//  protected static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) {
-//
-//    // Auto generate a transaction if we were not provided one.
-//    String transId = null;
-//    if (headers != null) {
-//      // transId = headers.getRequestHeaders().getFirst("X-TransactionId");
-//      transId = headers.getFirst("X-TransactionId");
-//
-//      if ((transId == null) || (transId.equals(""))) {
-//        transId = UUID.randomUUID().toString();
-//      }
-//    }
-//
-//    String fromIp = (httpReq != null) ? httpReq.getRemoteAddr() : "";
-//    String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : "";
-//
-//    MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp);
-//  }
-
-  protected static void initMdcContext ( HttpServletRequest httpReq, HttpHeaders headers) {
-
-    // Auto generate a transaction if we were not provided one.
-    String transId = null;
-    if (headers != null) {
-      // transId = headers.getRequestHeaders().getFirst("X-TransactionId");
-      transId = headers.getFirst("X-TransactionId");
-
-      if ((transId == null) || (transId.equals(""))) {
-        transId = UUID.randomUUID().toString();
-      }
-    }
+    public static final String SEARCH_AUTH_POLICY_NAME = "search";
+    public static final String URL_PREFIX = "services/search-data-service/v1/search";
+
+    public enum Action {
+        POST,
+        GET,
+        PUT,
+        DELETE
+    };
+
+    /**
+     * This method uses the contents of the supplied HTTP headers and request structures to populate the MDC Context
+     * used for logging purposes.
+     *
+     * @param httpReq - HTTP request structure.
+     * @param headers - HTTP headers
+     */
+    protected static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) {
+
+        // Auto generate a transaction if we were not provided one.
+        String transId = null;
+        if (headers != null) {
+            transId = headers.getFirst("X-TransactionId");
+
+            if ((transId == null) || (transId.equals(""))) {
+                transId = UUID.randomUUID().toString();
+            }
+        }
 
 
-    String fromIp = (httpReq != null) ? httpReq.getRemoteHost () : "";
-    String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : "";
+        String fromIp = (httpReq != null) ? httpReq.getRemoteHost() : "";
+        String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : "";
 
-    MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp);
-  }
+        MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp);
+    }
 
-  protected static void clearMdcContext() {
-    MDC.clear();
-  }
+    protected static void clearMdcContext() {
+        MDC.clear();
+    }
 
-  public static String buildIndexUri(String index) {
+    public static String buildIndexUri(String index) {
 
-    return (URL_PREFIX + "/indexes/") + index;
-  }
+        return (URL_PREFIX + "/indexes/") + index;
+    }
 
-  public static String buildDocumentUri(String index, String documentId) {
+    public static String buildDocumentUri(String index, String documentId) {
 
-    return buildIndexUri(index) + "/documents/" + documentId;
-  }
+        return buildIndexUri(index) + "/documents/" + documentId;
+    }
 
-  public static boolean validateIndexUri(String uri) {
+    public static boolean validateIndexUri(String uri) {
 
-    // If the URI starts with a leading '/' character, remove it.
-    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+        // If the URI starts with a leading '/' character, remove it.
+        uri = uri.startsWith("/") ? uri.substring(1) : uri;
 
-    // Now, tokenize the URI string.
-    String[] tokens = uri.split("/");
+        // Now, tokenize the URI string.
+        String[] tokens = uri.split("/");
 
-    return (tokens.length == 6) && (tokens[4].equals("indexes"));
+        return (tokens.length == 6) && (tokens[4].equals("indexes"));
 
-  }
+    }
 
-  public static boolean validateDocumentUri(String uri, boolean requireId) {
+    public static boolean validateDocumentUri(String uri, boolean requireId) {
 
-    // If the URI starts with a leading '/' character, remove it.
-    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+        // If the URI starts with a leading '/' character, remove it.
+        uri = uri.startsWith("/") ? uri.substring(1) : uri;
 
-    // Now, tokenize the URI string.
-    String[] tokens = uri.split("/");
+        // Now, tokenize the URI string.
+        String[] tokens = uri.split("/");
 
-    if (requireId) {
-      return (tokens.length == 8) && (tokens[4].equals("indexes")
-                                      && (tokens[6].equals("documents")));
-    } else {
-      return ((tokens.length == 8) || (tokens.length == 7))
-        && (tokens[4].equals("indexes") && (tokens[6].equals("documents")));
+        if (requireId) {
+            return (tokens.length == 8) && (tokens[4].equals("indexes") && (tokens[6].equals("documents")));
+        } else {
+            return ((tokens.length == 8) || (tokens.length == 7))
+                    && (tokens[4].equals("indexes") && (tokens[6].equals("documents")));
+        }
     }
-  }
 
-  public static String extractIndexFromUri(String uri) {
+    public static String extractIndexFromUri(String uri) {
 
-    // If the URI starts with a leading '/' character, remove it.
-    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+        // If the URI starts with a leading '/' character, remove it.
+        uri = uri.startsWith("/") ? uri.substring(1) : uri;
 
-    // Now, tokenize the URI string.
-    String[] tokens = uri.split("/");
+        // Now, tokenize the URI string.
+        String[] tokens = uri.split("/");
 
-    int i = 0;
-    for (String token : tokens) {
-      if (token.equals("indexes")) {
-        if (i + 1 < tokens.length) {
-          return tokens[i + 1];
+        int i = 0;
+        for (String token : tokens) {
+            if (token.equals("indexes")) {
+                if (i + 1 < tokens.length) {
+                    return tokens[i + 1];
+                }
+            }
+            i++;
         }
-      }
-      i++;
-    }
 
-    return null;
-  }
+        return null;
+    }
 
-  public static String extractIdFromUri(String uri) {
+    public static String extractIdFromUri(String uri) {
 
-    // If the URI starts with a leading '/' character, remove it.
-    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+        // If the URI starts with a leading '/' character, remove it.
+        uri = uri.startsWith("/") ? uri.substring(1) : uri;
 
-    // Now, tokenize the URI string.
-    String[] tokens = uri.split("/");
+        // Now, tokenize the URI string.
+        String[] tokens = uri.split("/");
 
-    int i = 0;
-    for (String token : tokens) {
-      if (token.equals("documents")) {
-        if (i + 1 < tokens.length) {
-          return tokens[i + 1];
+        int i = 0;
+        for (String token : tokens) {
+            if (token.equals("documents")) {
+                if (i + 1 < tokens.length) {
+                    return tokens[i + 1];
+                }
+            }
+            i++;
         }
-      }
-      i++;
-    }
 
-    return null;
-  }
-
-  public static String getHttpStatusString(int httpStatusCode) {
-    // Some of the status codes we use are still in draft state in the standards, and are not
-    // recognized in the javax library.  We need to manually translate these to human-readable
-    // strings.
-    String statusString = "Unknown";
-    HttpStatus status = null;
-
-    try {
-      status = HttpStatus.valueOf ( httpStatusCode );
-    } catch (IllegalArgumentException e) {}
-
-
-    if (status == null) {
-      switch (httpStatusCode) {
-      case 207:
-        statusString = "Multi Status";
-        break;
-      default:
-      }
-    } else {
-      statusString = status.getReasonPhrase ();
+        return null;
     }
 
-    return statusString;
-  }
+    public static String getHttpStatusString(int httpStatusCode) {
+        // Some of the status codes we use are still in draft state in the standards, and are not
+        // recognized in the javax library. We need to manually translate these to human-readable
+        // strings.
+        String statusString = "Unknown";
+        HttpStatus status = null;
+
+        try {
+            status = HttpStatus.valueOf(httpStatusCode);
+        } catch (IllegalArgumentException e) {
+        }
+
+
+        if (status == null) {
+            switch (httpStatusCode) {
+                case 207:
+                    statusString = "Multi Status";
+                    break;
+                default:
+            }
+        } else {
+            statusString = status.getReasonPhrase();
+        }
+
+        return statusString;
+    }
 }
index 0770bf1..bf8f187 100644 (file)
@@ -41,212 +41,196 @@ import org.springframework.http.ResponseEntity;
 
 
 /**
- * This class encapsulates the REST end points associated with performing
- * bulk operations against the document store.
+ * This class encapsulates the REST end points associated with performing bulk operations against the document store.
  */
 public class BulkApi {
 
-  /**
-   * Indicates whether or not we have performed the one-time static
-   * initialization required for performing schema validation.
-   */
-  protected static AtomicBoolean validationInitialized = new AtomicBoolean(false);
-
-  /**
-   * Factory used for importing our payload schema for validation purposes.
-   */
-  protected static JsonSchemaFactory schemaFactory = null;
-
-  /**
-   * Imported payload schema that will be used by our validation methods.
-   */
-  protected static JsonSchema schema = null;
-
-  protected SearchServiceApi searchService = null;
-
-  // Instantiate the loggers.
-  private static Logger logger = LoggerFactory.getInstance().getLogger(BulkApi.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(BulkApi.class.getName());
-
-
-  /**
-   * Create a new instance of the BulkApi end point.
-   */
-  public BulkApi(SearchServiceApi searchService) {
-    this.searchService = searchService;
-  }
-
-
-  /**
-   * Processes client requests containing a set of operations to be
-   * performed in bulk.
-   *
-   * <p>Method: POST
-   *
-   * @param operations - JSON structure enumerating the operations to be
-   *                   performed.
-   * @param request    - Raw HTTP request.
-   * @param headers    - HTTP headers.
-   * @return - A standard REST response structure.
-   */
-  public ResponseEntity<String> processPost(String operations,
-                                            HttpServletRequest request,
-                              HttpHeaders headers,
-                              DocumentStoreInterface documentStore,
-                              ApiUtils apiUtils) {
-
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    // Set a default result code and entity string for the request.
-    int resultCode = 500;
-    String resultString = "Unexpected error";
-
-    if (logger.isDebugEnabled()) {
-      logger.debug("SEARCH: Process Bulk Request - operations = ["
-          + operations.replaceAll("\n", "") + " ]");
-    }
+    /**
+     * Indicates whether or not we have performed the one-time static initialization required for performing schema
+     * validation.
+     */
+    protected static AtomicBoolean validationInitialized = new AtomicBoolean(false);
 
-    try {
+    /**
+     * Factory used for importing our payload schema for validation purposes.
+     */
+    protected static JsonSchemaFactory schemaFactory = null;
 
-      // Validate that the request is correctly authenticated before going
-      // any further.
-      if (!searchService.validateRequest(headers, request,
-          ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
-        logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Authentication failure.");
+    /**
+     * Imported payload schema that will be used by our validation methods.
+     */
+    protected static JsonSchema schema = null;
 
-        return buildResponse(HttpStatus.FORBIDDEN.value (),
-            "Authentication failure.", request, apiUtils);
-      }
+    protected SearchServiceApi searchService = null;
 
-    } catch (Exception e) {
+    // Instantiate the loggers.
+    private static Logger logger = LoggerFactory.getInstance().getLogger(BulkApi.class.getName());
+    private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(BulkApi.class.getName());
 
-      // This is a catch all for any unexpected failure trying to perform
-      // the authentication.
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE,
-          "Unexpected authentication failure - cause: " + e.getMessage());
-      if (logger.isDebugEnabled()) {
-        logger.debug("Stack Trace:\n" + e.getStackTrace());
-      }
 
-      return buildResponse(HttpStatus.FORBIDDEN.value (),
-          "Authentication failure - cause " + e.getMessage(),
-          request,
-          apiUtils);
+    /**
+     * Create a new instance of the BulkApi end point.
+     */
+    public BulkApi(SearchServiceApi searchService) {
+        this.searchService = searchService;
     }
 
-    // We expect a payload containing a JSON structure enumerating the
-    // operations to be performed.
-    if (operations == null) {
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Missing operations list payload");
-
-      return buildResponse(resultCode, "Missing payload", request, apiUtils);
-    }
-
-
-    // Marshal the supplied json string into a Java object.
-    ObjectMapper mapper = new ObjectMapper();
-    BulkRequest[] requests = null;
-    try {
-      requests = mapper.readValue(operations, BulkRequest[].class);
 
-    } catch (IOException e) {
+    /**
+     * Processes client requests containing a set of operations to be performed in bulk.
+     *
+     * <p>
+     * Method: POST
+     *
+     * @param operations - JSON structure enumerating the operations to be performed.
+     * @param request - Raw HTTP request.
+     * @param headers - HTTP headers.
+     * @return - A standard REST response structure.
+     */
+    public ResponseEntity<String> processPost(String operations, HttpServletRequest request, HttpHeaders headers,
+            DocumentStoreInterface documentStore, ApiUtils apiUtils) {
+
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        // Set a default result code and entity string for the request.
+        int resultCode = 500;
+        String resultString = "Unexpected error";
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("SEARCH: Process Bulk Request - operations = [" + operations.replaceAll("\n", "") + " ]");
+        }
+
+        try {
+
+            // Validate that the request is correctly authenticated before going
+            // any further.
+            if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                    ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
+                logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Authentication failure.");
+
+                return buildResponse(HttpStatus.FORBIDDEN.value(), "Authentication failure.", request, apiUtils);
+            }
+
+        } catch (Exception e) {
+
+            // This is a catch all for any unexpected failure trying to perform
+            // the authentication.
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE,
+                    "Unexpected authentication failure - cause: " + e.getMessage());
+            if (logger.isDebugEnabled()) {
+                logger.debug("Stack Trace:\n" + e.getStackTrace());
+            }
+
+            return buildResponse(HttpStatus.FORBIDDEN.value(), "Authentication failure - cause " + e.getMessage(),
+                    request, apiUtils);
+        }
+
+        // We expect a payload containing a JSON structure enumerating the
+        // operations to be performed.
+        if (operations == null) {
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Missing operations list payload");
+
+            return buildResponse(resultCode, "Missing payload", request, apiUtils);
+        }
+
+
+        // Marshal the supplied json string into a Java object.
+        ObjectMapper mapper = new ObjectMapper();
+        BulkRequest[] requests = null;
+        try {
+            requests = mapper.readValue(operations, BulkRequest[].class);
+
+        } catch (IOException e) {
+
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Failed to marshal operations list: " + e.getMessage());
+            if (logger.isDebugEnabled()) {
+                logger.debug("Stack Trace:\n" + e.getStackTrace());
+            }
+
+            // Populate the result code and entity string for our HTTP response
+            // and return the response to the client..
+            return buildResponse(HttpStatus.BAD_REQUEST.value(), "Unable to marshal operations: " + e.getMessage(),
+                    request, apiUtils);
+        }
+
+        // Verify that our parsed operations list actually contains some valid
+        // operations.
+        if (requests.length == 0) {
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Empty operations list in bulk request");
+
+
+            // Populate the result code and entity string for our HTTP response
+            // and return the response to the client..
+            return buildResponse(HttpStatus.BAD_REQUEST.value(), "Empty operations list in bulk request", request,
+                    apiUtils);
+        }
+        try {
+
+            // Now, forward the set of bulk operations to the DAO for processing.
+            OperationResult result = documentStore.performBulkOperations(requests);
+
+            // Populate the result code and entity string for our HTTP response.
+            resultCode = result.getResultCode();
+            resultString = (result.getFailureCause() == null) ? result.getResult() : result.getFailureCause();
+
+        } catch (DocumentStoreOperationException e) {
+
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE,
+                    "Unexpected failure communicating with document store: " + e.getMessage());
+            if (logger.isDebugEnabled()) {
+                logger.debug("Stack Trace:\n" + e.getStackTrace());
+            }
+
+            // Populate the result code and entity string for our HTTP response.
+            resultCode = HttpStatus.INTERNAL_SERVER_ERROR.value();
+            resultString = "Unexpected failure processing bulk operations: " + e.getMessage();
+        }
 
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE,
-          "Failed to marshal operations list: " + e.getMessage());
-      if (logger.isDebugEnabled()) {
-        logger.debug("Stack Trace:\n" + e.getStackTrace());
-      }
-
-      // Populate the result code and entity string for our HTTP response
-      // and return the response to the client..
-      return buildResponse(HttpStatus.BAD_REQUEST.value(),
-          "Unable to marshal operations: " + e.getMessage(),
-          request,
-          apiUtils);
+        // Build our HTTP response.
+        ResponseEntity response =
+                ResponseEntity.status(resultCode).contentType(MediaType.APPLICATION_JSON).body(resultString);
+
+        // Log the result.
+        if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) {
+            logger.info(SearchDbMsgs.PROCESSED_BULK_OPERATIONS);
+        } else {
+            logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, (String) response.getBody());
+        }
+
+        // Finally, return the HTTP response to the client.
+        return buildResponse(resultCode, resultString, request, apiUtils);
     }
 
-    // Verify that our parsed operations list actually contains some valid
-    // operations.
-    if (requests.length == 0) {
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, "Empty operations list in bulk request");
-
 
-      // Populate the result code and entity string for our HTTP response
-      // and return the response to the client..
-      return buildResponse(HttpStatus.BAD_REQUEST.value(),
-          "Empty operations list in bulk request",
-          request,
-          apiUtils);
+    /**
+     * This method generates an audit log and returns an HTTP response object.
+     *
+     * @param resultCode - The result code to report.
+     * @param resultString - The result string to report.
+     * @param request - The HTTP request to extract data from for the audit log.
+     * @return - An HTTP response object.
+     */
+    private ResponseEntity<String> buildResponse(int resultCode, String resultString, HttpServletRequest request,
+            ApiUtils apiUtils) {
+
+        ResponseEntity<String> response =
+                ResponseEntity.status(resultCode).contentType(MediaType.APPLICATION_JSON).body(resultString);
+
+        // Generate our audit log.
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode)
+                        .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, ApiUtils.getHttpStatusString(resultCode)),
+                (request != null) ? request.getMethod().toString() : "Unknown",
+                (request != null) ? request.getRequestURL().toString() : "Unknown",
+                (request != null) ? request.getRemoteHost() : "Unknown",
+                Integer.toString(response.getStatusCodeValue()));
+
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
+
+        return response;
     }
-    try {
-
-      // Now, forward the set of bulk operations to the DAO for processing.
-      OperationResult result = documentStore.performBulkOperations(requests);
-
-      // Populate the result code and entity string for our HTTP response.
-      resultCode = result.getResultCode();
-      resultString = (result.getFailureCause() == null)
-          ? result.getResult() : result.getFailureCause();
-
-    } catch (DocumentStoreOperationException e) {
-
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE,
-          "Unexpected failure communicating with document store: " + e.getMessage());
-      if (logger.isDebugEnabled()) {
-        logger.debug("Stack Trace:\n" + e.getStackTrace());
-      }
-
-      // Populate the result code and entity string for our HTTP response.
-      resultCode = HttpStatus.INTERNAL_SERVER_ERROR.value ();
-      resultString = "Unexpected failure processing bulk operations: " + e.getMessage();
-    }
-
-    // Build our HTTP response.
-    ResponseEntity response = ResponseEntity.status(resultCode).contentType ( MediaType.APPLICATION_JSON ).body(resultString);
-
-    // Log the result.
-    if ((response.getStatusCodeValue () >= 200) && (response.getStatusCodeValue () < 300)) {
-      logger.info(SearchDbMsgs.PROCESSED_BULK_OPERATIONS);
-    } else {
-      logger.warn(SearchDbMsgs.BULK_OPERATION_FAILURE, (String) response.getBody ());
-    }
-
-    // Finally, return the HTTP response to the client.
-    return buildResponse(resultCode, resultString, request, apiUtils);
-  }
-
-
-  /**
-   * This method generates an audit log and returns an HTTP response object.
-   *
-   * @param resultCode   - The result code to report.
-   * @param resultString - The result string to report.
-   * @param request       - The HTTP request to extract data from for the audit log.
-   * @return - An HTTP response object.
-   */
-  private ResponseEntity<String> buildResponse(int resultCode, String resultString,
-                                               HttpServletRequest request, ApiUtils apiUtils) {
-
-    ResponseEntity<String> response = ResponseEntity.status(resultCode).contentType ( MediaType.APPLICATION_JSON ) .body(resultString);
-
-    // Generate our audit log.
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-        new LogFields()
-            .setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode)
-            .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                ApiUtils.getHttpStatusString(resultCode)),
-        (request != null) ? request.getMethod().toString () : "Unknown",
-        (request != null) ? request.getRequestURL ().toString () : "Unknown",
-        (request != null) ? request.getRemoteHost ()  : "Unknown",
-        Integer.toString(response.getStatusCodeValue ()));
-
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
-
-    return response;
-  }
 }
index d2e3f5c..7c096a6 100644 (file)
@@ -22,28 +22,28 @@ package org.onap.aai.sa.rest;
 
 public class BulkMetaData {
 
-  private String url;
-  private String etag;
+    private String url;
+    private String etag;
 
 
-  public String getUrl() {
-    return url;
-  }
+    public String getUrl() {
+        return url;
+    }
 
-  public void setUrl(String url) {
-    this.url = url;
-  }
+    public void setUrl(String url) {
+        this.url = url;
+    }
 
-  public String getEtag() {
-    return etag;
-  }
+    public String getEtag() {
+        return etag;
+    }
 
-  public void setEtag(String anEtag) {
-    this.etag = anEtag;
-  }
+    public void setEtag(String anEtag) {
+        this.etag = anEtag;
+    }
 
-  @Override
-  public String toString() {
-    return "MetaData: [url=" + url + ", etag=" + etag + "]";
-  }
+    @Override
+    public String toString() {
+        return "MetaData: [url=" + url + ", etag=" + etag + "]";
+    }
 }
index 41325e5..1490f97 100644 (file)
 package org.onap.aai.sa.rest;
 
 /**
- * This class represents a single instance of an operation to be performed
- * as part of a bulk request.
+ * This class represents a single instance of an operation to be performed as part of a bulk request.
  */
 public class BulkOperation {
 
-  /**
-   * Contains meta data to be passed to the document store for it
-   * to perform the operation.
-   */
-  private BulkMetaData metaData;
+    /**
+     * Contains meta data to be passed to the document store for it to perform the operation.
+     */
+    private BulkMetaData metaData;
 
-  /**
-   * Contains the contents of the document to be acted on.
-   */
-  private Document document;
+    /**
+     * Contains the contents of the document to be acted on.
+     */
+    private Document document;
 
 
-  public void setMetaData(BulkMetaData metaData) {
-    this.metaData = metaData;
-  }
+    public void setMetaData(BulkMetaData metaData) {
+        this.metaData = metaData;
+    }
 
-  public BulkMetaData getMetaData() {
-    return metaData;
-  }
+    public BulkMetaData getMetaData() {
+        return metaData;
+    }
 
-  public Document getDocument() {
-    return document;
-  }
+    public Document getDocument() {
+        return document;
+    }
 
-  public void setDocument(Document document) {
-    this.document = document;
-  }
+    public void setDocument(Document document) {
+        this.document = document;
+    }
 
-  @Override
-  public String toString() {
-    return "Operation: [" + metaData.toString() + ", " + document + "]";
-  }
+    @Override
+    public String toString() {
+        return "Operation: [" + metaData.toString() + ", " + document + "]";
+    }
 }
index e86d7bd..1f8b50e 100644 (file)
@@ -22,90 +22,89 @@ package org.onap.aai.sa.rest;
 
 
 /**
- * This class represents a single instance of a request from the search client
- * that would be part of a bundle of such operations sent in a single bulk
- * request.
+ * This class represents a single instance of a request from the search client that would be part of a bundle of such
+ * operations sent in a single bulk request.
  */
 public class BulkRequest {
 
-  public enum OperationType {
-    CREATE,
-    UPDATE,
-    DELETE
-  }
-
-  private BulkOperation create;
-  private BulkOperation update;
-  private BulkOperation delete;
-
-  public BulkOperation getCreate() {
-    return create;
-  }
-
-  public void setCreate(BulkOperation create) {
-    this.create = create;
-  }
-
-  public BulkOperation getUpdate() {
-    return update;
-  }
-
-  public void setUpdate(BulkOperation update) {
-    this.update = update;
-  }
-
-  public BulkOperation getDelete() {
-    return delete;
-  }
-
-  public void setDelete(BulkOperation delete) {
-    this.delete = delete;
-  }
-
-  public OperationType getOperationType() {
-
-    if (create != null) {
-      return OperationType.CREATE;
-    } else if (update != null) {
-      return OperationType.UPDATE;
-    } else if (delete != null) {
-      return OperationType.DELETE;
-    } else {
-      return null;
+    public enum OperationType {
+        CREATE,
+        UPDATE,
+        DELETE
     }
-  }
-
-  public BulkOperation getOperation() {
-    if (create != null) {
-      return create;
-    } else if (update != null) {
-      return update;
-    } else if (delete != null) {
-      return delete;
-    } else {
-      return null;
+
+    private BulkOperation create;
+    private BulkOperation update;
+    private BulkOperation delete;
+
+    public BulkOperation getCreate() {
+        return create;
+    }
+
+    public void setCreate(BulkOperation create) {
+        this.create = create;
+    }
+
+    public BulkOperation getUpdate() {
+        return update;
     }
-  }
-
-  public String getIndex() {
-    return ApiUtils.extractIndexFromUri(getOperation().getMetaData().getUrl());
-  }
-
-  public String getId() {
-    return ApiUtils.extractIdFromUri(getOperation().getMetaData().getUrl());
-  }
-
-  @Override
-  public String toString() {
-
-    if (create != null) {
-      return "create: [" + create.toString() + "]\n";
-    } else if (update != null) {
-      return "update: [" + update.toString() + "]\n";
-    } else if (delete != null) {
-      return "delete: [" + delete.toString() + "]\n";
-    } else {
-      return "UNDEFINED";
+
+    public void setUpdate(BulkOperation update) {
+        this.update = update;
+    }
+
+    public BulkOperation getDelete() {
+        return delete;
+    }
+
+    public void setDelete(BulkOperation delete) {
+        this.delete = delete;
+    }
+
+    public OperationType getOperationType() {
+
+        if (create != null) {
+            return OperationType.CREATE;
+        } else if (update != null) {
+            return OperationType.UPDATE;
+        } else if (delete != null) {
+            return OperationType.DELETE;
+        } else {
+            return null;
+        }
+    }
+
+    public BulkOperation getOperation() {
+        if (create != null) {
+            return create;
+        } else if (update != null) {
+            return update;
+        } else if (delete != null) {
+            return delete;
+        } else {
+            return null;
+        }
+    }
+
+    public String getIndex() {
+        return ApiUtils.extractIndexFromUri(getOperation().getMetaData().getUrl());
+    }
+
+    public String getId() {
+        return ApiUtils.extractIdFromUri(getOperation().getMetaData().getUrl());
+    }
+
+    @Override
+    public String toString() {
+
+        if (create != null) {
+            return "create: [" + create.toString() + "]\n";
+        } else if (update != null) {
+            return "update: [" + update.toString() + "]\n";
+        } else if (delete != null) {
+            return "delete: [" + delete.toString() + "]\n";
+        } else {
+            return "UNDEFINED";
+        }
     }
-  }
 }
index 50ef9ea..89ac2e1 100644 (file)
@@ -28,33 +28,33 @@ import java.util.HashMap;
 import java.util.Map;
 
 public class Document {
-  private Map<String, Object> fields = new HashMap<String, Object>();
+    private Map<String, Object> fields = new HashMap<String, Object>();
 
-  @JsonAnyGetter
-  public Map<String, Object> getFields() {
-    return fields;
-  }
+    @JsonAnyGetter
+    public Map<String, Object> getFields() {
+        return fields;
+    }
 
-  @JsonAnySetter
-  public void setField(String name, Object value) {
-    fields.put(name, value);
-  }
+    @JsonAnySetter
+    public void setField(String name, Object value) {
+        fields.put(name, value);
+    }
 
-  public String toJson() throws JsonProcessingException {
+    public String toJson() throws JsonProcessingException {
 
-    ObjectMapper mapper = new ObjectMapper();
-    return mapper.writeValueAsString(this);
-  }
+        ObjectMapper mapper = new ObjectMapper();
+        return mapper.writeValueAsString(this);
+    }
 
 
-  @Override
-  public String toString() {
-    String str = "Document: [";
-    for (String key : fields.keySet()) {
-      str += key + ": " + fields.get(key);
-    }
-    str += "]";
+    @Override
+    public String toString() {
+        String str = "Document: [";
+        for (String key : fields.keySet()) {
+            str += key + ": " + fields.get(key);
+        }
+        str += "]";
 
-    return str;
-  }
+        return str;
+    }
 }
index ca1b351..2d9eb1f 100644 (file)
@@ -25,11 +25,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-//import javax.ws.rs.core.HttpHeaders;
-//import javax.ws.rs.core.MediaType;
-//import javax.ws.rs.core.Response;
-//import javax.ws.rs.core.Response.Status;
-// Spring Imports
 import org.onap.aai.cl.api.LogFields;
 import org.onap.aai.cl.api.LogLine;
 import org.onap.aai.cl.api.Logger;
@@ -48,587 +43,564 @@ import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 
 public class DocumentApi {
-  private static final String REQUEST_HEADER_RESOURCE_VERSION = "If-Match";
-  private static final String RESPONSE_HEADER_RESOURCE_VERSION = "ETag";
-  private static final String REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION = "X-CreateIndex";
-  
-  protected SearchServiceApi searchService = null;
-
-  private Logger logger = LoggerFactory.getInstance().getLogger(DocumentApi.class.getName());
-  private Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(DocumentApi.class.getName());
-
-  public DocumentApi(SearchServiceApi searchService) {
-    this.searchService = searchService;
-  }
-
-  public ResponseEntity<String> processPost(String content, HttpServletRequest request, HttpHeaders headers,
-                              HttpServletResponse httpResponse, String index,
-                              DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-      if (content == null) {
-        return handleError(request, content, HttpStatus.BAD_REQUEST);
-      }
-
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "DocumentApi.processPost",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
-      document.setContent(content);
-
-      DocumentOperationResult result = documentStore.createDocument(index, document, implicitlyCreateIndex(headers));
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
-      } else {
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-
-      if (httpResponse != null) {
-        httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
-      }
-      ResponseEntity response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-      logResult(request,  HttpStatus.valueOf ( response.getStatusCodeValue () ));
-      logResult(request, HttpStatus.valueOf ( response.getStatusCodeValue () ));
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+    private static final String REQUEST_HEADER_RESOURCE_VERSION = "If-Match";
+    private static final String RESPONSE_HEADER_RESOURCE_VERSION = "ETag";
+    private static final String REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION = "X-CreateIndex";
+
+    protected SearchServiceApi searchService = null;
+
+    private Logger logger = LoggerFactory.getInstance().getLogger(DocumentApi.class.getName());
+    private Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(DocumentApi.class.getName());
+
+    public DocumentApi(SearchServiceApi searchService) {
+        this.searchService = searchService;
     }
-  }
-
-  public ResponseEntity<String> processPut(String content, HttpServletRequest request, HttpHeaders headers,
-                             HttpServletResponse httpResponse, String index,
-                             String id, DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-      if (content == null) {
-        return handleError(request, content, HttpStatus.BAD_REQUEST);
-      }
-
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.PUT,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "DocumentApi.processPut",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
-
-      DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
-      document.setId(id);
-      document.setContent(content);
-      document.setVersion(resourceVersion);
-
-      DocumentOperationResult result = null;
-      if (resourceVersion == null) {
-        result = documentStore.createDocument(index, document, implicitlyCreateIndex(headers));
-      } else {
-        result = documentStore.updateDocument(index, document, implicitlyCreateIndex(headers));
-      }
-
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
-      } else {
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-      if (httpResponse != null) {
-        httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
-      }
-      ResponseEntity response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-      logResult(request, HttpStatus.valueOf ( response.getStatusCodeValue () ));
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+
+    public ResponseEntity<String> processPost(String content, HttpServletRequest request, HttpHeaders headers,
+            HttpServletResponse httpResponse, String index, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+            if (content == null) {
+                return handleError(request, content, HttpStatus.BAD_REQUEST);
+            }
+
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "DocumentApi.processPost", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
+            document.setContent(content);
+
+            DocumentOperationResult result =
+                    documentStore.createDocument(index, document, implicitlyCreateIndex(headers));
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+
+            if (httpResponse != null) {
+                httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
+            }
+            ResponseEntity response =
+                    ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON).body(output);
+            logResult(request, HttpStatus.valueOf(response.getStatusCodeValue()));
+            logResult(request, HttpStatus.valueOf(response.getStatusCodeValue()));
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
-
-  public ResponseEntity<String> processDelete(String content, HttpServletRequest request, HttpHeaders headers,
-                                HttpServletResponse httpResponse, String index, String id,
-                                DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.DELETE,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "DocumentApi.processDelete",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
-      if (resourceVersion == null || resourceVersion.isEmpty()) {
-        return handleError(request, "Request header 'If-Match' missing",
-            HttpStatus.BAD_REQUEST);
-      }
-
-      DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
-      document.setId(id);
-      document.setVersion(resourceVersion);
-
-      DocumentOperationResult result = documentStore.deleteDocument(index, document);
-      String output = null;
-      if (!(result.getResultCode() >= 200 && result.getResultCode() <= 299)) { //
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-
-      if (httpResponse != null) {
-        httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
-      }
-      ResponseEntity response;
-      if (output == null) {
-        response = ResponseEntity.status(result.getResultCode()).build();
-      } else {
-        response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-      }
-
-      logResult(request, HttpStatus.valueOf ( response.getStatusCodeValue () ));
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+
+    public ResponseEntity<String> processPut(String content, HttpServletRequest request, HttpHeaders headers,
+            HttpServletResponse httpResponse, String index, String id, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+            if (content == null) {
+                return handleError(request, content, HttpStatus.BAD_REQUEST);
+            }
+
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.PUT,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "DocumentApi.processPut", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
+
+            DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
+            document.setId(id);
+            document.setContent(content);
+            document.setVersion(resourceVersion);
+
+            DocumentOperationResult result = null;
+            if (resourceVersion == null) {
+                result = documentStore.createDocument(index, document, implicitlyCreateIndex(headers));
+            } else {
+                result = documentStore.updateDocument(index, document, implicitlyCreateIndex(headers));
+            }
+
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+            if (httpResponse != null) {
+                httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
+            }
+            ResponseEntity response =
+                    ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON).body(output);
+            logResult(request, HttpStatus.valueOf(response.getStatusCodeValue()));
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
-
-  public ResponseEntity<String> processGet(String content, HttpServletRequest request, HttpHeaders headers,
-                             HttpServletResponse httpResponse, String index, String id,
-                             DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.GET,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "DocumentApi.processGet",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
-
-      DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
-      document.setId(id);
-      document.setVersion(resourceVersion);
-
-      DocumentOperationResult result = documentStore.getDocument(index, document);
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
-      } else {
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-      if (httpResponse != null) {
-        httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
-      }
-      ResponseEntity response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-      logResult(request, HttpStatus.valueOf ( response.getStatusCodeValue () ));
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+
+    public ResponseEntity<String> processDelete(String content, HttpServletRequest request, HttpHeaders headers,
+            HttpServletResponse httpResponse, String index, String id, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.DELETE,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "DocumentApi.processDelete", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
+            if (resourceVersion == null || resourceVersion.isEmpty()) {
+                return handleError(request, "Request header 'If-Match' missing", HttpStatus.BAD_REQUEST);
+            }
+
+            DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
+            document.setId(id);
+            document.setVersion(resourceVersion);
+
+            DocumentOperationResult result = documentStore.deleteDocument(index, document);
+            String output = null;
+            if (!(result.getResultCode() >= 200 && result.getResultCode() <= 299)) { //
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+
+            if (httpResponse != null) {
+                httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
+            }
+            ResponseEntity response;
+            if (output == null) {
+                response = ResponseEntity.status(result.getResultCode()).build();
+            } else {
+                response = ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON)
+                        .body(output);
+            }
+
+            logResult(request, HttpStatus.valueOf(response.getStatusCodeValue()));
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
-
-  public ResponseEntity<String> processSearchWithGet(String content, HttpServletRequest request,
-                                       HttpHeaders headers, String index,
-                                       String queryText, DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.GET,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "processSearchWithGet",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      SearchOperationResult result = documentStore.search(index, queryText);
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = mapper.writerWithDefaultPrettyPrinter()
-            .writeValueAsString(result.getSearchResult());
-      } else {
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-      ResponseEntity response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+
+    public ResponseEntity<String> processGet(String content, HttpServletRequest request, HttpHeaders headers,
+            HttpServletResponse httpResponse, String index, String id, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.GET,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "DocumentApi.processGet", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            String resourceVersion = headers.getFirst(REQUEST_HEADER_RESOURCE_VERSION);
+
+            DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl();
+            document.setId(id);
+            document.setVersion(resourceVersion);
+
+            DocumentOperationResult result = documentStore.getDocument(index, document);
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument());
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+            if (httpResponse != null) {
+                httpResponse.setHeader(RESPONSE_HEADER_RESOURCE_VERSION, result.getResultVersion());
+            }
+            ResponseEntity response =
+                    ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON).body(output);
+            logResult(request, HttpStatus.valueOf(response.getStatusCodeValue()));
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
 
-  public ResponseEntity<String> queryWithGetWithPayload(String content, HttpServletRequest request,
-                                          HttpHeaders headers, String index,
-                                          DocumentStoreInterface documentStore) {
+    public ResponseEntity<String> processSearchWithGet(String content, HttpServletRequest request, HttpHeaders headers,
+            String index, String queryText, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.GET,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "processSearchWithGet", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            SearchOperationResult result = documentStore.search(index, queryText);
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getSearchResult());
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+            ResponseEntity response =
+                    ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON).body(output);
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    public ResponseEntity<String> queryWithGetWithPayload(String content, HttpServletRequest request,
+            HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
 
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
 
-    logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "GET", (request != null)
-        ? request.getRequestURL ().toString () : "");
-    if (logger.isDebugEnabled()) {
-      logger.debug("Request Body: " + content);
+        logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "GET",
+                (request != null) ? request.getRequestURL().toString() : "");
+        if (logger.isDebugEnabled()) {
+            logger.debug("Request Body: " + content);
+        }
+        return processQuery(index, content, request, headers, documentStore);
     }
-    return processQuery(index, content, request, headers, documentStore);
-  }
 
-  public ResponseEntity<String> processSearchWithPost(String content, HttpServletRequest request,
-                                        HttpHeaders headers, String index,
-                                        DocumentStoreInterface documentStore) {
+    public ResponseEntity<String> processSearchWithPost(String content, HttpServletRequest request, HttpHeaders headers,
+            String index, DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
 
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
+        logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "POST",
+                (request != null) ? request.getRequestURL().toString() : "");
+        if (logger.isDebugEnabled()) {
+            logger.debug("Request Body: " + content);
+        }
 
-    logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "POST", (request != null)
-        ? request.getRequestURL ().toString () : "");
-    if (logger.isDebugEnabled()) {
-      logger.debug("Request Body: " + content);
+        return processQuery(index, content, request, headers, documentStore);
     }
 
-    return processQuery(index, content, request, headers, documentStore);
-  }
 
+    public ResponseEntity<String> processSuggestQueryWithPost(String content, HttpServletRequest request,
+            HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
 
-  public ResponseEntity<String> processSuggestQueryWithPost(String content, HttpServletRequest request,
-                                              HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
 
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
+        logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "POST",
+                (request != null) ? request.getRequestURL().toString() : "");
+        if (logger.isDebugEnabled()) {
+            logger.debug("Request Body: " + content);
+        }
 
-    logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "POST",
-            (request != null) ? request.getRequestURL().toString() : "");
-    if (logger.isDebugEnabled()) {
-      logger.debug("Request Body: " + content);
+        return processSuggestQuery(index, content, request, headers, documentStore);
     }
 
-    return processSuggestQuery(index, content, request, headers, documentStore);
-  }
-
-  /**
-   * Common handler for query requests. This is called by both the GET with
-   * payload and POST with payload variants of the query endpoint.
-   *
-   * @param index   - The index to be queried against.
-   * @param content - The payload containing the query structure.
-   * @param request - The HTTP request.
-   * @param headers - The HTTP headers.
-   * @return - A standard HTTP response.
-   */
-  private ResponseEntity processQuery(String index, String content, HttpServletRequest request,
-                                HttpHeaders headers, DocumentStoreInterface documentStore) {
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-
-      // Make sure that we were supplied a payload before proceeding.
-      if (content == null) {
-        return handleError(request, content, HttpStatus.BAD_REQUEST);
-      }
-
-      // Validate that the request has the appropriate authorization.
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
-            ApiUtils.SEARCH_AUTH_POLICY_NAME);
-
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL,
-            "processQuery",
-            e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      SearchStatement searchStatement;
-
-      try {
-        // Marshall the supplied request payload into a search statement
-        // object.
-        searchStatement = mapper.readValue(content, SearchStatement.class);
-
-      } catch (Exception e) {
-        return handleError(request, e.getMessage(), HttpStatus.BAD_REQUEST);
-      }
-
-      // Now, submit the search statement, translated into
-      // ElasticSearch syntax, to the document store DAO.
-      SearchOperationResult result = documentStore.searchWithPayload(index,
-          searchStatement.toElasticSearch());
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = prepareOutput(mapper, result);
-      } else {
-        output = result.getError() != null
-            ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-            : result.getFailureCause();
-      }
-      ResponseEntity response = ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(output);
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+    /**
+     * Common handler for query requests. This is called by both the GET with payload and POST with payload variants of
+     * the query endpoint.
+     *
+     * @param index - The index to be queried against.
+     * @param content - The payload containing the query structure.
+     * @param request - The HTTP request.
+     * @param headers - The HTTP headers.
+     * @return - A standard HTTP response.
+     */
+    private ResponseEntity processQuery(String index, String content, HttpServletRequest request, HttpHeaders headers,
+            DocumentStoreInterface documentStore) {
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+
+            // Make sure that we were supplied a payload before proceeding.
+            if (content == null) {
+                return handleError(request, content, HttpStatus.BAD_REQUEST);
+            }
+
+            // Validate that the request has the appropriate authorization.
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "processQuery", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            SearchStatement searchStatement;
+
+            try {
+                // Marshall the supplied request payload into a search statement
+                // object.
+                searchStatement = mapper.readValue(content, SearchStatement.class);
+
+            } catch (Exception e) {
+                return handleError(request, e.getMessage(), HttpStatus.BAD_REQUEST);
+            }
+
+            // Now, submit the search statement, translated into
+            // ElasticSearch syntax, to the document store DAO.
+            SearchOperationResult result = documentStore.searchWithPayload(index, searchStatement.toElasticSearch());
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = prepareOutput(mapper, result);
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+            ResponseEntity response =
+                    ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON).body(output);
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
-
-
-  /**
-   * Common handler for query requests. This is called by both the GET with payload and POST with
-   * payload variants of the query endpoint.
-   *
-   * @param index - The index to be queried against.
-   * @param content - The payload containing the query structure.
-   * @param request - The HTTP request.
-   * @param headers - The HTTP headers.
-   * @return - A standard HTTP response.
-   */
-  private ResponseEntity<String> processSuggestQuery(String index, String content, HttpServletRequest request,
-                                       HttpHeaders headers, DocumentStoreInterface documentStore) {
-
-    try {
-      ObjectMapper mapper = new ObjectMapper();
-      mapper.setSerializationInclusion(Include.NON_EMPTY);
-
-      // Make sure that we were supplied a payload before proceeding.
-      if (content == null) {
-        return handleError(request, content, HttpStatus.BAD_REQUEST);
-      }
-
-      // Validate that the request has the appropriate authorization.
-      boolean isValid;
-      try {
-        isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
-                ApiUtils.SEARCH_AUTH_POLICY_NAME);
-
-      } catch (Exception e) {
-        logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "processQuery", e.getMessage());
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      if (!isValid) {
-        return handleError(request, content, HttpStatus.FORBIDDEN);
-      }
-
-      SuggestionStatement suggestionStatement;
-
-      try {
-        // Marshall the supplied request payload into a search statement
-        // object.
-        suggestionStatement = mapper.readValue(content, SuggestionStatement.class);
-
-      } catch (Exception e) {
-        return handleError(request, e.getMessage(), HttpStatus.BAD_REQUEST);
-      }
-
-      // Now, submit the search statement, translated into
-      // ElasticSearch syntax, to the document store DAO.
-      SearchOperationResult result =
-              documentStore.suggestionQueryWithPayload(index, suggestionStatement.toElasticSearch());
-      String output = null;
-      if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
-        output = prepareSuggestOutput(mapper, result);
-      } else {
-        output = result.getError() != null
-                ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
-                : result.getFailureCause();
-      }
-      ResponseEntity<String> response = ResponseEntity.status(result.getResultCode()).body(output);
-
-      // Clear the MDC context so that no other transaction inadvertently
-      // uses our transaction id.
-      ApiUtils.clearMdcContext();
-
-      return response;
-
-    } catch (Exception e) {
-      return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+
+
+    /**
+     * Common handler for query requests. This is called by both the GET with payload and POST with payload variants of
+     * the query endpoint.
+     *
+     * @param index - The index to be queried against.
+     * @param content - The payload containing the query structure.
+     * @param request - The HTTP request.
+     * @param headers - The HTTP headers.
+     * @return - A standard HTTP response.
+     */
+    private ResponseEntity<String> processSuggestQuery(String index, String content, HttpServletRequest request,
+            HttpHeaders headers, DocumentStoreInterface documentStore) {
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setSerializationInclusion(Include.NON_EMPTY);
+
+            // Make sure that we were supplied a payload before proceeding.
+            if (content == null) {
+                return handleError(request, content, HttpStatus.BAD_REQUEST);
+            }
+
+            // Validate that the request has the appropriate authorization.
+            boolean isValid;
+            try {
+                isValid = searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                        ApiUtils.SEARCH_AUTH_POLICY_NAME);
+
+            } catch (Exception e) {
+                logger.info(SearchDbMsgs.EXCEPTION_DURING_METHOD_CALL, "processQuery", e.getMessage());
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            if (!isValid) {
+                return handleError(request, content, HttpStatus.FORBIDDEN);
+            }
+
+            SuggestionStatement suggestionStatement;
+
+            try {
+                // Marshall the supplied request payload into a search statement
+                // object.
+                suggestionStatement = mapper.readValue(content, SuggestionStatement.class);
+
+            } catch (Exception e) {
+                return handleError(request, e.getMessage(), HttpStatus.BAD_REQUEST);
+            }
+
+            // Now, submit the search statement, translated into
+            // ElasticSearch syntax, to the document store DAO.
+            SearchOperationResult result =
+                    documentStore.suggestionQueryWithPayload(index, suggestionStatement.toElasticSearch());
+            String output = null;
+            if (result.getResultCode() >= 200 && result.getResultCode() <= 299) {
+                output = prepareSuggestOutput(mapper, result);
+            } else {
+                output = result.getError() != null
+                        ? mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getError())
+                        : result.getFailureCause();
+            }
+            ResponseEntity<String> response = ResponseEntity.status(result.getResultCode()).body(output);
+
+            // Clear the MDC context so that no other transaction inadvertently
+            // uses our transaction id.
+            ApiUtils.clearMdcContext();
+
+            return response;
+
+        } catch (Exception e) {
+            return handleError(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
-  }
-  
-  /**
-   * Checks the supplied HTTP headers to see if we should allow the underlying document 
-   * store to implicitly create the index referenced in a document PUT or POST if it
-   * does not already exist in the data store.
-   * 
-   * @param headers - The HTTP headers to examine.
-   * 
-   * @return - true if the headers indicate that missing indices should be implicitly created,
-   *           false otherwise.
-   */
-  private boolean implicitlyCreateIndex(HttpHeaders headers) {
-    
-    boolean createIndexIfNotPresent = false;
-    String implicitIndexCreationHeader = 
-        headers.getFirst(REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION);
-    
-    if( (implicitIndexCreationHeader != null) && (implicitIndexCreationHeader.equals("true")) ) {
-      createIndexIfNotPresent = true;
+
+    /**
+     * Checks the supplied HTTP headers to see if we should allow the underlying document store to implicitly create the
+     * index referenced in a document PUT or POST if it does not already exist in the data store.
+     *
+     * @param headers - The HTTP headers to examine.
+     *
+     * @return - true if the headers indicate that missing indices should be implicitly created, false otherwise.
+     */
+    private boolean implicitlyCreateIndex(HttpHeaders headers) {
+
+        boolean createIndexIfNotPresent = false;
+        String implicitIndexCreationHeader = headers.getFirst(REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION);
+
+        if ((implicitIndexCreationHeader != null) && (implicitIndexCreationHeader.equals("true"))) {
+            createIndexIfNotPresent = true;
+        }
+
+        return createIndexIfNotPresent;
+    }
+
+    private String prepareOutput(ObjectMapper mapper, SearchOperationResult result) throws JsonProcessingException {
+        StringBuffer output = new StringBuffer();
+        output.append("{\r\n\"searchResult\":");
+        output.append(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getSearchResult()));
+        AggregationResults aggs = result.getAggregationResult();
+        if (aggs != null) {
+            output.append(",\r\n\"aggregationResult\":");
+            output.append(mapper.setSerializationInclusion(Include.NON_NULL).writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(aggs));
+        }
+        output.append("\r\n}");
+        return output.toString();
+    }
+
+    private String prepareSuggestOutput(ObjectMapper mapper, SearchOperationResult result)
+            throws JsonProcessingException {
+        StringBuffer output = new StringBuffer();
+        output.append("{\r\n\"searchResult\":");
+        output.append(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getSuggestResult()));
+        AggregationResults aggs = result.getAggregationResult();
+        if (aggs != null) {
+            output.append(",\r\n\"aggregationResult\":");
+            output.append(mapper.setSerializationInclusion(Include.NON_NULL).writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(aggs));
+        }
+        output.append("\r\n}");
+        return output.toString();
     }
-    
-    return createIndexIfNotPresent;
-  }
-
-  private String prepareOutput(ObjectMapper mapper, SearchOperationResult result)
-          throws JsonProcessingException {
-    StringBuffer output = new StringBuffer();
-    output.append("{\r\n\"searchResult\":");
-    output.append(
-            mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getSearchResult()));
-    AggregationResults aggs = result.getAggregationResult();
-    if (aggs != null) {
-      output.append(",\r\n\"aggregationResult\":");
-      output.append(mapper.setSerializationInclusion(Include.NON_NULL)
-              .writerWithDefaultPrettyPrinter().writeValueAsString(aggs));
+
+    private ResponseEntity handleError(HttpServletRequest request, String message, HttpStatus status) {
+        logResult(request, status);
+        return ResponseEntity.status(status).contentType(MediaType.APPLICATION_JSON).body(message);
     }
-    output.append("\r\n}");
-    return output.toString();
-  }
-
-  private String prepareSuggestOutput(ObjectMapper mapper, SearchOperationResult result)
-          throws JsonProcessingException {
-    StringBuffer output = new StringBuffer();
-    output.append("{\r\n\"searchResult\":");
-    output.append(
-            mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getSuggestResult()));
-    AggregationResults aggs = result.getAggregationResult();
-    if (aggs != null) {
-      output.append(",\r\n\"aggregationResult\":");
-      output.append(mapper.setSerializationInclusion(Include.NON_NULL)
-              .writerWithDefaultPrettyPrinter().writeValueAsString(aggs));
+
+    void logResult(HttpServletRequest request, HttpStatus status) {
+
+        logger.info(SearchDbMsgs.PROCESS_REST_REQUEST, (request != null) ? request.getMethod().toString() : "",
+                (request != null) ? request.getRequestURL().toString() : "",
+                (request != null) ? request.getRemoteHost() : "", Integer.toString(status.value()));
+
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, status.value())
+                        .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, status.getReasonPhrase()),
+                (request != null) ? request.getMethod().toString() : "",
+                (request != null) ? request.getRequestURL().toString() : "",
+                (request != null) ? request.getRemoteHost() : "", Integer.toString(status.value()));
+
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
     }
-    output.append("\r\n}");
-    return output.toString();
-  }
-
-  private ResponseEntity handleError( HttpServletRequest request, String message, HttpStatus status) {
-    logResult(request, status);
-    return ResponseEntity.status(status).contentType ( MediaType.APPLICATION_JSON ).body(message);
-  }
-
-  void logResult(HttpServletRequest request, HttpStatus status) {
-
-    logger.info(SearchDbMsgs.PROCESS_REST_REQUEST, (request != null) ? request.getMethod().toString () : "",
-        (request != null) ? request.getRequestURL ().toString () : "",
-        (request != null) ? request.getRemoteHost () : "", Integer.toString(status.value ()));
-
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-        new LogFields()
-            .setField(LogLine.DefinedFields.RESPONSE_CODE, status.value())
-            .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, status.getReasonPhrase()),
-        (request != null) ? request.getMethod().toString () : "",
-        (request != null) ? request.getRequestURL ().toString () : "",
-        (request != null) ? request.getRemoteHost () : "", Integer.toString(status.value()));
-
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
-  }
 }
index f5840e2..3371fcd 100644 (file)
@@ -32,398 +32,383 @@ import org.onap.aai.sa.searchdbabstraction.elasticsearch.dao.DocumentStoreInterf
 import org.onap.aai.sa.searchdbabstraction.elasticsearch.exception.DocumentStoreOperationException;
 import org.onap.aai.sa.searchdbabstraction.entity.OperationResult;
 import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs;
-// Spring Imports
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
-// import org.springframework.http.server.HttpServletRequest;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 
 
 /**
- * This class encapsulates the REST end points associated with manipulating
- * indexes in the document store.
+ * This class encapsulates the REST end points associated with manipulating indexes in the document store.
  */
 public class IndexApi {
 
 
-  private static final String HEADER_VALIDATION_SUCCESS = "SUCCESS";
-  protected SearchServiceApi searchService = null;
-
-  /**
-   * Configuration for the custom analyzers that will be used for indexing.
-   */
-  protected AnalysisConfiguration analysisConfig;
-
-  // Set up the loggers.
-  private static Logger logger = LoggerFactory.getInstance()
-    .getLogger(IndexApi.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-    .getAuditLogger(IndexApi.class.getName());
-
-
-  public IndexApi(SearchServiceApi searchService) {
-    this.searchService = searchService;
-    init();
-  }
-
-
-  /**
-   * Initializes the end point.
-   *
-   * @throws FileNotFoundException
-   * @throws IOException
-   * @throws DocumentStoreOperationException
-   */
-  public void init() {
-
-    // Instantiate our analysis configuration object.
-    analysisConfig = new AnalysisConfiguration();
-  }
-
-
-  /**
-   * Processes client requests to create a new index and document type in the
-   * document store.
-   *
-   * @param documentSchema - The contents of the request body which is expected
-   *                       to be a JSON structure which corresponds to the
-   *                       schema defined in document.schema.json
-   * @param index          - The name of the index to create.
-   * @return - A Standard REST response
-   */
-  public ResponseEntity<String> processCreateIndex (String documentSchema,
-                                                    HttpServletRequest request,
-                                                    HttpHeaders headers,
-                                                    String index,
-                                                    DocumentStoreInterface documentStore) {
-
-    int resultCode = 500;
-    String resultString = "Unexpected error";
-   
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    // Validate that the request is correctly authenticated before going
-    // any further.
-    try {
-
-      if (!searchService.validateRequest(headers, request,
-                                         ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
-        logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure.");
-        return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
-      }
-
-    } catch (Exception e) {
-
-      logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index,
-                  "Unexpected authentication failure - cause: " + e.getMessage());
-      return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+    private static final String HEADER_VALIDATION_SUCCESS = "SUCCESS";
+    protected SearchServiceApi searchService = null;
+
+    /**
+     * Configuration for the custom analyzers that will be used for indexing.
+     */
+    protected AnalysisConfiguration analysisConfig;
+
+    // Set up the loggers.
+    private static Logger logger = LoggerFactory.getInstance().getLogger(IndexApi.class.getName());
+    private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(IndexApi.class.getName());
+
+
+    public IndexApi(SearchServiceApi searchService) {
+        this.searchService = searchService;
+        init();
     }
 
 
-    // We expect a payload containing the document schema.  Make sure
-    // it is present.
-    if (documentSchema == null) {
-      logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Missing document schema payload");
-      return errorResponse(HttpStatus.valueOf(resultCode), "Missing payload", request);
+    /**
+     * Initializes the end point.
+     *
+     * @throws FileNotFoundException
+     * @throws IOException
+     * @throws DocumentStoreOperationException
+     */
+    public void init() {
+
+        // Instantiate our analysis configuration object.
+        analysisConfig = new AnalysisConfiguration();
     }
 
-    try {
 
-      // Marshal the supplied json string into a document schema object.
-      ObjectMapper mapper = new ObjectMapper();
-      DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
+    /**
+     * Processes client requests to create a new index and document type in the document store.
+     *
+     * @param documentSchema - The contents of the request body which is expected to be a JSON structure which
+     *        corresponds to the schema defined in document.schema.json
+     * @param index - The name of the index to create.
+     * @return - A Standard REST response
+     */
+    public ResponseEntity<String> processCreateIndex(String documentSchema, HttpServletRequest request,
+            HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
 
-      // Now, ask the DAO to create the index.
-      OperationResult result = documentStore.createIndex(index, schema);
+        int resultCode = 500;
+        String resultString = "Unexpected error";
 
-      // Extract the result code and string from the OperationResult
-      // object so that we can use them to generate a standard REST
-      // response.
-      // Note that we want to return a 201 result code on a successful
-      // create, so if we get back a 200 from the document store,
-      // translate that int a 201.
-      resultCode = (result.getResultCode() == 200) ? 201 : result.getResultCode();
-      resultString = (result.getFailureCause() == null)
-        ? result.getResult() : result.getFailureCause();
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
 
-    } catch (com.fasterxml.jackson.core.JsonParseException
-             | com.fasterxml.jackson.databind.JsonMappingException e) {
+        // Validate that the request is correctly authenticated before going
+        // any further.
+        try {
 
-      // We were unable to marshal the supplied json string into a valid
-      // document schema, so return an appropriate error response.
-      resultCode = HttpStatus.BAD_REQUEST.value();
-      resultString = "Malformed schema: " + e.getMessage();
+            if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                    ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
+                logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure.");
+                return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+            }
 
-    } catch (IOException e) {
+        } catch (Exception e) {
 
-      // We'll treat this is a general internal error.
-      resultCode = HttpStatus.INTERNAL_SERVER_ERROR.value();
-      resultString = "IO Failure: " + e.getMessage();
-    }
+            logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index,
+                    "Unexpected authentication failure - cause: " + e.getMessage());
+            return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+        }
 
-    ResponseEntity<String> response = ResponseEntity.status(resultCode).contentType ( MediaType.APPLICATION_JSON ).body(resultString);
 
+        // We expect a payload containing the document schema. Make sure
+        // it is present.
+        if (documentSchema == null) {
+            logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Missing document schema payload");
+            return errorResponse(HttpStatus.valueOf(resultCode), "Missing payload", request);
+        }
 
-    // Log the result.
-    if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) {
-      logger.info(SearchDbMsgs.CREATED_INDEX, index);
-    } else {
-      logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, resultString);
-    }
+        try {
 
-    // Generate our audit log.
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-                     new LogFields()
-                     .setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode)
-                     .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                               HttpStatus.valueOf(resultCode).toString()),
-                     (request != null) ? request.getMethod().toString () : "Unknown",
-                     (request != null) ? request.getRequestURL ().toString () : "Unknown",
-                     (request != null) ? request.getRemoteHost () : "Unknown",
-                     Integer.toString(response.getStatusCodeValue ()));
+            // Marshal the supplied json string into a document schema object.
+            ObjectMapper mapper = new ObjectMapper();
+            DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
 
+            // Now, ask the DAO to create the index.
+            OperationResult result = documentStore.createIndex(index, schema);
 
+            // Extract the result code and string from the OperationResult
+            // object so that we can use them to generate a standard REST
+            // response.
+            // Note that we want to return a 201 result code on a successful
+            // create, so if we get back a 200 from the document store,
+            // translate that int a 201.
+            resultCode = (result.getResultCode() == 200) ? 201 : result.getResultCode();
+            resultString = (result.getFailureCause() == null) ? result.getResult() : result.getFailureCause();
 
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
+        } catch (com.fasterxml.jackson.core.JsonParseException
+                | com.fasterxml.jackson.databind.JsonMappingException e) {
 
-    // Finally, return the response.
-    return response;
-  }
+            // We were unable to marshal the supplied json string into a valid
+            // document schema, so return an appropriate error response.
+            resultCode = HttpStatus.BAD_REQUEST.value();
+            resultString = "Malformed schema: " + e.getMessage();
 
-  /**
-   * This function accepts any JSON and will "blindly" write it to the
-   * document store.
-   *
-   * Note, eventually this "dynamic" flow should follow the same JSON-Schema
-   * validation procedure as the normal create index flow.
-   *
-   * @param dynamicSchema - The JSON string that will be sent to the document store.
-   * @param index - The name of the index to be created.
-   * @param documentStore - The document store specific interface.
-   * @return The result of the document store interface's operation.
-   */
-  public ResponseEntity<String> processCreateDynamicIndex(String dynamicSchema, HttpServletRequest request,
-                                            HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
+        } catch (IOException e) {
 
-    ResponseEntity<String> response = null;
+            // We'll treat this is a general internal error.
+            resultCode = HttpStatus.INTERNAL_SERVER_ERROR.value();
+            resultString = "IO Failure: " + e.getMessage();
+        }
 
-    ResponseEntity<String> validationResponse = validateRequest(request, headers, index, SearchDbMsgs.INDEX_CREATE_FAILURE);
+        ResponseEntity<String> response =
+                ResponseEntity.status(resultCode).contentType(MediaType.APPLICATION_JSON).body(resultString);
 
 
-    if (validationResponse.getStatusCodeValue () != HttpStatus.OK.value ()) {
-      response = validationResponse;
-    } else {
-      OperationResult result = documentStore.createDynamicIndex(index, dynamicSchema);
+        // Log the result.
+        if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) {
+            logger.info(SearchDbMsgs.CREATED_INDEX, index);
+        } else {
+            logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, resultString);
+        }
+
+        // Generate our audit log.
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode).setField(
+                        LogLine.DefinedFields.RESPONSE_DESCRIPTION, HttpStatus.valueOf(resultCode).toString()),
+                (request != null) ? request.getMethod().toString() : "Unknown",
+                (request != null) ? request.getRequestURL().toString() : "Unknown",
+                (request != null) ? request.getRemoteHost() : "Unknown",
+                Integer.toString(response.getStatusCodeValue()));
 
-      int resultCode = (result.getResultCode() == 200) ? 201 : result.getResultCode();
-      String resultString = (result.getFailureCause() == null) ? result.getResult() : result.getFailureCause();
 
-      response = ResponseEntity.status(resultCode).body(resultString);
-    }
 
-    return response;
-  }
-
-  /**
-   * Processes a client request to remove an index from the document store.
-   * Note that this implicitly deletes all documents contained within that index.
-   *
-   * @param index - The index to be deleted.
-   * @return - A standard REST response.
-   */
-  public ResponseEntity<String> processDelete(String index,
-                                              HttpServletRequest request,
-                                              HttpHeaders headers,
-                                              DocumentStoreInterface documentStore) {
-
-    // Initialize the MDC Context for logging purposes.
-    ApiUtils.initMdcContext(request, headers);
-
-    // Set a default response in case something unexpected goes wrong.
-    ResponseEntity<String> response = ResponseEntity.status ( HttpStatus.INTERNAL_SERVER_ERROR ).body ( "Unknown" );
-
-    // Validate that the request is correctly authenticated before going
-    // any further.
-    try {
-
-      if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST,
-                                         ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
-        logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure.");
-        return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
-      }
-
-    } catch (Exception e) {
-
-      logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index,
-                  "Unexpected authentication failure - cause: " + e.getMessage());
-      return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
+
+        // Finally, return the response.
+        return response;
     }
 
+    /**
+     * This function accepts any JSON and will "blindly" write it to the document store.
+     *
+     * Note, eventually this "dynamic" flow should follow the same JSON-Schema validation procedure as the normal create
+     * index flow.
+     *
+     * @param dynamicSchema - The JSON string that will be sent to the document store.
+     * @param index - The name of the index to be created.
+     * @param documentStore - The document store specific interface.
+     * @return The result of the document store interface's operation.
+     */
+    public ResponseEntity<String> processCreateDynamicIndex(String dynamicSchema, HttpServletRequest request,
+            HttpHeaders headers, String index, DocumentStoreInterface documentStore) {
 
-    try {
-      // Send the request to the document store.
-      response = responseFromOperationResult(documentStore.deleteIndex(index));
+        ResponseEntity<String> response = null;
 
-    } catch (DocumentStoreOperationException e) {
-      response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType ( MediaType.APPLICATION_JSON ).body(e.getMessage());
+        ResponseEntity<String> validationResponse =
+                validateRequest(request, headers, index, SearchDbMsgs.INDEX_CREATE_FAILURE);
+
+
+        if (validationResponse.getStatusCodeValue() != HttpStatus.OK.value()) {
+            response = validationResponse;
+        } else {
+            OperationResult result = documentStore.createDynamicIndex(index, dynamicSchema);
+
+            int resultCode = (result.getResultCode() == 200) ? 201 : result.getResultCode();
+            String resultString = (result.getFailureCause() == null) ? result.getResult() : result.getFailureCause();
+
+            response = ResponseEntity.status(resultCode).body(resultString);
+        }
+
+        return response;
     }
 
-    // Log the result.
-    if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) {
-      logger.info(SearchDbMsgs.DELETED_INDEX, index);
-    } else {
-      logger.warn(SearchDbMsgs.INDEX_DELETE_FAILURE, index, (String) response.getBody ());
+    /**
+     * Processes a client request to remove an index from the document store. Note that this implicitly deletes all
+     * documents contained within that index.
+     *
+     * @param index - The index to be deleted.
+     * @return - A standard REST response.
+     */
+    public ResponseEntity<String> processDelete(String index, HttpServletRequest request, HttpHeaders headers,
+            DocumentStoreInterface documentStore) {
+
+        // Initialize the MDC Context for logging purposes.
+        ApiUtils.initMdcContext(request, headers);
+
+        // Set a default response in case something unexpected goes wrong.
+        ResponseEntity<String> response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Unknown");
+
+        // Validate that the request is correctly authenticated before going
+        // any further.
+        try {
+
+            if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                    ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
+                logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure.");
+                return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+            }
+
+        } catch (Exception e) {
+
+            logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index,
+                    "Unexpected authentication failure - cause: " + e.getMessage());
+            return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+        }
+
+
+        try {
+            // Send the request to the document store.
+            response = responseFromOperationResult(documentStore.deleteIndex(index));
+
+        } catch (DocumentStoreOperationException e) {
+            response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.APPLICATION_JSON)
+                    .body(e.getMessage());
+        }
+
+        // Log the result.
+        if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) {
+            logger.info(SearchDbMsgs.DELETED_INDEX, index);
+        } else {
+            logger.warn(SearchDbMsgs.INDEX_DELETE_FAILURE, index, response.getBody());
+        }
+
+        // Generate our audit log.
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, response.getStatusCodeValue()).setField(
+                        LogLine.DefinedFields.RESPONSE_DESCRIPTION, response.getStatusCode().getReasonPhrase()),
+                (request != null) ? request.getMethod().toString() : "Unknown",
+                (request != null) ? request.getRequestURL().toString() : "Unknown",
+                (request != null) ? request.getRemoteHost() : "Unknown",
+                Integer.toString(response.getStatusCodeValue()));
+
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
+
+        return response;
     }
 
-    // Generate our audit log.
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-                     new LogFields()
-                     .setField(LogLine.DefinedFields.RESPONSE_CODE, response.getStatusCodeValue())
-                     .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                               response.getStatusCode ().getReasonPhrase()),
-                     (request != null) ? request.getMethod().toString () : "Unknown",
-                     (request != null) ? request.getRequestURL ().toString () : "Unknown",
-                     (request != null) ? request.getRemoteHost () : "Unknown",
-                     Integer.toString(response.getStatusCodeValue()));
-
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
-
-    return response;
-  }
-
-
-  /**
-   * This method takes a JSON format document schema and produces a set of
-   * field mappings in the form that Elastic Search expects.
-   *
-   * @param documentSchema - A document schema expressed as a JSON string.
-   * @return - A JSON string expressing an Elastic Search mapping configuration.
-   * @throws com.fasterxml.jackson.core.JsonParseException
-   * @throws com.fasterxml.jackson.databind.JsonMappingException
-   * @throws IOException
-   */
-  public String generateDocumentMappings(String documentSchema)
-    throws com.fasterxml.jackson.core.JsonParseException,
-           com.fasterxml.jackson.databind.JsonMappingException, IOException {
-
-    // Unmarshal the json content into a document schema object.
-    ObjectMapper mapper = new ObjectMapper();
-    DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
-
-    // Now, generate the Elastic Search mapping json and return it.
-    StringBuilder sb = new StringBuilder();
-    sb.append("{");
-    sb.append("\"properties\": {");
-
-    boolean first = true;
-    for (DocumentFieldSchema field : schema.getFields()) {
-
-      if (!first) {
-        sb.append(",");
-      } else {
-        first = false;
-      }
-
-      sb.append("\"").append(field.getName()).append("\": {");
-
-      // The field type is mandatory.
-      sb.append("\"type\": \"").append(field.getDataType()).append("\"");
-
-      // If the index field was specified, then append it.
-      if (field.getSearchable() != null) {
-        sb.append(", \"index\": \"").append(field.getSearchable()
-                                            ? "analyzed" : "not_analyzed").append("\"");
-      }
-
-      // If a search analyzer was specified, then append it.
-      if (field.getSearchAnalyzer() != null) {
-        sb.append(", \"search_analyzer\": \"").append(field.getSearchAnalyzer()).append("\"");
-      }
-
-      // If an indexing analyzer was specified, then append it.
-      if (field.getIndexAnalyzer() != null) {
-        sb.append(", \"analyzer\": \"").append(field.getIndexAnalyzer()).append("\"");
-      } else {
-        sb.append(", \"analyzer\": \"").append("whitespace").append("\"");
-      }
-
-      sb.append("}");
+
+    /**
+     * This method takes a JSON format document schema and produces a set of field mappings in the form that Elastic
+     * Search expects.
+     *
+     * @param documentSchema - A document schema expressed as a JSON string.
+     * @return - A JSON string expressing an Elastic Search mapping configuration.
+     * @throws com.fasterxml.jackson.core.JsonParseException
+     * @throws com.fasterxml.jackson.databind.JsonMappingException
+     * @throws IOException
+     */
+    public String generateDocumentMappings(String documentSchema) throws com.fasterxml.jackson.core.JsonParseException,
+            com.fasterxml.jackson.databind.JsonMappingException, IOException {
+
+        // Unmarshal the json content into a document schema object.
+        ObjectMapper mapper = new ObjectMapper();
+        DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
+
+        // Now, generate the Elastic Search mapping json and return it.
+        StringBuilder sb = new StringBuilder();
+        sb.append("{");
+        sb.append("\"properties\": {");
+
+        boolean first = true;
+        for (DocumentFieldSchema field : schema.getFields()) {
+
+            if (!first) {
+                sb.append(",");
+            } else {
+                first = false;
+            }
+
+            sb.append("\"").append(field.getName()).append("\": {");
+
+            // The field type is mandatory.
+            sb.append("\"type\": \"").append(field.getDataType()).append("\"");
+
+            // If the index field was specified, then append it.
+            if (field.getSearchable() != null) {
+                sb.append(", \"index\": \"").append(field.getSearchable() ? "analyzed" : "not_analyzed").append("\"");
+            }
+
+            // If a search analyzer was specified, then append it.
+            if (field.getSearchAnalyzer() != null) {
+                sb.append(", \"search_analyzer\": \"").append(field.getSearchAnalyzer()).append("\"");
+            }
+
+            // If an indexing analyzer was specified, then append it.
+            if (field.getIndexAnalyzer() != null) {
+                sb.append(", \"analyzer\": \"").append(field.getIndexAnalyzer()).append("\"");
+            } else {
+                sb.append(", \"analyzer\": \"").append("whitespace").append("\"");
+            }
+
+            sb.append("}");
+        }
+
+        sb.append("}");
+        sb.append("}");
+
+        logger.debug("Generated document mappings: " + sb.toString());
+
+        return sb.toString();
     }
 
-    sb.append("}");
-    sb.append("}");
 
-    logger.debug("Generated document mappings: " + sb.toString());
+    /**
+     * Converts an {@link OperationResult} to a standard REST {@link ResponseEntity} object.
+     *
+     * @param result - The {@link OperationResult} to be converted.
+     * @return - The equivalent {@link ResponseEntity} object.
+     */
+    public ResponseEntity<String> responseFromOperationResult(OperationResult result) {
+
+        if ((result.getResultCode() >= 200) && (result.getResultCode() < 300)) {
+            return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON)
+                    .body(result.getResult());
+        } else {
+            if (result.getFailureCause() != null) {
+                return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON)
+                        .body(result.getFailureCause());
+            } else {
+                return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON)
+                        .body(result.getResult());
+            }
+        }
+    }
 
-    return sb.toString();
-  }
+    public ResponseEntity<String> errorResponse(HttpStatus status, String msg, HttpServletRequest request) {
 
+        // Generate our audit log.
+        auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
+                new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, status.value())
+                        .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, status.getReasonPhrase()),
+                (request != null) ? request.getMethod().toString() : "Unknown",
+                (request != null) ? request.getRequestURL().toString() : "Unknown",
+                (request != null) ? request.getRemoteHost() : "Unknown", Integer.toString(status.value()));
 
-  /**
-   * Converts an {@link OperationResult} to a standard REST {@link ResponseEntity}
-   * object.
-   *
-   * @param result - The {@link OperationResult} to be converted.
-   * @return - The equivalent {@link ResponseEntity} object.
-   */
-  public ResponseEntity<String> responseFromOperationResult(OperationResult result) {
+        // Clear the MDC context so that no other transaction inadvertently
+        // uses our transaction id.
+        ApiUtils.clearMdcContext();
 
-    if ((result.getResultCode() >= 200) && (result.getResultCode() < 300)) {
-      return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getResult());
-    } else {
-      if (result.getFailureCause() != null) {
-        return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getFailureCause());
-      } else {
-        return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getResult());
-      }
+        return ResponseEntity.status(status).contentType(MediaType.APPLICATION_JSON).body(msg);
     }
-  }
-
-  public ResponseEntity<String> errorResponse(HttpStatus status, String msg, HttpServletRequest request) {
-
-    // Generate our audit log.
-    auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST,
-                     new LogFields()
-                     .setField(LogLine.DefinedFields.RESPONSE_CODE, status.value ())
-                     .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, status.getReasonPhrase()),
-                     (request != null) ? request.getMethod().toString () : "Unknown",
-                     (request != null) ? request.getRequestURL ().toString () : "Unknown",
-                     (request != null) ? request.getRemoteHost () : "Unknown",
-                     Integer.toString(status.value ()));
-
-    // Clear the MDC context so that no other transaction inadvertently
-    // uses our transaction id.
-    ApiUtils.clearMdcContext();
-
-    return ResponseEntity.status(status).contentType ( MediaType.APPLICATION_JSON ).body(msg);
-  }
-
-
-  /**
-   * A helper method used for validating/authenticating an incoming request.
-   *
-   * @param request - The http request that will be validated.
-   * @param headers - The http headers that will be validated.
-   * @param index - The name of the index that the document store request is being made against.
-   * @param failureMsgEnum - The logging message to be used upon validation failure.
-   * @return A success or failure response
-   */
-  private ResponseEntity<String> validateRequest(HttpServletRequest request, HttpHeaders headers, String index, SearchDbMsgs failureMsgEnum) {
-    try {
-      if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
-        logger.warn(failureMsgEnum, index, "Authentication failure.");
-        return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
-      }
-    } catch (Exception e) {
-      logger.warn(failureMsgEnum, index, "Unexpected authentication failure - cause: " + e.getMessage());
-      return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+
+
+    /**
+     * A helper method used for validating/authenticating an incoming request.
+     *
+     * @param request - The http request that will be validated.
+     * @param headers - The http headers that will be validated.
+     * @param index - The name of the index that the document store request is being made against.
+     * @param failureMsgEnum - The logging message to be used upon validation failure.
+     * @return A success or failure response
+     */
+    private ResponseEntity<String> validateRequest(HttpServletRequest request, HttpHeaders headers, String index,
+            SearchDbMsgs failureMsgEnum) {
+        try {
+            if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST,
+                    ApiUtils.SEARCH_AUTH_POLICY_NAME)) {
+                logger.warn(failureMsgEnum, index, "Authentication failure.");
+                return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+            }
+        } catch (Exception e) {
+            logger.warn(failureMsgEnum, index, "Unexpected authentication failure - cause: " + e.getMessage());
+            return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request);
+        }
+        return ResponseEntity.status(HttpStatus.OK).body(HEADER_VALIDATION_SUCCESS);
     }
-    return ResponseEntity.status(HttpStatus.OK).body(HEADER_VALIDATION_SUCCESS);
-  }
 }
index aacba78..d807996 100644 (file)
@@ -45,228 +45,175 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/services/search-data-service/v1/search")
 public class SearchServiceApi {
 
-  /**
-   * The Data Access Object that we will use to interact with the
-   * document store.
-   */
-  protected DocumentStoreInterface documentStore = null;
-  protected ApiUtils apiUtils = null;
-
-  /**
-   * Create a new instance of the end point.
-   */
-  public SearchServiceApi() {
-
-    // Perform one-time initialization.
-    init();
-  }
-
-
-  /**
-   * Performs all one-time initialization required for the end point.
-   */
-  public void init() {
-
-    // Instantiate our Document Store DAO.
-    documentStore = ElasticSearchHttpController.getInstance();
-
-    apiUtils = new ApiUtils();
-  }
-
-  @RequestMapping(value = "/indexes/{index}",
-                  method = RequestMethod.PUT,
-                  produces = { "application/json" })
-  public ResponseEntity<String> processCreateIndex(@RequestBody String requestBody,
-                                                   HttpServletRequest request,
-                                                   @RequestHeader HttpHeaders headers,
-                                                   @PathVariable("index") String index) {
-
-    // Forward the request to our index API to create the index.
-    IndexApi indexApi = new IndexApi(this);
-    return indexApi.processCreateIndex(requestBody, request, headers, index, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}",
-                  method = RequestMethod.DELETE,
-                  consumes = {"application/json"},
-                  produces = {"application/json"})
-  public ResponseEntity<String> processDeleteIndex(HttpServletRequest request,
-                                                   @RequestHeader HttpHeaders headers,
-                                                   @PathVariable ("index") String index) {
-
-    // Forward the request to our index API to delete the index.
-    IndexApi indexApi = new IndexApi(this);
-    return indexApi.processDelete(index, request, headers, documentStore);
-  }
-
-
-  @RequestMapping(value = "/indexes/{index}/documents",
-                  method = RequestMethod.POST,
-                  consumes = {"application/json"})
-                  public ResponseEntity<String> processCreateDocWithoutId(@RequestBody String requestBody,
-                                                                          HttpServletRequest request,
-                                                                          HttpServletResponse httpResponse,
-                                                                          @RequestHeader HttpHeaders headers,
-                                                                          @PathVariable ("index") String index) {
-
-    // Forward the request to our document API to create the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processPost(requestBody, request, headers, httpResponse,
-                                   index, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/documents/{id}",
-                  method = RequestMethod.PUT,
-                  consumes = {"application/json"})
-                  public ResponseEntity<String> processUpsertDoc(@RequestBody String requestBody,
-                                                                 HttpServletRequest request,
-                                                                 HttpServletResponse httpResponse,
-                                                                 @RequestHeader HttpHeaders headers,
-                                                                 @PathVariable ("index") String index,
-                                                                 @PathVariable ("id") String id) {
-
-    // Forward the request to our document API to upsert the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processPut(requestBody, request, headers, httpResponse,
-                                  index, id, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/documents/{id}",
-          method = RequestMethod.GET)
-  public ResponseEntity<String> processGetDocument(HttpServletRequest request,
-                                                   HttpServletResponse httpResponse,
-                                                   @RequestHeader HttpHeaders headers,
-                                                   @PathVariable ("index") String index,
-                                                   @PathVariable ("id") String id) {
-
-    // Forward the request to our document API to retrieve the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processGet("", request, headers, httpResponse,
-            index, id, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/documents/{id}",
-                  method = RequestMethod.DELETE,
-                  consumes = {"application/json"})
-  public ResponseEntity<String> processDeleteDoc(HttpServletRequest request,
-                                                 HttpServletResponse httpResponse,
-                                                 @RequestHeader HttpHeaders headers,
-                                                 @PathVariable ("index") String index,
-                                                 @PathVariable ("id") String id) {
-
-    // Forward the request to our document API to delete the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processDelete("", request, headers, httpResponse,
-                                     index, id, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/query/{queryText}",
-                  method = RequestMethod.GET)
-  public ResponseEntity<String> processInlineQuery(HttpServletRequest request,
-                                                   @RequestHeader HttpHeaders headers,
-                                                   @PathVariable ("index") String index,
-                                                   @PathVariable ("queryText") String queryText) {
-
-    // Forward the request to our document API to delete the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processSearchWithGet("", request, headers,
-                                            index, queryText, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/query",
-                  method = RequestMethod.GET,
-                  consumes = {"application/json"})
-  public ResponseEntity<String> processQueryWithGet(@RequestBody String requestBody,
-                                                    HttpServletRequest request,
-                                                    @RequestHeader HttpHeaders headers,
-                                                    @PathVariable ("index") String index) {
-
-    // Forward the request to our document API to delete the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.queryWithGetWithPayload(requestBody, request, headers, index, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/query",
-                  method = RequestMethod.POST,
-                  consumes = {"application/json"})
-  public ResponseEntity<String> processQuery(@RequestBody String requestBody,
-                                                             HttpServletRequest request,
-                                                             @RequestHeader HttpHeaders headers,
-                                                             @PathVariable ("index") String index) {
-
-    // Forward the request to our document API to delete the document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processSearchWithPost(requestBody, request, headers, index, documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/{index}/suggest",
-          method = RequestMethod.POST,
-          consumes = {"application/json"})
-  public ResponseEntity<String> processSuggestQuery(@RequestBody String requestBody, HttpServletRequest request,
-                                      @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
-    // Forward the request to our document API to query suggestions in the
-    // document.
-    DocumentApi documentApi = new DocumentApi(this);
-    return documentApi.processSuggestQueryWithPost(requestBody, request, headers, index,
-            documentStore);
-  }
-
-  @RequestMapping(value = "/indexes/dynamic/{index}",
-          method = RequestMethod.PUT,
-          consumes = {"application/json"})
-  public ResponseEntity<String> processCreateDynamicIndex(@RequestBody String requestBody,
-                                                          HttpServletRequest request,
-                                                          @RequestHeader HttpHeaders headers,
-                                            @PathVariable ("index") String index) {
-
-    // Forward the request to our index API to create the index.
-    IndexApi indexApi = new IndexApi(this);
-    return indexApi.processCreateDynamicIndex(requestBody, request, headers, index, documentStore);
-  }
-
-  @RequestMapping(value = "/bulk",
-                  method = RequestMethod.POST,
-                  consumes = {"application/json"},
-                  produces = { "application/json"})
-  public ResponseEntity<String> processBulkRequest(@RequestBody String requestBody,
-                                                   HttpServletRequest request,
-                                                   @RequestHeader HttpHeaders headers) {
-
-    // Forward the request to our document API to delete the document.
-    BulkApi bulkApi = new BulkApi(this);
-    ResponseEntity<String> dbugResp = bulkApi.processPost(requestBody, request, headers, documentStore, apiUtils);
-    return dbugResp;
-  }
-
-  protected boolean validateRequest(HttpHeaders headers,
-                                    HttpServletRequest req,
-                                    Action action,
-                                    String authPolicyFunctionName) throws Exception {
-
-    SearchDbServiceAuth serviceAuth = new SearchDbServiceAuth();
-
-    String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
-    String authUser = null;
-    if (cipherSuite != null) {
-      Object x509CertAttribute = req.getAttribute("javax.servlet.request.X509Certificate");
-      if (x509CertAttribute != null) {
-        X509Certificate[] certChain = (X509Certificate[]) x509CertAttribute;
-        X509Certificate clientCert = certChain[0];
-        X500Principal subjectDn = clientCert.getSubjectX500Principal();
-        authUser = subjectDn.toString();
-      }
+    /**
+     * The Data Access Object that we will use to interact with the document store.
+     */
+    protected DocumentStoreInterface documentStore = null;
+    protected ApiUtils apiUtils = null;
+
+    /**
+     * Create a new instance of the end point.
+     */
+    public SearchServiceApi() {
+
+        // Perform one-time initialization.
+        init();
     }
 
-    if (authUser == null) {
-      return false;
+
+    /**
+     * Performs all one-time initialization required for the end point.
+     */
+    public void init() {
+
+        // Instantiate our Document Store DAO.
+        documentStore = ElasticSearchHttpController.getInstance();
+
+        apiUtils = new ApiUtils();
+    }
+
+    @RequestMapping(value = "/indexes/{index}", method = RequestMethod.PUT, produces = {"application/json"})
+    public ResponseEntity<String> processCreateIndex(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        // Forward the request to our index API to create the index.
+        IndexApi indexApi = new IndexApi(this);
+        return indexApi.processCreateIndex(requestBody, request, headers, index, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}", method = RequestMethod.DELETE, consumes = {"application/json"},
+            produces = {"application/json"})
+    public ResponseEntity<String> processDeleteIndex(HttpServletRequest request, @RequestHeader HttpHeaders headers,
+            @PathVariable("index") String index) {
+
+        // Forward the request to our index API to delete the index.
+        IndexApi indexApi = new IndexApi(this);
+        return indexApi.processDelete(index, request, headers, documentStore);
+    }
+
+
+    @RequestMapping(value = "/indexes/{index}/documents", method = RequestMethod.POST, consumes = {"application/json"})
+    public ResponseEntity<String> processCreateDocWithoutId(@RequestBody String requestBody, HttpServletRequest request,
+            HttpServletResponse httpResponse, @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        // Forward the request to our document API to create the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processPost(requestBody, request, headers, httpResponse, index, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.PUT,
+            consumes = {"application/json"})
+    public ResponseEntity<String> processUpsertDoc(@RequestBody String requestBody, HttpServletRequest request,
+            HttpServletResponse httpResponse, @RequestHeader HttpHeaders headers, @PathVariable("index") String index,
+            @PathVariable("id") String id) {
+
+        // Forward the request to our document API to upsert the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processPut(requestBody, request, headers, httpResponse, index, id, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.GET)
+    public ResponseEntity<String> processGetDocument(HttpServletRequest request, HttpServletResponse httpResponse,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index, @PathVariable("id") String id) {
+
+        // Forward the request to our document API to retrieve the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processGet("", request, headers, httpResponse, index, id, documentStore);
     }
 
-    String status = serviceAuth.authUser(headers, authUser.toLowerCase(),
-                                         action.toString() + ":" + authPolicyFunctionName);
-    if (!status.equals("OK")) {
-      return false;
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.DELETE,
+            consumes = {"application/json"})
+    public ResponseEntity<String> processDeleteDoc(HttpServletRequest request, HttpServletResponse httpResponse,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index, @PathVariable("id") String id) {
+
+        // Forward the request to our document API to delete the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processDelete("", request, headers, httpResponse, index, id, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}/query/{queryText}", method = RequestMethod.GET)
+    public ResponseEntity<String> processInlineQuery(HttpServletRequest request, @RequestHeader HttpHeaders headers,
+            @PathVariable("index") String index, @PathVariable("queryText") String queryText) {
+
+        // Forward the request to our document API to delete the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processSearchWithGet("", request, headers, index, queryText, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}/query", method = RequestMethod.GET, consumes = {"application/json"})
+    public ResponseEntity<String> processQueryWithGet(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        // Forward the request to our document API to delete the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.queryWithGetWithPayload(requestBody, request, headers, index, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/{index}/query", method = RequestMethod.POST, consumes = {"application/json"})
+    public ResponseEntity<String> processQuery(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        // Forward the request to our document API to delete the document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processSearchWithPost(requestBody, request, headers, index, documentStore);
     }
 
-    return true;
-  }
+    @RequestMapping(value = "/indexes/{index}/suggest", method = RequestMethod.POST, consumes = {"application/json"})
+    public ResponseEntity<String> processSuggestQuery(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+        // Forward the request to our document API to query suggestions in the
+        // document.
+        DocumentApi documentApi = new DocumentApi(this);
+        return documentApi.processSuggestQueryWithPost(requestBody, request, headers, index, documentStore);
+    }
+
+    @RequestMapping(value = "/indexes/dynamic/{index}", method = RequestMethod.PUT, consumes = {"application/json"})
+    public ResponseEntity<String> processCreateDynamicIndex(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        // Forward the request to our index API to create the index.
+        IndexApi indexApi = new IndexApi(this);
+        return indexApi.processCreateDynamicIndex(requestBody, request, headers, index, documentStore);
+    }
+
+    @RequestMapping(value = "/bulk", method = RequestMethod.POST, consumes = {"application/json"},
+            produces = {"application/json"})
+    public ResponseEntity<String> processBulkRequest(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers) {
+
+        // Forward the request to our document API to delete the document.
+        BulkApi bulkApi = new BulkApi(this);
+        ResponseEntity<String> dbugResp = bulkApi.processPost(requestBody, request, headers, documentStore, apiUtils);
+        return dbugResp;
+    }
+
+    protected boolean validateRequest(HttpHeaders headers, HttpServletRequest req, Action action,
+            String authPolicyFunctionName) throws Exception {
+
+        SearchDbServiceAuth serviceAuth = new SearchDbServiceAuth();
+
+        String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
+        String authUser = null;
+        if (cipherSuite != null) {
+            Object x509CertAttribute = req.getAttribute("javax.servlet.request.X509Certificate");
+            if (x509CertAttribute != null) {
+                X509Certificate[] certChain = (X509Certificate[]) x509CertAttribute;
+                X509Certificate clientCert = certChain[0];
+                X500Principal subjectDn = clientCert.getSubjectX500Principal();
+                authUser = subjectDn.toString();
+            }
+        }
+
+        if (authUser == null) {
+            return false;
+        }
+
+        String status =
+                serviceAuth.authUser(headers, authUser.toLowerCase(), action.toString() + ":" + authPolicyFunctionName);
+        if (!status.equals("OK")) {
+            return false;
+        }
+
+        return true;
+    }
 }
index 1cbebc9..d92a1da 100644 (file)
@@ -35,15 +35,15 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/services/search-data-service/v1")
 public class RestEchoService {
 
-  /**
-   * REST endpoint for a simple echo service.
-   *
-   * @param input - The value to be echoed back.
-   * @return - The input value.
-   */
-  @RequestMapping(value = "/echo/{input}", method = {RequestMethod.GET})
-  public String ping(@PathVariable("input") String input) {
-    return "[Search Database Abstraction Micro Service] - Echo Service: " + input + ".";
-  }
+    /**
+     * REST endpoint for a simple echo service.
+     *
+     * @param input - The value to be echoed back.
+     * @return - The input value.
+     */
+    @RequestMapping(value = "/echo/{input}", method = {RequestMethod.GET})
+    public String ping(@PathVariable("input") String input) {
+        return "[Search Database Abstraction Micro Service] - Echo Service: " + input + ".";
+    }
 
 }
index 0cf2f2a..1bf1db7 100644 (file)
@@ -23,61 +23,61 @@ package org.onap.aai.sa.searchdbabstraction.elasticsearch.config;
 import java.util.Properties;
 
 public class ElasticSearchConfig {
-  private String ipAddress;
-  private String httpPort;
-  private String javaApiPort;
-  private String clusterName;
+    private String ipAddress;
+    private String httpPort;
+    private String javaApiPort;
+    private String clusterName;
 
-  public static final String ES_CLUSTER_NAME = "es.cluster-name";
-  public static final String ES_IP_ADDRESS = "es.ip-address";
-  public static final String ES_HTTP_PORT = "es.http-port";
+    public static final String ES_CLUSTER_NAME = "es.cluster-name";
+    public static final String ES_IP_ADDRESS = "es.ip-address";
+    public static final String ES_HTTP_PORT = "es.http-port";
 
-  private static final String JAVA_API_PORT_DEFAULT = "9300";
+    private static final String JAVA_API_PORT_DEFAULT = "9300";
 
-  public ElasticSearchConfig(Properties props) {
+    public ElasticSearchConfig(Properties props) {
 
-     setClusterName(props.getProperty(ES_CLUSTER_NAME));
-     setIpAddress(props.getProperty(ES_IP_ADDRESS));
-     setHttpPort(props.getProperty(ES_HTTP_PORT));
-    setJavaApiPort(JAVA_API_PORT_DEFAULT);
-  }
+        setClusterName(props.getProperty(ES_CLUSTER_NAME));
+        setIpAddress(props.getProperty(ES_IP_ADDRESS));
+        setHttpPort(props.getProperty(ES_HTTP_PORT));
+        setJavaApiPort(JAVA_API_PORT_DEFAULT);
+    }
 
-  public String getIpAddress() {
-    return ipAddress;
-  }
+    public String getIpAddress() {
+        return ipAddress;
+    }
 
-  public void setIpAddress(String ipAddress) {
-    this.ipAddress = ipAddress;
-  }
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
 
-  public String getHttpPort() {
-    return httpPort;
-  }
+    public String getHttpPort() {
+        return httpPort;
+    }
 
-  public void setHttpPort(String httpPort) {
-    this.httpPort = httpPort;
-  }
+    public void setHttpPort(String httpPort) {
+        this.httpPort = httpPort;
+    }
 
-  public String getJavaApiPort() {
-    return javaApiPort;
-  }
+    public String getJavaApiPort() {
+        return javaApiPort;
+    }
 
-  public void setJavaApiPort(String javaApiPort) {
-    this.javaApiPort = javaApiPort;
-  }
+    public void setJavaApiPort(String javaApiPort) {
+        this.javaApiPort = javaApiPort;
+    }
 
-  public String getClusterName() {
-    return clusterName;
-  }
+    public String getClusterName() {
+        return clusterName;
+    }
 
-  public void setClusterName(String clusterName) {
-    this.clusterName = clusterName;
-  }
+    public void setClusterName(String clusterName) {
+        this.clusterName = clusterName;
+    }
 
-  @Override
-  public String toString() {
-    return "ElasticSearchConfig [ipAddress=" + ipAddress + ", httpPort=" + httpPort
-        + ", javaApiPort=" + javaApiPort + ", clusterName=" + clusterName + "]";
-  }
+    @Override
+    public String toString() {
+        return "ElasticSearchConfig [ipAddress=" + ipAddress + ", httpPort=" + httpPort + ", javaApiPort=" + javaApiPort
+                + ", clusterName=" + clusterName + "]";
+    }
 
-}
\ No newline at end of file
+}
index 116e784..3d95a1b 100644 (file)
@@ -22,10 +22,10 @@ package org.onap.aai.sa.searchdbabstraction.elasticsearch.dao;
 
 public interface DocumentStoreDataEntity {
 
-  public String getId();
+    public String getId();
 
-  public String getContentInJson();
+    public String getContentInJson();
 
-  public String getVersion();
+    public String getVersion();
 
 }
index 352c01d..413dbb4 100644 (file)
@@ -22,39 +22,39 @@ package org.onap.aai.sa.searchdbabstraction.elasticsearch.dao;
 
 public class DocumentStoreDataEntityImpl implements DocumentStoreDataEntity {
 
-  private String id;
-  private String content;
-  private String version;
-
-  public String getContent() {
-    return content;
-  }
-
-  public void setContent(String content) {
-    this.content = content;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  @Override
-  public String getId() {
-    return id;
-  }
-
-  @Override
-  public String getContentInJson() {
-    return content;
-  }
-
-  @Override
-  public String getVersion() {
-    return version;
-  }
-
-  public void setVersion(String version) {
-    this.version = version;
-  }
+    private String id;
+    private String content;
+    private String version;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String getContentInJson() {
+        return content;
+    }
+
+    @Override
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
 
 }
index 5eaf9a3..5ea37e1 100644 (file)
@@ -31,45 +31,40 @@ import org.onap.aai.sa.searchdbabstraction.entity.SearchOperationResult;
 
 public interface DocumentStoreInterface {
 
-  public OperationResult createIndex(String index, DocumentSchema documentSchema);
+    public OperationResult createIndex(String index, DocumentSchema documentSchema);
 
-  public OperationResult createDynamicIndex(String index, String dynamicSchema);
+    public OperationResult createDynamicIndex(String index, String dynamicSchema);
 
-  public OperationResult deleteIndex(String indexName) throws DocumentStoreOperationException;
+    public OperationResult deleteIndex(String indexName) throws DocumentStoreOperationException;
 
-  public DocumentOperationResult createDocument(String indexName, 
-                                                DocumentStoreDataEntity document, 
-                                                boolean allowImplicitIndexCreation) throws DocumentStoreOperationException;
+    public DocumentOperationResult createDocument(String indexName, DocumentStoreDataEntity document,
+            boolean allowImplicitIndexCreation) throws DocumentStoreOperationException;
 
-  public DocumentOperationResult updateDocument(String indexName, 
-                                                DocumentStoreDataEntity document,
-                                                boolean allowImplicitIndexCreation) throws DocumentStoreOperationException;
+    public DocumentOperationResult updateDocument(String indexName, DocumentStoreDataEntity document,
+            boolean allowImplicitIndexCreation) throws DocumentStoreOperationException;
 
-  public SearchOperationResult suggestionQueryWithPayload(String indexName, String query) throws DocumentStoreOperationException;
+    public SearchOperationResult suggestionQueryWithPayload(String indexName, String query)
+            throws DocumentStoreOperationException;
 
-  public DocumentOperationResult deleteDocument(String indexName, DocumentStoreDataEntity document)
-      throws DocumentStoreOperationException;
+    public DocumentOperationResult deleteDocument(String indexName, DocumentStoreDataEntity document)
+            throws DocumentStoreOperationException;
 
-  public DocumentOperationResult getDocument(String indexName, DocumentStoreDataEntity document)
-      throws DocumentStoreOperationException;
+    public DocumentOperationResult getDocument(String indexName, DocumentStoreDataEntity document)
+            throws DocumentStoreOperationException;
 
-  public SearchOperationResult search(String indexName, String queryText)
-      throws DocumentStoreOperationException;
+    public SearchOperationResult search(String indexName, String queryText) throws DocumentStoreOperationException;
 
-  public SearchOperationResult searchWithPayload(String indexName, String query)
-      throws DocumentStoreOperationException;
+    public SearchOperationResult searchWithPayload(String indexName, String query)
+            throws DocumentStoreOperationException;
 
 
-  /**
-   * Forwards a set of operations to the document store as a single, bulk
-   * request.
-   *
-   * @param anIndex    - The index to apply the operations to.
-   * @param operations - A java object containing the set of operations to
-   *                   be performed.
-   * @return - An operation result.
-   * @throws DocumentStoreOperationException
-   */
-  public OperationResult performBulkOperations(BulkRequest[] request)
-      throws DocumentStoreOperationException;
+    /**
+     * Forwards a set of operations to the document store as a single, bulk request.
+     *
+     * @param anIndex - The index to apply the operations to.
+     * @param operations - A java object containing the set of operations to be performed.
+     * @return - An operation result.
+     * @throws DocumentStoreOperationException
+     */
+    public OperationResult performBulkOperations(BulkRequest[] request) throws DocumentStoreOperationException;
 }
index d1e5fd3..23181df 100644 (file)
@@ -24,43 +24,43 @@ import java.util.Arrays;
 
 public class ElasticSearchBulkOperationResult {
 
-  private Integer took;
-  private Boolean errors;
-  private ElasticSearchResultItem[] items;
+    private Integer took;
+    private Boolean errors;
+    private ElasticSearchResultItem[] items;
 
-  public ElasticSearchBulkOperationResult() {
+    public ElasticSearchBulkOperationResult() {
 
-  }
+    }
 
-  public ElasticSearchResultItem[] getItems() {
-    return items;
-  }
+    public ElasticSearchResultItem[] getItems() {
+        return items;
+    }
 
-  public void setItems(ElasticSearchResultItem[] items) {
-    this.items = items;
-  }
+    public void setItems(ElasticSearchResultItem[] items) {
+        this.items = items;
+    }
 
-  public Integer getTook() {
-    return took;
-  }
+    public Integer getTook() {
+        return took;
+    }
 
-  public void setTook(Integer took) {
-    this.took = took;
-  }
+    public void setTook(Integer took) {
+        this.took = took;
+    }
 
-  public Boolean getErrors() {
-    return errors;
-  }
+    public Boolean getErrors() {
+        return errors;
+    }
 
-  public void setErrors(Boolean errors) {
-    this.errors = errors;
-  }
+    public void setErrors(Boolean errors) {
+        this.errors = errors;
+    }
 
-  @Override
-  public String toString() {
-    return "ElasticSearchOperationResult [took=" + took + ", errors="
-        + errors + ", items=" + Arrays.toString(items) + "]";
-  }
+    @Override
+    public String toString() {
+        return "ElasticSearchOperationResult [took=" + took + ", errors=" + errors + ", items=" + Arrays.toString(items)
+                + "]";
+    }
 
 
 }
index 7036440..ee12494 100644 (file)
@@ -22,22 +22,22 @@ package org.onap.aai.sa.searchdbabstraction.elasticsearch.dao;
 
 public class ElasticSearchCause {
 
-  private String type;
-  private String reason;
+    private String type;
+    private String reason;
 
-  public String getType() {
-    return type;
-  }
+    public String getType() {
+        return type;
+    }
 
-  public void setType(String type) {
-    this.type = type;
-  }
+    public void setType(String type) {
+        this.type = type;
+    }
 
-  public String getReason() {
-    return reason;
-  }
+    public String getReason() {
+        return reason;
+    }
 
-  public void setReason(String reason) {
-    this.reason = reason;
-  }
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
 }
index 27493a0..afb1da3 100644 (file)
@@ -27,44 +27,44 @@ import java.util.Map;
 
 public class ElasticSearchError {
 
-  private String type;
-  private String reason;
-  private ElasticSearchCause causedBy;
+    private String type;
+    private String reason;
+    private ElasticSearchCause causedBy;
 
-  private Map<String, Object> additionalProperties = new HashMap<String, Object>();
+    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
 
 
-  public String getType() {
-    return type;
-  }
+    public String getType() {
+        return type;
+    }
 
-  public void setType(String type) {
-    this.type = type;
-  }
+    public void setType(String type) {
+        this.type = type;
+    }
 
-  public String getReason() {
-    return reason;
-  }
+    public String getReason() {
+        return reason;
+    }
 
-  public void setReason(String reason) {
-    this.reason = reason;
-  }
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
 
-  public ElasticSearchCause getCausedBy() {
-    return causedBy;
-  }
+    public ElasticSearchCause getCausedBy() {
+        return causedBy;
+    }
 
-  public void setCausedBy(ElasticSearchCause causedBy) {
-    this.causedBy = causedBy;
-  }
+    public void setCausedBy(ElasticSearchCause causedBy) {
+        this.causedBy = causedBy;
+    }
 
-  @JsonAnyGetter
-  public Map<String, Object> getAdditionalProperties() {
-    return additionalProperties;
-  }
+    @JsonAnyGetter
+    public Map<String, Object> getAdditionalProperties() {
+        return additionalProperties;
+    }
 
-  @JsonAnySetter
-  public void setAdditionalProperties(String name, Object value) {
-    additionalProperties.put(name, value);
-  }
+    @JsonAnySetter
+    public void setAdditionalProperties(String name, Object value) {
+        additionalProperties.put(name, value);
+    }
 }
index 8ad1ba8..a0941e7 100644 (file)
@@ -27,88 +27,88 @@ import java.util.Map;
 
 public class ElasticSearchOperationStatus {
 
-  private String index;
-  private String type;
-  private String id;
-  private String version;
-  private ElasticSearchShardStatus shards;
-  private Integer status;
-  private ElasticSearchError error;
-
-  private Map<String, Object> additionalProperties = new HashMap<String, Object>();
-
-
-  public ElasticSearchError getError() {
-    return error;
-  }
-
-  public void setError(ElasticSearchError error) {
-    this.error = error;
-  }
-
-  public Integer getStatus() {
-    return status;
-  }
-
-  public void setStatus(Integer status) {
-    this.status = status;
-  }
-
-  public ElasticSearchShardStatus getShards() {
-    return shards;
-  }
-
-  public void setShards(ElasticSearchShardStatus shards) {
-    this.shards = shards;
-  }
-
-  public String getIndex() {
-    return index;
-  }
-
-  public void setIndex(String index) {
-    this.index = index;
-  }
-
-  public String getType() {
-    return type;
-  }
-
-  public void setType(String type) {
-    this.type = type;
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getVersion() {
-    return version;
-  }
-
-  public void setVersion(String version) {
-    this.version = version;
-  }
-
-  @JsonAnyGetter
-  public Map<String, Object> getAdditionalProperties() {
-    return additionalProperties;
-  }
-
-  @JsonAnySetter
-  public void setAdditionalProperties(String name, Object value) {
-    additionalProperties.put(name, value);
-  }
-
-  @Override
-  public String toString() {
-    return "ElasticSearchIndexStatus [index=" + index + ", type=" + type + ", id="
-        + id + ", version=" + version + ", shards=" + shards + ", status=" + status + "]";
-  }
+    private String index;
+    private String type;
+    private String id;
+    private String version;
+    private ElasticSearchShardStatus shards;
+    private Integer status;
+    private ElasticSearchError error;
+
+    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
+
+
+    public ElasticSearchError getError() {
+        return error;
+    }
+
+    public void setError(ElasticSearchError error) {
+        this.error = error;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public ElasticSearchShardStatus getShards() {
+        return shards;
+    }
+
+    public void setShards(ElasticSearchShardStatus shards) {
+        this.shards = shards;
+    }
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    @JsonAnyGetter
+    public Map<String, Object> getAdditionalProperties() {
+        return additionalProperties;
+    }
+
+    @JsonAnySetter
+    public void setAdditionalProperties(String name, Object value) {
+        additionalProperties.put(name, value);
+    }
+
+    @Override
+    public String toString() {
+        return "ElasticSearchIndexStatus [index=" + index + ", type=" + type + ", id=" + id + ", version=" + version
+                + ", shards=" + shards + ", status=" + status + "]";
+    }
 
 
 }
index f59805e..529900d 100644 (file)
@@ -24,125 +24,126 @@ import org.onap.aai.sa.rest.ApiUtils;
 
 public class ElasticSearchResultItem {
 
-  public static final String REQUEST_URL = "REQUEST_URL";
+    public static final String REQUEST_URL = "REQUEST_URL";
 
-  private ElasticSearchOperationStatus create;
-  private ElasticSearchOperationStatus index;
-  private ElasticSearchOperationStatus delete;
+    private ElasticSearchOperationStatus create;
+    private ElasticSearchOperationStatus index;
+    private ElasticSearchOperationStatus delete;
 
-  public ElasticSearchOperationStatus getCreate() {
-    return create;
-  }
-
-  public void setCreate(ElasticSearchOperationStatus index) {
-    this.create = index;
-  }
-
-  public ElasticSearchOperationStatus getIndex() {
-    return index;
-  }
-
-  public void setIndex(ElasticSearchOperationStatus index) {
-    this.index = index;
-  }
-
-  public ElasticSearchOperationStatus getDelete() {
-    return delete;
-  }
-
-  public void setDelete(ElasticSearchOperationStatus delete) {
-    this.delete = delete;
-  }
-
-  public String operationType() {
-
-    if (create != null) {
-      return "create";
-    }
-    if (index != null) {
-      return "update";
-    }
-    if (delete != null) {
-      return "delete";
+    public ElasticSearchOperationStatus getCreate() {
+        return create;
     }
 
-    return "unknown";
-  }
-
-  public ElasticSearchOperationStatus operationStatus() {
+    public void setCreate(ElasticSearchOperationStatus index) {
+        this.create = index;
+    }
 
-    if (create != null) {
-      return create;
+    public ElasticSearchOperationStatus getIndex() {
+        return index;
     }
-    if (index != null) {
-      return index;
+
+    public void setIndex(ElasticSearchOperationStatus index) {
+        this.index = index;
     }
-    if (delete != null) {
-      return delete;
+
+    public ElasticSearchOperationStatus getDelete() {
+        return delete;
     }
 
-    return null;
-  }
+    public void setDelete(ElasticSearchOperationStatus delete) {
+        this.delete = delete;
+    }
 
+    public String operationType() {
 
-  public String toJson() {
-    StringBuilder sb = new StringBuilder();
+        if (create != null) {
+            return "create";
+        }
+        if (index != null) {
+            return "update";
+        }
+        if (delete != null) {
+            return "delete";
+        }
 
-    sb.append("{");
+        return "unknown";
+    }
 
-    sb.append("\"operation\": \"").append(operationType()).append("\", ");
+    public ElasticSearchOperationStatus operationStatus() {
 
-    if (operationStatus().getAdditionalProperties().containsKey(REQUEST_URL)) {
-      sb.append("\"url\": \"").append(operationStatus().getAdditionalProperties()
-          .get(REQUEST_URL)).append("\", ");
-    } else {
-      sb.append("\"url\": \"").append(ApiUtils.buildDocumentUri(operationStatus()
-          .getIndex(), operationStatus().getId())).append("\", ");
-    }
+        if (create != null) {
+            return create;
+        }
+        if (index != null) {
+            return index;
+        }
+        if (delete != null) {
+            return delete;
+        }
 
-    // We don't want to include an etag field in the response in
-    // the case of a delete, since that would imply that the client
-    // could still access that version of the file in some manner
-    // (which we are not supporting).
-    if (!operationType().equals("delete")) {
-      sb.append("\"etag\": \"").append(operationStatus().getVersion()).append("\", ");
+        return null;
     }
-    sb.append("\"status-code\": \"").append(operationStatus().getStatus()).append("\", ");
-
-    sb.append("\"status-message\": \"");
-
-    if ((operationStatus().getStatus() >= 200) && (operationStatus().getStatus() < 300)) {
-      sb.append("OK");
-    } else {
-      // Sometimes the error object doesn't get populated, so check
-      // before we try to reference it...
-      if (operationStatus().getError() != null) {
-        sb.append(operationStatus().getError().getReason());
-      } else {
-        sb.append("");
-      }
-    }
-    sb.append("\"");
-    sb.append("}");
 
-    return sb.toString();
-  }
 
+    public String toJson() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("{");
+
+        sb.append("\"operation\": \"").append(operationType()).append("\", ");
+
+        if (operationStatus().getAdditionalProperties().containsKey(REQUEST_URL)) {
+            sb.append("\"url\": \"").append(operationStatus().getAdditionalProperties().get(REQUEST_URL))
+                    .append("\", ");
+        } else {
+            sb.append("\"url\": \"")
+                    .append(ApiUtils.buildDocumentUri(operationStatus().getIndex(), operationStatus().getId()))
+                    .append("\", ");
+        }
+
+        // We don't want to include an etag field in the response in
+        // the case of a delete, since that would imply that the client
+        // could still access that version of the file in some manner
+        // (which we are not supporting).
+        if (!operationType().equals("delete")) {
+            sb.append("\"etag\": \"").append(operationStatus().getVersion()).append("\", ");
+        }
+        sb.append("\"status-code\": \"").append(operationStatus().getStatus()).append("\", ");
+
+        sb.append("\"status-message\": \"");
+
+        if ((operationStatus().getStatus() >= 200) && (operationStatus().getStatus() < 300)) {
+            sb.append("OK");
+        } else {
+            // Sometimes the error object doesn't get populated, so check
+            // before we try to reference it...
+            if (operationStatus().getError() != null) {
+                sb.append(operationStatus().getError().getReason());
+            } else {
+                sb.append("");
+            }
+        }
+        sb.append("\"");
+        sb.append("}");
+
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
 
-    sb.append("ElasticSearchItemStatus [");
-    if (create != null) {
-      sb.append("create " + create);
-    } else if (index != null) {
-      sb.append("index " + index);
-    } else if (delete != null) {
-      sb.append("delete " + index);
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("ElasticSearchItemStatus [");
+        if (create != null) {
+            sb.append("create " + create);
+        } else if (index != null) {
+            sb.append("index " + index);
+        } else if (delete != null) {
+            sb.append("delete " + index);
+        }
+        sb.append("]");
+        return sb.toString();
     }
-    sb.append("]");
-    return sb.toString();
-  }
 
 }
index ee29728..e846a38 100644 (file)
@@ -22,39 +22,38 @@ package org.onap.aai.sa.searchdbabstraction.elasticsearch.dao;
 
 public class ElasticSearchShardStatus {
 
-  private int total;
-  private int successful;
-  private int failed;
-
-  public int getTotal() {
-    return total;
-  }
-
-  public void setTotal(int total) {
-    this.total = total;
-  }
-
-  public int getSuccessful() {
-    return successful;
-  }
-
-  public void setSuccessful(int successful) {
-    this.successful = successful;
-  }
-
-  public int getFailed() {
-    return failed;
-  }
-
-  public void setFailed(int failed) {
-    this.failed = failed;
-  }
-
-  @Override
-  public String toString() {
-    return "ElasticSearchShardStatus [total=" + total + ", successful=" + successful
-        + ", failed=" + failed + "]";
-  }
+    private int total;
+    private int successful;
+    private int failed;
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public int getSuccessful() {
+        return successful;
+    }
+
+    public void setSuccessful(int successful) {
+        this.successful = successful;
+    }
+
+    public int getFailed() {
+        return failed;
+    }
+
+    public void setFailed(int failed) {
+        this.failed = failed;
+    }
+
+    @Override
+    public String toString() {
+        return "ElasticSearchShardStatus [total=" + total + ", successful=" + successful + ", failed=" + failed + "]";
+    }
 
 
 }
index 9edea09..ae0a3e9 100644 (file)
@@ -24,52 +24,52 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.Arrays;
 
 public class AggregationBucket {
-  private Object key;
+    private Object key;
 
-  @JsonProperty("formatted-key")
-  private String formattedKey;
+    @JsonProperty("formatted-key")
+    private String formattedKey;
 
-  private Number count;
+    private Number count;
 
-  @JsonProperty("sub-aggregations")
-  private AggregationResult[] subAggregationResult;
+    @JsonProperty("sub-aggregations")
+    private AggregationResult[] subAggregationResult;
 
-  public Object getKey() {
-    return key;
-  }
+    public Object getKey() {
+        return key;
+    }
 
-  public void setKey(Object key) {
-    this.key = key;
-  }
+    public void setKey(Object key) {
+        this.key = key;
+    }
 
-  public String getFormattedKey() {
-    return formattedKey;
-  }
+    public String getFormattedKey() {
+        return formattedKey;
+    }
 
-  public void setFormattedKey(String formattedKey) {
-    this.formattedKey = formattedKey;
-  }
+    public void setFormattedKey(String formattedKey) {
+        this.formattedKey = formattedKey;
+    }
 
-  public Number getCount() {
-    return count;
-  }
+    public Number getCount() {
+        return count;
+    }
 
-  public void setCount(Number count) {
-    this.count = count;
-  }
+    public void setCount(Number count) {
+        this.count = count;
+    }
 
-  public AggregationResult[] getSubAggregationResult() {
-    return subAggregationResult;
-  }
+    public AggregationResult[] getSubAggregationResult() {
+        return subAggregationResult;
+    }
 
-  public void setSubAggregationResult(AggregationResult[] subAggregationResult) {
-    this.subAggregationResult = subAggregationResult;
-  }
+    public void setSubAggregationResult(AggregationResult[] subAggregationResult) {
+        this.subAggregationResult = subAggregationResult;
+    }
 
-  @Override
-  public String toString() {
-    return "AggregationBucket [key=" + key + ", formattedKey=" + formattedKey + ", count=" + count
-        + ", subAggregationResult=" + Arrays.toString(subAggregationResult) + "]";
-  }
+    @Override
+    public String toString() {
+        return "AggregationBucket [key=" + key + ", formattedKey=" + formattedKey + ", count=" + count
+                + ", subAggregationResult=" + Arrays.toString(subAggregationResult) + "]";
+    }
 
 }
index 88d33b8..923afbf 100644 (file)
@@ -24,52 +24,51 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.Arrays;
 
 public class AggregationResult {
-  private String name;
+    private String name;
 
-  private Number count;
+    private Number count;
 
-  private AggregationBucket[] buckets;
+    private AggregationBucket[] buckets;
 
-  @JsonProperty("nested-aggregations")
-  private AggregationResult[] nestedAggregations;
+    @JsonProperty("nested-aggregations")
+    private AggregationResult[] nestedAggregations;
 
-  public String getName() {
-    return name;
-  }
+    public String getName() {
+        return name;
+    }
 
-  public void setName(String name) {
-    this.name = name;
-  }
+    public void setName(String name) {
+        this.name = name;
+    }
 
-  public AggregationBucket[] getBuckets() {
-    return buckets;
-  }
+    public AggregationBucket[] getBuckets() {
+        return buckets;
+    }
 
-  public void setBuckets(AggregationBucket[] buckets) {
-    this.buckets = buckets;
-  }
+    public void setBuckets(AggregationBucket[] buckets) {
+        this.buckets = buckets;
+    }
 
-  public AggregationResult[] getNestedAggregations() {
-    return nestedAggregations;
-  }
+    public AggregationResult[] getNestedAggregations() {
+        return nestedAggregations;
+    }
 
-  public void setNestedAggregations(AggregationResult[] nestedAggregations) {
-    this.nestedAggregations = nestedAggregations;
-  }
+    public void setNestedAggregations(AggregationResult[] nestedAggregations) {
+        this.nestedAggregations = nestedAggregations;
+    }
 
-  public Number getCount() {
-    return count;
-  }
+    public Number getCount() {
+        return count;
+    }
 
-  public void setCount(Number count) {
-    this.count = count;
-  }
+    public void setCount(Number count) {
+        this.count = count;
+    }
 
-  @Override
-  public String toString() {
-    return "AggregationResult [name=" + name + ", count=" + count + ", buckets="
-        + Arrays.toString(buckets) + ", nestedAggregations=" + Arrays.toString(nestedAggregations)
-        + "]";
-  }
+    @Override
+    public String toString() {
+        return "AggregationResult [name=" + name + ", count=" + count + ", buckets=" + Arrays.toString(buckets)
+                + ", nestedAggregations=" + Arrays.toString(nestedAggregations) + "]";
+    }
 
 }
index bb8d282..f8f3ed3 100644 (file)
@@ -23,19 +23,19 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 import java.util.Arrays;
 
 public class AggregationResults {
-  private AggregationResult[] aggregations;
+    private AggregationResult[] aggregations;
 
-  public AggregationResult[] getAggregations() {
-    return aggregations;
-  }
+    public AggregationResult[] getAggregations() {
+        return aggregations;
+    }
 
-  public void setAggregations(AggregationResult[] aggregations) {
-    this.aggregations = aggregations;
-  }
+    public void setAggregations(AggregationResult[] aggregations) {
+        this.aggregations = aggregations;
+    }
 
-  @Override
-  public String toString() {
-    return "AggregationResults [aggregations=" + Arrays.toString(aggregations) + "]";
-  }
+    @Override
+    public String toString() {
+        return "AggregationResults [aggregations=" + Arrays.toString(aggregations) + "]";
+    }
 
 }
index ae512bd..8b7df43 100644 (file)
@@ -23,39 +23,39 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 import org.json.simple.JSONObject;
 
 public class Document {
-  private String etag;
-  private String url;
+    private String etag;
+    private String url;
 
-  private JSONObject content;
+    private JSONObject content;
 
-  public String getEtag() {
-    return etag;
-  }
+    public String getEtag() {
+        return etag;
+    }
 
-  public void setEtag(String etag) {
-    this.etag = etag;
-  }
+    public void setEtag(String etag) {
+        this.etag = etag;
+    }
 
-  public String getUrl() {
-    return url;
-  }
+    public String getUrl() {
+        return url;
+    }
 
-  public void setUrl(String url) {
-    this.url = url;
-  }
+    public void setUrl(String url) {
+        this.url = url;
+    }
 
-  public JSONObject getContent() {
-    return content;
-  }
+    public JSONObject getContent() {
+        return content;
+    }
 
-  public void setContent(JSONObject content) {
-    this.content = content;
-  }
+    public void setContent(JSONObject content) {
+        this.content = content;
+    }
 
-  @Override
-  public String toString() {
-    return "Document [etag=" + etag + ", url=" + url + "]";
-  }
+    @Override
+    public String toString() {
+        return "Document [etag=" + etag + ", url=" + url + "]";
+    }
 
 
 }
index f22c41a..9775446 100644 (file)
 package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class DocumentOperationResult extends OperationResult {
-  private Document document;
+    private Document document;
 
-  public Document getDocument() {
-    return document;
-  }
+    public Document getDocument() {
+        return document;
+    }
 
-  public void setDocument(Document document) {
-    this.document = document;
-  }
+    public void setDocument(Document document) {
+        this.document = document;
+    }
 
-  @Override
-  public String toString() {
-    return "DocumentOperationResult [document=" + document + "]";
-  }
+    @Override
+    public String toString() {
+        return "DocumentOperationResult [document=" + document + "]";
+    }
 
 
 }
index 26253b9..06c788a 100644 (file)
@@ -22,35 +22,35 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class ErrorResult {
 
-  private String type;
-  private String reason;
+    private String type;
+    private String reason;
 
 
-  public ErrorResult(String type, String reason) {
-    super();
-    this.type = type;
-    this.reason = reason;
-  }
+    public ErrorResult(String type, String reason) {
+        super();
+        this.type = type;
+        this.reason = reason;
+    }
 
-  public String getType() {
-    return type;
-  }
+    public String getType() {
+        return type;
+    }
 
-  public void setType(String type) {
-    this.type = type;
-  }
+    public void setType(String type) {
+        this.type = type;
+    }
 
-  public String getReason() {
-    return reason;
-  }
+    public String getReason() {
+        return reason;
+    }
 
-  public void setReason(String reason) {
-    this.reason = reason;
-  }
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
 
-  @Override
-  public String toString() {
-    return "ErrorResponse [type=" + type + ", reason=" + reason + "]";
-  }
+    @Override
+    public String toString() {
+        return "ErrorResponse [type=" + type + ", reason=" + reason + "]";
+    }
 
 }
index 3545818..0d3a8bb 100644 (file)
@@ -22,57 +22,57 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class OperationResult {
 
-  private int resultCode;
+    private int resultCode;
 
-  private String failureCause;
-  private String resultVersion;
-  private String result;
-  private ErrorResult error;
+    private String failureCause;
+    private String resultVersion;
+    private String result;
+    private ErrorResult error;
 
-  public int getResultCode() {
-    return resultCode;
-  }
+    public int getResultCode() {
+        return resultCode;
+    }
 
-  public void setResultCode(int resultCode) {
-    this.resultCode = resultCode;
-  }
+    public void setResultCode(int resultCode) {
+        this.resultCode = resultCode;
+    }
 
-  public String getFailureCause() {
-    return failureCause;
-  }
+    public String getFailureCause() {
+        return failureCause;
+    }
 
-  public void setFailureCause(String failureCause) {
-    this.failureCause = failureCause;
-  }
+    public void setFailureCause(String failureCause) {
+        this.failureCause = failureCause;
+    }
 
-  public String getResultVersion() {
-    return resultVersion;
-  }
+    public String getResultVersion() {
+        return resultVersion;
+    }
 
-  public void setResultVersion(String resultVersion) {
-    this.resultVersion = resultVersion;
-  }
+    public void setResultVersion(String resultVersion) {
+        this.resultVersion = resultVersion;
+    }
 
-  public String getResult() {
-    return result;
-  }
+    public String getResult() {
+        return result;
+    }
 
-  public void setResult(String result) {
-    this.result = result;
-  }
+    public void setResult(String result) {
+        this.result = result;
+    }
 
-  public ErrorResult getError() {
-    return error;
-  }
+    public ErrorResult getError() {
+        return error;
+    }
 
-  public void setError(ErrorResult error) {
-    this.error = error;
-  }
+    public void setError(ErrorResult error) {
+        this.error = error;
+    }
 
-  @Override
-  public String toString() {
-    return "OperationResult [resultCode=" + resultCode + ", failureCause=" + failureCause
-        + ", resultVersion=" + resultVersion + ", result=" + result + ", error=" + error + "]";
-  }
+    @Override
+    public String toString() {
+        return "OperationResult [resultCode=" + resultCode + ", failureCause=" + failureCause + ", resultVersion="
+                + resultVersion + ", result=" + result + ", error=" + error + "]";
+    }
 
 }
index 1f4a5be..033dafe 100644 (file)
 package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class SearchHit {
-  private String score;
-  Document document;
+    private String score;
+    Document document;
 
-  public String getScore() {
-    return score;
-  }
+    public String getScore() {
+        return score;
+    }
 
-  public void setScore(String score) {
-    this.score = score;
-  }
+    public void setScore(String score) {
+        this.score = score;
+    }
 
-  public Document getDocument() {
-    return document;
-  }
+    public Document getDocument() {
+        return document;
+    }
 
-  public void setDocument(Document document) {
-    this.document = document;
-  }
+    public void setDocument(Document document) {
+        this.document = document;
+    }
 
-  @Override
-  public String toString() {
-    return "SearchHit [score=" + score + ", document=" + document + "]";
-  }
+    @Override
+    public String toString() {
+        return "SearchHit [score=" + score + ", document=" + document + "]";
+    }
 
 }
index f3fefe7..cf4fd3a 100644 (file)
@@ -23,28 +23,28 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 import java.util.Arrays;
 
 public class SearchHits {
-  private String totalHits;
-  private SearchHit[] hits;
+    private String totalHits;
+    private SearchHit[] hits;
 
-  public String getTotalHits() {
-    return totalHits;
-  }
+    public String getTotalHits() {
+        return totalHits;
+    }
 
-  public void setTotalHits(String totalHits) {
-    this.totalHits = totalHits;
-  }
+    public void setTotalHits(String totalHits) {
+        this.totalHits = totalHits;
+    }
 
-  public SearchHit[] getHits() {
-    return hits;
-  }
+    public SearchHit[] getHits() {
+        return hits;
+    }
 
-  public void setHits(SearchHit[] hits) {
-    this.hits = hits;
-  }
+    public void setHits(SearchHit[] hits) {
+        this.hits = hits;
+    }
 
-  @Override
-  public String toString() {
-    return "SearchHits [totalHits=" + totalHits + ", hits=" + Arrays.toString(hits) + "]";
-  }
+    @Override
+    public String toString() {
+        return "SearchHits [totalHits=" + totalHits + ", hits=" + Arrays.toString(hits) + "]";
+    }
 
 }
index cdb9ee3..6834d33 100644 (file)
@@ -22,36 +22,38 @@ package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class SearchOperationResult extends OperationResult {
 
-  private SearchHits searchResult;
-  private AggregationResults aggregationResult;
-  private SuggestHits suggestResult;
-
-  public SearchHits getSearchResult() {
-    return searchResult;
-  }
-
-  public SuggestHits getSuggestResult() {
-    return suggestResult;
-  }
-
-  public AggregationResults getAggregationResult() {
-    return aggregationResult;
-  }
-
-  public void setAggregationResult(AggregationResults aggregations) {
-    this.aggregationResult = aggregations;
-  }
-
-  public void setSearchResult(SearchHits hits) {
-    this.searchResult = hits;
-  }
-
-  public void setSuggestResult(SuggestHits hits) { this.suggestResult = hits; }
-
-  @Override
-  public String toString() {
-    return "SearchOperationResult [searchResult=" + searchResult
-        + ", aggregationResult=" + aggregationResult + ", suggestResult=" + suggestResult;
-  }
+    private SearchHits searchResult;
+    private AggregationResults aggregationResult;
+    private SuggestHits suggestResult;
+
+    public SearchHits getSearchResult() {
+        return searchResult;
+    }
+
+    public SuggestHits getSuggestResult() {
+        return suggestResult;
+    }
+
+    public AggregationResults getAggregationResult() {
+        return aggregationResult;
+    }
+
+    public void setAggregationResult(AggregationResults aggregations) {
+        this.aggregationResult = aggregations;
+    }
+
+    public void setSearchResult(SearchHits hits) {
+        this.searchResult = hits;
+    }
+
+    public void setSuggestResult(SuggestHits hits) {
+        this.suggestResult = hits;
+    }
+
+    @Override
+    public String toString() {
+        return "SearchOperationResult [searchResult=" + searchResult + ", aggregationResult=" + aggregationResult
+                + ", suggestResult=" + suggestResult;
+    }
 
 }
index 82a6c93..4ce267d 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-   package org.onap.aai.sa.searchdbabstraction.entity;
+package org.onap.aai.sa.searchdbabstraction.entity;
 
 public class SuggestHit {
 
@@ -54,4 +54,4 @@ public class SuggestHit {
     public String toString() {
         return "SearchHit [text=" + text + ",score=" + score + ", document=" + document + "]";
     }
-}
\ No newline at end of file
+}
index 9ba8fef..d38de2a 100644 (file)
@@ -25,198 +25,158 @@ import org.onap.aai.cl.eelf.LogMessageEnum;
 
 public enum SearchDbMsgs implements LogMessageEnum {
 
-  /**
-   * Arguments:
-   * None
-   */
-  SERVICE_STARTED,
-
-  /**
-   * Arguments:
-   * {0} = url
-   */
-  ELASTIC_SEARCH_CONNECTION_ATTEMPT,
-
-  /**
-   * Arguments:
-   * {0} = url
-   */
-  ELASTIC_SEARCH_CONNECTION_SUCCESS,
-
-  /**
-   * Arguments:
-   * {0} = url
-   * {1} = failure cause
-   */
-  ELASTIC_SEARCH_CONNECTION_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Filter configuration file.
-   * {1} = Failure cause.
-   */
-  FILTERS_CONFIG_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Analysys configuration file.
-   * {1} = Failure case.
-   */
-  ANALYSYS_CONFIG_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   */
-  CREATED_INDEX,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Document type
-   */
-  CREATE_INDEX_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   */
-  DELETED_INDEX,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   */
-  DELETE_INDEX_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   */
-  CHECK_INDEX_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   */
-  CREATE_DOCUMENT_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Document id
-   */
-  UPDATE_DOCUMENT_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Document id
-   */
-  DELETE_DOCUMENT_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Document id
-   */
-  GET_DOCUMENT_TIME,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Query string
-   */
-  QUERY_DOCUMENT_TIME,
-
-  /**
-   * Arguments:
-   */
-  BULK_OPERATIONS_TIME,
-
-  /**
-   * Arguments:
-   */
-  PROCESSED_BULK_OPERATIONS,
-
-  /**
-   * Arguments:
-   * {0} = Event
-   * {1} = Result
-   */
-  PROCESS_EVENT,
-
-  /**
-   * Arguments:
-   * {0} = URL.
-   */
-  PROCESS_INLINE_QUERY,
-
-  /**
-   * Arguments
-   * {0} - Operation type (GET or POST)
-   * {1} - URL.
-   */
-  PROCESS_PAYLOAD_QUERY,
-
-  /**
-   * Arguments:
-   * {0} = Index
-   * {1} = Error
-   */
-  INDEX_CREATE_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Index name
-   * {1} = Error cause
-   */
-  INDEX_DELETE_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Failure cause.
-   */
-  GET_ANALYZERS_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Failure cause.
-   */
-  BULK_OPERATION_FAILURE,
-
-  /**
-   * Arguments:
-   * {0} = Method
-   * {1} = Exception
-   */
-  EXCEPTION_DURING_METHOD_CALL,
-
-  /**
-   * Received request {0} {1} from {2}.  Sending response: {3}
-   *
-   * <p>Arguments:
-   * {0} = operation
-   * {1} = target URL
-   * {2} = source
-   * {3} = response code
-   */
-  PROCESS_REST_REQUEST,
-
-  STARTUP_EXCEPTION
-  /**
-   * Exception encountered during startup of search service: {0}
-   *
-   * <p>Arguments:
-   *    {0} = exception
-   */
-  ;
-
-  /**
-   * Load message bundle (SearchDbMsgs.properties file)
-   */
-  static {
-    EELFResourceManager.loadMessageBundle("logging/SearchDbMsgs");
-  }
+    /**
+     * Arguments: None
+     */
+    SERVICE_STARTED,
+
+    /**
+     * Arguments: {0} = url
+     */
+    ELASTIC_SEARCH_CONNECTION_ATTEMPT,
+
+    /**
+     * Arguments: {0} = url
+     */
+    ELASTIC_SEARCH_CONNECTION_SUCCESS,
+
+    /**
+     * Arguments: {0} = url {1} = failure cause
+     */
+    ELASTIC_SEARCH_CONNECTION_FAILURE,
+
+    /**
+     * Arguments: {0} = Filter configuration file. {1} = Failure cause.
+     */
+    FILTERS_CONFIG_FAILURE,
+
+    /**
+     * Arguments: {0} = Analysys configuration file. {1} = Failure case.
+     */
+    ANALYSYS_CONFIG_FAILURE,
+
+    /**
+     * Arguments: {0} = Index name
+     */
+    CREATED_INDEX,
+
+    /**
+     * Arguments: {0} = Index name {1} = Document type
+     */
+    CREATE_INDEX_TIME,
+
+    /**
+     * Arguments: {0} = Index name
+     */
+    DELETED_INDEX,
+
+    /**
+     * Arguments: {0} = Index name
+     */
+    DELETE_INDEX_TIME,
+
+    /**
+     * Arguments: {0} = Index name
+     */
+    CHECK_INDEX_TIME,
+
+    /**
+     * Arguments: {0} = Index name
+     */
+    CREATE_DOCUMENT_TIME,
+
+    /**
+     * Arguments: {0} = Index name {1} = Document id
+     */
+    UPDATE_DOCUMENT_TIME,
+
+    /**
+     * Arguments: {0} = Index name {1} = Document id
+     */
+    DELETE_DOCUMENT_TIME,
+
+    /**
+     * Arguments: {0} = Index name {1} = Document id
+     */
+    GET_DOCUMENT_TIME,
+
+    /**
+     * Arguments: {0} = Index name {1} = Query string
+     */
+    QUERY_DOCUMENT_TIME,
+
+    /**
+     * Arguments:
+     */
+    BULK_OPERATIONS_TIME,
+
+    /**
+     * Arguments:
+     */
+    PROCESSED_BULK_OPERATIONS,
+
+    /**
+     * Arguments: {0} = Event {1} = Result
+     */
+    PROCESS_EVENT,
+
+    /**
+     * Arguments: {0} = URL.
+     */
+    PROCESS_INLINE_QUERY,
+
+    /**
+     * Arguments {0} - Operation type (GET or POST) {1} - URL.
+     */
+    PROCESS_PAYLOAD_QUERY,
+
+    /**
+     * Arguments: {0} = Index {1} = Error
+     */
+    INDEX_CREATE_FAILURE,
+
+    /**
+     * Arguments: {0} = Index name {1} = Error cause
+     */
+    INDEX_DELETE_FAILURE,
+
+    /**
+     * Arguments: {0} = Failure cause.
+     */
+    GET_ANALYZERS_FAILURE,
+
+    /**
+     * Arguments: {0} = Failure cause.
+     */
+    BULK_OPERATION_FAILURE,
+
+    /**
+     * Arguments: {0} = Method {1} = Exception
+     */
+    EXCEPTION_DURING_METHOD_CALL,
+
+    /**
+     * Received request {0} {1} from {2}. Sending response: {3}
+     *
+     * <p>
+     * Arguments: {0} = operation {1} = target URL {2} = source {3} = response code
+     */
+    PROCESS_REST_REQUEST,
+
+    STARTUP_EXCEPTION
+    /**
+     * Exception encountered during startup of search service: {0}
+     *
+     * <p>
+     * Arguments: {0} = exception
+     */
+    ;
+
+    /**
+     * Load message bundle (SearchDbMsgs.properties file)
+     */
+    static {
+        EELFResourceManager.loadMessageBundle("logging/SearchDbMsgs");
+    }
 
 }
index 99c99e5..80b4704 100644 (file)
@@ -24,55 +24,54 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 
 /**
- * This is the common parent from which all aggregation types inherit.  It defines
- * the common fields that all aggregations must include.
+ * This is the common parent from which all aggregation types inherit. It defines the common fields that all
+ * aggregations must include.
  */
 public abstract class AbstractAggregation {
 
-  /**
-   * The name of the field to apply the aggregation against.
-   */
-  protected String field;
+    /**
+     * The name of the field to apply the aggregation against.
+     */
+    protected String field;
 
-  /**
-   * Optionally allows the number of buckets for the aggregation to be
-   * specified.
-   */
-  protected Integer size;
+    /**
+     * Optionally allows the number of buckets for the aggregation to be specified.
+     */
+    protected Integer size;
 
-  /**
-   * Optionally sets the minimum number of matches that must occur before
-   * a particular bucket is included in the aggregation result.
-   */
-  @JsonProperty("min-threshold")
-  protected Integer minThreshold;
+    /**
+     * Optionally sets the minimum number of matches that must occur before a particular bucket is included in the
+     * aggregation result.
+     */
+    @JsonProperty("min-threshold")
+    protected Integer minThreshold;
 
 
-  public String getField() {
-    return field;
-  }
+    public String getField() {
+        return field;
+    }
 
-  public void setField(String field) {
-    this.field = field;
-  }
+    public void setField(String field) {
+        this.field = field;
+    }
 
-  public Integer getSize() {
-    return size;
-  }
+    public Integer getSize() {
+        return size;
+    }
 
-  public void setSize(Integer size) {
-    this.size = size;
-  }
+    public void setSize(Integer size) {
+        this.size = size;
+    }
 
-  public Integer getMinThreshold() {
-    return minThreshold;
-  }
+    public Integer getMinThreshold() {
+        return minThreshold;
+    }
 
-  public void setMinThreshold(Integer minThreshold) {
-    this.minThreshold = minThreshold;
-  }
+    public void setMinThreshold(Integer minThreshold) {
+        this.minThreshold = minThreshold;
+    }
 
-  public abstract String toElasticSearch();
+    public abstract String toElasticSearch();
 
-  public abstract String toString();
+    public abstract String toString();
 }
index 532571b..e1994fe 100644 (file)
@@ -23,41 +23,41 @@ package org.onap.aai.sa.searchdbabstraction.searchapi;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class Aggregation {
-  private String name;
+    private String name;
 
-  @JsonProperty("aggregation")
-  private AggregationStatement aggregation;
+    @JsonProperty("aggregation")
+    private AggregationStatement aggregation;
 
-  public String getName() {
-    return name;
-  }
+    public String getName() {
+        return name;
+    }
 
-  public void setName(String name) {
-    this.name = name;
-  }
+    public void setName(String name) {
+        this.name = name;
+    }
 
-  public AggregationStatement getStatement() {
-    return aggregation;
-  }
+    public AggregationStatement getStatement() {
+        return aggregation;
+    }
 
-  public void setStatement(AggregationStatement aggregation) {
-    this.aggregation = aggregation;
-  }
+    public void setStatement(AggregationStatement aggregation) {
+        this.aggregation = aggregation;
+    }
 
-  public String toElasticSearch() {
-    StringBuffer sb = new StringBuffer();
+    public String toElasticSearch() {
+        StringBuffer sb = new StringBuffer();
 
-    sb.append("\"");
-    sb.append(name);
-    sb.append("\": ");
-    sb.append(aggregation.toElasticSearch());
+        sb.append("\"");
+        sb.append(name);
+        sb.append("\": ");
+        sb.append(aggregation.toElasticSearch());
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
-    return "{name: " + name + ", aggregation: " + aggregation.toString();
-  }
+    @Override
+    public String toString() {
+        return "{name: " + name + ", aggregation: " + aggregation.toString();
+    }
 
 }
index 696c9d9..4b446fd 100644 (file)
@@ -25,149 +25,149 @@ import java.util.Arrays;
 
 public class AggregationStatement {
 
-  @JsonProperty("group-by")
-  private GroupByAggregation groupBy;
+    @JsonProperty("group-by")
+    private GroupByAggregation groupBy;
 
-  @JsonProperty("date-range")
-  private DateRangeAggregation dateRange;
+    @JsonProperty("date-range")
+    private DateRangeAggregation dateRange;
 
-  @JsonProperty("date-histogram")
-  private DateHistogramAggregation dateHist;
+    @JsonProperty("date-histogram")
+    private DateHistogramAggregation dateHist;
 
-  @JsonProperty("nested")
-  private Aggregation[] nested;
+    @JsonProperty("nested")
+    private Aggregation[] nested;
 
-  @JsonProperty("sub-aggregations")
-  private Aggregation[] subAggregations;
+    @JsonProperty("sub-aggregations")
+    private Aggregation[] subAggregations;
 
-  public GroupByAggregation getGroupBy() {
-    return groupBy;
-  }
-
-  public void setGroupBy(GroupByAggregation groupBy) {
-    this.groupBy = groupBy;
-  }
-
-  public DateRangeAggregation getDateRange() {
-    return dateRange;
-  }
+    public GroupByAggregation getGroupBy() {
+        return groupBy;
+    }
 
-  public void setDateRange(DateRangeAggregation dateRange) {
-    this.dateRange = dateRange;
-  }
+    public void setGroupBy(GroupByAggregation groupBy) {
+        this.groupBy = groupBy;
+    }
 
-  public DateHistogramAggregation getDateHist() {
-    return dateHist;
-  }
+    public DateRangeAggregation getDateRange() {
+        return dateRange;
+    }
 
-  public void setDateHist(DateHistogramAggregation dateHist) {
-    this.dateHist = dateHist;
-  }
+    public void setDateRange(DateRangeAggregation dateRange) {
+        this.dateRange = dateRange;
+    }
 
-  public Aggregation[] getNested() {
-    return nested;
-  }
+    public DateHistogramAggregation getDateHist() {
+        return dateHist;
+    }
 
-  public void setNested(Aggregation[] nested) {
-    this.nested = nested;
-  }
+    public void setDateHist(DateHistogramAggregation dateHist) {
+        this.dateHist = dateHist;
+    }
 
-  public Aggregation[] getSubAggregations() {
-    return subAggregations;
-  }
+    public Aggregation[] getNested() {
+        return nested;
+    }
 
-  public void setSubAggregations(Aggregation[] subAggregations) {
-    this.subAggregations = subAggregations;
-  }
+    public void setNested(Aggregation[] nested) {
+        this.nested = nested;
+    }
 
-  public String toElasticSearch() {
-    StringBuffer sb = new StringBuffer();
+    public Aggregation[] getSubAggregations() {
+        return subAggregations;
+    }
 
-    sb.append("{");
+    public void setSubAggregations(Aggregation[] subAggregations) {
+        this.subAggregations = subAggregations;
+    }
 
-    if (nested != null && nested.length > 0) {
-      sb.append("\"nested\": {\"path\": \"");
-      if (nested[0].getStatement() != null) {
-        sb.append(nested[0].getStatement().getNestedPath());
-      }
-      sb.append("\"}, \"aggs\": {");
-      for (int i = 0; i < nested.length; i++) {
-        if (i > 0) {
-          sb.append(",");
-        }
-        sb.append(nested[i].toElasticSearch());
-      }
-
-      sb.append("}");
-    } else {
-      if (groupBy != null) {
-        sb.append(groupBy.toElasticSearch());
-      } else if (dateRange != null) {
-        sb.append(dateRange.toElasticSearch());
-      } else if (dateHist != null) {
-        sb.append(dateHist.toElasticSearch());
-      }
-
-      if (subAggregations != null && subAggregations.length > 0) {
-        sb.append(", \"aggs\": {");
-        for (int i = 0; i < subAggregations.length; i++) {
-          if (i > 0) {
-            sb.append(",");
-          }
-          sb.append(subAggregations[i].toElasticSearch());
+    public String toElasticSearch() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("{");
+
+        if (nested != null && nested.length > 0) {
+            sb.append("\"nested\": {\"path\": \"");
+            if (nested[0].getStatement() != null) {
+                sb.append(nested[0].getStatement().getNestedPath());
+            }
+            sb.append("\"}, \"aggs\": {");
+            for (int i = 0; i < nested.length; i++) {
+                if (i > 0) {
+                    sb.append(",");
+                }
+                sb.append(nested[i].toElasticSearch());
+            }
+
+            sb.append("}");
+        } else {
+            if (groupBy != null) {
+                sb.append(groupBy.toElasticSearch());
+            } else if (dateRange != null) {
+                sb.append(dateRange.toElasticSearch());
+            } else if (dateHist != null) {
+                sb.append(dateHist.toElasticSearch());
+            }
+
+            if (subAggregations != null && subAggregations.length > 0) {
+                sb.append(", \"aggs\": {");
+                for (int i = 0; i < subAggregations.length; i++) {
+                    if (i > 0) {
+                        sb.append(",");
+                    }
+                    sb.append(subAggregations[i].toElasticSearch());
+                }
+                sb.append("}");
+            }
         }
+
         sb.append("}");
-      }
-    }
 
-    sb.append("}");
+        return sb.toString();
+    }
 
-    return sb.toString();
-  }
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        if (nested != null) {
+            sb.append("{nested: ");
+            sb.append(Arrays.toString(nested));
+        } else if (groupBy != null) {
+            sb.append(groupBy.toString());
+        } else if (dateHist != null) {
+            sb.append(dateHist.toString());
+        } else if (dateRange != null) {
+            sb.append(dateRange.toString());
+        }
 
-  @Override
-  public String toString() {
-    StringBuffer sb = new StringBuffer();
+        if (subAggregations != null) {
+            sb.append(", sub-aggregations: ");
+            sb.append(Arrays.toString(subAggregations));
+        }
 
-    if (nested != null) {
-      sb.append("{nested: ");
-      sb.append(Arrays.toString(nested));
-    } else if (groupBy != null) {
-      sb.append(groupBy.toString());
-    } else if (dateHist != null) {
-      sb.append(dateHist.toString());
-    } else if (dateRange != null) {
-      sb.append(dateRange.toString());
-    }
+        sb.append("}");
 
-    if (subAggregations != null) {
-      sb.append(", sub-aggregations: ");
-      sb.append(Arrays.toString(subAggregations));
+        return sb.toString();
     }
 
-    sb.append("}");
-
-    return sb.toString();
-  }
+    public String getNestedPath() {
+        String path = null;
+        String fieldName = null;
 
-  public String getNestedPath() {
-    String path = null;
-    String fieldName = null;
+        if (groupBy != null) {
+            fieldName = groupBy.getField();
+        } else if (dateRange != null) {
+            fieldName = dateRange.getField();
+        } else if (dateHist != null) {
+            fieldName = dateHist.getField();
+        }
 
-    if (groupBy != null) {
-      fieldName = groupBy.getField();
-    } else if (dateRange != null) {
-      fieldName = dateRange.getField();
-    } else if (dateHist != null) {
-      fieldName = dateHist.getField();
-    }
+        if (fieldName != null && fieldName.contains(".")) {
+            // we have nested field
+            path = fieldName.substring(0, fieldName.indexOf("."));
+        }
 
-    if (fieldName != null && fieldName.contains(".")) {
-      // we have nested field
-      path = fieldName.substring(0, fieldName.indexOf("."));
+        return path;
     }
 
-    return path;
-  }
-
 }
index 2967fd2..96bb25d 100644 (file)
@@ -25,7 +25,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 /**
  * An example of elasticsearch date_histogram aggregation:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  * {
  *    "aggs": {
  *        "my_group": {
@@ -41,75 +43,75 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class DateHistogramAggregation extends AbstractAggregation {
 
-  private String interval;
+    private String interval;
 
-  private String format;
+    private String format;
 
-  @JsonProperty("time-zone")
-  private String timeZone;
+    @JsonProperty("time-zone")
+    private String timeZone;
 
 
-  public String getInterval() {
-    return interval;
-  }
-
-  public void setInterval(String interval) {
-    this.interval = interval;
-  }
-
-  public String getTimeZone() {
-    return timeZone;
-  }
-
-  public String getFormat() {
-    return format;
-  }
-
-  public void setFormat(String format) {
-    this.format = format;
-  }
-
-  public void setTimeZone(String timeZone) {
-    this.timeZone = timeZone;
-  }
-
-  @Override
-  public String toElasticSearch() {
-    StringBuilder sb = new StringBuilder();
+    public String getInterval() {
+        return interval;
+    }
 
-    sb.append("\"date_histogram\": {\"field\": \"");
-    sb.append(field);
-    sb.append("\"");
-    if (interval != null) {
-      sb.append(", \"interval\": \"");
-      sb.append(interval);
-      sb.append("\"");
+    public void setInterval(String interval) {
+        this.interval = interval;
     }
-    if (format != null) {
-      sb.append(", \"format\": \"");
-      sb.append(format);
-      sb.append("\"");
+
+    public String getTimeZone() {
+        return timeZone;
     }
-    if (timeZone != null) {
-      sb.append(", \"time_zone\": \"");
-      sb.append(timeZone);
-      sb.append("\"");
+
+    public String getFormat() {
+        return format;
     }
-    if (size != null) {
-      sb.append(", \"size\": ");
-      sb.append(size);
+
+    public void setFormat(String format) {
+        this.format = format;
     }
-    if (minThreshold != null) {
-      sb.append(", \"min_doc_count\": ").append(minThreshold);
+
+    public void setTimeZone(String timeZone) {
+        this.timeZone = timeZone;
     }
-    sb.append("}");
 
-    return sb.toString();
-  }
+    @Override
+    public String toElasticSearch() {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("\"date_histogram\": {\"field\": \"");
+        sb.append(field);
+        sb.append("\"");
+        if (interval != null) {
+            sb.append(", \"interval\": \"");
+            sb.append(interval);
+            sb.append("\"");
+        }
+        if (format != null) {
+            sb.append(", \"format\": \"");
+            sb.append(format);
+            sb.append("\"");
+        }
+        if (timeZone != null) {
+            sb.append(", \"time_zone\": \"");
+            sb.append(timeZone);
+            sb.append("\"");
+        }
+        if (size != null) {
+            sb.append(", \"size\": ");
+            sb.append(size);
+        }
+        if (minThreshold != null) {
+            sb.append(", \"min_doc_count\": ").append(minThreshold);
+        }
+        sb.append("}");
+
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
-    return "DateHistogramAggregation: [field=" + field + ", interval=" + interval + ", format="
-        + format + ", timeZone=" + timeZone + ", size=" + size + " minThreshold=" + minThreshold;
-  }
+    @Override
+    public String toString() {
+        return "DateHistogramAggregation: [field=" + field + ", interval=" + interval + ", format=" + format
+                + ", timeZone=" + timeZone + ", size=" + size + " minThreshold=" + minThreshold;
+    }
 }
index 8d899b0..78f707a 100644 (file)
@@ -27,6 +27,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  * <p>
  * The expected JSON structure for a ranges is as follows:
  * <p>
+ * 
  * <pre>
  * {
  *  "from": <from-date>
@@ -35,6 +36,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  * <p>
  * or
  * <p>
+ * 
  * <pre>
  * {
  *  "to": <to-date>
@@ -43,6 +45,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  * <p>
  * or
  * <p>
+ * 
  * <pre>
  * {
  *  "from": <from-date>,
@@ -54,58 +57,58 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  */
 public class DateRange {
 
-  @JsonProperty("from")
-  private String fromDate;
+    @JsonProperty("from")
+    private String fromDate;
 
-  @JsonProperty("to")
-  private String toDate;
+    @JsonProperty("to")
+    private String toDate;
 
-  public String getFromDate() {
-    return fromDate;
-  }
+    public String getFromDate() {
+        return fromDate;
+    }
 
-  public void setFromDate(String fromDate) {
-    this.fromDate = fromDate;
-  }
+    public void setFromDate(String fromDate) {
+        this.fromDate = fromDate;
+    }
 
-  public String getToDate() {
-    return toDate;
-  }
+    public String getToDate() {
+        return toDate;
+    }
 
-  public void setToDate(String toDate) {
-    this.toDate = toDate;
-  }
+    public void setToDate(String toDate) {
+        this.toDate = toDate;
+    }
 
-  public String toElasticSearch() {
-    StringBuilder sb = new StringBuilder();
+    public String toElasticSearch() {
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("{");
+        sb.append("{");
 
-    if (fromDate != null) {
-      sb.append("\"from\": \"");
-      sb.append(fromDate.toString());
-      sb.append("\"");
-    }
+        if (fromDate != null) {
+            sb.append("\"from\": \"");
+            sb.append(fromDate.toString());
+            sb.append("\"");
+        }
 
-    if (toDate != null) {
-      if (fromDate != null) {
-        sb.append(", \"to\": \"");
-        sb.append(toDate.toString());
-        sb.append("\"");
-      } else {
-        sb.append("\"to\": \"");
-        sb.append(toDate.toString());
-        sb.append("\"");
-      }
-    }
+        if (toDate != null) {
+            if (fromDate != null) {
+                sb.append(", \"to\": \"");
+                sb.append(toDate.toString());
+                sb.append("\"");
+            } else {
+                sb.append("\"to\": \"");
+                sb.append(toDate.toString());
+                sb.append("\"");
+            }
+        }
 
-    sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 
-  public String toString() {
-    return "{from: " + fromDate + ", to: " + toDate + "}";
-  }
+    public String toString() {
+        return "{from: " + fromDate + ", to: " + toDate + "}";
+    }
 
 }
index 1ee42c9..5851f9a 100644 (file)
@@ -25,7 +25,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 /**
  * An example of a date_range aggregation:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  * {
  *    "aggs": {
  *        "range": {
@@ -47,83 +49,83 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 public class DateRangeAggregation extends AbstractAggregation {
 
 
-  private String format;
+    private String format;
 
-  @JsonProperty("ranges")
-  private DateRange[] dateRanges;
+    @JsonProperty("ranges")
+    private DateRange[] dateRanges;
 
 
-  public String getFormat() {
-    return format;
-  }
+    public String getFormat() {
+        return format;
+    }
+
+    public void setFormat(String format) {
+        this.format = format;
+    }
 
-  public void setFormat(String format) {
-    this.format = format;
-  }
+    public DateRange[] getDateRanges() {
+        return dateRanges;
+    }
 
-  public DateRange[] getDateRanges() {
-    return dateRanges;
-  }
+    public void setDateRanges(DateRange[] dateRanges) {
+        this.dateRanges = dateRanges;
+    }
 
-  public void setDateRanges(DateRange[] dateRanges) {
-    this.dateRanges = dateRanges;
-  }
+    @Override
+    public String toElasticSearch() {
+        StringBuilder sb = new StringBuilder();
 
-  @Override
-  public String toElasticSearch() {
-    StringBuilder sb = new StringBuilder();
+        sb.append("\"date_range\": {\"field\": \"");
+        sb.append(field);
+        sb.append("\"");
 
-    sb.append("\"date_range\": {\"field\": \"");
-    sb.append(field);
-    sb.append("\"");
+        if (format != null) {
+            sb.append(", \"format\": \"");
+            sb.append(format);
+            sb.append("\"");
+        }
 
-    if (format != null) {
-      sb.append(", \"format\": \"");
-      sb.append(format);
-      sb.append("\"");
-    }
+        if (dateRanges != null && dateRanges.length > 0) {
+            sb.append(", \"ranges\": [");
 
-    if (dateRanges != null && dateRanges.length > 0) {
-      sb.append(", \"ranges\": [");
+            for (int i = 0; i < dateRanges.length; i++) {
+                if (i > 0) {
+                    sb.append(",");
+                }
+                sb.append(dateRanges[i].toElasticSearch());
+            }
 
-      for (int i = 0; i < dateRanges.length; i++) {
-        if (i > 0) {
-          sb.append(",");
+            sb.append("]");
         }
-        sb.append(dateRanges[i].toElasticSearch());
-      }
 
-      sb.append("]");
-    }
+        if (size != null) {
+            sb.append(", \"size\": ");
+            sb.append(size);
+        }
 
-    if (size != null) {
-      sb.append(", \"size\": ");
-      sb.append(size);
-    }
+        if (minThreshold != null) {
+            sb.append(", \"min_doc_count\": ").append(minThreshold);
+        }
 
-    if (minThreshold != null) {
-      sb.append(", \"min_doc_count\": ").append(minThreshold);
-    }
+        sb.append("}");
 
-    sb.append("}");
-
-    return sb.toString();
-  }
-
-  @Override
-  public String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.append("date-range: {field: " + field + ", format: " + format + ", size: " + size
-        + ", minThreshold: " + minThreshold + "ranges: [");
-    for (int i = 0; i < dateRanges.length; i++) {
-      if (i > 0) {
-        sb.append(",");
-      }
-      sb.append(dateRanges[i].toString());
+        return sb.toString();
     }
-    sb.append("]");
 
-    return sb.toString();
-  }
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        sb.append("date-range: {field: " + field + ", format: " + format + ", size: " + size + ", minThreshold: "
+                + minThreshold + "ranges: [");
+        for (int i = 0; i < dateRanges.length; i++) {
+            if (i > 0) {
+                sb.append(",");
+            }
+            sb.append(dateRanges[i].toString());
+        }
+        sb.append("]");
+
+        return sb.toString();
+    }
 
 }
index 2d9a8e1..4e8bdd0 100644 (file)
@@ -26,7 +26,9 @@ import java.util.List;
 /**
  * This class represents the filter stanza in a search statement.
  *
- * <p>The expected JSON structure for a filter stanza is as follows:
+ * <p>
+ * The expected JSON structure for a filter stanza is as follows:
+ * 
  * <pre>
  * {
  *     "filter": {
@@ -38,149 +40,147 @@ import java.util.List;
  */
 public class Filter {
 
-  /**
-   * All queries in this list must evaluate to true for the filter to pass.
-   */
-  private QueryStatement[] all;
-
-  /**
-   * Any one of the queries in this list must evaluate to true for the
-   * filter to pass.
-   */
-  private QueryStatement[] any;
-
-
-  public QueryStatement[] getAll() {
-    return all;
-  }
-
-  public void setAll(QueryStatement[] all) {
-    this.all = all;
-  }
-
-  public QueryStatement[] getAny() {
-    return any;
-  }
-
-  public void setAny(QueryStatement[] any) {
-    this.any = any;
-  }
-
-  /**
-   * This method returns a string which represents this filter in syntax
-   * that is understandable by ElasticSearch and is suitable for inclusion
-   * in an ElasticSearch query string.
-   *
-   * @return - ElasticSearch syntax string.
-   */
-  public String toElasticSearch() {
-
-    StringBuilder sb = new StringBuilder();
-
-    List<QueryStatement> notMatchQueries = new ArrayList<QueryStatement>();
-    sb.append("{");
-    sb.append("\"bool\": {");
-
-    // Add the queries from our 'all' list.
-    int matchQueriesCount = 0;
-    int notMatchQueriesCount = 0;
-    if (all != null) {
-      sb.append("\"must\": [");
-
-      for (QueryStatement query : all) {
-        if (matchQueriesCount > 0) {
-          sb.append(", ");
-        }
+    /**
+     * All queries in this list must evaluate to true for the filter to pass.
+     */
+    private QueryStatement[] all;
 
-        if (query.isNotMatch()) {
-          notMatchQueries.add(query);
-        } else {
-          sb.append(query.toElasticSearch());
-          matchQueriesCount++;
-        }
-      }
-      sb.append("],");
+    /**
+     * Any one of the queries in this list must evaluate to true for the filter to pass.
+     */
+    private QueryStatement[] any;
 
 
-      sb.append("\"must_not\": [");
-      for (QueryStatement query : notMatchQueries) {
-        if (notMatchQueriesCount > 0) {
-          sb.append(", ");
-        }
-        sb.append(query.toElasticSearch());
-        notMatchQueriesCount++;
-      }
-      sb.append("]");
+    public QueryStatement[] getAll() {
+        return all;
     }
 
-    // Add the queries from our 'any' list.
-    notMatchQueries.clear();
-    if (any != null) {
-      if (all != null) {
-        sb.append(",");
-      }
-      sb.append("\"should\": [");
-
-      matchQueriesCount = 0;
-      for (QueryStatement query : any) {
-        //if(!firstQuery.compareAndSet(true, false)) {
-        if (matchQueriesCount > 0) {
-          sb.append(", ");
-        }
+    public void setAll(QueryStatement[] all) {
+        this.all = all;
+    }
+
+    public QueryStatement[] getAny() {
+        return any;
+    }
+
+    public void setAny(QueryStatement[] any) {
+        this.any = any;
+    }
 
-        if (query.isNotMatch()) {
-          notMatchQueries.add(query);
-        } else {
-          sb.append(query.toElasticSearch());
-          matchQueriesCount++;
+    /**
+     * This method returns a string which represents this filter in syntax that is understandable by ElasticSearch and
+     * is suitable for inclusion in an ElasticSearch query string.
+     *
+     * @return - ElasticSearch syntax string.
+     */
+    public String toElasticSearch() {
+
+        StringBuilder sb = new StringBuilder();
+
+        List<QueryStatement> notMatchQueries = new ArrayList<QueryStatement>();
+        sb.append("{");
+        sb.append("\"bool\": {");
+
+        // Add the queries from our 'all' list.
+        int matchQueriesCount = 0;
+        int notMatchQueriesCount = 0;
+        if (all != null) {
+            sb.append("\"must\": [");
+
+            for (QueryStatement query : all) {
+                if (matchQueriesCount > 0) {
+                    sb.append(", ");
+                }
+
+                if (query.isNotMatch()) {
+                    notMatchQueries.add(query);
+                } else {
+                    sb.append(query.toElasticSearch());
+                    matchQueriesCount++;
+                }
+            }
+            sb.append("],");
+
+
+            sb.append("\"must_not\": [");
+            for (QueryStatement query : notMatchQueries) {
+                if (notMatchQueriesCount > 0) {
+                    sb.append(", ");
+                }
+                sb.append(query.toElasticSearch());
+                notMatchQueriesCount++;
+            }
+            sb.append("]");
         }
-      }
-      sb.append("],");
-
-      //firstQuery.set(true);
-      notMatchQueriesCount = 0;
-      sb.append("\"must_not\": [");
-      for (QueryStatement query : notMatchQueries) {
-        //if(!firstQuery.compareAndSet(true, false)) {
-        if (notMatchQueriesCount > 0) {
-          sb.append(", ");
+
+        // Add the queries from our 'any' list.
+        notMatchQueries.clear();
+        if (any != null) {
+            if (all != null) {
+                sb.append(",");
+            }
+            sb.append("\"should\": [");
+
+            matchQueriesCount = 0;
+            for (QueryStatement query : any) {
+                // if(!firstQuery.compareAndSet(true, false)) {
+                if (matchQueriesCount > 0) {
+                    sb.append(", ");
+                }
+
+                if (query.isNotMatch()) {
+                    notMatchQueries.add(query);
+                } else {
+                    sb.append(query.toElasticSearch());
+                    matchQueriesCount++;
+                }
+            }
+            sb.append("],");
+
+            // firstQuery.set(true);
+            notMatchQueriesCount = 0;
+            sb.append("\"must_not\": [");
+            for (QueryStatement query : notMatchQueries) {
+                // if(!firstQuery.compareAndSet(true, false)) {
+                if (notMatchQueriesCount > 0) {
+                    sb.append(", ");
+                }
+                sb.append(query.toElasticSearch());
+                notMatchQueriesCount++;
+            }
+            sb.append("]");
         }
-        sb.append(query.toElasticSearch());
-        notMatchQueriesCount++;
-      }
-      sb.append("]");
-    }
-    sb.append("}");
-    sb.append("}");
+        sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
+    @Override
+    public String toString() {
 
-    StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("{");
+        sb.append("{");
 
-    sb.append("all: [");
-    if (all != null) {
-      for (QueryStatement query : all) {
-        sb.append(query.toString());
-      }
-    }
-    sb.append("], ");
+        sb.append("all: [");
+        if (all != null) {
+            for (QueryStatement query : all) {
+                sb.append(query.toString());
+            }
+        }
+        sb.append("], ");
 
-    sb.append("any: [");
-    if (any != null) {
-      for (QueryStatement query : any) {
-        sb.append(query.toString());
-      }
-    }
-    sb.append("] ");
+        sb.append("any: [");
+        if (any != null) {
+            for (QueryStatement query : any) {
+                sb.append(query.toString());
+            }
+        }
+        sb.append("] ");
 
-    sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 }
index df643f2..69730d2 100644 (file)
@@ -23,7 +23,9 @@ package org.onap.aai.sa.searchdbabstraction.searchapi;
 /**
  * An example of a date_range aggregation:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  * {
  *    "aggs": {
  *        "my_group": {
@@ -39,31 +41,30 @@ package org.onap.aai.sa.searchdbabstraction.searchapi;
  */
 public class GroupByAggregation extends AbstractAggregation {
 
-  @Override
-  public String toElasticSearch() {
-    StringBuilder sb = new StringBuilder();
+    @Override
+    public String toElasticSearch() {
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("\"terms\": {\"field\": \"");
-    sb.append(field);
-    sb.append("\"");
-    if (size != null) {
-      sb.append(", \"size\": ");
-      sb.append(size);
-    }
+        sb.append("\"terms\": {\"field\": \"");
+        sb.append(field);
+        sb.append("\"");
+        if (size != null) {
+            sb.append(", \"size\": ");
+            sb.append(size);
+        }
 
-    if (minThreshold != null) {
-      sb.append(", \"min_doc_count\": ").append(minThreshold);
-    }
+        if (minThreshold != null) {
+            sb.append(", \"min_doc_count\": ").append(minThreshold);
+        }
 
-    sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
-    return "{group-by: {field: " + field + ", size: " + size
-        + " minThreshold: " + minThreshold + "}}";
-  }
+    @Override
+    public String toString() {
+        return "{group-by: {field: " + field + ", size: " + size + " minThreshold: " + minThreshold + "}}";
+    }
 
 }
index e8e3074..19bc250 100644 (file)
@@ -25,29 +25,34 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 /**
  * This class represents a simple parsed query statement.
  *
- * <p>A 'parsed query' specifies a document field to inspect and a query
- * string which will be parsed by the document store to generate the
- * exact query to be performed.
+ * <p>
+ * A 'parsed query' specifies a document field to inspect and a query string which will be parsed by the document store
+ * to generate the exact query to be performed.
  *
- * <p>The query string will be tokenized into 'terms' and 'operators' where:
+ * <p>
+ * The query string will be tokenized into 'terms' and 'operators' where:
  *
- * <p>Terms may be any of the following:
+ * <p>
+ * Terms may be any of the following:
  * <ul>
- * <li> single words </li>
- * <li> exact phrases (denoted by surrounding the phrase with '"' characters) </li>
- * <li> regular expressions (denoted by surrounding the phrase with '/' characters) </li>
+ * <li>single words</li>
+ * <li>exact phrases (denoted by surrounding the phrase with '"' characters)</li>
+ * <li>regular expressions (denoted by surrounding the phrase with '/' characters)</li>
  * </ul>
  *
- * <p>Operators may be any of the following:
+ * <p>
+ * Operators may be any of the following:
  * <ul>
- * <li> +   -- The term to the right of the operator MUST be present to produce a match. </li>
- * <li> -   -- The term to the right of the operator MUST NOT be present to produce a match. </li>
- * <li> AND -- Both the terms to the left and right of the operator MUST be present to produce a match. </li>
- * <li> OR  -- Either the term to the left or right of the operator MUST be present to produce a match. </li>
- * <li> NOT -- The term to the right of the operator MUST NOT be present to produce a match. </li>
+ * <li>+ -- The term to the right of the operator MUST be present to produce a match.</li>
+ * <li>- -- The term to the right of the operator MUST NOT be present to produce a match.</li>
+ * <li>AND -- Both the terms to the left and right of the operator MUST be present to produce a match.</li>
+ * <li>OR -- Either the term to the left or right of the operator MUST be present to produce a match.</li>
+ * <li>NOT -- The term to the right of the operator MUST NOT be present to produce a match.</li>
  * </ul>
  *
- * <p>The expected JSON structure for a parsed query is as follows:
+ * <p>
+ * The expected JSON structure for a parsed query is as follows:
+ * 
  * <pre>
  *     {
  *         "parsed-query": {
@@ -59,58 +64,57 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  */
 public class ParsedQuery {
 
-  /**
-   * The name of the field which the query is to be applied to.
-   */
-  private String field;
+    /**
+     * The name of the field which the query is to be applied to.
+     */
+    private String field;
 
-  /**
-   * The string to be parsed to generate the full query.
-   */
-  @JsonProperty("query-string")
-  private String queryString;
+    /**
+     * The string to be parsed to generate the full query.
+     */
+    @JsonProperty("query-string")
+    private String queryString;
 
 
-  public String getField() {
-    return field;
-  }
+    public String getField() {
+        return field;
+    }
 
-  public void setField(String field) {
-    this.field = field;
-  }
+    public void setField(String field) {
+        this.field = field;
+    }
 
-  public String getQueryString() {
-    return queryString;
-  }
+    public String getQueryString() {
+        return queryString;
+    }
 
-  public void setQueryString(String queryString) {
-    this.queryString = queryString;
-  }
+    public void setQueryString(String queryString) {
+        this.queryString = queryString;
+    }
 
 
-  /**
-   * This method returns a string which represents this query in syntax
-   * that is understandable by ElasticSearch and is suitable for inclusion
-   * in an ElasticSearch query string.
-   *
-   * @return - ElasticSearch syntax string.
-   */
-  public String toElasticSearch() {
+    /**
+     * This method returns a string which represents this query in syntax that is understandable by ElasticSearch and is
+     * suitable for inclusion in an ElasticSearch query string.
+     *
+     * @return - ElasticSearch syntax string.
+     */
+    public String toElasticSearch() {
 
-    StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("{");
-    sb.append("\"query_string\": {");
-    sb.append("\"default_field\": \"").append(field).append("\", ");
-    sb.append("\"query\": \"").append(queryString).append("\"");
-    sb.append("}");
-    sb.append("}");
+        sb.append("{");
+        sb.append("\"query_string\": {");
+        sb.append("\"default_field\": \"").append(field).append("\", ");
+        sb.append("\"query\": \"").append(queryString).append("\"");
+        sb.append("}");
+        sb.append("}");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 
-  @Override
-  public String toString() {
-    return "{field:" + field + ", query-string: '" + queryString + "'}";
-  }
+    @Override
+    public String toString() {
+        return "{field:" + field + ", query-string: '" + queryString + "'}";
+    }
 }
index 3e4f537..ee8ffdc 100644 (file)
@@ -22,69 +22,69 @@ package org.onap.aai.sa.searchdbabstraction.searchapi;
 
 public class Query {
 
-  private QueryStatement may;
-  private QueryStatement must;
+    private QueryStatement may;
+    private QueryStatement must;
 
-  public QueryStatement getMay() {
-    return may;
-  }
+    public QueryStatement getMay() {
+        return may;
+    }
 
-  public void setMay(QueryStatement may) {
-    this.may = may;
-  }
+    public void setMay(QueryStatement may) {
+        this.may = may;
+    }
 
-  public QueryStatement getMust() {
-    return must;
-  }
+    public QueryStatement getMust() {
+        return must;
+    }
 
-  public void setMust(QueryStatement must) {
-    this.must = must;
-  }
+    public void setMust(QueryStatement must) {
+        this.must = must;
+    }
 
-  public QueryStatement getQueryStatement() {
-    if (isMust()) {
-      return must;
-    } else if (isMay()) {
-      return may;
-    } else {
-      return null;
+    public QueryStatement getQueryStatement() {
+        if (isMust()) {
+            return must;
+        } else if (isMay()) {
+            return may;
+        } else {
+            return null;
+        }
     }
-  }
 
-  public boolean isMust() {
-    return must != null;
-  }
+    public boolean isMust() {
+        return must != null;
+    }
 
-  public boolean isMay() {
-    return may != null;
-  }
+    public boolean isMay() {
+        return may != null;
+    }
 
-  public String toElasticSearch() {
+    public String toElasticSearch() {
 
-    if (isMust()) {
-      return must.toElasticSearch();
-    } else if (isMay()) {
-      return may.toElasticSearch();
-    } else {
-      return ""; // throw an exception?
+        if (isMust()) {
+            return must.toElasticSearch();
+        } else if (isMay()) {
+            return may.toElasticSearch();
+        } else {
+            return ""; // throw an exception?
+        }
     }
-  }
 
-  @Override
-  public String toString() {
+    @Override
+    public String toString() {
 
-    StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("Query:[");
-    if (isMust()) {
-      sb.append("must: ").append(must.toString());
-    } else if (isMay()) {
-      sb.append("may: ").append(may.toString());
-    } else {
-      sb.append("INVALID");
-    }
-    sb.append("]");
+        sb.append("Query:[");
+        if (isMust()) {
+            sb.append("must: ").append(must.toString());
+        } else if (isMay()) {
+            sb.append("may: ").append(may.toString());
+        } else {
+            sb.append("INVALID");
+        }
+        sb.append("]");
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 }
index 6cfbd40..7764051 100644 (file)
@@ -24,115 +24,115 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class QueryStatement {
 
-  private TermQuery match;
+    private TermQuery match;
 
-  @JsonProperty("not-match")
-  private TermQuery notMatch;
+    @JsonProperty("not-match")
+    private TermQuery notMatch;
 
-  @JsonProperty("parsed-query")
-  private ParsedQuery parsedQuery;
+    @JsonProperty("parsed-query")
+    private ParsedQuery parsedQuery;
 
-  private RangeQuery range;
+    private RangeQuery range;
 
-  public TermQuery getMatch() {
-    return match;
-  }
+    public TermQuery getMatch() {
+        return match;
+    }
 
-  public void setMatch(TermQuery match) {
-    this.match = match;
-  }
+    public void setMatch(TermQuery match) {
+        this.match = match;
+    }
 
-  public TermQuery getNotMatch() {
-    return notMatch;
-  }
+    public TermQuery getNotMatch() {
+        return notMatch;
+    }
 
-  public void setNotMatch(TermQuery notMatch) {
-    this.notMatch = notMatch;
-  }
+    public void setNotMatch(TermQuery notMatch) {
+        this.notMatch = notMatch;
+    }
 
-  public ParsedQuery getParsedQuery() {
-    return parsedQuery;
-  }
+    public ParsedQuery getParsedQuery() {
+        return parsedQuery;
+    }
 
-  public void setParsedQuery(ParsedQuery parsedQuery) {
-    this.parsedQuery = parsedQuery;
-  }
+    public void setParsedQuery(ParsedQuery parsedQuery) {
+        this.parsedQuery = parsedQuery;
+    }
 
-  public RangeQuery getRange() {
-    return range;
-  }
+    public RangeQuery getRange() {
+        return range;
+    }
 
-  public void setRange(RangeQuery range) {
-    this.range = range;
-  }
+    public void setRange(RangeQuery range) {
+        this.range = range;
+    }
 
-  public boolean isNotMatch() {
-    return (notMatch != null);
-  }
+    public boolean isNotMatch() {
+        return (notMatch != null);
+    }
 
-  public String toElasticSearch() {
+    public String toElasticSearch() {
 
-    if (match != null) {
-      return match.toElasticSearch();
+        if (match != null) {
+            return match.toElasticSearch();
 
-    } else if (notMatch != null) {
-      return notMatch.toElasticSearch();
+        } else if (notMatch != null) {
+            return notMatch.toElasticSearch();
 
-    } else if (parsedQuery != null) {
+        } else if (parsedQuery != null) {
 
-      // We need some special wrapping if this query is against a nested field.
-      if (fieldIsNested(parsedQuery.getField())) {
-        return "{\"nested\": { \"path\": \"" + pathForNestedField(parsedQuery.getField())
-            + "\", \"query\": " + parsedQuery.toElasticSearch() + "}}";
-      } else {
-        return parsedQuery.toElasticSearch();
-      }
+            // We need some special wrapping if this query is against a nested field.
+            if (fieldIsNested(parsedQuery.getField())) {
+                return "{\"nested\": { \"path\": \"" + pathForNestedField(parsedQuery.getField()) + "\", \"query\": "
+                        + parsedQuery.toElasticSearch() + "}}";
+            } else {
+                return parsedQuery.toElasticSearch();
+            }
 
-    } else if (range != null) {
+        } else if (range != null) {
 
-      // We need some special wrapping if this query is against a nested field.
-      if (fieldIsNested(range.getField())) {
-        return "{\"nested\": { \"path\": \"" + pathForNestedField(range.getField())
-            + "\", \"query\": " + range.toElasticSearch() + "}}";
-      } else {
-        return range.toElasticSearch();
-      }
+            // We need some special wrapping if this query is against a nested field.
+            if (fieldIsNested(range.getField())) {
+                return "{\"nested\": { \"path\": \"" + pathForNestedField(range.getField()) + "\", \"query\": "
+                        + range.toElasticSearch() + "}}";
+            } else {
+                return range.toElasticSearch();
+            }
 
-    } else {
-      // throw an exception?
-      return null;
+        } else {
+            // throw an exception?
+            return null;
+        }
     }
-  }
-
-  private boolean fieldIsNested(String field) {
-    return field.contains(".");
-  }
-
-  private String pathForNestedField(String field) {
-    int index = field.lastIndexOf('.');
-    return field.substring(0, index);
-  }
-
-  @Override
-  public String toString() {
-
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("{");
-
-    if (match != null) {
-      sb.append("TERM QUERY: { match: {").append(match.toString()).append("}}");
-    } else if (notMatch != null) {
-      sb.append("TERM QUERY: { not-match: {").append(match.toString()).append("}}");
-    } else if (parsedQuery != null) {
-      sb.append("PARSED QUERY: { ").append(parsedQuery.toString()).append("}");
-    } else if (range != null) {
-      sb.append("RANGE QUERY: { ").append(range.toString()).append("}");
-    } else {
-      sb.append("UNDEFINED");
+
+    private boolean fieldIsNested(String field) {
+        return field.contains(".");
+    }
+
+    private String pathForNestedField(String field) {
+        int index = field.lastIndexOf('.');
+        return field.substring(0, index);
     }
 
-    sb.append("}");
-    return sb.toString();
-  }
+    @Override
+    public String toString() {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("{");
+
+        if (match != null) {
+            sb.append("TERM QUERY: { match: {").append(match.toString()).append("}}");
+        } else if (notMatch != null) {
+            sb.append("TERM QUERY: { not-match: {").append(match.toString()).append("}}");
+        } else if (parsedQuery != null) {
+            sb.append("PARSED QUERY: { ").append(parsedQuery.toString()).append("}");
+        } else if (range != null) {
+            sb.append("RANGE QUERY: { ").append(range.toString()).append("}");
+        } else {
+            sb.append("UNDEFINED");
+        }
+
+        sb.append("}");
+        return sb.toString();
+    }
 }
index c5b4886..60cc9e6 100644 (file)
@@ -25,22 +25,26 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 /**
  * This class represents a simple range query.
  *
- * <p>A range query is composed of one or more operator/value pairs which define
- * the upper and lower bounds of the range, and a field to apply the query to.
+ * <p>
+ * A range query is composed of one or more operator/value pairs which define the upper and lower bounds of the range,
+ * and a field to apply the query to.
  *
- * <p>Operators may be one of the following:
+ * <p>
+ * Operators may be one of the following:
  * <ul>
- * <li>gt  - Greater than. </li>
- * <li>gte - Greater than or equal to. </li>
- * <li>lt  - Less than. </li>
- * <li>lte - Less than or equal to. </li>
+ * <li>gt - Greater than.</li>
+ * <li>gte - Greater than or equal to.</li>
+ * <li>lt - Less than.</li>
+ * <li>lte - Less than or equal to.</li>
  * </ul>
- * Values may be either numeric values (Integer or Double) or Strings representing
- * dates.
+ * Values may be either numeric values (Integer or Double) or Strings representing dates.
  *
- * <p>The following examples illustrate a couple of variants of the range query:
+ * <p>
+ * The following examples illustrate a couple of variants of the range query:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  *     // A simple numeric range query:
  *     {
  *         "range": {
@@ -62,283 +66,271 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  */
 public class RangeQuery {
 
-  /**
-   * The name of the field to apply the range query against.
-   */
-  private String field;
-
-  /**
-   * The value of the field must be greater than this value to be a match.<br>
-   * NOTE: Only one of 'gt' or 'gte' should be set on any single {@link RangeQuery}
-   * instance.
-   */
-  private Object gt;
-
-  /**
-   * The value of the field must be greater than or equal to this value to be a match.<br>
-   * NOTE: Only one of 'gt' or 'gte' should be set on any single {@link RangeQuery}
-   * instance.
-   */
-  private Object gte;
-
-  /**
-   * The value of the field must be less than this value to be a match.<br>
-   * NOTE: Only one of 'lt' or 'lte' should be set on any single {@link RangeQuery}
-   * instance.
-   */
-  private Object lt;
-
-  /**
-   * The value of the field must be less than or equal to than this value to be a match.<br>
-   * NOTE: Only one of 'lt' or 'lte' should be set on any single {@link RangeQuery}
-   * instance.
-   */
-  private Object lte;
-
-  private String format;
-
-  @JsonProperty("time-zone")
-  private String timeZone;
-
-  public String getField() {
-    return field;
-  }
-
-  public void setField(String field) {
-    this.field = field;
-  }
-
-  public Object getGt() {
-    return gt;
-  }
-
-  public void setGt(Object gt) {
-
-    // It does not make sense to assign a value to both the 'greater than'
-    // and 'greater than or equal' operations, so make sure we are not
-    // trying to do that.
-    if (gte == null) {
-
-      // Make sure that we are not trying to mix both numeric and date
-      // type values in the same queries.
-      if (((lt != null) && !typesMatch(gt, lt))
-          || ((lte != null) && !typesMatch(gt, lte))) {
-        throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
-      }
-
-      // If we made it here, then we're all good.  Store the value.
-      this.gt = gt;
-    } else {
-      throw new IllegalArgumentException("Cannot assign both 'gt' and 'gte' fields in the same ranged query");
+    /**
+     * The name of the field to apply the range query against.
+     */
+    private String field;
+
+    /**
+     * The value of the field must be greater than this value to be a match.<br>
+     * NOTE: Only one of 'gt' or 'gte' should be set on any single {@link RangeQuery} instance.
+     */
+    private Object gt;
+
+    /**
+     * The value of the field must be greater than or equal to this value to be a match.<br>
+     * NOTE: Only one of 'gt' or 'gte' should be set on any single {@link RangeQuery} instance.
+     */
+    private Object gte;
+
+    /**
+     * The value of the field must be less than this value to be a match.<br>
+     * NOTE: Only one of 'lt' or 'lte' should be set on any single {@link RangeQuery} instance.
+     */
+    private Object lt;
+
+    /**
+     * The value of the field must be less than or equal to than this value to be a match.<br>
+     * NOTE: Only one of 'lt' or 'lte' should be set on any single {@link RangeQuery} instance.
+     */
+    private Object lte;
+
+    private String format;
+
+    @JsonProperty("time-zone")
+    private String timeZone;
+
+    public String getField() {
+        return field;
     }
-  }
 
+    public void setField(String field) {
+        this.field = field;
+    }
 
-  public Object getGte() {
-    return gte;
-  }
-
-  public void setGte(Object gte) {
+    public Object getGt() {
+        return gt;
+    }
 
-    // It does not make sense to assign a value to both the 'greater than'
-    // and 'greater than or equal' operations, so make sure we are not
-    // trying to do that.
-    if (gt == null) {
+    public void setGt(Object gt) {
 
-      // Make sure that we are not trying to mix both numeric and date
-      // type values in the same queries.
-      if (((lt != null) && !typesMatch(gte, lt))
-          || ((lte != null) && !typesMatch(gte, lte))) {
-        throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
-      }
+        // It does not make sense to assign a value to both the 'greater than'
+        // and 'greater than or equal' operations, so make sure we are not
+        // trying to do that.
+        if (gte == null) {
 
-      // If we made it here, then we're all good.  Store the value.
-      this.gte = gte;
+            // Make sure that we are not trying to mix both numeric and date
+            // type values in the same queries.
+            if (((lt != null) && !typesMatch(gt, lt)) || ((lte != null) && !typesMatch(gt, lte))) {
+                throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
+            }
 
-    } else {
-      throw new IllegalArgumentException("Cannot assign both 'gt' and 'gte' fields in the same ranged query");
+            // If we made it here, then we're all good. Store the value.
+            this.gt = gt;
+        } else {
+            throw new IllegalArgumentException("Cannot assign both 'gt' and 'gte' fields in the same ranged query");
+        }
     }
-  }
 
-  public Object getLt() {
-    return lt;
-  }
 
-  public void setLt(Object lt) {
+    public Object getGte() {
+        return gte;
+    }
+
+    public void setGte(Object gte) {
 
-    // It does not make sense to assign a value to both the 'less than'
-    // and 'less than or equal' operations, so make sure we are not
-    // trying to do that.
-    if (lte == null) {
+        // It does not make sense to assign a value to both the 'greater than'
+        // and 'greater than or equal' operations, so make sure we are not
+        // trying to do that.
+        if (gt == null) {
 
-      // Make sure that we are not trying to mix both numeric and date
-      // type values in the same queries.
-      if (((gt != null) && !typesMatch(lt, gt))
-          || ((gte != null) && !typesMatch(lt, gte))) {
-        throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
-      }
+            // Make sure that we are not trying to mix both numeric and date
+            // type values in the same queries.
+            if (((lt != null) && !typesMatch(gte, lt)) || ((lte != null) && !typesMatch(gte, lte))) {
+                throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
+            }
 
-      // If we made it here, then we're all good.  Store the value.
+            // If we made it here, then we're all good. Store the value.
+            this.gte = gte;
 
-      this.lt = lt;
-    } else {
-      throw new IllegalArgumentException("Cannot assign both 'lt' and 'lte' fields in the same ranged query");
+        } else {
+            throw new IllegalArgumentException("Cannot assign both 'gt' and 'gte' fields in the same ranged query");
+        }
     }
-  }
 
-  public Object getLte() {
-    return lte;
-  }
+    public Object getLt() {
+        return lt;
+    }
 
-  public void setLte(Object lte) {
+    public void setLt(Object lt) {
 
-    // It does not make sense to assign a value to both the 'greater than'
-    // and 'greater than or equal' operations, so make sure we are not
-    // trying to do that.
-    if (lt == null) {
+        // It does not make sense to assign a value to both the 'less than'
+        // and 'less than or equal' operations, so make sure we are not
+        // trying to do that.
+        if (lte == null) {
 
-      // Make sure that we are not trying to mix both numeric and date
-      // type values in the same queries.
-      if (((gt != null) && !typesMatch(lte, gt))
-          || ((gte != null) && !typesMatch(lte, gte))) {
-        throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
-      }
+            // Make sure that we are not trying to mix both numeric and date
+            // type values in the same queries.
+            if (((gt != null) && !typesMatch(lt, gt)) || ((gte != null) && !typesMatch(lt, gte))) {
+                throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
+            }
 
-      // If we made it here, then we're all good.  Store the value.
+            // If we made it here, then we're all good. Store the value.
 
-      this.lte = lte;
-    } else {
-      throw new IllegalArgumentException("Cannot assign both 'lt' and 'lte' fields in the same ranged query");
+            this.lt = lt;
+        } else {
+            throw new IllegalArgumentException("Cannot assign both 'lt' and 'lte' fields in the same ranged query");
+        }
     }
-  }
-
-  public String getFormat() {
-    return format;
-  }
-
-  public void setFormat(String format) {
-    this.format = format;
-  }
-
-  public String getTimeZone() {
-    return timeZone;
-  }
-
-  public void setTimeZone(String timeZone) {
-    this.timeZone = timeZone;
-  }
-
-  /**
-   * This convenience method determines whether or not the supplied
-   * value needs to be enclosed in '"' characters when generating
-   * ElasticSearch compatible syntax.
-   *
-   * @param val - The value to check.
-   * @return - A string representation of the value for inclusion
-   *     in an ElasticSearch syntax string.
-   */
-  private String formatStringOrNumericVal(Object val) {
-
-    if (val instanceof String) {
-      return "\"" + val.toString() + "\"";
-    } else {
-      return val.toString();
+
+    public Object getLte() {
+        return lte;
     }
-  }
-
-
-  /**
-   * This convenience method verifies that the supplied objects are
-   * of classes considered to be compatible for a ranged query.
-   *
-   * @param value1 - The first value to check.
-   * @param value2 - The second value to check.
-   * @return - True if the two objects are compatible for inclusion in the
-   *     same ranged query, False, otherwise.
-   */
-  boolean typesMatch(Object value1, Object value2) {
-
-    return ((value1 instanceof String) && (value2 instanceof String))
-        || (!(value1 instanceof String) && !(value2 instanceof String));
-  }
-
-
-  /**
-   * This method returns a string which represents this query in syntax
-   * that is understandable by ElasticSearch and is suitable for inclusion
-   * in an ElasticSearch query string.
-   *
-   * @return - ElasticSearch syntax string.
-   */
-  public String toElasticSearch() {
-
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("{");
-    sb.append("\"range\": {");
-    sb.append("\"").append(field).append("\": {");
-
-    // We may have one or zero of 'greater than' or 'greater
-    // than or equal'
-    boolean needComma = false;
-    if (gte != null) {
-      sb.append("\"gte\": ").append(formatStringOrNumericVal(gte));
-      needComma = true;
-    } else if (gt != null) {
-      sb.append("\"gt\": ").append(formatStringOrNumericVal(gt));
-      needComma = true;
+
+    public void setLte(Object lte) {
+
+        // It does not make sense to assign a value to both the 'greater than'
+        // and 'greater than or equal' operations, so make sure we are not
+        // trying to do that.
+        if (lt == null) {
+
+            // Make sure that we are not trying to mix both numeric and date
+            // type values in the same queries.
+            if (((gt != null) && !typesMatch(lte, gt)) || ((gte != null) && !typesMatch(lte, gte))) {
+                throw new IllegalArgumentException("Cannot mix date and numeric values in the same ranged query");
+            }
+
+            // If we made it here, then we're all good. Store the value.
+
+            this.lte = lte;
+        } else {
+            throw new IllegalArgumentException("Cannot assign both 'lt' and 'lte' fields in the same ranged query");
+        }
     }
 
-    // We may have one or zero of 'less than' or 'less
-    // than or equal'
-    if (lte != null) {
-      if (needComma) {
-        sb.append(", ");
-      }
-      sb.append("\"lte\": ").append(formatStringOrNumericVal(lte));
-    } else if (lt != null) {
-      if (needComma) {
-        sb.append(", ");
-      }
-      sb.append("\"lt\": ").append(formatStringOrNumericVal(lt));
+    public String getFormat() {
+        return format;
     }
 
-    // Append the format specifier if one was provided.
-    if (format != null) {
-      sb.append(", \"format\": \"").append(format).append("\"");
+    public void setFormat(String format) {
+        this.format = format;
     }
 
-    // Append the time zone specifier if one was provided.
-    if (timeZone != null) {
-      sb.append(", \"time_zone\": \"").append(timeZone).append("\"");
+    public String getTimeZone() {
+        return timeZone;
     }
 
-    sb.append("}");
-    sb.append("}");
-    sb.append("}");
+    public void setTimeZone(String timeZone) {
+        this.timeZone = timeZone;
+    }
 
-    return sb.toString();
-  }
+    /**
+     * This convenience method determines whether or not the supplied value needs to be enclosed in '"' characters when
+     * generating ElasticSearch compatible syntax.
+     *
+     * @param val - The value to check.
+     * @return - A string representation of the value for inclusion in an ElasticSearch syntax string.
+     */
+    private String formatStringOrNumericVal(Object val) {
+
+        if (val instanceof String) {
+            return "\"" + val.toString() + "\"";
+        } else {
+            return val.toString();
+        }
+    }
 
-  @Override
-  public String toString() {
 
-    String str = "{ field: " + field + ", ";
+    /**
+     * This convenience method verifies that the supplied objects are of classes considered to be compatible for a
+     * ranged query.
+     *
+     * @param value1 - The first value to check.
+     * @param value2 - The second value to check.
+     * @return - True if the two objects are compatible for inclusion in the same ranged query, False, otherwise.
+     */
+    boolean typesMatch(Object value1, Object value2) {
 
-    if (gt != null) {
-      str += "gt: " + gt;
-    } else if (gte != null) {
-      str += "gte: " + gte;
+        return ((value1 instanceof String) && (value2 instanceof String))
+                || (!(value1 instanceof String) && !(value2 instanceof String));
     }
 
-    if (lt != null) {
-      str += (((gt != null) || (gte != null)) ? ", " : "") + "lt: " + lt;
-    } else if (lte != null) {
-      str += (((gt != null) || (gte != null)) ? ", " : "") + "lte: " + lte;
+
+    /**
+     * This method returns a string which represents this query in syntax that is understandable by ElasticSearch and is
+     * suitable for inclusion in an ElasticSearch query string.
+     *
+     * @return - ElasticSearch syntax string.
+     */
+    public String toElasticSearch() {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("{");
+        sb.append("\"range\": {");
+        sb.append("\"").append(field).append("\": {");
+
+        // We may have one or zero of 'greater than' or 'greater
+        // than or equal'
+        boolean needComma = false;
+        if (gte != null) {
+            sb.append("\"gte\": ").append(formatStringOrNumericVal(gte));
+            needComma = true;
+        } else if (gt != null) {
+            sb.append("\"gt\": ").append(formatStringOrNumericVal(gt));
+            needComma = true;
+        }
+
+        // We may have one or zero of 'less than' or 'less
+        // than or equal'
+        if (lte != null) {
+            if (needComma) {
+                sb.append(", ");
+            }
+            sb.append("\"lte\": ").append(formatStringOrNumericVal(lte));
+        } else if (lt != null) {
+            if (needComma) {
+                sb.append(", ");
+            }
+            sb.append("\"lt\": ").append(formatStringOrNumericVal(lt));
+        }
+
+        // Append the format specifier if one was provided.
+        if (format != null) {
+            sb.append(", \"format\": \"").append(format).append("\"");
+        }
+
+        // Append the time zone specifier if one was provided.
+        if (timeZone != null) {
+            sb.append(", \"time_zone\": \"").append(timeZone).append("\"");
+        }
+
+        sb.append("}");
+        sb.append("}");
+        sb.append("}");
+
+        return sb.toString();
     }
 
-    str += "}";
+    @Override
+    public String toString() {
 
-    return str;
-  }
+        String str = "{ field: " + field + ", ";
+
+        if (gt != null) {
+            str += "gt: " + gt;
+        } else if (gte != null) {
+            str += "gte: " + gte;
+        }
+
+        if (lt != null) {
+            str += (((gt != null) || (gte != null)) ? ", " : "") + "lt: " + lt;
+        } else if (lte != null) {
+            str += (((gt != null) || (gte != null)) ? ", " : "") + "lte: " + lte;
+        }
+
+        str += "}";
+
+        return str;
+    }
 }
index f008a7c..9f37856 100644 (file)
@@ -29,9 +29,12 @@ import org.radeox.util.logging.Logger;
 /**
  * This class represents the structure of a search statement.
  *
- * <p>The expected JSON structure to represent a search statement is as follows:
+ * <p>
+ * The expected JSON structure to represent a search statement is as follows:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  *     {
  *         "results-start": int,  - Optional: index of starting point in result set.
  *         "results-size": int,   - Optional: maximum number of documents to include in result set.
@@ -60,261 +63,258 @@ import org.radeox.util.logging.Logger;
  */
 public class SearchStatement {
 
-  /**
-   * Defines the filters that should be applied before running the
-   * actual queries.  This is optional.
-   */
-  private Filter filter;
+    /**
+     * Defines the filters that should be applied before running the actual queries. This is optional.
+     */
+    private Filter filter;
 
-  /**
-   * The list of queries to be applied to the document store.
-   */
-  private Query[] queries;
-
-  /**
-   * The list of aggregations to be applied to the search
-   */
-  private Aggregation[] aggregations;
-
-  /**
-   * Defines the sort criteria to apply to the query result set.
-   * This is optional.
-   */
-  private Sort sort;
-
-  @JsonProperty("results-start")
-  private Integer resultsStart;
-
-  @JsonProperty("results-size")
-  private Integer size;
-
-  public Filter getFilter() {
-    return filter;
-  }
-
-  public void setFilter(Filter filter) {
-    this.filter = filter;
-  }
-
-  public Query[] getQueries() {
-    return queries;
-  }
-
-  public void setQueries(Query[] queries) {
-    this.queries = queries;
-  }
-
-  public Sort getSort() {
-    return sort;
-  }
-
-  public void setSort(Sort sort) {
-    this.sort = sort;
-  }
-
-  public boolean isFiltered() {
-    return filter != null;
-  }
-
-  public Aggregation[] getAggregations() {
-    return aggregations;
-  }
-
-  public void setAggregations(Aggregation[] aggregations) {
-    this.aggregations = aggregations;
-  }
-
-  public boolean hasAggregations() {
-    return aggregations != null && aggregations.length > 0;
-  }
-
-  public Integer getFrom() {
-    return resultsStart;
-  }
-
-  public void setFrom(Integer from) {
-    this.resultsStart = from;
-  }
-
-  public Integer getSize() {
-    return size;
-  }
-
-  public void setSize(Integer size) {
-    this.size = size;
-  }
-
-  /**
-   * This method returns a string which represents this statement in syntax
-   * that is understandable by ElasticSearch and is suitable for inclusion
-   * in an ElasticSearch query string.
-   *
-   * @return - ElasticSearch syntax string.
-   */
-  public String toElasticSearch() {
-
-    StringBuilder sb = new StringBuilder();
-    List<QueryStatement> notMatchQueries = new ArrayList<QueryStatement>();
-    List<QueryStatement> mustQueries = new ArrayList<QueryStatement>();
-    List<QueryStatement> shouldQueries = new ArrayList<QueryStatement>();
-
-    createQueryLists(queries, mustQueries, shouldQueries, notMatchQueries);
-
-    sb.append("{");
-
-    sb.append("\"version\": true,");
-
-    // If the client has specified an index into the results for the first
-    // document in the result set then include that in the ElasticSearch
-    // query.
-    if (resultsStart != null) {
-      sb.append("\"from\": ").append(resultsStart).append(", ");
-    }
+    /**
+     * The list of queries to be applied to the document store.
+     */
+    private Query[] queries;
+
+    /**
+     * The list of aggregations to be applied to the search
+     */
+    private Aggregation[] aggregations;
+
+    /**
+     * Defines the sort criteria to apply to the query result set. This is optional.
+     */
+    private Sort sort;
 
-    // If the client has specified a maximum number of documents to be returned
-    // in the result set then include that in the ElasticSearch query.
-    if (size != null) {
-      sb.append("\"size\": ").append(size).append(", ");
+    @JsonProperty("results-start")
+    private Integer resultsStart;
+
+    @JsonProperty("results-size")
+    private Integer size;
+
+    public Filter getFilter() {
+        return filter;
     }
 
-    sb.append("\"query\": {");
-    sb.append("\"bool\": {");
+    public void setFilter(Filter filter) {
+        this.filter = filter;
+    }
 
-    sb.append("\"must\": [");
-    AtomicBoolean firstQuery = new AtomicBoolean(true);
-    for (QueryStatement query : mustQueries) {
+    public Query[] getQueries() {
+        return queries;
+    }
 
-      if (!firstQuery.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
+    public void setQueries(Query[] queries) {
+        this.queries = queries;
+    }
 
-      sb.append(query.toElasticSearch());
+    public Sort getSort() {
+        return sort;
     }
-    sb.append("], ");
 
-    sb.append("\"should\": [");
+    public void setSort(Sort sort) {
+        this.sort = sort;
+    }
 
-    firstQuery = new AtomicBoolean(true);
-    for (QueryStatement query : shouldQueries) {
+    public boolean isFiltered() {
+        return filter != null;
+    }
 
-      if (!firstQuery.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
+    public Aggregation[] getAggregations() {
+        return aggregations;
+    }
 
-      sb.append(query.toElasticSearch());
+    public void setAggregations(Aggregation[] aggregations) {
+        this.aggregations = aggregations;
     }
 
-    sb.append("],"); // close should list
+    public boolean hasAggregations() {
+        return aggregations != null && aggregations.length > 0;
+    }
 
-    sb.append("\"must_not\": [");
-    firstQuery.set(true);
-    for (QueryStatement query : notMatchQueries) {
-      sb.append(query.toElasticSearch());
+    public Integer getFrom() {
+        return resultsStart;
     }
-    sb.append("]");
 
-    // Add the filter stanza, if one is required.
-    if (isFiltered()) {
-      sb.append(", \"filter\": ").append(filter.toElasticSearch());
+    public void setFrom(Integer from) {
+        this.resultsStart = from;
     }
 
-    sb.append("}"); // close bool clause
-    sb.append("}"); // close query clause
+    public Integer getSize() {
+        return size;
+    }
 
-    // Add the sort directive, if one is required.
-    if (sort != null) {
-      sb.append(", \"sort\": ").append(sort.toElasticSearch());
+    public void setSize(Integer size) {
+        this.size = size;
     }
 
-    // Add aggregations
-    if (hasAggregations()) {
-      sb.append(", \"aggs\": {");
+    /**
+     * This method returns a string which represents this statement in syntax that is understandable by ElasticSearch
+     * and is suitable for inclusion in an ElasticSearch query string.
+     *
+     * @return - ElasticSearch syntax string.
+     */
+    public String toElasticSearch() {
+
+        StringBuilder sb = new StringBuilder();
+        List<QueryStatement> notMatchQueries = new ArrayList<QueryStatement>();
+        List<QueryStatement> mustQueries = new ArrayList<QueryStatement>();
+        List<QueryStatement> shouldQueries = new ArrayList<QueryStatement>();
+
+        createQueryLists(queries, mustQueries, shouldQueries, notMatchQueries);
 
-      for (int i = 0; i < aggregations.length; i++) {
-        if (i > 0) {
-          sb.append(",");
+        sb.append("{");
+
+        sb.append("\"version\": true,");
+
+        // If the client has specified an index into the results for the first
+        // document in the result set then include that in the ElasticSearch
+        // query.
+        if (resultsStart != null) {
+            sb.append("\"from\": ").append(resultsStart).append(", ");
         }
-        sb.append(aggregations[i].toElasticSearch());
-      }
 
-      sb.append("}");
-    }
+        // If the client has specified a maximum number of documents to be returned
+        // in the result set then include that in the ElasticSearch query.
+        if (size != null) {
+            sb.append("\"size\": ").append(size).append(", ");
+        }
+
+        sb.append("\"query\": {");
+        sb.append("\"bool\": {");
+
+        sb.append("\"must\": [");
+        AtomicBoolean firstQuery = new AtomicBoolean(true);
+        for (QueryStatement query : mustQueries) {
+
+            if (!firstQuery.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
+
+            sb.append(query.toElasticSearch());
+        }
+        sb.append("], ");
 
-    sb.append("}");
+        sb.append("\"should\": [");
 
-    Logger.debug("Generated raw ElasticSearch query statement: " + sb.toString());
-    return sb.toString();
-  }
+        firstQuery = new AtomicBoolean(true);
+        for (QueryStatement query : shouldQueries) {
 
-  private void createQueryLists(Query[] queries, List<QueryStatement> mustList,
-                                List<QueryStatement> mayList, List<QueryStatement> mustNotList) {
+            if (!firstQuery.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
 
-    for (Query query : queries) {
+            sb.append(query.toElasticSearch());
+        }
 
-      if (query.isMust()) {
+        sb.append("],"); // close should list
 
-        if (query.getQueryStatement().isNotMatch()) {
-          mustNotList.add(query.getQueryStatement());
-        } else {
-          mustList.add(query.getQueryStatement());
+        sb.append("\"must_not\": [");
+        firstQuery.set(true);
+        for (QueryStatement query : notMatchQueries) {
+            sb.append(query.toElasticSearch());
         }
-      } else {
+        sb.append("]");
 
-        if (query.getQueryStatement().isNotMatch()) {
-          mustNotList.add(query.getQueryStatement());
-        } else {
-          mayList.add(query.getQueryStatement());
+        // Add the filter stanza, if one is required.
+        if (isFiltered()) {
+            sb.append(", \"filter\": ").append(filter.toElasticSearch());
         }
-      }
-    }
-  }
 
+        sb.append("}"); // close bool clause
+        sb.append("}"); // close query clause
 
-  @Override
-  public String toString() {
+        // Add the sort directive, if one is required.
+        if (sort != null) {
+            sb.append(", \"sort\": ").append(sort.toElasticSearch());
+        }
 
-    StringBuilder sb = new StringBuilder();
+        // Add aggregations
+        if (hasAggregations()) {
+            sb.append(", \"aggs\": {");
 
-    sb.append("SEARCH STATEMENT: {");
+            for (int i = 0; i < aggregations.length; i++) {
+                if (i > 0) {
+                    sb.append(",");
+                }
+                sb.append(aggregations[i].toElasticSearch());
+            }
 
-    if (size != null) {
-      sb.append("from: ").append(resultsStart).append(", size: ").append(size).append(", ");
-    }
+            sb.append("}");
+        }
 
-    if (filter != null) {
-      sb.append("filter: ").append(filter.toString()).append(", ");
+        sb.append("}");
+
+        Logger.debug("Generated raw ElasticSearch query statement: " + sb.toString());
+        return sb.toString();
     }
 
-    sb.append("queries: [");
-    AtomicBoolean firstQuery = new AtomicBoolean(true);
-    if (queries != null) {
-      for (Query query : queries) {
+    private void createQueryLists(Query[] queries, List<QueryStatement> mustList, List<QueryStatement> mayList,
+            List<QueryStatement> mustNotList) {
+
+        for (Query query : queries) {
+
+            if (query.isMust()) {
 
-        if (!firstQuery.compareAndSet(true, false)) {
-          sb.append(", ");
+                if (query.getQueryStatement().isNotMatch()) {
+                    mustNotList.add(query.getQueryStatement());
+                } else {
+                    mustList.add(query.getQueryStatement());
+                }
+            } else {
+
+                if (query.getQueryStatement().isNotMatch()) {
+                    mustNotList.add(query.getQueryStatement());
+                } else {
+                    mayList.add(query.getQueryStatement());
+                }
+            }
         }
-        sb.append(query.toString());
-      }
     }
-    sb.append("]");
 
-    sb.append("aggregations: [");
-    firstQuery = new AtomicBoolean(true);
 
-    if (aggregations != null) {
-      for (Aggregation agg : aggregations) {
+    @Override
+    public String toString() {
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("SEARCH STATEMENT: {");
 
-        if (!firstQuery.compareAndSet(true, false)) {
-          sb.append(", ");
+        if (size != null) {
+            sb.append("from: ").append(resultsStart).append(", size: ").append(size).append(", ");
         }
-        sb.append(agg.toString());
-      }
-    }
-    sb.append("]");
 
-    sb.append("]}");
+        if (filter != null) {
+            sb.append("filter: ").append(filter.toString()).append(", ");
+        }
+
+        sb.append("queries: [");
+        AtomicBoolean firstQuery = new AtomicBoolean(true);
+        if (queries != null) {
+            for (Query query : queries) {
+
+                if (!firstQuery.compareAndSet(true, false)) {
+                    sb.append(", ");
+                }
+                sb.append(query.toString());
+            }
+        }
+        sb.append("]");
+
+        sb.append("aggregations: [");
+        firstQuery = new AtomicBoolean(true);
 
-    return sb.toString();
-  }
+        if (aggregations != null) {
+            for (Aggregation agg : aggregations) {
+
+                if (!firstQuery.compareAndSet(true, false)) {
+                    sb.append(", ");
+                }
+                sb.append(agg.toString());
+            }
+        }
+        sb.append("]");
+
+        sb.append("]}");
+
+        return sb.toString();
+    }
 
 }
index 641ac55..104c4b0 100644 (file)
@@ -22,51 +22,51 @@ package org.onap.aai.sa.searchdbabstraction.searchapi;
 
 public class Sort {
 
-  private String field;
-  private SortDirection order = null;
+    private String field;
+    private SortDirection order = null;
 
-  public enum SortDirection {
-    ascending,
-    descending
-  }
+    public enum SortDirection {
+        ascending,
+        descending
+    }
 
-  public String getField() {
-    return field;
-  }
+    public String getField() {
+        return field;
+    }
 
-  public void setField(String field) {
-    this.field = field;
-  }
+    public void setField(String field) {
+        this.field = field;
+    }
 
-  public SortDirection getOrder() {
-    return order;
-  }
+    public SortDirection getOrder() {
+        return order;
+    }
 
-  public void setOrder(SortDirection order) {
-    this.order = order;
-  }
+    public void setOrder(SortDirection order) {
+        this.order = order;
+    }
 
-  public String toElasticSearch() {
+    public String toElasticSearch() {
 
-    StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("{ \"").append(field).append("\": { \"order\": ");
+        sb.append("{ \"").append(field).append("\": { \"order\": ");
 
-    // If a sort order wasn't explicitly supplied, default to 'ascending'.
-    if (order != null) {
-      switch (order) {
-        case ascending:
-          sb.append("\"asc\"}}");
-          break;
-        case descending:
-          sb.append("\"desc\"}}");
-          break;
-        default:
-      }
-    } else {
-      sb.append("\"asc\"}}");
-    }
+        // If a sort order wasn't explicitly supplied, default to 'ascending'.
+        if (order != null) {
+            switch (order) {
+                case ascending:
+                    sb.append("\"asc\"}}");
+                    break;
+                case descending:
+                    sb.append("\"desc\"}}");
+                    break;
+                default:
+            }
+        } else {
+            sb.append("\"asc\"}}");
+        }
 
-    return sb.toString();
-  }
+        return sb.toString();
+    }
 }
index 1bc93b6..2002748 100644 (file)
@@ -67,8 +67,8 @@ public class SuggestionStatement {
     }
 
     /**
-     * This method returns a string which represents this statement in syntax that is understandable
-     * by ElasticSearch and is suitable for inclusion in an ElasticSearch query string.
+     * This method returns a string which represents this statement in syntax that is understandable by ElasticSearch
+     * and is suitable for inclusion in an ElasticSearch query string.
      *
      * @return - ElasticSearch syntax string.
      */
index 08bd501..b8afa7e 100644 (file)
@@ -28,18 +28,20 @@ import java.util.concurrent.atomic.AtomicBoolean;
 /**
  * This class represents a simple term query.
  *
- * <p>A term query takes an operator, a field to apply the query to and a value to match
- * against the query contents.
+ * <p>
+ * A term query takes an operator, a field to apply the query to and a value to match against the query contents.
  *
- * <p>Valid operators include:
+ * <p>
+ * Valid operators include:
  * <ul>
- * <li> match - Field must contain the supplied value to produce a match. </li>
- * <li> not-match - Field must NOT contain the supplied value to produce a match. </li>
+ * <li>match - Field must contain the supplied value to produce a match.</li>
+ * <li>not-match - Field must NOT contain the supplied value to produce a match.</li>
  * </ul>
- * The following examples illustrate the structure of a few variants of the
- * term query:
+ * The following examples illustrate the structure of a few variants of the term query:
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  *     // Single Field Match Query:
  *     {
  *         "match": {"field": "searchTags", "value": "abcd"}
@@ -51,7 +53,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
  *     }
  * </pre>
  *
- * <p><pre>
+ * <p>
+ * 
+ * <pre>
  *     // Multi Field Match Query With A Single Value:
  *     {
  *         "match": {"field": "entityType searchTags", "value": "pserver"}
@@ -65,280 +69,274 @@ import java.util.concurrent.atomic.AtomicBoolean;
  */
 public class TermQuery {
 
-  /**
-   * The name of the field to apply the term query to.
-   */
-  private String field;
+    /**
+     * The name of the field to apply the term query to.
+     */
+    private String field;
+
+    /**
+     * The value which the field must contain in order to have a match.
+     */
+    private Object value;
+
+    /**
+     * For multi field queries only. Determines the rules for whether or not a document matches the query, as follows:
+     *
+     * <p>
+     * "and" - At least one occurrence of every supplied value must be present in any of the supplied fields.
+     *
+     * <p>
+     * "or" - At least one occurrence of any of the supplied values must be present in any of the supplied fields.
+     */
+    private String operator;
+
+    @JsonProperty("analyzer")
+    private String searchAnalyzer;
+
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
 
-  /**
-   * The value which the field must contain in order to have a match.
-   */
-  private Object value;
-
-  /**
-   * For multi field queries only.  Determines the rules for whether or not a document matches
-   * the query, as follows:
-   *
-   * <p>"and" - At least one occurrence of every supplied value must be present in any of the
-   * supplied fields.
-   *
-   * <p>"or"  - At least one occurrence of any of the supplied values must be present in any of
-   * the supplied fields.
-   */
-  private String operator;
-
-  @JsonProperty("analyzer")
-  private String searchAnalyzer;
-
-
-  public String getField() {
-    return field;
-  }
-
-  public void setField(String field) {
-    this.field = field;
-  }
-
-  public Object getValue() {
-    return value;
-  }
-
-  public void setValue(Object value) {
-    this.value = value;
-  }
-
-  private boolean isNumericValue() {
-    return ((value instanceof Integer) || (value instanceof Double));
-  }
-
-  public String getOperator() {
-    return operator;
-  }
-
-  public void setOperator(String operator) {
-    this.operator = operator;
-  }
-
-  public String getSearchAnalyzer() {
-    return searchAnalyzer;
-  }
-
-  public void setSearchAnalyzer(String searchAnalyzer) {
-    this.searchAnalyzer = searchAnalyzer;
-  }
-
-  /**
-   * This method returns a string which represents this query in syntax
-   * that is understandable by ElasticSearch and is suitable for inclusion
-   * in an ElasticSearch query string.
-   *
-   * @return - ElasticSearch syntax string.
-   */
-  public String toElasticSearch() {
-
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("{");
-
-    // Are we generating a multi field query?
-    if (isMultiFieldQuery()) {
-
-      // For multi field queries, we have to be careful about how we handle
-      // nested fields, so check to see if any of the specified fields are
-      // nested.
-      if (field.contains(".")) {
-
-        // Build the equivalent of a multi match query across one or more nested fields.
-        toElasticSearchNestedMultiMatchQuery(sb);
-
-      } else {
-
-        // Build a real multi match query, since we don't need to worry about nested fields.
-        toElasticSearchMultiFieldQuery(sb);
-      }
-    } else {
-
-      // Single field query.
-
-      // Add the necessary wrapping if this is a query against a nested field.
-      if (fieldIsNested(field)) {
-        sb.append("{\"nested\": { \"path\": \"").append(pathForNestedField(field))
-            .append("\", \"query\": ");
-      }
-
-      // Build the query.
-      toElasticSearchSingleFieldQuery(sb);
-
-      if (fieldIsNested(field)) {
-        sb.append("}}");
-      }
+    public Object getValue() {
+        return value;
     }
 
-    sb.append("}");
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    private boolean isNumericValue() {
+        return ((value instanceof Integer) || (value instanceof Double));
+    }
 
-    return sb.toString();
-  }
+    public String getOperator() {
+        return operator;
+    }
 
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
 
-  /**
-   * Determines whether or not the client has specified a term query with
-   * multiple fields.
-   *
-   * @return - true if the query is referencing multiple fields, false, otherwise.
-   */
-  private boolean isMultiFieldQuery() {
+    public String getSearchAnalyzer() {
+        return searchAnalyzer;
+    }
 
-    return (field.split(" ").length > 1);
-  }
+    public void setSearchAnalyzer(String searchAnalyzer) {
+        this.searchAnalyzer = searchAnalyzer;
+    }
 
+    /**
+     * This method returns a string which represents this query in syntax that is understandable by ElasticSearch and is
+     * suitable for inclusion in an ElasticSearch query string.
+     *
+     * @return - ElasticSearch syntax string.
+     */
+    public String toElasticSearch() {
 
-  /**
-   * Constructs a single field term query in ElasticSearch syntax.
-   *
-   * @param sb - The string builder to assemble the query string with.
-   * @return - The single term query.
-   */
-  private void toElasticSearchSingleFieldQuery(StringBuilder sb) {
+        StringBuilder sb = new StringBuilder();
 
-    sb.append("\"term\": {\"").append(field).append("\" : ");
+        sb.append("{");
 
-    // For numeric values, don't enclose the value in quotes.
-    if (!isNumericValue()) {
-      sb.append("\"").append(value).append("\"");
-    } else {
-      sb.append(value);
-    }
+        // Are we generating a multi field query?
+        if (isMultiFieldQuery()) {
 
-    sb.append("}");
-  }
+            // For multi field queries, we have to be careful about how we handle
+            // nested fields, so check to see if any of the specified fields are
+            // nested.
+            if (field.contains(".")) {
 
+                // Build the equivalent of a multi match query across one or more nested fields.
+                toElasticSearchNestedMultiMatchQuery(sb);
 
-  /**
-   * Constructs a multi field query in ElasticSearch syntax.
-   *
-   * @param sb - The string builder to assemble the query string with.
-   * @return - The multi field query.
-   */
-  private void toElasticSearchMultiFieldQuery(StringBuilder sb) {
+            } else {
 
-    sb.append("\"multi_match\": {");
+                // Build a real multi match query, since we don't need to worry about nested fields.
+                toElasticSearchMultiFieldQuery(sb);
+            }
+        } else {
 
-    sb.append("\"query\": \"").append(value).append("\", ");
-    sb.append("\"type\": \"cross_fields\",");
-    sb.append("\"fields\": [");
+            // Single field query.
 
-    List<String> fields = Arrays.asList(field.split(" "));
-    AtomicBoolean firstField = new AtomicBoolean(true);
-    for (String f : fields) {
-      if (!firstField.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
-      sb.append("\"").append(f.trim()).append("\"");
-    }
-    sb.append("],");
+            // Add the necessary wrapping if this is a query against a nested field.
+            if (fieldIsNested(field)) {
+                sb.append("{\"nested\": { \"path\": \"").append(pathForNestedField(field)).append("\", \"query\": ");
+            }
 
-    sb.append("\"operator\": \"").append((operator != null)
-        ? operator.toLowerCase() : "and").append("\"");
+            // Build the query.
+            toElasticSearchSingleFieldQuery(sb);
 
-    if (searchAnalyzer != null) {
-      sb.append(", \"analyzer\": \"").append(searchAnalyzer).append("\"");
+            if (fieldIsNested(field)) {
+                sb.append("}}");
+            }
+        }
+
+        sb.append("}");
+
+        return sb.toString();
     }
 
-    sb.append("}");
-  }
 
+    /**
+     * Determines whether or not the client has specified a term query with multiple fields.
+     *
+     * @return - true if the query is referencing multiple fields, false, otherwise.
+     */
+    private boolean isMultiFieldQuery() {
 
-  /**
-   * Constructs the equivalent of an ElasticSearch multi match query across
-   * multiple nested fields.
-   *
-   * <p>Since ElasticSearch doesn't really let you do that, we have to be clever
-   * and construct an equivalent query using boolean operators to produce
-   * the same result.
-   *
-   * @param sb - The string builder to use to build the query.
-   */
-  public void toElasticSearchNestedMultiMatchQuery(StringBuilder sb) {
+        return (field.split(" ").length > 1);
+    }
 
-    // Break out our whitespace delimited list of fields and values into a actual lists.
-    List<String> fields = Arrays.asList(field.split(" "));
-    List<String> values = Arrays.asList(((String) value).split(" ")); // GDF: revisit this cast.
 
-    sb.append("\"bool\": {");
+    /**
+     * Constructs a single field term query in ElasticSearch syntax.
+     *
+     * @param sb - The string builder to assemble the query string with.
+     * @return - The single term query.
+     */
+    private void toElasticSearchSingleFieldQuery(StringBuilder sb) {
 
-    if (operator != null) {
+        sb.append("\"term\": {\"").append(field).append("\" : ");
 
-      if (operator.toLowerCase().equals("and")) {
-        sb.append("\"must\": [");
-      } else if (operator.toLowerCase().equals("or")) {
-        sb.append("\"should\": [");
-      }
+        // For numeric values, don't enclose the value in quotes.
+        if (!isNumericValue()) {
+            sb.append("\"").append(value).append("\"");
+        } else {
+            sb.append(value);
+        }
 
-    } else {
-      sb.append("\"must\": [");
+        sb.append("}");
     }
 
-    AtomicBoolean firstField = new AtomicBoolean(true);
-    for (String f : fields) {
 
-      if (!firstField.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
+    /**
+     * Constructs a multi field query in ElasticSearch syntax.
+     *
+     * @param sb - The string builder to assemble the query string with.
+     * @return - The multi field query.
+     */
+    private void toElasticSearchMultiFieldQuery(StringBuilder sb) {
 
-      sb.append("{ ");
+        sb.append("\"multi_match\": {");
 
-      // Is this a nested field?
-      if (fieldIsNested(f)) {
+        sb.append("\"query\": \"").append(value).append("\", ");
+        sb.append("\"type\": \"cross_fields\",");
+        sb.append("\"fields\": [");
 
-        sb.append("\"nested\": {");
-        sb.append("\"path\": \"").append(pathForNestedField(f)).append("\", ");
-        sb.append("\"query\": ");
-      }
+        List<String> fields = Arrays.asList(field.split(" "));
+        AtomicBoolean firstField = new AtomicBoolean(true);
+        for (String f : fields) {
+            if (!firstField.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
+            sb.append("\"").append(f.trim()).append("\"");
+        }
+        sb.append("],");
 
-      sb.append("{\"bool\": {");
-      sb.append("\"should\": [");
+        sb.append("\"operator\": \"").append((operator != null) ? operator.toLowerCase() : "and").append("\"");
 
-      AtomicBoolean firstValue = new AtomicBoolean(true);
-      for (String v : values) {
-        if (!firstValue.compareAndSet(true, false)) {
-          sb.append(", ");
+        if (searchAnalyzer != null) {
+            sb.append(", \"analyzer\": \"").append(searchAnalyzer).append("\"");
         }
-        sb.append("{\"match\": { \"");
-        sb.append(f).append("\": {\"query\": \"").append(v).append("\"");
 
-        if (searchAnalyzer != null) {
-          sb.append(", \"analyzer\": \"").append(searchAnalyzer).append("\"");
+        sb.append("}");
+    }
+
+
+    /**
+     * Constructs the equivalent of an ElasticSearch multi match query across multiple nested fields.
+     *
+     * <p>
+     * Since ElasticSearch doesn't really let you do that, we have to be clever and construct an equivalent query using
+     * boolean operators to produce the same result.
+     *
+     * @param sb - The string builder to use to build the query.
+     */
+    public void toElasticSearchNestedMultiMatchQuery(StringBuilder sb) {
+
+        // Break out our whitespace delimited list of fields and values into a actual lists.
+        List<String> fields = Arrays.asList(field.split(" "));
+        List<String> values = Arrays.asList(((String) value).split(" ")); // GDF: revisit this cast.
+
+        sb.append("\"bool\": {");
+
+        if (operator != null) {
+
+            if (operator.toLowerCase().equals("and")) {
+                sb.append("\"must\": [");
+            } else if (operator.toLowerCase().equals("or")) {
+                sb.append("\"should\": [");
+            }
+
+        } else {
+            sb.append("\"must\": [");
         }
-        sb.append("}}}");
-      }
 
-      sb.append("]");
-      sb.append("}");
+        AtomicBoolean firstField = new AtomicBoolean(true);
+        for (String f : fields) {
 
-      if (fieldIsNested(f)) {
-        sb.append("}");
-        sb.append("}");
-      }
+            if (!firstField.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
 
-      sb.append("}");
-    }
+            sb.append("{ ");
+
+            // Is this a nested field?
+            if (fieldIsNested(f)) {
+
+                sb.append("\"nested\": {");
+                sb.append("\"path\": \"").append(pathForNestedField(f)).append("\", ");
+                sb.append("\"query\": ");
+            }
 
-    sb.append("]");
-    sb.append("}");
-  }
+            sb.append("{\"bool\": {");
+            sb.append("\"should\": [");
 
+            AtomicBoolean firstValue = new AtomicBoolean(true);
+            for (String v : values) {
+                if (!firstValue.compareAndSet(true, false)) {
+                    sb.append(", ");
+                }
+                sb.append("{\"match\": { \"");
+                sb.append(f).append("\": {\"query\": \"").append(v).append("\"");
 
-  @Override
-  public String toString() {
-    return "field: " + field + ", value: " + value + " (" + value.getClass().getName() + ")";
-  }
+                if (searchAnalyzer != null) {
+                    sb.append(", \"analyzer\": \"").append(searchAnalyzer).append("\"");
+                }
+                sb.append("}}}");
+            }
 
-  public boolean fieldIsNested(String field) {
-    return field.contains(".");
-  }
+            sb.append("]");
+            sb.append("}");
 
-  public String pathForNestedField(String field) {
-    int index = field.lastIndexOf('.');
-    return field.substring(0, index);
-  }
+            if (fieldIsNested(f)) {
+                sb.append("}");
+                sb.append("}");
+            }
+
+            sb.append("}");
+        }
+
+        sb.append("]");
+        sb.append("}");
+    }
+
+
+    @Override
+    public String toString() {
+        return "field: " + field + ", value: " + value + " (" + value.getClass().getName() + ")";
+    }
+
+    public boolean fieldIsNested(String field) {
+        return field.contains(".");
+    }
+
+    public String pathForNestedField(String field) {
+        int index = field.lastIndexOf('.');
+        return field.substring(0, index);
+    }
 }
index 2d7a290..350ddf0 100644 (file)
@@ -32,25 +32,25 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 
 public class SearchService {
-  private ElasticSearchHttpController esController = null;
+    private ElasticSearchHttpController esController = null;
 
-  static Logger logger = LoggerFactory.getInstance().getLogger(SearchService.class.getName());
+    static Logger logger = LoggerFactory.getInstance().getLogger(SearchService.class.getName());
 
-  @Autowired
-  private  ElasticSearchConfig esConfig;
+    @Autowired
+    private ElasticSearchConfig esConfig;
 
-  public SearchService() {
-    try {
-      start();
-    } catch (Exception e) {
-      logger.error(SearchDbMsgs.STARTUP_EXCEPTION, e.getLocalizedMessage());
+    public SearchService() {
+        try {
+            start();
+        } catch (Exception e) {
+            logger.error(SearchDbMsgs.STARTUP_EXCEPTION, e.getLocalizedMessage());
+        }
     }
-  }
 
-  protected void start() throws Exception {
-    Properties configProperties = new Properties();
-    configProperties.load(new FileInputStream(SearchDbConstants.ES_CONFIG_FILE));
-    esController = new ElasticSearchHttpController(esConfig);
-    logger.info(SearchDbMsgs.SERVICE_STARTED);
-  }
+    protected void start() throws Exception {
+        Properties configProperties = new Properties();
+        configProperties.load(new FileInputStream(SearchDbConstants.ES_CONFIG_FILE));
+        esController = new ElasticSearchHttpController(esConfig);
+        logger.info(SearchDbMsgs.SERVICE_STARTED);
+    }
 }
index 93ee23e..def3f04 100644 (file)
@@ -29,73 +29,71 @@ import org.onap.aai.sa.searchdbabstraction.entity.AggregationBucket;
 import org.onap.aai.sa.searchdbabstraction.entity.AggregationResult;
 
 public class AggregationParsingUtil {
-  public static AggregationResult[] parseAggregationResults(JSONObject aggregations)
-    throws JsonProcessingException {
+    public static AggregationResult[] parseAggregationResults(JSONObject aggregations) throws JsonProcessingException {
 
-    // Obtain the set of aggregation names
-    Set keySet = aggregations.keySet();
-    AggregationResult[] aggResults = new AggregationResult[keySet.size()];
+        // Obtain the set of aggregation names
+        Set keySet = aggregations.keySet();
+        AggregationResult[] aggResults = new AggregationResult[keySet.size()];
 
-    int index = 0;
-    for (Iterator it = keySet.iterator(); it.hasNext(); ) {
-      String key = (String) it.next();
-      AggregationResult aggResult = new AggregationResult();
-      aggResult.setName(key);
+        int index = 0;
+        for (Iterator it = keySet.iterator(); it.hasNext();) {
+            String key = (String) it.next();
+            AggregationResult aggResult = new AggregationResult();
+            aggResult.setName(key);
 
-      JSONObject bucketsOrNested = (JSONObject) aggregations.get(key);
-      Object buckets = bucketsOrNested.get("buckets");
-      if (buckets == null) {
-        // we have a nested
-        Number count = (Number) bucketsOrNested.remove("doc_count");
-        aggResult.setCount(count);
-        AggregationResult[] nestedResults = parseAggregationResults(bucketsOrNested);
-        aggResult.setNestedAggregations(nestedResults);
-      } else {
-        AggregationBucket[] aggBuckets = parseAggregationBuckets((JSONArray) buckets);
-        aggResult.setBuckets(aggBuckets);
-      }
+            JSONObject bucketsOrNested = (JSONObject) aggregations.get(key);
+            Object buckets = bucketsOrNested.get("buckets");
+            if (buckets == null) {
+                // we have a nested
+                Number count = (Number) bucketsOrNested.remove("doc_count");
+                aggResult.setCount(count);
+                AggregationResult[] nestedResults = parseAggregationResults(bucketsOrNested);
+                aggResult.setNestedAggregations(nestedResults);
+            } else {
+                AggregationBucket[] aggBuckets = parseAggregationBuckets((JSONArray) buckets);
+                aggResult.setBuckets(aggBuckets);
+            }
 
-      aggResults[index] = aggResult;
-      index++;
-    }
+            aggResults[index] = aggResult;
+            index++;
+        }
 
-    return aggResults;
+        return aggResults;
 
-  }
+    }
 
-  private static AggregationBucket[] parseAggregationBuckets(JSONArray buckets)
-    throws JsonProcessingException {
-    AggregationBucket[] aggBuckets = new AggregationBucket[buckets.size()];
-    for (int i = 0; i < buckets.size(); i++) {
-      AggregationBucket aggBucket = new AggregationBucket();
-      JSONObject bucketContent = (JSONObject) buckets.get(i);
-      Object key = bucketContent.remove("key");
-      aggBucket.setKey(key);
-      Object formatted = bucketContent.remove("key_as_string");
-      if (formatted != null) {
-        aggBucket.setFormattedKey((String) formatted);
-      }
-      Object count = bucketContent.remove("doc_count");
-      if (count != null) {
-        aggBucket.setCount((Number) count);
-      }
-      bucketContent.remove("from");
-      bucketContent.remove("from_as_string");
-      bucketContent.remove("to");
-      bucketContent.remove("to_as_string");
+    private static AggregationBucket[] parseAggregationBuckets(JSONArray buckets) throws JsonProcessingException {
+        AggregationBucket[] aggBuckets = new AggregationBucket[buckets.size()];
+        for (int i = 0; i < buckets.size(); i++) {
+            AggregationBucket aggBucket = new AggregationBucket();
+            JSONObject bucketContent = (JSONObject) buckets.get(i);
+            Object key = bucketContent.remove("key");
+            aggBucket.setKey(key);
+            Object formatted = bucketContent.remove("key_as_string");
+            if (formatted != null) {
+                aggBucket.setFormattedKey((String) formatted);
+            }
+            Object count = bucketContent.remove("doc_count");
+            if (count != null) {
+                aggBucket.setCount((Number) count);
+            }
+            bucketContent.remove("from");
+            bucketContent.remove("from_as_string");
+            bucketContent.remove("to");
+            bucketContent.remove("to_as_string");
 
 
-      if (!bucketContent.entrySet().isEmpty()) {
-        // we have results from sub-aggregation
-        AggregationResult[] subResult = parseAggregationResults(bucketContent);
-        if (subResult != null) {
-          aggBucket.setSubAggregationResult(subResult);
+            if (!bucketContent.entrySet().isEmpty()) {
+                // we have results from sub-aggregation
+                AggregationResult[] subResult = parseAggregationResults(bucketContent);
+                if (subResult != null) {
+                    aggBucket.setSubAggregationResult(subResult);
+                }
+            }
+            aggBuckets[i] = aggBucket;
         }
-      }
-      aggBuckets[i] = aggBucket;
-    }
 
-    return aggBuckets;
-  }
+        return aggBuckets;
+    }
 
 }
index a22f59e..09ef76b 100644 (file)
@@ -34,104 +34,106 @@ import org.onap.aai.sa.rest.DocumentSchema;
 
 public class DocumentSchemaUtil {
 
-  private static String dynamicCustomMapping = null;
-  private static final String DYNAMIC_CUSTOM_TEMPALTE_FILE = System.getProperty("CONFIG_HOME") + File.separator 
-                 + "dynamic-custom-template.json";
-  
-  public static String generateDocumentMappings(String documentSchema)
-      throws JsonParseException, JsonMappingException, IOException {
+    private static String dynamicCustomMapping = null;
+    private static final String DYNAMIC_CUSTOM_TEMPALTE_FILE =
+            System.getProperty("CONFIG_HOME") + File.separator + "dynamic-custom-template.json";
 
-    // Unmarshal the json content into a document schema object.
-    ObjectMapper mapper = new ObjectMapper();
-    DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
+    public static String generateDocumentMappings(String documentSchema)
+            throws JsonParseException, JsonMappingException, IOException {
 
-    return generateDocumentMappings(schema);
-  }
+        // Unmarshal the json content into a document schema object.
+        ObjectMapper mapper = new ObjectMapper();
+        DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class);
 
-  public static String generateDocumentMappings(DocumentSchema schema) throws IOException {
-         
-       // Adding dynamic template to add fielddata=true to dynamic fields of type "string"  
-       // in order to avoid aggregation queries breaking in ESv6.1.2
-       if(dynamicCustomMapping == null) {
-               try {
-                       dynamicCustomMapping = IOUtils.toString(new FileInputStream(DYNAMIC_CUSTOM_TEMPALTE_FILE), "UTF-8").replaceAll("\\s+", "");
-               } catch (IOException e) {
-                       throw new IOException("Dynamic Custom template configuration went wrong! Please check for the correct template file.", e);
-               }
-       }
-
-    // Now, generate the Elastic Search mapping json and return it.
-    StringBuilder sb = new StringBuilder();
-    sb.append("{");
-    // Adding custom mapping which adds fielddata=true to dynamic fields of type "string"
-    sb.append(dynamicCustomMapping != null ? dynamicCustomMapping : "");
-    sb.append("\"properties\": {");
-
-    generateFieldMappings(schema.getFields(), sb);
-
-    sb.append("}");
-    sb.append("}");
+        return generateDocumentMappings(schema);
+    }
 
-    return sb.toString();
-  }
+    public static String generateDocumentMappings(DocumentSchema schema) throws IOException {
+
+        // Adding dynamic template to add fielddata=true to dynamic fields of type "string"
+        // in order to avoid aggregation queries breaking in ESv6.1.2
+        if (dynamicCustomMapping == null) {
+            try {
+                dynamicCustomMapping = IOUtils.toString(new FileInputStream(DYNAMIC_CUSTOM_TEMPALTE_FILE), "UTF-8")
+                        .replaceAll("\\s+", "");
+            } catch (IOException e) {
+                throw new IOException(
+                        "Dynamic Custom template configuration went wrong! Please check for the correct template file.",
+                        e);
+            }
+        }
+
+        // Now, generate the Elastic Search mapping json and return it.
+        StringBuilder sb = new StringBuilder();
+        sb.append("{");
+        // Adding custom mapping which adds fielddata=true to dynamic fields of type "string"
+        sb.append(dynamicCustomMapping != null ? dynamicCustomMapping : "");
+        sb.append("\"properties\": {");
+
+        generateFieldMappings(schema.getFields(), sb);
+
+        sb.append("}");
+        sb.append("}");
+
+        return sb.toString();
+    }
 
 
-  private static void generateFieldMappings(List<DocumentFieldSchema> fields, StringBuilder sb) {
+    private static void generateFieldMappings(List<DocumentFieldSchema> fields, StringBuilder sb) {
 
-    AtomicBoolean firstField = new AtomicBoolean(true);
+        AtomicBoolean firstField = new AtomicBoolean(true);
 
-    for (DocumentFieldSchema field : fields) {
+        for (DocumentFieldSchema field : fields) {
 
-      // If this isn't the first field in the list, prepend it with a ','
-      if (!firstField.compareAndSet(true, false)) {
-        sb.append(", ");
-      }
+            // If this isn't the first field in the list, prepend it with a ','
+            if (!firstField.compareAndSet(true, false)) {
+                sb.append(", ");
+            }
 
-      // Now, append the translated field contents.
-      generateFieldMapping(field, sb);
+            // Now, append the translated field contents.
+            generateFieldMapping(field, sb);
+        }
     }
-  }
 
-  private static void generateFieldMapping(DocumentFieldSchema fieldSchema, StringBuilder sb) {
+    private static void generateFieldMapping(DocumentFieldSchema fieldSchema, StringBuilder sb) {
 
-    sb.append("\"").append(fieldSchema.getName()).append("\": {");
+        sb.append("\"").append(fieldSchema.getName()).append("\": {");
 
-    // The field type is mandatory.
-    sb.append("\"type\": \"").append(fieldSchema.getDataType()).append("\"");
+        // The field type is mandatory.
+        sb.append("\"type\": \"").append(fieldSchema.getDataType()).append("\"");
 
-    // For date type fields we may optionally supply a format specifier.
-    if (fieldSchema.getDataType().equals("date")) {
-      if (fieldSchema.getFormat() != null) {
-        sb.append(", \"format\": \"").append(fieldSchema.getFormat()).append("\"");
-      }
-    }
+        // For date type fields we may optionally supply a format specifier.
+        if (fieldSchema.getDataType().equals("date")) {
+            if (fieldSchema.getFormat() != null) {
+                sb.append(", \"format\": \"").append(fieldSchema.getFormat()).append("\"");
+            }
+        }
 
-    // If the index field was specified, then append it.
-    if (fieldSchema.getSearchable() != null) {
-      sb.append(", \"index\": \"").append(fieldSchema.getSearchable()
-          ? "analyzed" : "not_analyzed").append("\"");
-    }
+        // If the index field was specified, then append it.
+        if (fieldSchema.getSearchable() != null) {
+            sb.append(", \"index\": \"").append(fieldSchema.getSearchable() ? "analyzed" : "not_analyzed").append("\"");
+        }
 
-    // If a search analyzer was specified, then append it.
-    if (fieldSchema.getSearchAnalyzer() != null) {
-      sb.append(", \"search_analyzer\": \"").append(fieldSchema.getSearchAnalyzer()).append("\"");
-    }
+        // If a search analyzer was specified, then append it.
+        if (fieldSchema.getSearchAnalyzer() != null) {
+            sb.append(", \"search_analyzer\": \"").append(fieldSchema.getSearchAnalyzer()).append("\"");
+        }
 
-    // If an indexing analyzer was specified, then append it.
-    if (fieldSchema.getIndexAnalyzer() != null) {
-      sb.append(", \"analyzer\": \"").append(fieldSchema.getIndexAnalyzer()).append("\"");
-    }
+        // If an indexing analyzer was specified, then append it.
+        if (fieldSchema.getIndexAnalyzer() != null) {
+            sb.append(", \"analyzer\": \"").append(fieldSchema.getIndexAnalyzer()).append("\"");
+        }
 
 
-    if (fieldSchema.getDataType().equals("nested")) {
+        if (fieldSchema.getDataType().equals("nested")) {
 
-      sb.append(", \"properties\": {");
-      generateFieldMappings(fieldSchema.getSubFields(), sb);
-      sb.append("}");
-    }
+            sb.append(", \"properties\": {");
+            generateFieldMappings(fieldSchema.getSubFields(), sb);
+            sb.append("}");
+        }
 
-    sb.append("}");
-  }
+        sb.append("}");
+    }
 
 }
 
index d73001b..79b145d 100644 (file)
@@ -37,62 +37,64 @@ import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs;
 
 
 /**
- * This class as the name suggests is to translate the payload of PUT & POST requests
- * to ElasticSearch (ES) to its compatible syntax, specially compatible with ES v6 or above.
+ * This class as the name suggests is to translate the payload of PUT & POST requests to ElasticSearch (ES) to its
+ * compatible syntax, specially compatible with ES v6 or above.
  * 
- * For example, data type such as "string" is now replaced by "text" or "keyword". 
+ * For example, data type such as "string" is now replaced by "text" or "keyword".
  * 
- * So this class will make those translations reading off from a json configuration file, therefore
- * the configuration can be updated with new translations as and when required without touching the code. 
+ * So this class will make those translations reading off from a json configuration file, therefore the configuration
+ * can be updated with new translations as and when required without touching the code.
  * 
  * @author EDWINL
  *
  */
 public class ElasticSearchPayloadTranslator {
 
-       private static Logger logger = LoggerFactory.getInstance().getLogger(ElasticSearchPayloadTranslator.class.getName());
-       private static final String CONFIG_DIRECTORY = System.getProperty("CONFIG_HOME");
-       private static final String ES_PAYLOAD_TRANSLATION_FILE = "es-payload-translation.json";
+    private static Logger logger =
+            LoggerFactory.getInstance().getLogger(ElasticSearchPayloadTranslator.class.getName());
+    private static final String CONFIG_DIRECTORY = System.getProperty("CONFIG_HOME");
+    private static final String ES_PAYLOAD_TRANSLATION_FILE = "es-payload-translation.json";
 
 
-       /**
-        *  Using JSON Path query to filter objects to translate the payload to ES compatible version
-        *  The filter queries and the replacement attributes are configured in the es-payload-translation.json file.
-        *  
-        * @param source
-        * @return translated payload in String
-        * @throws IOException
-        */
-       public static String translateESPayload(String source) throws IOException {
-               logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "translateESPayload, method-params[ source=" + source + "]");
-               String pathToTranslationFile = CONFIG_DIRECTORY + File.separator + ES_PAYLOAD_TRANSLATION_FILE;
+    /**
+     * Using JSON Path query to filter objects to translate the payload to ES compatible version The filter queries and
+     * the replacement attributes are configured in the es-payload-translation.json file.
+     * 
+     * @param source
+     * @return translated payload in String
+     * @throws IOException
+     */
+    public static String translateESPayload(String source) throws IOException {
+        logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "translateESPayload, method-params[ source=" + source + "]");
+        String pathToTranslationFile = CONFIG_DIRECTORY + File.separator + ES_PAYLOAD_TRANSLATION_FILE;
 
-               try {
-                       
-                       JSONObject translationConfigPayload = new JSONObject(IOUtils.toString(
-                                       new FileInputStream(new File(pathToTranslationFile)), "UTF-8"));
-                       JSONArray attrTranslations = translationConfigPayload.getJSONArray("attr-translations");
-                       DocumentContext payloadToTranslate = JsonPath.parse(source);
+        try {
 
-                       for(Object obj : attrTranslations) {
-                               JSONObject jsonObj = ((JSONObject) obj);
-                               String query = jsonObj.get("query").toString();
-                               JSONObject attrToUpdate = (JSONObject) jsonObj.get("update");
-                               List<Map<String, Object>> filteredObjects = payloadToTranslate.read(query);
-                               for(Map<String, Object> objMap : filteredObjects) {
-                                       objMap.putAll(attrToUpdate.toMap());
-                               }
-                       }
-                       
-                       logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "Payload after translation: "+payloadToTranslate.jsonString());
-                       return payloadToTranslate.jsonString();
-                       
-               } catch (JSONException | IOException e) {
-                       logger.error(SearchDbMsgs.FILTERS_CONFIG_FAILURE, e, ES_PAYLOAD_TRANSLATION_FILE, e.getMessage());
-                       if(e instanceof JSONException) {
-                               throw new IOException("Payload translation configuration looks corrupted. Please correct!", e);
-                       }
-                       throw new IOException("Error in configuring payload translation file. Please check if it exists.", e);
-               }       
-       }
+            JSONObject translationConfigPayload =
+                    new JSONObject(IOUtils.toString(new FileInputStream(new File(pathToTranslationFile)), "UTF-8"));
+            JSONArray attrTranslations = translationConfigPayload.getJSONArray("attr-translations");
+            DocumentContext payloadToTranslate = JsonPath.parse(source);
+
+            for (Object obj : attrTranslations) {
+                JSONObject jsonObj = ((JSONObject) obj);
+                String query = jsonObj.get("query").toString();
+                JSONObject attrToUpdate = (JSONObject) jsonObj.get("update");
+                List<Map<String, Object>> filteredObjects = payloadToTranslate.read(query);
+                for (Map<String, Object> objMap : filteredObjects) {
+                    objMap.putAll(attrToUpdate.toMap());
+                }
+            }
+
+            logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY,
+                    "Payload after translation: " + payloadToTranslate.jsonString());
+            return payloadToTranslate.jsonString();
+
+        } catch (JSONException | IOException e) {
+            logger.error(SearchDbMsgs.FILTERS_CONFIG_FAILURE, e, ES_PAYLOAD_TRANSLATION_FILE, e.getMessage());
+            if (e instanceof JSONException) {
+                throw new IOException("Payload translation configuration looks corrupted. Please correct!", e);
+            }
+            throw new IOException("Error in configuring payload translation file. Please check if it exists.", e);
+        }
+    }
 }
index bd7d58b..1171895 100644 (file)
 package org.onap.aai.sa.searchdbabstraction.util;
 
 public class SearchDbConstants {
-  public static final String SDB_FILESEP = (System.getProperty("file.separator") == null) ? "/"
-    : System.getProperty("file.separator");
-  public static final String SDB_BUNDLECONFIG_NAME =
-    (System.getProperty("BUNDLECONFIG_DIR") == null)
-    ? "bundleconfig" : System.getProperty("BUNDLECONFIG_DIR");
-//
-  public static final String SDB_HOME_BUNDLECONFIG = (System.getProperty("AJSC_HOME") == null)
-    ? SDB_FILESEP + "opt" + SDB_FILESEP + "app" + SDB_FILESEP + "searchdb"
-    + SDB_FILESEP + SDB_BUNDLECONFIG_NAME
-    : System.getProperty("AJSC_HOME") + SDB_FILESEP + SDB_BUNDLECONFIG_NAME;
-//
-  public static final String SDB_HOME_ETC =
-    SDB_HOME_BUNDLECONFIG + SDB_FILESEP + "etc" + SDB_FILESEP;
-  public static final String SDB_CONFIG_APP_LOCATION = SDB_HOME_ETC + "appprops" + SDB_FILESEP;
+    public static final String SDB_FILESEP =
+            (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
+    public static final String SDB_BUNDLECONFIG_NAME =
+            (System.getProperty("BUNDLECONFIG_DIR") == null) ? "bundleconfig" : System.getProperty("BUNDLECONFIG_DIR");
+    //
+    public static final String SDB_HOME_BUNDLECONFIG = (System.getProperty("AJSC_HOME") == null)
+            ? SDB_FILESEP + "opt" + SDB_FILESEP + "app" + SDB_FILESEP + "searchdb" + SDB_FILESEP + SDB_BUNDLECONFIG_NAME
+            : System.getProperty("AJSC_HOME") + SDB_FILESEP + SDB_BUNDLECONFIG_NAME;
+    //
+    public static final String SDB_HOME_ETC = SDB_HOME_BUNDLECONFIG + SDB_FILESEP + "etc" + SDB_FILESEP;
+    public static final String SDB_CONFIG_APP_LOCATION = SDB_HOME_ETC + "appprops" + SDB_FILESEP;
 
-  // Elastic Search related
-  public static final String SDB_SPECIFIC_CONFIG = (System.getProperty("CONFIG_HOME") == null)
-    ? SDB_CONFIG_APP_LOCATION : System.getProperty("CONFIG_HOME") + SDB_FILESEP;
-  public static final String ES_CONFIG_FILE = SDB_SPECIFIC_CONFIG + SDB_FILESEP
-    + "elastic-search.properties";
-  public static final String SDB_AUTH = SDB_SPECIFIC_CONFIG + "auth" + SDB_FILESEP;
-  public static final String SDB_AUTH_CONFIG_FILENAME = SDB_AUTH + "search_policy.json";
-  public static final String SDB_FILTER_CONFIG_FILE = SDB_SPECIFIC_CONFIG + "filter-config.json";
-  public static final String SDB_ANALYSIS_CONFIG_FILE =
-    SDB_SPECIFIC_CONFIG + "analysis-config.json";
+    // Elastic Search related
+    public static final String SDB_SPECIFIC_CONFIG = (System.getProperty("CONFIG_HOME") == null)
+            ? SDB_CONFIG_APP_LOCATION : System.getProperty("CONFIG_HOME") + SDB_FILESEP;
+    public static final String ES_CONFIG_FILE = SDB_SPECIFIC_CONFIG + SDB_FILESEP + "elastic-search.properties";
+    public static final String SDB_AUTH = SDB_SPECIFIC_CONFIG + "auth" + SDB_FILESEP;
+    public static final String SDB_AUTH_CONFIG_FILENAME = SDB_AUTH + "search_policy.json";
+    public static final String SDB_FILTER_CONFIG_FILE = SDB_SPECIFIC_CONFIG + "filter-config.json";
+    public static final String SDB_ANALYSIS_CONFIG_FILE = SDB_SPECIFIC_CONFIG + "analysis-config.json";
 
-//  public static final String SDB_HOME_SEARCHCONFIG = (System.getProperty("app.config") == null)
-//          ?  System.getProperty("user.dir") + SDB_FILESEP + "config" + SDB_FILESEP + "searchdb"
-//          + SDB_FILESEP + "elastic-search.properties"
-//          : System.getProperty("app.config") + SDB_FILESEP + "searchdb" + SDB_FILESEP + "elastic-search.properties";
+    // public static final String SDB_HOME_SEARCHCONFIG = (System.getProperty("app.config") == null)
+    // ? System.getProperty("user.dir") + SDB_FILESEP + "config" + SDB_FILESEP + "searchdb"
+    // + SDB_FILESEP + "elastic-search.properties"
+    // : System.getProperty("app.config") + SDB_FILESEP + "searchdb" + SDB_FILESEP + "elastic-search.properties";
 
-  // Logging related
-  public static final String SDB_SERVICE_NAME = "SearchDataService";
+    // Logging related
+    public static final String SDB_SERVICE_NAME = "SearchDataService";
 }
index 3ffb422..a4b5395 100644 (file)
@@ -39,47 +39,47 @@ public class SearchDbServiceAuthTest {
     @Mock\r
     HttpHeaders headers;\r
 \r
-//    @Mock\r
-//    Cookie mockedCookie;\r
+    // @Mock\r
+    // Cookie mockedCookie;\r
 \r
     @Before\r
     public void setUp() throws NoSuchFieldException, IllegalAccessException, IOException {\r
         MockitoAnnotations.initMocks(this);\r
         System.setProperty("AJSC_HOME", new File(".").getCanonicalPath().replace('\\', '/'));\r
-        setFinalStatic(System.getProperty("AJSC_HOME")+"/src/test/resources/json/search_policy.json");\r
+        setFinalStatic(System.getProperty("AJSC_HOME") + "/src/test/resources/json/search_policy.json");\r
     }\r
 \r
     @Test\r
-    public void testAuthUser(){\r
+    public void testAuthUser() {\r
         SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();\r
         String auth = aaiAuth.authUser(headers, "user-1", "function-1");\r
         Assert.assertEquals(auth, "AAI_9101");\r
     }\r
 \r
-//    @Test\r
-//    public void testAuthCookie_NullCookie(){\r
-//        SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();\r
-//        Cookie cookie = null;\r
-//        Assert.assertFalse(aaiAuth.authCookie(cookie, "function-1", new StringBuilder("user-1")));\r
-//    }\r
+    // @Test\r
+    // public void testAuthCookie_NullCookie(){\r
+    // SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();\r
+    // Cookie cookie = null;\r
+    // Assert.assertFalse(aaiAuth.authCookie(cookie, "function-1", new StringBuilder("user-1")));\r
+    // }\r
 \r
-//    @Test\r
-//    public void testAuthCookie_NotNullCookie(){\r
-//        SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();\r
-//        Cookie cookie = new Cookie ( "TestCookie", "TestValue");\r
-//         // Cookie cookie = new Cookie ( "TestCookie", "TestValue" );\r
-//        boolean retValue = aaiAuth.authCookie(cookie, "GET:testFunction", new StringBuilder("testuser"));\r
-//        Assert.assertTrue(retValue);\r
-//        }\r
+    // @Test\r
+    // public void testAuthCookie_NotNullCookie(){\r
+    // SearchDbServiceAuth aaiAuth = new SearchDbServiceAuth();\r
+    // Cookie cookie = new Cookie ( "TestCookie", "TestValue");\r
+    // // Cookie cookie = new Cookie ( "TestCookie", "TestValue" );\r
+    // boolean retValue = aaiAuth.authCookie(cookie, "GET:testFunction", new StringBuilder("testuser"));\r
+    // Assert.assertTrue(retValue);\r
+    // }\r
 \r
-    static void setFinalStatic(String fieldValue) throws NoSuchFieldException, SecurityException,\r
-            IllegalArgumentException, IllegalAccessException {\r
+    static void setFinalStatic(String fieldValue)\r
+            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {\r
         Field configField = SearchDbConstants.class.getDeclaredField("SDB_AUTH_CONFIG_FILENAME");\r
         configField.setAccessible(true);\r
 \r
-        Field modifiersField = Field.class.getDeclaredField( "modifiers" );\r
-        modifiersField.setAccessible( true );\r
-        modifiersField.setInt( configField, configField.getModifiers() & ~Modifier.FINAL );\r
+        Field modifiersField = Field.class.getDeclaredField("modifiers");\r
+        modifiersField.setAccessible(true);\r
+        modifiersField.setInt(configField, configField.getModifiers() & ~Modifier.FINAL);\r
 \r
         configField.set(null, fieldValue);\r
     }\r
index 457dbdd..593ec92 100644 (file)
@@ -27,16 +27,16 @@ import org.junit.Test;
 
 public class ApiUtilsTest {
 
-  @Test
-  public void testHTTPStatusConversion() {
-      String statusString;
-      statusString = ApiUtils.getHttpStatusString(201);
-      assertEquals(0, statusString.compareToIgnoreCase("Created"));
+    @Test
+    public void testHTTPStatusConversion() {
+        String statusString;
+        statusString = ApiUtils.getHttpStatusString(201);
+        assertEquals(0, statusString.compareToIgnoreCase("Created"));
 
-      statusString = ApiUtils.getHttpStatusString(207);
-      assertEquals(0, statusString.compareToIgnoreCase("Multi-Status"));
+        statusString = ApiUtils.getHttpStatusString(207);
+        assertEquals(0, statusString.compareToIgnoreCase("Multi-Status"));
 
-      statusString = ApiUtils.getHttpStatusString(9999);
-      assertEquals(0, statusString.compareToIgnoreCase("Unknown"));
-  }
+        statusString = ApiUtils.getHttpStatusString(9999);
+        assertEquals(0, statusString.compareToIgnoreCase("Unknown"));
+    }
 }
index a1c255c..eff4efc 100644 (file)
@@ -38,8 +38,7 @@ import org.springframework.test.web.servlet.ResultActions;
 
 
 /**
- * This suite of tests validates the behaviour of the bulk operations REST
- * end point.
+ * This suite of tests validates the behaviour of the bulk operations REST end point.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = org.onap.aai.sa.Application.class)
@@ -54,16 +53,16 @@ public class BulkApiTest {
     @Test
     public void authenticationFailureTest() throws Exception {
 
-        this.mockMvc.perform ( post ( TOP_URI) .contentType( MediaType.APPLICATION_JSON)
-                .content ( SearchServiceApiHarness.FAIL_AUTHENTICATION_TRIGGER )).andExpect ( status ().isForbidden () );
+        this.mockMvc
+                .perform(post(TOP_URI).contentType(MediaType.APPLICATION_JSON)
+                        .content(SearchServiceApiHarness.FAIL_AUTHENTICATION_TRIGGER))
+                .andExpect(status().isForbidden());
     }
 
 
     /**
-     * This test validates that properly constructed json payloads are
-     * correctly validated and that improperly contructed payloads will
-     * be rejected with the appropriate response code returned to the
-     * client.
+     * This test validates that properly constructed json payloads are correctly validated and that improperly
+     * contructed payloads will be rejected with the appropriate response code returned to the client.
      *
      * @throws IOException
      */
@@ -72,19 +71,20 @@ public class BulkApiTest {
 
         // Post a request to the bulk operations endpoint with a valid
         // operations list payload.
-        File validBulkOpsFile = new File ("src/test/resources/json/bulk-ops-valid.json");
+        File validBulkOpsFile = new File("src/test/resources/json/bulk-ops-valid.json");
         String validPayloadStr = TestUtils.readFileToString(validBulkOpsFile);
 
         // Validate that the payload is accepted as expected.
-        this.mockMvc.perform ( post ( TOP_URI ).contentType ( MediaType.APPLICATION_JSON )
-                .content ( validPayloadStr ) ).andExpect ( status ().isOk () );
+        this.mockMvc.perform(post(TOP_URI).contentType(MediaType.APPLICATION_JSON).content(validPayloadStr))
+                .andExpect(status().isOk());
 
 
         // Post a request to the bulk operations endpoint with an invalid
         // operations list payload.
         File inValidBulkOpsFile = new File("src/test/resources/json/bulk-ops-invalid.json");
         String inValidPayloadStr = TestUtils.readFileToString(inValidBulkOpsFile);
-        ResultActions invalid = this.mockMvc.perform ( post ( TOP_URI ).contentType ( MediaType.APPLICATION_JSON )
-                .content ( inValidPayloadStr ) ).andExpect ( status ().isBadRequest ());
+        ResultActions invalid =
+                this.mockMvc.perform(post(TOP_URI).contentType(MediaType.APPLICATION_JSON).content(inValidPayloadStr))
+                        .andExpect(status().isBadRequest());
     }
 }
index d085d04..d5999b8 100644 (file)
@@ -33,7 +33,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 public class BulkRequestTest {\r
 \r
     @Test\r
-    public void testBulkRequest_Delete(){\r
+    public void testBulkRequest_Delete() {\r
         BulkRequest request = new BulkRequest();\r
         BulkOperation operation = new BulkOperation();\r
         Document document = new Document();\r
@@ -54,7 +54,7 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testBulkRequest_Update(){\r
+    public void testBulkRequest_Update() {\r
         BulkRequest request = new BulkRequest();\r
         BulkOperation operation = new BulkOperation();\r
         Document document = new Document();\r
@@ -74,7 +74,7 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testBulkRequest_Create(){\r
+    public void testBulkRequest_Create() {\r
         BulkRequest request = new BulkRequest();\r
         BulkOperation operation = new BulkOperation();\r
         Document document = new Document();\r
@@ -94,7 +94,7 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testBulkRequest_Undefined(){\r
+    public void testBulkRequest_Undefined() {\r
         BulkRequest request = new BulkRequest();\r
         Assert.assertNull(request.getOperation());\r
         Assert.assertNull(request.getOperationType());\r
@@ -102,7 +102,7 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testGetIndex(){\r
+    public void testGetIndex() {\r
         BulkRequest request = new BulkRequest();\r
         BulkOperation operation = new BulkOperation();\r
         BulkMetaData metaData = new BulkMetaData();\r
@@ -114,7 +114,7 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testGetId(){\r
+    public void testGetId() {\r
         BulkRequest request = new BulkRequest();\r
         BulkOperation operation = new BulkOperation();\r
         BulkMetaData metaData = new BulkMetaData();\r
@@ -126,16 +126,15 @@ public class BulkRequestTest {
     }\r
 \r
     @Test\r
-    public void testApiUtils(){\r
-        Assert.assertEquals("services/search-data-service/v1/search/indexes/index1",\r
-                ApiUtils.buildIndexUri("index1"));\r
+    public void testApiUtils() {\r
+        Assert.assertEquals("services/search-data-service/v1/search/indexes/index1", ApiUtils.buildIndexUri("index1"));\r
         Assert.assertEquals("services/search-data-service/v1/search/indexes/index1/documents/document1",\r
                 ApiUtils.buildDocumentUri("index1", "document1"));\r
         Assert.assertTrue(ApiUtils.validateIndexUri("services/search-data-service/v1/search/indexes/index1"));\r
-        Assert.assertTrue(ApiUtils.validateDocumentUri\r
-                ("services/search-data-service/v1/search/indexes/index1/documents/document1", true));\r
-        Assert.assertTrue(ApiUtils.validateDocumentUri\r
-                ("services/search-data-service/v1/search/indexes/index1/documents/document1", false));\r
+        Assert.assertTrue(ApiUtils.validateDocumentUri(\r
+                "services/search-data-service/v1/search/indexes/index1/documents/document1", true));\r
+        Assert.assertTrue(ApiUtils.validateDocumentUri(\r
+                "services/search-data-service/v1/search/indexes/index1/documents/document1", false));\r
     }\r
 \r
     private BulkMetaData getMetaData() {\r
index 78fec3e..4276f3d 100644 (file)
@@ -46,186 +46,182 @@ import org.springframework.test.web.servlet.MvcResult;
 @RunWith(SpringRunner.class)
 @SpringBootTest
 @AutoConfigureMockMvc
-public class DocumentApiTest  {
-
-  private static final String INDEXES_URI = "/test/indexes/";
-  private static final String DOCUMENT_URI = "documents/";
-
-  private static final String SEARCH_URI = "query/";
-  private static final String INDEX_NAME = "test-index";
-  private static final String DOC_ID = "test-1";
-  private static final String SIMPLE_QUERY = "\"parsed-query\": {\"my-field\": \"something\", \"query-string\": \"string\"}";
-  private static final String COMPLEX_QUERY =
-      "{"
-          + "\"filter\": {"
-          + "\"all\": ["
-          + "{\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}}"
-          + "]"
-          + "},"
-          + "\"queries\": ["
-          + "{\"may\": {\"parsed-query\": {\"field\": \"searchTags\", \"query-string\": \"b\"}}}"
-          + "]"
-          + "}";
-
-  private static final String CREATE_JSON_CONTENT = "creation content";
+public class DocumentApiTest {
+
+    private static final String INDEXES_URI = "/test/indexes/";
+    private static final String DOCUMENT_URI = "documents/";
+
+    private static final String SEARCH_URI = "query/";
+    private static final String INDEX_NAME = "test-index";
+    private static final String DOC_ID = "test-1";
+    private static final String SIMPLE_QUERY =
+            "\"parsed-query\": {\"my-field\": \"something\", \"query-string\": \"string\"}";
+    private static final String COMPLEX_QUERY = "{" + "\"filter\": {" + "\"all\": ["
+            + "{\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}}" + "]" + "}," + "\"queries\": ["
+            + "{\"may\": {\"parsed-query\": {\"field\": \"searchTags\", \"query-string\": \"b\"}}}" + "]" + "}";
+
+    private static final String CREATE_JSON_CONTENT = "creation content";
 
     @Autowired
     private MockMvc mockMvc;
 
-  /**
-   * This test validates the behaviour of the 'Create Document' POST request
-   * endpoint.
-   *
-   * @throws IOException
-   * @throws ParseException
-   */
-  @Test
-  public void createDocumentTest() throws Exception {
-
-      MvcResult result = this.mockMvc.perform ( post ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI ).contentType ( MediaType.APPLICATION_JSON )
-              .content ( CREATE_JSON_CONTENT ) ).andReturn ( );
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-
-    JSONParser parser = new JSONParser();
-    JSONObject json = (JSONObject) parser.parse(result.getResponse ().getContentAsString ());
-
-    assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
-  }
-
-  /**
-   * This test validates the behaviour of the 'Create Document' PUT request
-   * endpoint.
-   *
-   * @throws IOException
-   * @throws ParseException
-   */
-  @Test
-  public void updateDocumentTest() throws Exception {
-    // WebTarget target = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID);
-    // Builder request = target.request().header("If-Match", "1");
-    // String result = request.put(Entity.json(CREATE_JSON_CONTENT), String.class);
-
-      MvcResult result = this.mockMvc.perform ( put ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID ).contentType ( MediaType.APPLICATION_JSON )
-              .header ( "If-Match", "1" ).content ( CREATE_JSON_CONTENT ) ).andReturn ( );
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    JSONParser parser = new JSONParser();
-    JSONObject json = (JSONObject) parser.parse(result.getResponse ().getContentAsString ());
-
-    assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
-  }
-
-  /**
-   * This test validates the behaviour of the 'Get Document' GET request
-   * endpoint.
-   *
-   * @throws IOException
-   * @throws ParseException
-   */
-  @Test
-  public void getDocumentTest() throws Exception {
-    // String result = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID).request().get(String.class);
-
-      // MvcResult result = this.mockMvc.perform ( get ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID ) ).andReturn ();
-      MvcResult result = this.mockMvc.perform ( get ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID )
-              .contentType ( MediaType.APPLICATION_JSON )
-              .header ( "If-Match", "1" )
-              .content ( CREATE_JSON_CONTENT ) ).andReturn ( );
-
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    JSONParser parser = new JSONParser();
-    JSONObject json = (JSONObject) parser.parse(result.getResponse ().getContentAsString ());
-
-    assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
-
-  }
-//
-//  /**
-//   * This test validates the behaviour of the 'Delete Document' DELETE request
-//   * endpoint.
-//   *
-//   * @throws IOException
-//   * @throws ParseException
-//   */
-  @Test
-  public void deleteDocumentTest() throws Exception {
-//    WebTarget target = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID);
-//    Builder request = target.request().header("If-Match", "1");
-//    String result = request.delete(String.class);
-      MvcResult result = this.mockMvc.perform ( delete ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID )
-              .contentType ( MediaType.APPLICATION_JSON )
-              .header ( "If-Match", "1" )
-              .content ( CREATE_JSON_CONTENT ) ).andReturn ( );
-
-
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    assertTrue("Unexpected Result ", result.getResponse ().getContentAsString ().isEmpty ());
-
-  }
-//
-//  /**
-//   * This test validates the behaviour of the 'Search Documents' GET request
-//   * endpoint.
-//   *
-//   * @throws IOException
-//   * @throws ParseException
-//   */
-  @Ignore
-  @Test
-  public void searchDocumentTest1() throws Exception {
-    // String result = target(INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI + SIMPLE_QUERY).request().get(String.class);
-
-      MvcResult result = this.mockMvc.perform ( get ( INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI + SIMPLE_QUERY )
-              .contentType ( MediaType.APPLICATION_JSON )
-              .header ( "If-Match", "1" )
-              .content ( CREATE_JSON_CONTENT ) ).andReturn ( );
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    JSONParser parser = new JSONParser();
-    JSONObject json = (JSONObject) parser.parse(result.getResponse ().getContentAsString ());
-
-    assertTrue("Unexpected Result ", json.get("totalHits").toString().equals("1"));
-
-
-  }
-//
-  /**
-   * This test validates the behaviour of the 'Search Documents' GET request
-   * endpoint.
-   *
-   * @throws IOException
-   * @throws ParseException
-   */
-  @Test
-  public void searchDocumentTest2() throws Exception {
-    // String result = target(INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI).request().post(Entity.json(COMPLEX_QUERY), String.class);
-
-      MvcResult result = this.mockMvc.perform ( get ( INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI)
-              .contentType ( MediaType.APPLICATION_JSON )
-              .content ( COMPLEX_QUERY ) ).andReturn ( );
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    JSONParser parser = new JSONParser();
-    JSONObject json = (JSONObject) parser.parse(result.getResponse ().getContentAsString ());
-    JSONObject resultJson = (JSONObject) json.get("searchResult");
-
-    assertTrue("Unexpected Result ", resultJson.get("totalHits").toString().equals("1"));
-
-  }
+    /**
+     * This test validates the behaviour of the 'Create Document' POST request endpoint.
+     *
+     * @throws IOException
+     * @throws ParseException
+     */
+    @Test
+    public void createDocumentTest() throws Exception {
+
+        MvcResult result = this.mockMvc.perform(post(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI)
+                .contentType(MediaType.APPLICATION_JSON).content(CREATE_JSON_CONTENT)).andReturn();
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+
+        JSONParser parser = new JSONParser();
+        JSONObject json = (JSONObject) parser.parse(result.getResponse().getContentAsString());
+
+        assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
+    }
+
+    /**
+     * This test validates the behaviour of the 'Create Document' PUT request endpoint.
+     *
+     * @throws IOException
+     * @throws ParseException
+     */
+    @Test
+    public void updateDocumentTest() throws Exception {
+        // WebTarget target = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID);
+        // Builder request = target.request().header("If-Match", "1");
+        // String result = request.put(Entity.json(CREATE_JSON_CONTENT), String.class);
+
+        MvcResult result = this.mockMvc
+                .perform(put(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID)
+                        .contentType(MediaType.APPLICATION_JSON).header("If-Match", "1").content(CREATE_JSON_CONTENT))
+                .andReturn();
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        JSONParser parser = new JSONParser();
+        JSONObject json = (JSONObject) parser.parse(result.getResponse().getContentAsString());
+
+        assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
+    }
+
+    /**
+     * This test validates the behaviour of the 'Get Document' GET request endpoint.
+     *
+     * @throws IOException
+     * @throws ParseException
+     */
+    @Test
+    public void getDocumentTest() throws Exception {
+        // String result = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID).request().get(String.class);
+
+        // MvcResult result = this.mockMvc.perform ( get ( INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID )
+        // ).andReturn ();
+        MvcResult result = this.mockMvc
+                .perform(get(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID)
+                        .contentType(MediaType.APPLICATION_JSON).header("If-Match", "1").content(CREATE_JSON_CONTENT))
+                .andReturn();
+
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        JSONParser parser = new JSONParser();
+        JSONObject json = (JSONObject) parser.parse(result.getResponse().getContentAsString());
+
+        assertTrue("Unexpected Result ", !json.get("etag").toString().isEmpty());
+
+    }
+
+    //
+    // /**
+    // * This test validates the behaviour of the 'Delete Document' DELETE request
+    // * endpoint.
+    // *
+    // * @throws IOException
+    // * @throws ParseException
+    // */
+    @Test
+    public void deleteDocumentTest() throws Exception {
+        // WebTarget target = target(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID);
+        // Builder request = target.request().header("If-Match", "1");
+        // String result = request.delete(String.class);
+        MvcResult result = this.mockMvc
+                .perform(delete(INDEXES_URI + INDEX_NAME + "/" + DOCUMENT_URI + DOC_ID)
+                        .contentType(MediaType.APPLICATION_JSON).header("If-Match", "1").content(CREATE_JSON_CONTENT))
+                .andReturn();
+
+
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        assertTrue("Unexpected Result ", result.getResponse().getContentAsString().isEmpty());
+
+    }
+
+    //
+    // /**
+    // * This test validates the behaviour of the 'Search Documents' GET request
+    // * endpoint.
+    // *
+    // * @throws IOException
+    // * @throws ParseException
+    // */
+    @Ignore
+    @Test
+    public void searchDocumentTest1() throws Exception {
+        // String result = target(INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI +
+        // SIMPLE_QUERY).request().get(String.class);
+
+        MvcResult result = this.mockMvc
+                .perform(get(INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI + SIMPLE_QUERY)
+                        .contentType(MediaType.APPLICATION_JSON).header("If-Match", "1").content(CREATE_JSON_CONTENT))
+                .andReturn();
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        JSONParser parser = new JSONParser();
+        JSONObject json = (JSONObject) parser.parse(result.getResponse().getContentAsString());
+
+        assertTrue("Unexpected Result ", json.get("totalHits").toString().equals("1"));
+
+
+    }
+
+    //
+    /**
+     * This test validates the behaviour of the 'Search Documents' GET request endpoint.
+     *
+     * @throws IOException
+     * @throws ParseException
+     */
+    @Test
+    public void searchDocumentTest2() throws Exception {
+        // String result = target(INDEXES_URI + INDEX_NAME + "/" +
+        // SEARCH_URI).request().post(Entity.json(COMPLEX_QUERY), String.class);
+
+        MvcResult result = this.mockMvc.perform(get(INDEXES_URI + INDEX_NAME + "/" + SEARCH_URI)
+                .contentType(MediaType.APPLICATION_JSON).content(COMPLEX_QUERY)).andReturn();
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        JSONParser parser = new JSONParser();
+        JSONObject json = (JSONObject) parser.parse(result.getResponse().getContentAsString());
+        JSONObject resultJson = (JSONObject) json.get("searchResult");
+
+        assertTrue("Unexpected Result ", resultJson.get("totalHits").toString().equals("1"));
+
+    }
 
 }
index 44ed60c..b18928d 100644 (file)
@@ -32,68 +32,69 @@ import org.junit.Test;
 
 public class DocumentSchemaTest {
 
-  private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/simpleDocument.json";
-  private final String NESTED_DOC_SCHEMA_JSON = "src/test/resources/json/nested-document.json";
-
-
-  /**
-   * This test validates that we convert document definitions back and
-   * forth between json strings and POJOs without any loss of data.
-   *
-   * @throws com.fasterxml.jackson.core.JsonParseException
-   * @throws com.fasterxml.jackson.databind.JsonMappingException
-   * @throws IOException
-   */
-  @Test
-  public void simpleDocSchemaFromJsonFileTest() throws com.fasterxml.jackson.core.JsonParseException, com.fasterxml.jackson.databind.JsonMappingException, IOException {
-
-    // Import our json format document schema from a file.
-    File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
-    String fileString = TestUtils.readFileToString(schemaFile);
-
-    // Unmarshall that to a Java POJO
-    ObjectMapper mapper = new ObjectMapper();
-    DocumentSchema docSchema = mapper.readValue(schemaFile, DocumentSchema.class);
-
-    // Now, for the purposes of comparison, produce a JSON string from
-    // our Java object.
-    String jsonString = mapper.writeValueAsString(docSchema);
-
-    // Assert that the raw JSON that we read from the file matches the marshalled
-    // JSON we generated from our Java object (ie: validate that we didn't lose
-    // anything going in either direction).
-    assertTrue("Marshalled object does not match the original json source that produced it",
-        fileString.equals(jsonString));
-  }
-
-//
-//  /**
-//   * This test validates that we convert document definitions back and
-//   * forth between json strings and POJOs without any loss of data in
-//   * the case of document schemas which contain nested fields.
-//   *
-//   * @throws com.fasterxml.jackson.core.JsonParseException
-//   * @throws com.fasterxml.jackson.databind.JsonMappingException
-//   * @throws IOException
-//   */
-
-  @Test
-  public void nestedDocSchemaFromJsonFileTest() throws JsonParseException, JsonMappingException, IOException {
-
-    // Import our json format document schema from a file.
-    File schemaFile = new File(NESTED_DOC_SCHEMA_JSON);
-    String fileString = TestUtils.readFileToString(schemaFile);
-
-    // Unmarshall that to a Java POJO
-    ObjectMapper mapper = new ObjectMapper();
-    DocumentSchema docSchema = mapper.readValue(schemaFile, DocumentSchema.class);
-
-    String jsonString = mapper.writeValueAsString(docSchema);
-
-    // Assert that the raw JSON that we read from the file matches the marshalled
-    // JSON we generated from our Java object (ie: validate that we didn't lose
-    // anything going in either direction).
-    assertTrue("Marshalled object does not match the original json source that produced it",
-        fileString.equals(jsonString));
-  }
-}
\ No newline at end of file
+    private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/simpleDocument.json";
+    private final String NESTED_DOC_SCHEMA_JSON = "src/test/resources/json/nested-document.json";
+
+
+    /**
+     * This test validates that we convert document definitions back and forth between json strings and POJOs without
+     * any loss of data.
+     *
+     * @throws com.fasterxml.jackson.core.JsonParseException
+     * @throws com.fasterxml.jackson.databind.JsonMappingException
+     * @throws IOException
+     */
+    @Test
+    public void simpleDocSchemaFromJsonFileTest() throws com.fasterxml.jackson.core.JsonParseException,
+            com.fasterxml.jackson.databind.JsonMappingException, IOException {
+
+        // Import our json format document schema from a file.
+        File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
+        String fileString = TestUtils.readFileToString(schemaFile);
+
+        // Unmarshall that to a Java POJO
+        ObjectMapper mapper = new ObjectMapper();
+        DocumentSchema docSchema = mapper.readValue(schemaFile, DocumentSchema.class);
+
+        // Now, for the purposes of comparison, produce a JSON string from
+        // our Java object.
+        String jsonString = mapper.writeValueAsString(docSchema);
+
+        // Assert that the raw JSON that we read from the file matches the marshalled
+        // JSON we generated from our Java object (ie: validate that we didn't lose
+        // anything going in either direction).
+        assertTrue("Marshalled object does not match the original json source that produced it",
+                fileString.equals(jsonString));
+    }
+
+    //
+    // /**
+    // * This test validates that we convert document definitions back and
+    // * forth between json strings and POJOs without any loss of data in
+    // * the case of document schemas which contain nested fields.
+    // *
+    // * @throws com.fasterxml.jackson.core.JsonParseException
+    // * @throws com.fasterxml.jackson.databind.JsonMappingException
+    // * @throws IOException
+    // */
+
+    @Test
+    public void nestedDocSchemaFromJsonFileTest() throws JsonParseException, JsonMappingException, IOException {
+
+        // Import our json format document schema from a file.
+        File schemaFile = new File(NESTED_DOC_SCHEMA_JSON);
+        String fileString = TestUtils.readFileToString(schemaFile);
+
+        // Unmarshall that to a Java POJO
+        ObjectMapper mapper = new ObjectMapper();
+        DocumentSchema docSchema = mapper.readValue(schemaFile, DocumentSchema.class);
+
+        String jsonString = mapper.writeValueAsString(docSchema);
+
+        // Assert that the raw JSON that we read from the file matches the marshalled
+        // JSON we generated from our Java object (ie: validate that we didn't lose
+        // anything going in either direction).
+        assertTrue("Marshalled object does not match the original json source that produced it",
+                fileString.equals(jsonString));
+    }
+}
index efff07b..9fa5fe1 100644 (file)
@@ -71,7 +71,7 @@ public class DocumentTest {
     DocumentApi documentApi;\r
 \r
     @Before\r
-    public void setUp(){\r
+    public void setUp() {\r
         MockitoAnnotations.initMocks(this);\r
         documentApi = new DocumentApi(searchServiceApi);\r
     }\r
@@ -80,14 +80,14 @@ public class DocumentTest {
     public void testDocumentClass_AllMethods() throws JsonProcessingException {\r
         Document doc = new Document();\r
         doc.setField("name-1", "value-1");\r
-        Assert.assertTrue(doc.getFields().size()==1);\r
+        Assert.assertTrue(doc.getFields().size() == 1);\r
         Assert.assertTrue(doc.toJson().contains("value-1"));\r
         Assert.assertNotNull(doc.toString());\r
         Assert.assertTrue(doc.toString().contains("name-1"));\r
     }\r
 \r
     @Test\r
-    public void testProcessPost_NullContent(){\r
+    public void testProcessPost_NullContent() {\r
         String transactionId = "transactionId-1";\r
         String remoteAddr = "http://127.0.0.1";\r
         String content = null;\r
@@ -97,10 +97,10 @@ public class DocumentTest {
         Mockito.when(request.getMethod()).thenReturn("testMethod");\r
         Mockito.when(request.getRequestURL()).thenReturn(new StringBuffer("http://127.0.0.1"));\r
         Mockito.when(request.getRemoteHost()).thenReturn("localhost");\r
-        ResponseEntity<String> response = documentApi.processPost(content, request, headers, httpResponse, "index",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPost(content, request, headers, httpResponse, "index", documentStore);\r
         Assert.assertNotNull(response);\r
-        Assert.assertTrue( HttpStatus.BAD_REQUEST.value () == response.getStatusCodeValue ());\r
+        Assert.assertTrue(HttpStatus.BAD_REQUEST.value() == response.getStatusCodeValue());\r
     }\r
 \r
     @Test\r
@@ -117,12 +117,13 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity response = documentApi.processPost(content, request, headers, httpResponse, "index",\r
-                documentStore);\r
+        ResponseEntity response =\r
+                documentApi.processPost(content, request, headers, httpResponse, "index", documentStore);\r
         Assert.assertNotNull(response);\r
-        Assert.assertTrue(HttpStatus.FORBIDDEN.value () == response.getStatusCodeValue ());\r
+        Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
-//\r
+\r
+    //\r
     @Test\r
     public void testProcessPost_ValidRequest() throws Exception {\r
         String transactionId = "transactionId-1";\r
@@ -144,12 +145,13 @@ public class DocumentTest {
         Mockito.when(documentStore.createDocument(Mockito.anyString(), Mockito.any(DocumentStoreDataEntity.class),\r
                 Mockito.anyBoolean())).thenReturn(result);\r
         Mockito.doNothing().when(httpResponse).setHeader(Mockito.anyString(), Mockito.anyString());\r
-        ResponseEntity<String> response = documentApi.processPost(content, request, headers, httpResponse, "index",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPost(content, request, headers, httpResponse, "index", documentStore);\r
         Assert.assertNotNull(response);\r
-        Assert.assertTrue(HttpStatus.INTERNAL_SERVER_ERROR.value () == response.getStatusCodeValue ());\r
+        Assert.assertTrue(HttpStatus.INTERNAL_SERVER_ERROR.value() == response.getStatusCodeValue());\r
     }\r
-//\r
+\r
+    //\r
     @Test\r
     public void testProcessSearchWithGet_Created() throws Exception {\r
         String transactionId = "transactionId-1";\r
@@ -170,13 +172,14 @@ public class DocumentTest {
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(true);\r
         Mockito.when(documentStore.search(Mockito.anyString(), Mockito.anyString())).thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processSearchWithGet(content, request, headers, "index-1",\r
-                "query-text", documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processSearchWithGet(content, request, headers, "index-1", "query-text", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.CREATED.value() == response.getStatusCodeValue());\r
 \r
     }\r
-//\r
+\r
+    //\r
     @Test\r
     public void testProcessSearchWithGet_ValidateThrowsException() throws Exception {\r
         String transactionId = "transactionId-1";\r
@@ -197,13 +200,14 @@ public class DocumentTest {
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
         Mockito.when(documentStore.search(Mockito.anyString(), Mockito.anyString())).thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processSearchWithGet(content, request, headers, "index-1",\r
-                "query-text", documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processSearchWithGet(content, request, headers, "index-1", "query-text", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
 \r
     }\r
-//\r
+\r
+    //\r
     @Test\r
     public void testProcessSearchWithGet_ValidateIsFalse() throws Exception {\r
         String transactionId = "transactionId-1";\r
@@ -224,8 +228,8 @@ public class DocumentTest {
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
         Mockito.when(documentStore.search(Mockito.anyString(), Mockito.anyString())).thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processSearchWithGet(content, request, headers, "index-1",\r
-                "query-text", documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processSearchWithGet(content, request, headers, "index-1", "query-text", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
 \r
@@ -251,15 +255,15 @@ public class DocumentTest {
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(true);\r
         Mockito.when(documentStore.search(Mockito.anyString(), Mockito.anyString())).thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processSearchWithGet(content, request, headers, "index-1",\r
-                "query-text", documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processSearchWithGet(content, request, headers, "index-1", "query-text", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FOUND.value() == response.getStatusCodeValue());\r
 \r
     }\r
 \r
     @Test\r
-    public void testProcessPut_NullContent(){\r
+    public void testProcessPut_NullContent() {\r
         String transactionId = "transactionId-1";\r
         String remoteAddr = "http://127.0.0.1";\r
         String content = null;\r
@@ -269,8 +273,8 @@ public class DocumentTest {
         Mockito.when(request.getMethod()).thenReturn("testMethod");\r
         Mockito.when(request.getRequestURL()).thenReturn(new StringBuffer("http://127.0.0.1"));\r
         Mockito.when(request.getRemoteHost()).thenReturn("localhost");\r
-        ResponseEntity<String>response = documentApi.processPut(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPut(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.BAD_REQUEST.value() == response.getStatusCodeValue());\r
     }\r
@@ -289,8 +293,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = documentApi.processPut(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPut(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -309,8 +313,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = documentApi.processPut(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPut(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -336,8 +340,8 @@ public class DocumentTest {
                 .thenReturn(true);\r
         Mockito.when(documentStore.updateDocument(Mockito.anyString(), Mockito.any(DocumentStoreDataEntity.class),\r
                 Mockito.anyBoolean())).thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processPut(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processPut(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FOUND.value() == response.getStatusCodeValue());\r
     }\r
@@ -356,8 +360,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = documentApi.processDelete(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processDelete(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -376,8 +380,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = documentApi.processDelete(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processDelete(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -403,8 +407,8 @@ public class DocumentTest {
                 .thenReturn(true);\r
         Mockito.when(documentStore.deleteDocument(Mockito.anyString(), Mockito.any(DocumentStoreDataEntity.class)))\r
                 .thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processDelete(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processDelete(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FOUND.value() == response.getStatusCodeValue());\r
     }\r
@@ -423,8 +427,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = documentApi.processGet(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processGet(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -443,8 +447,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = documentApi.processGet(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processGet(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -469,14 +473,14 @@ public class DocumentTest {
                 .thenReturn(true);\r
         Mockito.when(documentStore.getDocument(Mockito.anyString(), Mockito.any(DocumentStoreDataEntity.class)))\r
                 .thenReturn(result);\r
-        ResponseEntity<String>response = documentApi.processGet(content, request, headers, httpResponse, "index","id-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.processGet(content, request, headers, httpResponse, "index", "id-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FOUND.value() == response.getStatusCodeValue());\r
     }\r
 \r
     @Test\r
-    public void testQueryWithGetWithPayload_NullContent(){\r
+    public void testQueryWithGetWithPayload_NullContent() {\r
         String transactionId = "transactionId-1";\r
         String remoteAddr = "http://127.0.0.1";\r
         String content = null;\r
@@ -486,8 +490,8 @@ public class DocumentTest {
         Mockito.when(request.getMethod()).thenReturn("testMethod");\r
         Mockito.when(request.getRequestURL()).thenReturn(new StringBuffer("http://127.0.0.1"));\r
         Mockito.when(request.getRemoteHost()).thenReturn("localhost");\r
-        ResponseEntity<String>response = documentApi.queryWithGetWithPayload(content, request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.queryWithGetWithPayload(content, request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.BAD_REQUEST.value() == response.getStatusCodeValue());\r
     }\r
@@ -506,8 +510,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = documentApi.queryWithGetWithPayload(content, request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.queryWithGetWithPayload(content, request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -526,8 +530,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = documentApi.queryWithGetWithPayload(content, request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                documentApi.queryWithGetWithPayload(content, request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -545,8 +549,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = indexApi.processCreateIndex("document-1", request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                indexApi.processCreateIndex("document-1", request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -564,8 +568,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = indexApi.processCreateIndex("document-1", request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                indexApi.processCreateIndex("document-1", request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -574,7 +578,7 @@ public class DocumentTest {
     public void testCreateProcessIndex_IndexApi_NullDocument() throws Exception {\r
         String transactionId = "transactionId-1";\r
         String remoteAddr = "http://127.0.0.1";\r
-        String documentSchema= null;\r
+        String documentSchema = null;\r
         // Mockito.when(headers.getRequestHeaders()).thenReturn(multivaluedMap);;\r
         Mockito.when(multivaluedMap.getFirst(Mockito.anyString())).thenReturn(transactionId);\r
         Mockito.when(request.getRemoteAddr()).thenReturn(remoteAddr);\r
@@ -584,8 +588,8 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(true);\r
-        ResponseEntity<String>response = indexApi.processCreateIndex(documentSchema, request, headers, "index-1",\r
-                documentStore);\r
+        ResponseEntity<String> response =\r
+                indexApi.processCreateIndex(documentSchema, request, headers, "index-1", documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.INTERNAL_SERVER_ERROR.value() == response.getStatusCodeValue());\r
     }\r
@@ -603,7 +607,7 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(false);\r
-        ResponseEntity<String>response = indexApi.processDelete("document-1", request, headers, documentStore);\r
+        ResponseEntity<String> response = indexApi.processDelete("document-1", request, headers, documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -621,7 +625,7 @@ public class DocumentTest {
         Mockito.when(searchServiceApi.validateRequest(Mockito.any(HttpHeaders.class),\r
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenThrow(IllegalArgumentException.class);\r
-        ResponseEntity<String>response = indexApi.processDelete("document-1", request, headers, documentStore);\r
+        ResponseEntity<String> response = indexApi.processDelete("document-1", request, headers, documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.FORBIDDEN.value() == response.getStatusCodeValue());\r
     }\r
@@ -640,7 +644,7 @@ public class DocumentTest {
                 Mockito.any(HttpServletRequest.class), Mockito.any(ApiUtils.Action.class), Mockito.anyString()))\r
                 .thenReturn(true);\r
         Mockito.when(documentStore.deleteIndex(Mockito.anyString())).thenThrow(DocumentStoreOperationException.class);\r
-        ResponseEntity<String>response = indexApi.processDelete("document-1", request, headers, documentStore);\r
+        ResponseEntity<String> response = indexApi.processDelete("document-1", request, headers, documentStore);\r
         Assert.assertNotNull(response);\r
         Assert.assertTrue(HttpStatus.INTERNAL_SERVER_ERROR.value() == response.getStatusCodeValue());\r
     }\r
index 0f5932b..cd33edd 100644 (file)
@@ -50,238 +50,231 @@ import org.springframework.test.web.servlet.MvcResult;
 
 
 /**
- * This suite of tests is intended to exercise the set of REST endpoints
- * associated with manipulating Indexes in the document store.
+ * This suite of tests is intended to exercise the set of REST endpoints associated with manipulating Indexes in the
+ * document store.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
 @AutoConfigureMockMvc
 public class IndexApiTest {
 
-  private final String TOP_URI = "/test/indexes/";
-  private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/simpleDocument.json";
-  private final String DYNAMIC_INDEX_PAYLOAD = "src/test/resources/json/dynamicIndex.json";
-
-  @Autowired
-  private MockMvc mockMvc;
-
-//
-//  @Override
-//  protected Application configure() {
-//
-//    // Make sure that our test endpoint is on the resource path
-//    // for Jersey Test.
-//    return new ResourceConfig(SearchServiceApiHarness.class);
-//  }
-//
-//
-  
-  @Before
-  public void setup() throws Exception {
-         System.setProperty("CONFIG_HOME", System.getProperty("user.dir")+ File.separator + "src/test/resources/json");
-  }
-
-  /**
-   * Tests the dynamic shcema creation flow that send the request
-   * JSON to the data store without any JSON validation against a schema
-   *
-   * @throws IOException
-   */
-  @Test
-  public void createDynamicIndexTest() throws Exception {
-    String indexName = "super-ultra-dynamic-mega-index";
-    String dynamicUri = TOP_URI + "dynamic/";
-    File indexFile = new File(DYNAMIC_INDEX_PAYLOAD);
-    String indexPayload = TestUtils.readFileToString(indexFile);
-
-//    String result = target(dynamicUri + indexName).request().put(Entity.json(indexPayload), String.class);
-    MvcResult result = this.mockMvc.perform ( put (dynamicUri + indexName)
-            .contentType ( MediaType.APPLICATION_JSON ).content ( indexPayload )).andReturn ();
-
-    assertEquals(indexPayload, result.getResponse ().getContentAsString ());
-  }
-
-
-  /**
-   * This test validates that the {@link IndexApi} is able to convert {@link OperationResult}
-   * obects to standard REST {@link ResponseEntity} objects.
-   *
-   * @throws FileNotFoundException
-   * @throws IOException
-   * @throws DocumentStoreOperationException
-   */
-  @Test
-  public void responseFromOperationResultTest() throws FileNotFoundException, IOException, DocumentStoreOperationException {
-
-    int SUCCESS_RESULT_CODE = 200;
-    String SUCCESS_RESULT_STRING = "Everything is ay-okay!";
-    int FAILURE_RESULT_CODE = 500;
-    String FAILURE_CAUSE_STRING = "Something went wrong!";
-
-
-    // Create an instance of the index API endpoint that we will test against.
-    // We will override the init() method because we don't want it to try to
-    // connect to a real document store.
-    IndexApi indexApi = new IndexApi(new SearchServiceApiHarness()) {
-      @Override
-      public void init() { /* do nothing */ }
-    };
-//
-    //Construct an OperationResult instance with a success code and string.
-    OperationResult successResult = new OperationResult();
-    successResult.setResultCode(SUCCESS_RESULT_CODE);
-    successResult.setResult(SUCCESS_RESULT_STRING);
-
-    // Convert our success OperationResult to a standard REST Response...
-    ResponseEntity successResponse = indexApi.responseFromOperationResult(successResult);
-
-    // ...and validate that the Response is correctly populated.
-    assertEquals("Unexpected result code", SUCCESS_RESULT_CODE, successResponse.getStatusCodeValue ());
-    assertTrue("Incorrect result string", ((String) successResponse.getBody ()).equals(SUCCESS_RESULT_STRING));
-
-    // Construct an OperationResult instance with an error code and failure
-    // cause.
-    OperationResult failureResult = new OperationResult();
-    failureResult.setResultCode(FAILURE_RESULT_CODE);
-    failureResult.setFailureCause(FAILURE_CAUSE_STRING);
-
-    // Convert our failure OperationResult to a standard REST Response...
-    ResponseEntity failureResponse = indexApi.responseFromOperationResult(failureResult);
-
-    // ...and validate that the Response is correctly populated.
-    assertEquals("Unexpected result code", FAILURE_RESULT_CODE, failureResponse.getStatusCodeValue ());
-    assertTrue("Incorrect result string", ((String) failureResponse.getBody ()).equals(FAILURE_CAUSE_STRING));
-  }
-//
-//
-//  /**
-//   * This test validates the behaviour of the 'Create Index' POST request
-//   * endpoint.
-//   *
-//   * @throws IOException
-//   */
-  @Test
-  public void createIndexTest() throws Exception {
-
-    String INDEX_NAME = "test-index";
-    String EXPECTED_SETTINGS =
-        "{\"analysis\": "
-            + "{\"filter\": "
-            + "{\"nGram_filter\": { "
-            + "\"type\": \"nGram\", "
-            + "\"min_gram\": 1, "
-            + "\"max_gram\": 50, "
-            + "\"token_chars\": [ \"letter\", \"digit\", \"punctuation\", \"symbol\" ]}},"
-            + "\"analyzer\": {"
-            + "\"nGram_analyzer\": "
-            + "{\"type\": \"custom\","
-            + "\"tokenizer\": \"whitespace\","
-            + "\"filter\": [\"lowercase\",\"asciifolding\",\"nGram_filter\"]},"
-            + "\"whitespace_analyzer\": "
-            + "{\"type\": \"custom\","
-            + "\"tokenizer\": \"whitespace\","
-            + "\"filter\": [\"lowercase\",\"asciifolding\"]}}}}";
-    String EXPECTED_MAPPINGS =
-        "{\"dynamic_templates\":[{\"strings\":{\"match_mapping_type\":\"string\",\"match\":\"*\",\"mapping\":{\"type\":\"text\",\"fielddata\":true}}}]"
-        + ",\"properties\": {"
-            + "\"serverName\": {"
-            + "\"type\": \"string\", "
-            + "\"index\": \"analyzed\", "
-            + "\"search_analyzer\": \"whitespace\"}, "
-            + "\"serverComplex\": {"
-            + "\"type\": \"string\", "
-            + "\"search_analyzer\": \"whitespace\"}}}";
-
-    // Read a valid document schema from a json file.
-    File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
-    String documentJson = TestUtils.readFileToString(schemaFile);
-
-    // Send a request to our 'create index' endpoint, using the schema
-    // which we just read.
-    // String result = target(TOP_URI + INDEX_NAME).request().put(Entity.json(documentJson), String.class);
-    MvcResult result = this.mockMvc.perform ( put ( TOP_URI + INDEX_NAME ).contentType ( MediaType.APPLICATION_JSON )
-            .content ( documentJson) ).andReturn ();
-
-
-    // Our stub document store DAO returns the parameters that it was
-    // passed as the result string, so now we can validate that our
-    // endpoint invoked it with the correct parameters.
-    String[] tokenizedResult = result.getResponse ().getContentAsString ().split("@");
-    assertTrue("Unexpected Index Name '" + tokenizedResult[0] + "' passed to doc store DAO",
-        tokenizedResult[0].equals(INDEX_NAME));
-    assertTrue("Unexpected settings string '" + tokenizedResult[1] + "' passed to doc store DAO",
-        tokenizedResult[1].equals(EXPECTED_SETTINGS));
-    assertTrue("Unexpected mappings string '" + tokenizedResult[2] + "' passed to doc store DAO",
-        tokenizedResult[2].equals(EXPECTED_MAPPINGS));
-  }
-//
-//
-  /**
-   * This test validates that a 'create index' request with an improperly
-   * formatted document schema as the payload will result in an
-   * appropriate error being returned from the endpoint.
-   */
-  @Test
-  public void createIndexWithMangledSchemaTest() throws Exception {
-
-    String INDEX_NAME = "test-index";
-    int BAD_REQUEST_CODE = 400;
-
-    String invalidSchemaString = "this is definitely not json!";
-
-    // ResponseEntity result = target(TOP_URI + INDEX_NAME).request().put(Entity.json(invalidSchemaString), ResponseEntity.class);
-    MvcResult result = this.mockMvc.perform ( put ( TOP_URI + INDEX_NAME ).contentType ( MediaType.APPLICATION_JSON )
-            .content ( invalidSchemaString) ).andReturn ();
-
-    assertEquals("Invalid document schema should result in a 400 error",
-        BAD_REQUEST_CODE, result.getResponse ().getStatus ());
-  }
-//
-//
-  /**
-   * This test validates the behaviour of the 'Delete Index' end point.
-   */
-  @Test
-  public void deleteIndexTest() throws Exception {
-
-    String INDEX_NAME = "test-index";
-
-    // Send a request to the 'delete index' endpoint.
-    // String result = target(TOP_URI + INDEX_NAME).request().delete(String.class);
-
-    MvcResult result = this.mockMvc.perform ( delete ( TOP_URI + INDEX_NAME )
-            .contentType ( MediaType.APPLICATION_JSON )
-            .header ( "If-Match", "1" )
-            .content ( "Some Json" ) ).andReturn ( );
-
-    // Validate that the expected parameters were passed to the document
-    // store DAO.
-    assertTrue("Unexpected index name '" + result.getResponse ().getContentAsString () + "' passed to doc store DAO",
-        result.getResponse ().getContentAsString ().equals(INDEX_NAME));
-  }
-//
-//
-//  /**
-//   * This test validates that attempting to delete an index which does not
-//   * exist results in a 404 error.
-//   */
-  @Test
-  public void deleteIndexDoesNotExistTest() throws Exception {
-
-    int NOT_FOUND_CODE = 404;
-
-    // Send a request to the 'delete index' endpoint, specifying a
-    // non-existent index.
-    // ResponseEntity result = target(TOP_URI + StubEsController.DOES_NOT_EXIST_INDEX).request().delete(ResponseEntity.class);
-
-    MvcResult result = this.mockMvc.perform ( delete ( TOP_URI + StubEsController.DOES_NOT_EXIST_INDEX )
-            .contentType ( MediaType.APPLICATION_JSON )
-            .header ( "If-Match", "1" )
-            .content ( "Some Json" ) ).andReturn ( );
-
-
-    // Validate that a 404 error code is returned from the end point.
-    assertEquals("Deleting an index which does not exist should result in a 404 error",
-        NOT_FOUND_CODE, result.getResponse ().getStatus ());
-  }
+    private final String TOP_URI = "/test/indexes/";
+    private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/simpleDocument.json";
+    private final String DYNAMIC_INDEX_PAYLOAD = "src/test/resources/json/dynamicIndex.json";
+
+    @Autowired
+    private MockMvc mockMvc;
+
+    //
+    // @Override
+    // protected Application configure() {
+    //
+    // // Make sure that our test endpoint is on the resource path
+    // // for Jersey Test.
+    // return new ResourceConfig(SearchServiceApiHarness.class);
+    // }
+    //
+    //
+
+    @Before
+    public void setup() throws Exception {
+        System.setProperty("CONFIG_HOME", System.getProperty("user.dir") + File.separator + "src/test/resources/json");
+    }
+
+    /**
+     * Tests the dynamic shcema creation flow that send the request JSON to the data store without any JSON validation
+     * against a schema
+     *
+     * @throws IOException
+     */
+    @Test
+    public void createDynamicIndexTest() throws Exception {
+        String indexName = "super-ultra-dynamic-mega-index";
+        String dynamicUri = TOP_URI + "dynamic/";
+        File indexFile = new File(DYNAMIC_INDEX_PAYLOAD);
+        String indexPayload = TestUtils.readFileToString(indexFile);
+
+        // String result = target(dynamicUri + indexName).request().put(Entity.json(indexPayload), String.class);
+        MvcResult result = this.mockMvc
+                .perform(put(dynamicUri + indexName).contentType(MediaType.APPLICATION_JSON).content(indexPayload))
+                .andReturn();
+
+        assertEquals(indexPayload, result.getResponse().getContentAsString());
+    }
+
+
+    /**
+     * This test validates that the {@link IndexApi} is able to convert {@link OperationResult} obects to standard REST
+     * {@link ResponseEntity} objects.
+     *
+     * @throws FileNotFoundException
+     * @throws IOException
+     * @throws DocumentStoreOperationException
+     */
+    @Test
+    public void responseFromOperationResultTest()
+            throws FileNotFoundException, IOException, DocumentStoreOperationException {
+
+        int SUCCESS_RESULT_CODE = 200;
+        String SUCCESS_RESULT_STRING = "Everything is ay-okay!";
+        int FAILURE_RESULT_CODE = 500;
+        String FAILURE_CAUSE_STRING = "Something went wrong!";
+
+
+        // Create an instance of the index API endpoint that we will test against.
+        // We will override the init() method because we don't want it to try to
+        // connect to a real document store.
+        IndexApi indexApi = new IndexApi(new SearchServiceApiHarness()) {
+            @Override
+            public void init() { /* do nothing */ }
+        };
+        //
+        // Construct an OperationResult instance with a success code and string.
+        OperationResult successResult = new OperationResult();
+        successResult.setResultCode(SUCCESS_RESULT_CODE);
+        successResult.setResult(SUCCESS_RESULT_STRING);
+
+        // Convert our success OperationResult to a standard REST Response...
+        ResponseEntity successResponse = indexApi.responseFromOperationResult(successResult);
+
+        // ...and validate that the Response is correctly populated.
+        assertEquals("Unexpected result code", SUCCESS_RESULT_CODE, successResponse.getStatusCodeValue());
+        assertTrue("Incorrect result string", ((String) successResponse.getBody()).equals(SUCCESS_RESULT_STRING));
+
+        // Construct an OperationResult instance with an error code and failure
+        // cause.
+        OperationResult failureResult = new OperationResult();
+        failureResult.setResultCode(FAILURE_RESULT_CODE);
+        failureResult.setFailureCause(FAILURE_CAUSE_STRING);
+
+        // Convert our failure OperationResult to a standard REST Response...
+        ResponseEntity failureResponse = indexApi.responseFromOperationResult(failureResult);
+
+        // ...and validate that the Response is correctly populated.
+        assertEquals("Unexpected result code", FAILURE_RESULT_CODE, failureResponse.getStatusCodeValue());
+        assertTrue("Incorrect result string", ((String) failureResponse.getBody()).equals(FAILURE_CAUSE_STRING));
+    }
+
+    //
+    //
+    // /**
+    // * This test validates the behaviour of the 'Create Index' POST request
+    // * endpoint.
+    // *
+    // * @throws IOException
+    // */
+    @Test
+    public void createIndexTest() throws Exception {
+
+        String INDEX_NAME = "test-index";
+        String EXPECTED_SETTINGS = "{\"analysis\": " + "{\"filter\": " + "{\"nGram_filter\": { "
+                + "\"type\": \"nGram\", " + "\"min_gram\": 1, " + "\"max_gram\": 50, "
+                + "\"token_chars\": [ \"letter\", \"digit\", \"punctuation\", \"symbol\" ]}}," + "\"analyzer\": {"
+                + "\"nGram_analyzer\": " + "{\"type\": \"custom\"," + "\"tokenizer\": \"whitespace\","
+                + "\"filter\": [\"lowercase\",\"asciifolding\",\"nGram_filter\"]}," + "\"whitespace_analyzer\": "
+                + "{\"type\": \"custom\"," + "\"tokenizer\": \"whitespace\","
+                + "\"filter\": [\"lowercase\",\"asciifolding\"]}}}}";
+        String EXPECTED_MAPPINGS =
+                "{\"dynamic_templates\":[{\"strings\":{\"match_mapping_type\":\"string\",\"match\":\"*\",\"mapping\":{\"type\":\"text\",\"fielddata\":true}}}]"
+                        + ",\"properties\": {" + "\"serverName\": {" + "\"type\": \"string\", "
+                        + "\"index\": \"analyzed\", " + "\"search_analyzer\": \"whitespace\"}, "
+                        + "\"serverComplex\": {" + "\"type\": \"string\", " + "\"search_analyzer\": \"whitespace\"}}}";
+
+        // Read a valid document schema from a json file.
+        File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
+        String documentJson = TestUtils.readFileToString(schemaFile);
+
+        // Send a request to our 'create index' endpoint, using the schema
+        // which we just read.
+        // String result = target(TOP_URI + INDEX_NAME).request().put(Entity.json(documentJson), String.class);
+        MvcResult result = this.mockMvc
+                .perform(put(TOP_URI + INDEX_NAME).contentType(MediaType.APPLICATION_JSON).content(documentJson))
+                .andReturn();
+
+
+        // Our stub document store DAO returns the parameters that it was
+        // passed as the result string, so now we can validate that our
+        // endpoint invoked it with the correct parameters.
+        String[] tokenizedResult = result.getResponse().getContentAsString().split("@");
+        assertTrue("Unexpected Index Name '" + tokenizedResult[0] + "' passed to doc store DAO",
+                tokenizedResult[0].equals(INDEX_NAME));
+        assertTrue("Unexpected settings string '" + tokenizedResult[1] + "' passed to doc store DAO",
+                tokenizedResult[1].equals(EXPECTED_SETTINGS));
+        assertTrue("Unexpected mappings string '" + tokenizedResult[2] + "' passed to doc store DAO",
+                tokenizedResult[2].equals(EXPECTED_MAPPINGS));
+    }
+
+    //
+    //
+    /**
+     * This test validates that a 'create index' request with an improperly formatted document schema as the payload
+     * will result in an appropriate error being returned from the endpoint.
+     */
+    @Test
+    public void createIndexWithMangledSchemaTest() throws Exception {
+
+        String INDEX_NAME = "test-index";
+        int BAD_REQUEST_CODE = 400;
+
+        String invalidSchemaString = "this is definitely not json!";
+
+        // ResponseEntity result = target(TOP_URI + INDEX_NAME).request().put(Entity.json(invalidSchemaString),
+        // ResponseEntity.class);
+        MvcResult result = this.mockMvc
+                .perform(put(TOP_URI + INDEX_NAME).contentType(MediaType.APPLICATION_JSON).content(invalidSchemaString))
+                .andReturn();
+
+        assertEquals("Invalid document schema should result in a 400 error", BAD_REQUEST_CODE,
+                result.getResponse().getStatus());
+    }
+
+    //
+    //
+    /**
+     * This test validates the behaviour of the 'Delete Index' end point.
+     */
+    @Test
+    public void deleteIndexTest() throws Exception {
+
+        String INDEX_NAME = "test-index";
+
+        // Send a request to the 'delete index' endpoint.
+        // String result = target(TOP_URI + INDEX_NAME).request().delete(String.class);
+
+        MvcResult result = this.mockMvc.perform(delete(TOP_URI + INDEX_NAME).contentType(MediaType.APPLICATION_JSON)
+                .header("If-Match", "1").content("Some Json")).andReturn();
+
+        // Validate that the expected parameters were passed to the document
+        // store DAO.
+        assertTrue("Unexpected index name '" + result.getResponse().getContentAsString() + "' passed to doc store DAO",
+                result.getResponse().getContentAsString().equals(INDEX_NAME));
+    }
+
+    //
+    //
+    // /**
+    // * This test validates that attempting to delete an index which does not
+    // * exist results in a 404 error.
+    // */
+    @Test
+    public void deleteIndexDoesNotExistTest() throws Exception {
+
+        int NOT_FOUND_CODE = 404;
+
+        // Send a request to the 'delete index' endpoint, specifying a
+        // non-existent index.
+        // ResponseEntity result = target(TOP_URI +
+        // StubEsController.DOES_NOT_EXIST_INDEX).request().delete(ResponseEntity.class);
+
+        MvcResult result =
+                this.mockMvc
+                        .perform(delete(TOP_URI + StubEsController.DOES_NOT_EXIST_INDEX)
+                                .contentType(MediaType.APPLICATION_JSON).header("If-Match", "1").content("Some Json"))
+                        .andReturn();
+
+
+        // Validate that a 404 error code is returned from the end point.
+        assertEquals("Deleting an index which does not exist should result in a 404 error", NOT_FOUND_CODE,
+                result.getResponse().getStatus());
+    }
 }
index 0621cd8..072b090 100644 (file)
@@ -20,7 +20,7 @@
  */
 package org.onap.aai.sa.rest;
 
- import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
@@ -38,172 +38,128 @@ import org.springframework.web.bind.annotation.RestController;
 public class SearchServiceApiHarness extends SearchServiceApi {
 
 
-  public static final String FAIL_AUTHENTICATION_TRIGGER = "FAIL AUTHENTICATION";
-
-  private boolean authenticationShouldSucceed = true;
-
-
-  /**
-   * Performs all one-time initialization required for the end point.
-   */
-  @Override
-  public void init() {
-
-    // Instantiate our Document Store DAO.
-    documentStore = new StubEsController();
-  }
-
-  @Override
-  @RequestMapping (value="/indexes/dynamic/{index}",
-          method = RequestMethod.PUT,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processCreateDynamicIndex(@RequestBody String requestBody,
-                                            HttpServletRequest request,
-                                            @RequestHeader HttpHeaders headers,
-                                            @PathVariable("index") String index) {
-
-    return super.processCreateDynamicIndex(requestBody, request, headers, index);
-  }
-
-
-  @Override
-  @RequestMapping (value="/indexes/{index}",
-          method = RequestMethod.PUT,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processCreateIndex(@RequestBody  String requestBody,
-                                     HttpServletRequest request,
-                                     @RequestHeader HttpHeaders headers,
-                                     @PathVariable("index") String index) {
-
-    return super.processCreateIndex(requestBody, request, headers, index);
-  }
-
-  @Override
-  @RequestMapping (value="/indexes/{index}",
-          method = RequestMethod.DELETE,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processDeleteIndex(HttpServletRequest request,
-                                     @RequestHeader HttpHeaders headers,
-                                     @PathVariable("index") String index) {
-
-    return super.processDeleteIndex(request, headers, index);
-  }
-
-  @Override
-  @RequestMapping (value="/indexes/{index}/documents/{id}",
-          method = RequestMethod.GET)
-  public ResponseEntity<String> processGetDocument(
-          HttpServletRequest request,
-          HttpServletResponse httpResponse,
-          @RequestHeader HttpHeaders headers,
-          @PathVariable("index") String index,
-          @PathVariable("id") String id) {
-
-    return super.processGetDocument(request, httpResponse, headers, index, id);
-  }
-
-  @Override
-  @RequestMapping (value="/indexes/{index}/documents",
-                   method = RequestMethod.POST,
-                   consumes = { "application/json", "application/xml" })
-  public ResponseEntity<String> processCreateDocWithoutId(@RequestBody String requestBody,
-                                                          HttpServletRequest request,
-                                                          HttpServletResponse httpResponse,
-                                                          @RequestHeader HttpHeaders headers,
-                                                          @PathVariable("index") String index) {
-
-    return super.processCreateDocWithoutId(requestBody, request, httpResponse, headers, index);
-  }
-
-  @Override
-  @RequestMapping (value="/indexes/{index}/documents/{id}",
-          method = RequestMethod.PUT,
-          consumes = { "application/json", "application/xml" })
-  public ResponseEntity<String> processUpsertDoc(@RequestBody  String requestBody,
-                                    HttpServletRequest request,
-                                   HttpServletResponse httpResponse,
-                                   @RequestHeader  HttpHeaders headers,
-                                   @PathVariable("index") String index,
-                                   @PathVariable("id") String id) {
-
-    return super.processUpsertDoc(requestBody, request, httpResponse, headers, index, id);
-  }
-
-  @Override
-  @RequestMapping(value = "/indexes/{index}/documents/{id}",
-          method = RequestMethod.DELETE,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processDeleteDoc(HttpServletRequest request,
-                                   HttpServletResponse httpResponse,
-                                   @RequestHeader HttpHeaders headers,
-                                   @PathVariable("index") String index,
-                                   @PathVariable("id") String id) {
-
-    return super.processDeleteDoc(request, httpResponse, headers, index, id);
-  }
-
-  @Override
-  @RequestMapping(value = "/indexes/{index}/query/{queryText}",
-          method = RequestMethod.GET)
-  public ResponseEntity<String> processInlineQuery(HttpServletRequest request,
-                                     @RequestHeader HttpHeaders headers,
-                                     @PathVariable("index") String index,
-                                     @PathVariable("queryText") String queryText) {
-
-    return super.processInlineQuery(request, headers, index, queryText);
-  }
-
-  @Override
-  @RequestMapping(value = "/indexes/{index}/query",
-          method = RequestMethod.GET,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processQueryWithGet(@RequestBody String requestBody,
-                                                    HttpServletRequest request,
-                                      @RequestHeader HttpHeaders headers,
-                                      @PathVariable("index") String index) {
-
-    return super.processQueryWithGet(requestBody, request, headers, index);
-  }
-
-  @Override
-  @RequestMapping(value = "/indexes/{index}/query",
-          method = RequestMethod.POST,
-          consumes = { "application/json"})
-  public ResponseEntity<String> processQuery(@RequestBody String requestBody,
-                                             HttpServletRequest request,
-                                             @RequestHeader HttpHeaders headers,
-                                             @PathVariable("index") String index) {
-
-    return super.processQuery(requestBody, request, headers, index);
-  }
-
-  @Override
-  @RequestMapping(value = "/bulk",
-                  method = RequestMethod.POST,
-                  consumes = { "application/json"},
-                  produces = { "application/json"})
-  public ResponseEntity<String> processBulkRequest(@RequestBody String requestBody,
-                                                   HttpServletRequest request,
-                                                   @RequestHeader HttpHeaders headers) {
-
-    // If the operations string contains a special keyword, set the
-    // harness to fail the authentication validation.
-    if (requestBody.contains(FAIL_AUTHENTICATION_TRIGGER)) {
-      authenticationShouldSucceed = false;
+    public static final String FAIL_AUTHENTICATION_TRIGGER = "FAIL AUTHENTICATION";
+
+    private boolean authenticationShouldSucceed = true;
+
+
+    /**
+     * Performs all one-time initialization required for the end point.
+     */
+    @Override
+    public void init() {
+
+        // Instantiate our Document Store DAO.
+        documentStore = new StubEsController();
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/dynamic/{index}", method = RequestMethod.PUT, consumes = {"application/json"})
+    public ResponseEntity<String> processCreateDynamicIndex(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        return super.processCreateDynamicIndex(requestBody, request, headers, index);
     }
 
-    // Just pass the request up to the parent, since that is the code
-    // that we really want to test.
-    //return super.processPost(operations, request, headers, index);
-    return super.processBulkRequest(requestBody, request, headers);
-  }
 
-  @Override
-  protected boolean validateRequest(HttpHeaders headers,
-                                    HttpServletRequest req,
-                                    ApiUtils.Action action,
-                                    String authPolicyFunctionName) throws Exception {
+    @Override
+    @RequestMapping(value = "/indexes/{index}", method = RequestMethod.PUT, consumes = {"application/json"})
+    public ResponseEntity<String> processCreateIndex(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        return super.processCreateIndex(requestBody, request, headers, index);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}", method = RequestMethod.DELETE, consumes = {"application/json"})
+    public ResponseEntity<String> processDeleteIndex(HttpServletRequest request, @RequestHeader HttpHeaders headers,
+            @PathVariable("index") String index) {
+
+        return super.processDeleteIndex(request, headers, index);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.GET)
+    public ResponseEntity<String> processGetDocument(HttpServletRequest request, HttpServletResponse httpResponse,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index, @PathVariable("id") String id) {
+
+        return super.processGetDocument(request, httpResponse, headers, index, id);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/documents", method = RequestMethod.POST,
+            consumes = {"application/json", "application/xml"})
+    public ResponseEntity<String> processCreateDocWithoutId(@RequestBody String requestBody, HttpServletRequest request,
+            HttpServletResponse httpResponse, @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        return super.processCreateDocWithoutId(requestBody, request, httpResponse, headers, index);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.PUT,
+            consumes = {"application/json", "application/xml"})
+    public ResponseEntity<String> processUpsertDoc(@RequestBody String requestBody, HttpServletRequest request,
+            HttpServletResponse httpResponse, @RequestHeader HttpHeaders headers, @PathVariable("index") String index,
+            @PathVariable("id") String id) {
 
-    return authenticationShouldSucceed;
-  }
+        return super.processUpsertDoc(requestBody, request, httpResponse, headers, index, id);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/documents/{id}", method = RequestMethod.DELETE,
+            consumes = {"application/json"})
+    public ResponseEntity<String> processDeleteDoc(HttpServletRequest request, HttpServletResponse httpResponse,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index, @PathVariable("id") String id) {
+
+        return super.processDeleteDoc(request, httpResponse, headers, index, id);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/query/{queryText}", method = RequestMethod.GET)
+    public ResponseEntity<String> processInlineQuery(HttpServletRequest request, @RequestHeader HttpHeaders headers,
+            @PathVariable("index") String index, @PathVariable("queryText") String queryText) {
+
+        return super.processInlineQuery(request, headers, index, queryText);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/query", method = RequestMethod.GET, consumes = {"application/json"})
+    public ResponseEntity<String> processQueryWithGet(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        return super.processQueryWithGet(requestBody, request, headers, index);
+    }
+
+    @Override
+    @RequestMapping(value = "/indexes/{index}/query", method = RequestMethod.POST, consumes = {"application/json"})
+    public ResponseEntity<String> processQuery(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers, @PathVariable("index") String index) {
+
+        return super.processQuery(requestBody, request, headers, index);
+    }
+
+    @Override
+    @RequestMapping(value = "/bulk", method = RequestMethod.POST, consumes = {"application/json"},
+            produces = {"application/json"})
+    public ResponseEntity<String> processBulkRequest(@RequestBody String requestBody, HttpServletRequest request,
+            @RequestHeader HttpHeaders headers) {
+
+        // If the operations string contains a special keyword, set the
+        // harness to fail the authentication validation.
+        if (requestBody.contains(FAIL_AUTHENTICATION_TRIGGER)) {
+            authenticationShouldSucceed = false;
+        }
+
+        // Just pass the request up to the parent, since that is the code
+        // that we really want to test.
+        // return super.processPost(operations, request, headers, index);
+        return super.processBulkRequest(requestBody, request, headers);
+    }
+
+    @Override
+    protected boolean validateRequest(HttpHeaders headers, HttpServletRequest req, ApiUtils.Action action,
+            String authPolicyFunctionName) throws Exception {
+
+        return authenticationShouldSucceed;
+    }
 }
index 0472283..14a7534 100644 (file)
@@ -36,242 +36,235 @@ import org.onap.aai.sa.searchdbabstraction.entity.SearchOperationResult;
 import org.onap.aai.sa.searchdbabstraction.util.DocumentSchemaUtil;
 
 /**
- * This class implements a stubbed version of the document store DAO so
- * that we can run unit tests without trying to connect to a real
- * document store.
+ * This class implements a stubbed version of the document store DAO so that we can run unit tests without trying to
+ * connect to a real document store.
  */
 public class StubEsController implements DocumentStoreInterface {
 
-  public static final String DOES_NOT_EXIST_INDEX = "index-does-not-exist";
+    public static final String DOES_NOT_EXIST_INDEX = "index-does-not-exist";
 
-  private AnalysisConfiguration analysisConfig = null;
+    private AnalysisConfiguration analysisConfig = null;
 
-  /**
-   *
-   */
-  //private IndexAPIHarness indexAPIHarness;
+    /**
+     *
+     */
+    // private IndexAPIHarness indexAPIHarness;
+
+    StubEsController() {
+        analysisConfig = new AnalysisConfiguration();
+        analysisConfig.init("src/test/resources/json/filter-config.json",
+                "src/test/resources/json/analysis-config.json");
+    }
 
-  StubEsController() {
-    analysisConfig = new AnalysisConfiguration();
-    analysisConfig.init("src/test/resources/json/filter-config.json",
-        "src/test/resources/json/analysis-config.json");
-  }
 
+    @Override
+    public OperationResult createIndex(String index, DocumentSchema documentSchema) {
 
-  @Override
-  public OperationResult createIndex(String         index, 
-                                     DocumentSchema documentSchema) {
+        // Just return an OK result, with the parameters that we were passed
+        // bundled in the response string. This allows unit tests to validate
+        // that those parameters match what they expected to be passed.
+        OperationResult opResult = new OperationResult();
+        opResult.setResultCode(200);
 
-    // Just return an OK result, with the parameters that we were passed
-    // bundled in the response string. This allows unit tests to validate
-    // that those parameters match what they expected to be passed.
-    OperationResult opResult = new OperationResult();
-    opResult.setResultCode(200);
+        try {
+            opResult.setResult(index + "@" + analysisConfig.getEsIndexSettings() + "@"
+                    + DocumentSchemaUtil.generateDocumentMappings(documentSchema));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
 
-    try {
-               opResult.setResult(index + "@" + analysisConfig.getEsIndexSettings() + "@"
-                   + DocumentSchemaUtil.generateDocumentMappings(documentSchema));
-       } catch (IOException e) {
-               e.printStackTrace();
-       }
+        return opResult;
+    }
 
-    return opResult;
-  }
+    @Override
+    public OperationResult createDynamicIndex(String index, String dynamicSchema) {
+        OperationResult opResult = new OperationResult();
+        opResult.setResultCode(200);
+        // Directly return the json as this flow should not edit the json in any way
+        opResult.setResult(dynamicSchema);
+        return opResult;
+    }
 
-  @Override
-  public OperationResult createDynamicIndex(String index, String dynamicSchema) {
-    OperationResult opResult = new OperationResult();
-    opResult.setResultCode(200);
-    // Directly return the json as this flow should not edit the json in any way
-    opResult.setResult(dynamicSchema);
-    return opResult;
-  }
 
+    @Override
+    public OperationResult deleteIndex(String indexName) throws DocumentStoreOperationException {
 
-  @Override
-  public OperationResult deleteIndex(String indexName) throws DocumentStoreOperationException {
+        OperationResult opResult = new OperationResult();
 
-    OperationResult opResult = new OperationResult();
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            opResult.setResult(indexName);
+        }
 
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      opResult.setResult(indexName);
+        return opResult;
     }
 
-    return opResult;
-  }
-
-  @Override
-  public DocumentOperationResult createDocument(String                  indexName,
-                                                DocumentStoreDataEntity document,
-                                                boolean                 allowImplicitIndexCreation) 
-    throws DocumentStoreOperationException {
-    
-    DocumentOperationResult opResult = buildSampleDocumentOperationResult();
-
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      String id = "dummy";
-      if (document.getId() != null) {
-        id = document.getId();
-      }
-      opResult.setResultVersion("1");
+    @Override
+    public DocumentOperationResult createDocument(String indexName, DocumentStoreDataEntity document,
+            boolean allowImplicitIndexCreation) throws DocumentStoreOperationException {
+
+        DocumentOperationResult opResult = buildSampleDocumentOperationResult();
+
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            String id = "dummy";
+            if (document.getId() != null) {
+                id = document.getId();
+            }
+            opResult.setResultVersion("1");
+        }
+
+        return opResult;
     }
 
-    return opResult;
-  }
-
-  @Override
-  public DocumentOperationResult updateDocument(String                  indexName,
-                                                DocumentStoreDataEntity document,
-                                                boolean                 allowImplicitIndexCreation) 
-    throws DocumentStoreOperationException {
-    
-    DocumentOperationResult opResult = buildSampleDocumentOperationResult();
-
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      String version = "1";
-      if (document.getVersion() != null) {
-        version = String.valueOf(Integer.parseInt(document.getVersion()) + 1);
-      }
-      opResult.setResultVersion(version);
+    @Override
+    public DocumentOperationResult updateDocument(String indexName, DocumentStoreDataEntity document,
+            boolean allowImplicitIndexCreation) throws DocumentStoreOperationException {
+
+        DocumentOperationResult opResult = buildSampleDocumentOperationResult();
+
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            String version = "1";
+            if (document.getVersion() != null) {
+                version = String.valueOf(Integer.parseInt(document.getVersion()) + 1);
+            }
+            opResult.setResultVersion(version);
+        }
+
+        return opResult;
     }
 
-    return opResult;
-  }
-
-  @Override
-  public DocumentOperationResult deleteDocument(String indexName,
-                                                DocumentStoreDataEntity document) throws DocumentStoreOperationException {
-    DocumentOperationResult opResult = buildSampleDocumentOperationResult();
-
-
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      if (opResult.getDocument() != null) {
-        opResult.getDocument().setEtag(null);
-        opResult.getDocument().setUrl(null);
-        opResult.setResultVersion("1");
-      }
-      opResult.setResultCode(200);
-      opResult.setResult(indexName + "@" + document.getId());
-      opResult.setResultVersion("1");
+    @Override
+    public DocumentOperationResult deleteDocument(String indexName, DocumentStoreDataEntity document)
+            throws DocumentStoreOperationException {
+        DocumentOperationResult opResult = buildSampleDocumentOperationResult();
+
+
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            if (opResult.getDocument() != null) {
+                opResult.getDocument().setEtag(null);
+                opResult.getDocument().setUrl(null);
+                opResult.setResultVersion("1");
+            }
+            opResult.setResultCode(200);
+            opResult.setResult(indexName + "@" + document.getId());
+            opResult.setResultVersion("1");
+        }
+
+        return opResult;
     }
 
-    return opResult;
-  }
-
-  @Override
-  public DocumentOperationResult getDocument(String indexName,
-                                             DocumentStoreDataEntity document) throws DocumentStoreOperationException {
-    DocumentOperationResult opResult = buildSampleDocumentOperationResult();
-
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-      // Adding it to make the tests pass.
-      opResult.setResultVersion ("1");
-    } else {
-      opResult.setResultCode(200);
-      // Adding it to make the tests pass.
-      opResult.setResultVersion ("1");
+    @Override
+    public DocumentOperationResult getDocument(String indexName, DocumentStoreDataEntity document)
+            throws DocumentStoreOperationException {
+        DocumentOperationResult opResult = buildSampleDocumentOperationResult();
+
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+            // Adding it to make the tests pass.
+            opResult.setResultVersion("1");
+        } else {
+            opResult.setResultCode(200);
+            // Adding it to make the tests pass.
+            opResult.setResultVersion("1");
+        }
+
+        return opResult;
     }
 
-    return opResult;
-  }
+    @Override
+    public SearchOperationResult search(String indexName, String queryText) throws DocumentStoreOperationException {
 
-  @Override
-  public SearchOperationResult search(String indexName,
-                                      String queryText) throws DocumentStoreOperationException {
+        SearchOperationResult opResult = buildSampleSearchOperationResult();
 
-    SearchOperationResult opResult = buildSampleSearchOperationResult();
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            opResult.setResult(indexName + "@" + queryText);
+        }
 
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      opResult.setResult(indexName + "@" + queryText);
+        return opResult;
     }
 
-    return opResult;
-  }
+    @Override
+    public SearchOperationResult searchWithPayload(String indexName, String query)
+            throws DocumentStoreOperationException {
+        SearchOperationResult opResult = buildSampleSearchOperationResult();
 
-  @Override
-  public SearchOperationResult searchWithPayload(String indexName,
-                                                 String query) throws DocumentStoreOperationException {
-    SearchOperationResult opResult = buildSampleSearchOperationResult();
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            opResult.setResult(indexName + "@" + query);
+        }
 
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      opResult.setResult(indexName + "@" + query);
+        return opResult;
     }
 
-    return opResult;
-  }
+    @Override
+    public SearchOperationResult suggestionQueryWithPayload(String indexName, String query)
+            throws DocumentStoreOperationException {
+        SearchOperationResult opResult = new SearchOperationResult();
 
-  @Override
-  public SearchOperationResult suggestionQueryWithPayload(String indexName, String query)
-          throws DocumentStoreOperationException {
-    SearchOperationResult opResult = new SearchOperationResult();
+        if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
+            opResult.setResultCode(404);
+        } else {
+            opResult.setResultCode(200);
+            opResult.setResult(indexName + "@" + query);
+        }
 
-    if (indexName.equals(DOES_NOT_EXIST_INDEX)) {
-      opResult.setResultCode(404);
-    } else {
-      opResult.setResultCode(200);
-      opResult.setResult(indexName + "@" + query);
+        return opResult;
     }
 
-    return opResult;
-  }
-
-  @Override
-  public OperationResult performBulkOperations(BulkRequest[] requests) throws DocumentStoreOperationException {
+    @Override
+    public OperationResult performBulkOperations(BulkRequest[] requests) throws DocumentStoreOperationException {
 
-    OperationResult opResult = new OperationResult();
-    opResult.setResultCode(200);
+        OperationResult opResult = new OperationResult();
+        opResult.setResultCode(200);
 
-    return opResult;
-  }
+        return opResult;
+    }
 
-  private DocumentOperationResult buildSampleDocumentOperationResult() {
-    DocumentOperationResult result = new DocumentOperationResult();
-    Document doc = new Document();
-    doc.setEtag("etag1");
+    private DocumentOperationResult buildSampleDocumentOperationResult() {
+        DocumentOperationResult result = new DocumentOperationResult();
+        Document doc = new Document();
+        doc.setEtag("etag1");
 
-    doc.setContent(new JSONObject());
-    result.setDocument(doc);
-    return result;
-  }
+        doc.setContent(new JSONObject());
+        result.setDocument(doc);
+        return result;
+    }
 
-  private SearchOperationResult buildSampleSearchOperationResult() {
-    SearchOperationResult result = new SearchOperationResult();
+    private SearchOperationResult buildSampleSearchOperationResult() {
+        SearchOperationResult result = new SearchOperationResult();
 
-    SearchHits searchHits = new SearchHits();
-    SearchHit[] searchHitArray = new SearchHit[1];
-    SearchHit searchHit = new SearchHit();
-    Document doc = new Document();
-    doc.setEtag("etag1");
-    Map<String, Object> content = new HashMap<String, Object>();
-    content.put("key1", "value1");
-    doc.setContent(new JSONObject());
-    searchHit.setDocument(doc);
-    searchHitArray[0] = searchHit;
+        SearchHits searchHits = new SearchHits();
+        SearchHit[] searchHitArray = new SearchHit[1];
+        SearchHit searchHit = new SearchHit();
+        Document doc = new Document();
+        doc.setEtag("etag1");
+        Map<String, Object> content = new HashMap<String, Object>();
+        content.put("key1", "value1");
+        doc.setContent(new JSONObject());
+        searchHit.setDocument(doc);
+        searchHitArray[0] = searchHit;
 
-    searchHits.setHits(searchHitArray);
-    searchHits.setTotalHits("1");
-    result.setSearchResult(searchHits);
+        searchHits.setHits(searchHitArray);
+        searchHits.setTotalHits("1");
+        result.setSearchResult(searchHits);
 
-    return result;
+        return result;
 
-  }
+    }
 
-}
\ No newline at end of file
+}
index 503e808..e990438 100644 (file)
@@ -29,35 +29,34 @@ import java.io.IOException;
 
 public class TestUtils {
 
-  /**
-   * This helper method reads the contents of a file into a
-   * simple string.
-   *
-   * @param aFile - The file to be imported.
-   *
-   * @return - The file contents expressed as a simple string.
-   *
-   * @throws IOException
-   */
-  public static String readFileToString(File aFile) throws IOException {
+    /**
+     * This helper method reads the contents of a file into a simple string.
+     *
+     * @param aFile - The file to be imported.
+     *
+     * @return - The file contents expressed as a simple string.
+     *
+     * @throws IOException
+     */
+    public static String readFileToString(File aFile) throws IOException {
 
-    BufferedReader br = new BufferedReader(new FileReader(aFile));
-    try {
-      StringBuilder sb = new StringBuilder();
-      String line = br.readLine();
+        BufferedReader br = new BufferedReader(new FileReader(aFile));
+        try {
+            StringBuilder sb = new StringBuilder();
+            String line = br.readLine();
 
-      while (line != null) {
-        sb.append(line);
-        line = br.readLine();
-      }
+            while (line != null) {
+                sb.append(line);
+                line = br.readLine();
+            }
 
-      return sb.toString().replaceAll("\\s+", "");
-    } finally {
-      try {
-        br.close();
-      } catch (IOException e) {
-        fail("Unexpected IOException: " + e.getMessage());
-      }
+            return sb.toString().replaceAll("\\s+", "");
+        } finally {
+            try {
+                br.close();
+            } catch (IOException e) {
+                fail("Unexpected IOException: " + e.getMessage());
+            }
+        }
     }
-  }
-}
\ No newline at end of file
+}
index 8c4de81..b976f17 100644 (file)
@@ -26,23 +26,24 @@ import org.junit.Before;
 import org.junit.Ignore;\r
 import org.junit.Test;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
+\r
 public class ElasticSearchConfigTest {\r
 \r
     @Autowired\r
     ElasticSearchConfig elasticSearchConfig;\r
 \r
     @Before\r
-    public void setUp(){\r
+    public void setUp() {\r
         Properties prop = new Properties();\r
         prop.put("es.cluster-name", "cluster-1");\r
         prop.put("es.ip-address", "127.0.0.1");\r
         prop.put("es.http-port", "9001");\r
-//        elasticSearchConfig = new ElasticSearchConfig(prop);\r
+        // elasticSearchConfig = new ElasticSearchConfig(prop);\r
     }\r
 \r
     @Ignore\r
     @Test\r
-    public void testAllGetMethods(){\r
+    public void testAllGetMethods() {\r
         Assert.assertEquals(elasticSearchConfig.getClusterName(), "cluster-1");\r
         Assert.assertEquals(elasticSearchConfig.getIpAddress(), "127.0.0.1");\r
         Assert.assertEquals(elasticSearchConfig.getHttpPort(), "9001");\r
index 61e64f5..fbc077d 100644 (file)
@@ -31,69 +31,69 @@ import org.onap.aai.sa.searchdbabstraction.util.AggregationParsingUtil;
 
 public class AggregationResponseParsingTest {
 
-  @Test
-  public void testParseAggregationResponse() {
-    JSONParser parser = new JSONParser();
-    JSONObject root;
+    @Test
+    public void testParseAggregationResponse() {
+        JSONParser parser = new JSONParser();
+        JSONObject root;
 
-    String input =
-        "{\r\n  \"aggregations\": {\r\n    \"violations\": {\r\n      \"doc_count\": 2,\r\n      \"by_Timestamp\": {\r\n        \"doc_count_error_upper_bound\": 0,\r\n        \"sum_other_doc_count\": 0,\r\n        \"buckets\": [\r\n          {\r\n            \"key\": 7199992,\r\n            \"key_as_string\": \"Jan 1 1970 01:59:59\",\r\n            \"doc_count\": 2\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}";
+        String input =
+                "{\r\n  \"aggregations\": {\r\n    \"violations\": {\r\n      \"doc_count\": 2,\r\n      \"by_Timestamp\": {\r\n        \"doc_count_error_upper_bound\": 0,\r\n        \"sum_other_doc_count\": 0,\r\n        \"buckets\": [\r\n          {\r\n            \"key\": 7199992,\r\n            \"key_as_string\": \"Jan 1 1970 01:59:59\",\r\n            \"doc_count\": 2\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}";
 
-    try {
-      root = (JSONObject) parser.parse(input);
-      JSONObject aggregations = (JSONObject) root.get("aggregations");
-      AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
-      AggregationResults aggs = new AggregationResults();
-      ObjectMapper mapper = new ObjectMapper();
-      aggs.setAggregations(results);
-      System.out.println(mapper.setSerializationInclusion(Include.NON_NULL)
-          .writerWithDefaultPrettyPrinter().writeValueAsString(aggs));
-    } catch (Exception e) {
-      e.printStackTrace();
+        try {
+            root = (JSONObject) parser.parse(input);
+            JSONObject aggregations = (JSONObject) root.get("aggregations");
+            AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
+            AggregationResults aggs = new AggregationResults();
+            ObjectMapper mapper = new ObjectMapper();
+            aggs.setAggregations(results);
+            System.out.println(mapper.setSerializationInclusion(Include.NON_NULL).writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(aggs));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
-  }
 
-  @Test
-  public void testParseAggregationResponse2() {
-    JSONParser parser = new JSONParser();
-    JSONObject root;
+    @Test
+    public void testParseAggregationResponse2() {
+        JSONParser parser = new JSONParser();
+        JSONObject root;
 
-    String input =
-        "{\r\n  \"aggregations\": {\r\n    \"entityType\": {\r\n      \"doc_count_error_upper_bound\": 0,\r\n      \"sum_other_doc_count\": 0,\r\n      \"buckets\": [\r\n        {\r\n          \"key\": \"entity1\",\r\n          \"doc_count\": 5,\r\n          \"byVersion\": {\r\n            \"doc_count_error_upper_bound\": 0,\r\n            \"sum_other_doc_count\": 0,\r\n            \"buckets\": [\r\n              {\r\n                \"key\": \"0\",\r\n                \"doc_count\": 5\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}";
+        String input =
+                "{\r\n  \"aggregations\": {\r\n    \"entityType\": {\r\n      \"doc_count_error_upper_bound\": 0,\r\n      \"sum_other_doc_count\": 0,\r\n      \"buckets\": [\r\n        {\r\n          \"key\": \"entity1\",\r\n          \"doc_count\": 5,\r\n          \"byVersion\": {\r\n            \"doc_count_error_upper_bound\": 0,\r\n            \"sum_other_doc_count\": 0,\r\n            \"buckets\": [\r\n              {\r\n                \"key\": \"0\",\r\n                \"doc_count\": 5\r\n              }\r\n            ]\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}";
 
-    try {
-      root = (JSONObject) parser.parse(input);
-      JSONObject aggregations = (JSONObject) root.get("aggregations");
-      AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
-      AggregationResults aggs = new AggregationResults();
-      ObjectMapper mapper = new ObjectMapper();
-      aggs.setAggregations(results);
-      System.out.println(mapper.setSerializationInclusion(Include.NON_NULL)
-          .writerWithDefaultPrettyPrinter().writeValueAsString(aggs));
-    } catch (Exception e) {
-      e.printStackTrace();
+        try {
+            root = (JSONObject) parser.parse(input);
+            JSONObject aggregations = (JSONObject) root.get("aggregations");
+            AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
+            AggregationResults aggs = new AggregationResults();
+            ObjectMapper mapper = new ObjectMapper();
+            aggs.setAggregations(results);
+            System.out.println(mapper.setSerializationInclusion(Include.NON_NULL).writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(aggs));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
-  }
 
-  @Test
-  public void testParseAggregationResponse3() {
-    JSONParser parser = new JSONParser();
-    JSONObject root;
+    @Test
+    public void testParseAggregationResponse3() {
+        JSONParser parser = new JSONParser();
+        JSONObject root;
 
-    String input =
-        "{\r\n  \"aggregations\": {\r\n    \"validateTimes\": {\r\n      \"buckets\": [\r\n        {\r\n          \"key\": \"Jan 10 2017 21:6:6-Jan 24 2017 13:43:5\",\r\n          \"from\": 1484082366000,\r\n          \"from_as_string\": \"Jan 10 2017 21:6:6\",\r\n          \"to\": 1485265385000,\r\n          \"to_as_string\": \"Jan 24 2017 13:43:5\",\r\n          \"doc_count\": 95\r\n        },\r\n        {\r\n          \"key\": \"Feb 3 2017 18:27:39-*\",\r\n          \"from\": 1486146459000,\r\n          \"from_as_string\": \"Feb 3 2017 18:27:39\",\r\n          \"doc_count\": 2\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}";
+        String input =
+                "{\r\n  \"aggregations\": {\r\n    \"validateTimes\": {\r\n      \"buckets\": [\r\n        {\r\n          \"key\": \"Jan 10 2017 21:6:6-Jan 24 2017 13:43:5\",\r\n          \"from\": 1484082366000,\r\n          \"from_as_string\": \"Jan 10 2017 21:6:6\",\r\n          \"to\": 1485265385000,\r\n          \"to_as_string\": \"Jan 24 2017 13:43:5\",\r\n          \"doc_count\": 95\r\n        },\r\n        {\r\n          \"key\": \"Feb 3 2017 18:27:39-*\",\r\n          \"from\": 1486146459000,\r\n          \"from_as_string\": \"Feb 3 2017 18:27:39\",\r\n          \"doc_count\": 2\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}";
 
-    try {
-      root = (JSONObject) parser.parse(input);
-      JSONObject aggregations = (JSONObject) root.get("aggregations");
-      AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
-      AggregationResults aggs = new AggregationResults();
-      ObjectMapper mapper = new ObjectMapper();
-      aggs.setAggregations(results);
-      System.out.println(mapper.setSerializationInclusion(Include.NON_NULL)
-          .writerWithDefaultPrettyPrinter().writeValueAsString(aggs));
-    } catch (Exception e) {
-      e.printStackTrace();
+        try {
+            root = (JSONObject) parser.parse(input);
+            JSONObject aggregations = (JSONObject) root.get("aggregations");
+            AggregationResult[] results = AggregationParsingUtil.parseAggregationResults(aggregations);
+            AggregationResults aggs = new AggregationResults();
+            ObjectMapper mapper = new ObjectMapper();
+            aggs.setAggregations(results);
+            System.out.println(mapper.setSerializationInclusion(Include.NON_NULL).writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(aggs));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
-  }
 }
index 89e75cd..43203c9 100644 (file)
@@ -26,7 +26,7 @@ import org.junit.Test;
 public class ElasticSearchResultItemTest {\r
 \r
     @Test\r
-    public void testAllMethods(){\r
+    public void testAllMethods() {\r
         ElasticSearchShardStatus shardStatus = new ElasticSearchShardStatus();\r
         shardStatus.setTotal(10);\r
         shardStatus.setSuccessful(0);\r
@@ -51,7 +51,7 @@ public class ElasticSearchResultItemTest {
         error.setAdditionalProperties("name-1", "value-1");\r
         Assert.assertNotNull(error.getAdditionalProperties());\r
 \r
-        //Create Status\r
+        // Create Status\r
         ElasticSearchResultItem resultItem1 = new ElasticSearchResultItem();\r
         resultItem1.setCreate(getStatus(shardStatus, error));\r
         Assert.assertNotNull(resultItem1.getCreate());\r
@@ -60,7 +60,7 @@ public class ElasticSearchResultItemTest {
         Assert.assertTrue(resultItem1.toString().contains("create"));\r
         Assert.assertNotNull(resultItem1.toJson());\r
 \r
-        //Index Status\r
+        // Index Status\r
         ElasticSearchResultItem resultItem2 = new ElasticSearchResultItem();\r
         resultItem2.setIndex(getStatus(shardStatus, error));\r
         Assert.assertNotNull(resultItem2.getIndex());\r
@@ -69,7 +69,7 @@ public class ElasticSearchResultItemTest {
         Assert.assertTrue(resultItem2.toString().contains("index"));\r
         Assert.assertNotNull(resultItem2.toJson());\r
 \r
-        //Delete Status\r
+        // Delete Status\r
         ElasticSearchResultItem resultItem3 = new ElasticSearchResultItem();\r
         resultItem3.setDelete(getStatus(shardStatus, error));\r
         Assert.assertNotNull(resultItem3.getDelete());\r
@@ -78,12 +78,12 @@ public class ElasticSearchResultItemTest {
         Assert.assertTrue(resultItem3.toString().contains("delete"));\r
         Assert.assertNotNull(resultItem3.toJson());\r
 \r
-        //Unknown Status\r
+        // Unknown Status\r
         ElasticSearchResultItem resultItem4 = new ElasticSearchResultItem();\r
         Assert.assertEquals(resultItem4.operationType(), "unknown");\r
         Assert.assertNull(resultItem4.operationStatus());\r
 \r
-        //ElasticSearchBulkOperationResult\r
+        // ElasticSearchBulkOperationResult\r
         ElasticSearchResultItem[] resultItems = {resultItem1, resultItem2, resultItem3};\r
         ElasticSearchBulkOperationResult result = new ElasticSearchBulkOperationResult();\r
         result.setErrors(true);\r
index 495a456..bff0f4f 100644 (file)
@@ -28,116 +28,127 @@ import org.junit.Test;
 
 public class AggregationStatementTest {
 
-  private static ObjectMapper mapper = new ObjectMapper();
+    private static ObjectMapper mapper = new ObjectMapper();
 
-  @Test
-  public void testGroupBy() {
-    String input = "{\r\n    \"group-by\": {\r\n      \"field\": \"entityType\"\r\n    }\r\n  }";
+    @Test
+    public void testGroupBy() {
+        String input = "{\r\n    \"group-by\": {\r\n      \"field\": \"entityType\"\r\n    }\r\n  }";
 
-    String expected = "{\"terms\": {\"field\": \"entityType\"}}";
+        String expected = "{\"terms\": {\"field\": \"entityType\"}}";
+
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
+    @Test
+    public void testDateRange() {
+        String input =
+                "{\r\n  \"date-range\": {\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      }\r\n    ],\r\n    \"format\": \"MM-yyy\",\r\n    \"size\": \"5\"\r\n  }\r\n}";
 
-  @Test
-  public void testDateRange() {
-    String input = "{\r\n  \"date-range\": {\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      }\r\n    ],\r\n    \"format\": \"MM-yyy\",\r\n    \"size\": \"5\"\r\n  }\r\n}";
+        String expected =
+                "{\"date_range\": {\"field\": \"mydate\", \"format\": \"MM-yyy\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}], \"size\": 5}}";
 
-    String expected = "{\"date_range\": {\"field\": \"mydate\", \"format\": \"MM-yyy\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}], \"size\": 5}}";
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
+    @Test
+    public void testDateHistogram() {
+        String input =
+                "{\r\n  \"date-histogram\": {\r\n    \"field\": \"mydate\",\r\n    \"interval\": \"day\"\r\n  }\r\n}";
 
-  @Test
-  public void testDateHistogram() {
-    String input = "{\r\n  \"date-histogram\": {\r\n    \"field\": \"mydate\",\r\n    \"interval\": \"day\"\r\n  }\r\n}";
+        String expected = "{\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\"}}";
 
-    String expected = "{\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\"}}";
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
-
-  @Test
-  public void testSubAggregation1() {
-    String input = "{\r\n  \"group-by\": {\r\n    \"field\": \"severity\"\r\n  },\r\n  \"sub-aggregations\": [\r\n    {\r\n      \"name\": \"byType\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"entityType\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
-    String expected = "{\"terms\": {\"field\": \"severity\"}, \"aggs\": {\"byType\": {\"terms\": {\"field\": \"entityType\"}}}}";
+    @Test
+    public void testSubAggregation1() {
+        String input =
+                "{\r\n  \"group-by\": {\r\n    \"field\": \"severity\"\r\n  },\r\n  \"sub-aggregations\": [\r\n    {\r\n      \"name\": \"byType\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"entityType\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
+        String expected =
+                "{\"terms\": {\"field\": \"severity\"}, \"aggs\": {\"byType\": {\"terms\": {\"field\": \"entityType\"}}}}";
+
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
-
-  @Test
-  public void testSubAggregation2() {
-    String input = "{\r\n  \"group-by\": {\r\n    \"field\": \"severity\"\r\n  },\r\n  \"sub-aggregations\": [\r\n    {\r\n      \"name\": \"byType\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violationType\"\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"byRule\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"validationRule\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
-    String expected = "{\"terms\": {\"field\": \"severity\"}, \"aggs\": {\"byType\": {\"terms\": {\"field\": \"violationType\"}},\"byRule\": {\"terms\": {\"field\": \"validationRule\"}}}}";
+    @Test
+    public void testSubAggregation2() {
+        String input =
+                "{\r\n  \"group-by\": {\r\n    \"field\": \"severity\"\r\n  },\r\n  \"sub-aggregations\": [\r\n    {\r\n      \"name\": \"byType\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violationType\"\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"byRule\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"validationRule\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
+        String expected =
+                "{\"terms\": {\"field\": \"severity\"}, \"aggs\": {\"byType\": {\"terms\": {\"field\": \"violationType\"}},\"byRule\": {\"terms\": {\"field\": \"validationRule\"}}}}";
+
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
 
+    @Test
+    public void testNestedAggregation1() {
+        String input =
+                "{\r\n  \"nested\": [{\r\n    \"name\": \"by_severity\",\r\n    \"aggregation\": {\r\n      \"group-by\": {\r\n        \"field\": \"violations.severity\"\r\n      }\r\n    }\r\n  }]\r\n}";
+        String expected =
+                "{\"nested\": {\"path\": \"violations\"}, \"aggs\": {\"by_severity\": {\"terms\": {\"field\": \"violations.severity\"}}}}";
 
-  @Test
-  public void testNestedAggregation1() {
-    String input = "{\r\n  \"nested\": [{\r\n    \"name\": \"by_severity\",\r\n    \"aggregation\": {\r\n      \"group-by\": {\r\n        \"field\": \"violations.severity\"\r\n      }\r\n    }\r\n  }]\r\n}";
-    String expected = "{\"nested\": {\"path\": \"violations\"}, \"aggs\": {\"by_severity\": {\"terms\": {\"field\": \"violations.severity\"}}}}";
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
+    @Test
+    public void testNestedAggregation2() {
+        String input =
+                "{\r\n  \"nested\": [\r\n    {\r\n      \"name\": \"by_severity\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violations.severity\"\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"by_type\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violations.violationType\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
+        String expected =
+                "{\"nested\": {\"path\": \"violations\"}, \"aggs\": {\"by_severity\": {\"terms\": {\"field\": \"violations.severity\"}},\"by_type\": {\"terms\": {\"field\": \"violations.violationType\"}}}}";
+
+        AggregationStatement actual;
+        try {
+            actual = mapper.readValue(input, AggregationStatement.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
 
-  @Test
-  public void testNestedAggregation2() {
-    String input = "{\r\n  \"nested\": [\r\n    {\r\n      \"name\": \"by_severity\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violations.severity\"\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"by_type\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"violations.violationType\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
-    String expected = "{\"nested\": {\"path\": \"violations\"}, \"aggs\": {\"by_severity\": {\"terms\": {\"field\": \"violations.severity\"}},\"by_type\": {\"terms\": {\"field\": \"violations.violationType\"}}}}";
-
-    AggregationStatement actual;
-    try {
-      actual = mapper.readValue(input, AggregationStatement.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
     }
 
-  }
-
 
 }
index d85e075..12b18d1 100644 (file)
@@ -27,22 +27,25 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
 public class AggregationTest {
-  private static ObjectMapper mapper = new ObjectMapper();
-//
-  @Test
-  public void test() {
-    String input = "{\r\n  \"name\": \"byDate\",\r\n  \"aggregation\": {\r\n    \"date-range\": {\r\n      \"field\": \"mydate\",\r\n      \"ranges\": [\r\n        {\r\n          \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n          \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n        }\r\n      ]\r\n    },\r\n    \"sub-aggregations\": [{\r\n        \"name\": \"byTerm\",\r\n        \"aggregation\": {\r\n          \"group-by\": {\r\n            \"field\": \"myterm\"\r\n          }\r\n        }\r\n      }]\r\n  }\r\n}";
-
-    String expected = "\"byDate\": {\"date_range\": {\"field\": \"mydate\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}]}, \"aggs\": {\"byTerm\": {\"terms\": {\"field\": \"myterm\"}}}}";
-
-    Aggregation actual;
-    try {
-      actual = mapper.readValue(input, Aggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
-    }
+    private static ObjectMapper mapper = new ObjectMapper();
+
+    //
+    @Test
+    public void test() {
+        String input =
+                "{\r\n  \"name\": \"byDate\",\r\n  \"aggregation\": {\r\n    \"date-range\": {\r\n      \"field\": \"mydate\",\r\n      \"ranges\": [\r\n        {\r\n          \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n          \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n        }\r\n      ]\r\n    },\r\n    \"sub-aggregations\": [{\r\n        \"name\": \"byTerm\",\r\n        \"aggregation\": {\r\n          \"group-by\": {\r\n            \"field\": \"myterm\"\r\n          }\r\n        }\r\n      }]\r\n  }\r\n}";
+
+        String expected =
+                "\"byDate\": {\"date_range\": {\"field\": \"mydate\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}]}, \"aggs\": {\"byTerm\": {\"terms\": {\"field\": \"myterm\"}}}}";
 
-  }
+        Aggregation actual;
+        try {
+            actual = mapper.readValue(input, Aggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
+
+    }
 
 }
index 6a3ecf7..005cb76 100644 (file)
@@ -27,57 +27,52 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
 public class DateHistogramAggregationTest {
-  ObjectMapper mapper = new ObjectMapper();
+    ObjectMapper mapper = new ObjectMapper();
 
-  @Test
-  public void testFullSet() {
-    String input =
-        "{\r\n  \"field\": \"mydate\",\r\n  \"interval\": \"day\",\r\n  \"time-zone\": \"-01:00\"\r\n}";
+    @Test
+    public void testFullSet() {
+        String input = "{\r\n  \"field\": \"mydate\",\r\n  \"interval\": \"day\",\r\n  \"time-zone\": \"-01:00\"\r\n}";
 
-    String expected =
-        "\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\", \"time_zone\": \"-01:00\"}";
+        String expected =
+                "\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\", \"time_zone\": \"-01:00\"}";
 
-    DateHistogramAggregation actual;
-    try {
-      actual = mapper.readValue(input, DateHistogramAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateHistogramAggregation actual;
+        try {
+            actual = mapper.readValue(input, DateHistogramAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void test2() {
-    String input =
-        "{\r\n  \"field\": \"mydate\",\r\n  \"interval\": \"day\"\r\n}";
+    @Test
+    public void test2() {
+        String input = "{\r\n  \"field\": \"mydate\",\r\n  \"interval\": \"day\"\r\n}";
 
-    String expected =
-        "\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\"}";
+        String expected = "\"date_histogram\": {\"field\": \"mydate\", \"interval\": \"day\"}";
 
-    DateHistogramAggregation actual;
-    try {
-      actual = mapper.readValue(input, DateHistogramAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateHistogramAggregation actual;
+        try {
+            actual = mapper.readValue(input, DateHistogramAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void test3() {
-    String input =
-        "{\r\n  \"field\": \"mydate\"\r\n}";
+    @Test
+    public void test3() {
+        String input = "{\r\n  \"field\": \"mydate\"\r\n}";
 
-    String expected =
-        "\"date_histogram\": {\"field\": \"mydate\"}";
+        String expected = "\"date_histogram\": {\"field\": \"mydate\"}";
 
-    DateHistogramAggregation actual;
-    try {
-      actual = mapper.readValue(input, DateHistogramAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateHistogramAggregation actual;
+        try {
+            actual = mapper.readValue(input, DateHistogramAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
 }
index 3183687..45e7c51 100644 (file)
@@ -28,40 +28,42 @@ import org.junit.Test;
 
 public class DateRangeAggregationTest {
 
-  private static ObjectMapper mapper = new ObjectMapper();
+    private static ObjectMapper mapper = new ObjectMapper();
 
 
-  @Test
-  public void test() {
+    @Test
+    public void test() {
 
-    String input =
-        "{\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\"\r\n      }\r\n    ],\r\n    \"format\": \"MM-yyy\",\r\n    \"size\": \"5\"\r\n}";
-    String expected = "\"date_range\": {\"field\": \"mydate\", \"format\": \"MM-yyy\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"from\": \"2016-12-19T00:00:00.738-05:00\"}], \"size\": 5}";
+        String input =
+                "{\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\"\r\n      }\r\n    ],\r\n    \"format\": \"MM-yyy\",\r\n    \"size\": \"5\"\r\n}";
+        String expected =
+                "\"date_range\": {\"field\": \"mydate\", \"format\": \"MM-yyy\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"from\": \"2016-12-19T00:00:00.738-05:00\"}], \"size\": 5}";
 
-    DateRangeAggregation actual;
-    try {
-      actual = mapper.readValue(input, DateRangeAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateRangeAggregation actual;
+        try {
+            actual = mapper.readValue(input, DateRangeAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void testNoFormatNoSize() {
+    @Test
+    public void testNoFormatNoSize() {
 
-    String input =
-        "{\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\"\r\n      }\r\n    ]\r\n}";
-    String expected = "\"date_range\": {\"field\": \"mydate\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"from\": \"2016-12-19T00:00:00.738-05:00\"}]}";
+        String input =
+                "{\r\n    \"field\": \"mydate\",\r\n    \"ranges\": [\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n      },\r\n      {\r\n        \"from\": \"2016-12-19T00:00:00.738-05:00\"\r\n      }\r\n    ]\r\n}";
+        String expected =
+                "\"date_range\": {\"field\": \"mydate\", \"ranges\": [{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"to\": \"2016-12-23T23:59:59.738-05:00\"},{\"from\": \"2016-12-19T00:00:00.738-05:00\"}]}";
 
-    DateRangeAggregation actual;
-    try {
-      actual = mapper.readValue(input, DateRangeAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateRangeAggregation actual;
+        try {
+            actual = mapper.readValue(input, DateRangeAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
 
 }
index 52880c0..ef7325e 100644 (file)
@@ -27,48 +27,49 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
 public class DateRangeTest {
-  private static ObjectMapper mapper = new ObjectMapper();
+    private static ObjectMapper mapper = new ObjectMapper();
 
-  @Test
-  public void testBoth() {
-    String input = "{\r\n  \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n  \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n}";
-    String expected = "{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}";
+    @Test
+    public void testBoth() {
+        String input =
+                "{\r\n  \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n  \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n}";
+        String expected = "{\"from\": \"2016-12-19T00:00:00.738-05:00\", \"to\": \"2016-12-23T23:59:59.738-05:00\"}";
 
-    DateRange actual;
-    try {
-      actual = mapper.readValue(input, DateRange.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateRange actual;
+        try {
+            actual = mapper.readValue(input, DateRange.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void testFrom() {
-    String input = "{\"from\": \"2016-12-19T00:00:00.738-05:00\"}";
-    String expected = "{\"from\": \"2016-12-19T00:00:00.738-05:00\"}";
+    @Test
+    public void testFrom() {
+        String input = "{\"from\": \"2016-12-19T00:00:00.738-05:00\"}";
+        String expected = "{\"from\": \"2016-12-19T00:00:00.738-05:00\"}";
 
-    DateRange actual;
-    try {
-      actual = mapper.readValue(input, DateRange.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateRange actual;
+        try {
+            actual = mapper.readValue(input, DateRange.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void testTo() {
-    String input = "{\r\n  \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n}";
-    String expected = "{\"to\": \"2016-12-23T23:59:59.738-05:00\"}";
+    @Test
+    public void testTo() {
+        String input = "{\r\n  \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n}";
+        String expected = "{\"to\": \"2016-12-23T23:59:59.738-05:00\"}";
 
-    DateRange actual;
-    try {
-      actual = mapper.readValue(input, DateRange.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        DateRange actual;
+        try {
+            actual = mapper.readValue(input, DateRange.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
 }
index 7b7abd0..81fa07f 100644 (file)
@@ -28,21 +28,16 @@ import org.junit.Test;
 
 public class FilterTest {
 
-  @Test
-  public void test() throws JsonParseException, JsonMappingException, IOException {
+    @Test
+    public void test() throws JsonParseException, JsonMappingException, IOException {
 
 
-    String json = "{ \"any\": [ "
-        + "{\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}},"
-        + "{\"match\": {\"field\": \"searchTags\", \"value\": \"b\"}}"
-        + "],"
-        + "\"all\": ["
-        + "{\"parsed-query\": {\"field\": \"fieldname\", \"query-string\": \"string\"}}"
-        + "]"
-        + "}";
+        String json = "{ \"any\": [ " + "{\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}},"
+                + "{\"match\": {\"field\": \"searchTags\", \"value\": \"b\"}}" + "]," + "\"all\": ["
+                + "{\"parsed-query\": {\"field\": \"fieldname\", \"query-string\": \"string\"}}" + "]" + "}";
 
-    ObjectMapper mapper = new ObjectMapper();
-    Filter filter = mapper.readValue(json, Filter.class);
-    System.out.println("GDF: filter = " + filter);
-  }
+        ObjectMapper mapper = new ObjectMapper();
+        Filter filter = mapper.readValue(json, Filter.class);
+        System.out.println("GDF: filter = " + filter);
+    }
 }
index be50243..1ebed91 100644 (file)
@@ -27,36 +27,36 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
 public class GroupByAggregationTest {
-  private static ObjectMapper mapper = new ObjectMapper();
+    private static ObjectMapper mapper = new ObjectMapper();
 
-  @Test
-  public void test() {
-    String input = "{\"field\" : \"entityType\", \"size\": 20}\r\n";
+    @Test
+    public void test() {
+        String input = "{\"field\" : \"entityType\", \"size\": 20}\r\n";
 
-    String expected = "\"terms\": {\"field\": \"entityType\", \"size\": 20}";
+        String expected = "\"terms\": {\"field\": \"entityType\", \"size\": 20}";
 
-    GroupByAggregation actual;
-    try {
-      actual = mapper.readValue(input, GroupByAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        GroupByAggregation actual;
+        try {
+            actual = mapper.readValue(input, GroupByAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
-  @Test
-  public void testNoSize() {
-    String input = "{\"field\" : \"entityType\"}\r\n";
+    @Test
+    public void testNoSize() {
+        String input = "{\"field\" : \"entityType\"}\r\n";
 
-    String expected = "\"terms\": {\"field\": \"entityType\"}";
+        String expected = "\"terms\": {\"field\": \"entityType\"}";
 
-    GroupByAggregation actual;
-    try {
-      actual = mapper.readValue(input, GroupByAggregation.class);
-      assertEquals(expected, actual.toElasticSearch());
-    } catch (Exception e) {
-      fail("Exception occurred: " + e.getMessage());
+        GroupByAggregation actual;
+        try {
+            actual = mapper.readValue(input, GroupByAggregation.class);
+            assertEquals(expected, actual.toElasticSearch());
+        } catch (Exception e) {
+            fail("Exception occurred: " + e.getMessage());
+        }
     }
-  }
 
 }
index 0e60649..2f22605 100644 (file)
@@ -32,320 +32,338 @@ import org.junit.Test;
 
 public class QueryTest {
 
-  /**
-   * This test validates that we are able to marshal json structures
-   * representing term queries into POJOs and that we can then
-   * unmarshal those POJOs into ElasticSearch syntax.
-   *
-   * @throws JsonParseException
-   * @throws JsonMappingException
-   * @throws IOException
-   */
-  @Test
-  public void termQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    Integer intValue = 1;
-    String field = "searchTags";
-    String termQueryWithIntegerValueJson = "{\"field\": \"" + field + "\", \"value\": " + intValue + "}";
-    String termQueryWithIntegerValueExpectedES = "{\"term\": {\"" + field + "\" : " + intValue + "}}";
-
-    Double doubleValue = 5.7;
-    String termQueryWithDoubleValueJson = "{\"field\": \"" + field + "\", \"value\": " + doubleValue + "}";
-    String termQueryWithDoubleValueExpectedES = "{\"term\": {\"" + field + "\" : " + doubleValue + "}}";
-
-    String stringValue = "theValue";
-    String termQueryWithStringValueJson = "{\"field\": \"" + field + "\", \"value\": \"" + stringValue + "\"}";
-    String termQueryWithStringValueExpectedES = "{\"term\": {\"" + field + "\" : \"" + stringValue + "\"}}";
-
-    ObjectMapper mapper = new ObjectMapper();
-
-
-    // Validate that we can marshal a term query where the supplied value
-    // is an Integer.
-    TermQuery integerTermQuery = mapper.readValue(termQueryWithIntegerValueJson, TermQuery.class);
-    assertTrue("Expected value to be of type Integer, but was type " + integerTermQuery.getValue().getClass().getName(),
-        integerTermQuery.getValue() instanceof Integer);
-    assertEquals(intValue, integerTermQuery.getValue());
-
-    assertTrue("ElasticSearch term query translation does not match the expected result",
-        termQueryWithIntegerValueExpectedES.equals(integerTermQuery.toElasticSearch()));
-
-    // Validate that we can marshal a term query where the supplied value
-    // is a Double.
-    TermQuery doubleTermQuery = mapper.readValue(termQueryWithDoubleValueJson, TermQuery.class);
-    assertTrue("Expected value to be of type Double, but was type " + doubleTermQuery.getValue().getClass().getName(),
-        doubleTermQuery.getValue() instanceof Double);
-    assertEquals(doubleValue, doubleTermQuery.getValue());
-    assertTrue("ElasticSearch term query translation does not match the expected result",
-        termQueryWithDoubleValueExpectedES.equals(doubleTermQuery.toElasticSearch()));
-
-    // Validate that we can marshal a term query where the supplied value
-    // is a String literal.
-    TermQuery stringTermQuery = mapper.readValue(termQueryWithStringValueJson, TermQuery.class);
-    assertTrue("Expected value to be of type String, but was type " + stringTermQuery.getValue().getClass().getName(),
-        stringTermQuery.getValue() instanceof String);
-    assertEquals(stringValue, stringTermQuery.getValue());
-    assertTrue("ElasticSearch term query translation does not match the expected result",
-        termQueryWithStringValueExpectedES.equals(stringTermQuery.toElasticSearch()));
-
-
-  }
-
-
-  /**
-   * This test validates that we are able to marshal json structures
-   * representing parsed queries into POJOs and that we can then
-   * unmarshal those POJOs into ElasticSearch syntax.
-   *
-   * @throws JsonParseException
-   * @throws JsonMappingException
-   * @throws IOException
-   */
-  @Test
-  public void parsedQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    String field = "fieldname";
-    String queryString = "The query string";
-
-    String queryJson = "{\"field\": \"" + field + "\", \"query-string\": \"" + queryString + "\"}";
-    String queryExpectedES = "{\"query_string\": {\"default_field\": \"" + field + "\", \"query\": \"" + queryString + "\"}}";
-
-    ObjectMapper mapper = new ObjectMapper();
-    ParsedQuery pq = mapper.readValue(queryJson, ParsedQuery.class);
-
-    assertTrue("Unexpected marshalled value for 'field' - expected: " + field + " actual: " + pq.getField(),
-        field.equals(pq.getField()));
-    assertTrue("Unexpected marshalled value for 'query-string' - expected: " + queryString + " actual: " + pq.getQueryString(),
-        queryString.equals(pq.getQueryString()));
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryExpectedES + " Actual: " + pq.toElasticSearch(),
-        queryExpectedES.equals(pq.toElasticSearch()));
-  }
-
-
-  /**
-   * This test validates that a ranged query cannot be parsed with values
-   * for both the 'gte' and 'gt' fields or the 'lte' and 'lt' fields, and
-   * that we do not allow mixing of numeric and date types in the same
-   * query.
-   *
-   * @throws JsonParseException
-   * @throws IOException
-   */
-  @Test
-  public void rangeQueryConflictingBoundsTest() throws JsonParseException, IOException {
-
-    String invalidGTAndGTE = "{ \"field\": \"timestamp\", \"gte\": \"2016-10-06T00:00:00.558+03:00\", \"gt\": \"2016-10-06T23:59:59.558+03:00\"}";
-    String invalidLTAndLTE = "{ \"field\": \"timestamp\", \"lte\": \"2016-10-06T00:00:00.558+03:00\", \"lt\": \"2016-10-06T23:59:59.558+03:00\"}";
-    String invalidTypes = "{ \"field\": \"timestamp\", \"lte\": 5, \"gte\": \"2016-10-06T23:59:59.558+03:00\"}";
-
-    ObjectMapper mapper = new ObjectMapper();
-
-    // Attempt to parse a query where we are setting values for both the
-    // 'greater than' and 'greater than and equal to' operators.
-    boolean gotExpectedException = false;
-    try {
-      RangeQuery badRangeQuery = mapper.readValue(invalidGTAndGTE, RangeQuery.class);
-    } catch (JsonMappingException e) {
-      gotExpectedException = true;
-    }
-    assertTrue("Attempting to set both a 'gt' and 'gte' value on the same query should not have been allowed",
-        gotExpectedException);
-
-    // Attempt to parse a query where we are setting values for both the
-    // 'less than' and 'less than and equal to' operators.
-    gotExpectedException = false;
-    try {
-      RangeQuery badRangeQuery = mapper.readValue(invalidLTAndLTE, RangeQuery.class);
-    } catch (JsonMappingException e) {
-      gotExpectedException = true;
-    }
-    assertTrue("Attempting to set both a 'lt' and 'lte' value on the same query should not have been allowed",
-        gotExpectedException);
-
-    // Attempt to parse a query where we are mixing numeric and date values
-    // in the same query.
-    gotExpectedException = false;
-    try {
-      RangeQuery badRangeQuery = mapper.readValue(invalidTypes, RangeQuery.class);
-    } catch (JsonMappingException e) {
-      gotExpectedException = true;
-    }
-    assertTrue("Attempting to mix numeric and date values in the same query should not have been allowed",
-        gotExpectedException);
-
-
-  }
-
+    /**
+     * This test validates that we are able to marshal json structures representing term queries into POJOs and that we
+     * can then unmarshal those POJOs into ElasticSearch syntax.
+     *
+     * @throws JsonParseException
+     * @throws JsonMappingException
+     * @throws IOException
+     */
+    @Test
+    public void termQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        Integer intValue = 1;
+        String field = "searchTags";
+        String termQueryWithIntegerValueJson = "{\"field\": \"" + field + "\", \"value\": " + intValue + "}";
+        String termQueryWithIntegerValueExpectedES = "{\"term\": {\"" + field + "\" : " + intValue + "}}";
+
+        Double doubleValue = 5.7;
+        String termQueryWithDoubleValueJson = "{\"field\": \"" + field + "\", \"value\": " + doubleValue + "}";
+        String termQueryWithDoubleValueExpectedES = "{\"term\": {\"" + field + "\" : " + doubleValue + "}}";
+
+        String stringValue = "theValue";
+        String termQueryWithStringValueJson = "{\"field\": \"" + field + "\", \"value\": \"" + stringValue + "\"}";
+        String termQueryWithStringValueExpectedES = "{\"term\": {\"" + field + "\" : \"" + stringValue + "\"}}";
+
+        ObjectMapper mapper = new ObjectMapper();
+
+
+        // Validate that we can marshal a term query where the supplied value
+        // is an Integer.
+        TermQuery integerTermQuery = mapper.readValue(termQueryWithIntegerValueJson, TermQuery.class);
+        assertTrue(
+                "Expected value to be of type Integer, but was type "
+                        + integerTermQuery.getValue().getClass().getName(),
+                integerTermQuery.getValue() instanceof Integer);
+        assertEquals(intValue, integerTermQuery.getValue());
+
+        assertTrue("ElasticSearch term query translation does not match the expected result",
+                termQueryWithIntegerValueExpectedES.equals(integerTermQuery.toElasticSearch()));
+
+        // Validate that we can marshal a term query where the supplied value
+        // is a Double.
+        TermQuery doubleTermQuery = mapper.readValue(termQueryWithDoubleValueJson, TermQuery.class);
+        assertTrue(
+                "Expected value to be of type Double, but was type " + doubleTermQuery.getValue().getClass().getName(),
+                doubleTermQuery.getValue() instanceof Double);
+        assertEquals(doubleValue, doubleTermQuery.getValue());
+        assertTrue("ElasticSearch term query translation does not match the expected result",
+                termQueryWithDoubleValueExpectedES.equals(doubleTermQuery.toElasticSearch()));
+
+        // Validate that we can marshal a term query where the supplied value
+        // is a String literal.
+        TermQuery stringTermQuery = mapper.readValue(termQueryWithStringValueJson, TermQuery.class);
+        assertTrue(
+                "Expected value to be of type String, but was type " + stringTermQuery.getValue().getClass().getName(),
+                stringTermQuery.getValue() instanceof String);
+        assertEquals(stringValue, stringTermQuery.getValue());
+        assertTrue("ElasticSearch term query translation does not match the expected result",
+                termQueryWithStringValueExpectedES.equals(stringTermQuery.toElasticSearch()));
 
-  /**
-   * This test validates that date range queries can be marshalled to a Java
-   * POJO and unmarshalled to ElasticSearch syntax.
-   *
-   * @throws JsonParseException
-   * @throws JsonMappingException
-   * @throws IOException
-   */
-  @Test
-  public void dateRangeQueryTest() throws JsonParseException, JsonMappingException, IOException {
 
-    String field = "timestamp";
-    String greaterThanDate = "2016-10-06T00:00:00.558+03:00";
-    String lessThanDate = "2016-10-06T23:59:59.558+03:00";
-
-    ObjectMapper mapper = new ObjectMapper();
-
-    // Generate a date range query using 'greater than or equal' and 'less
-    // than or equal' operations.
-    String dateRangeJson =
-        "{ \"field\": \"" + field + "\", \"gte\": \"" + greaterThanDate + "\", \"lte\": \"" + lessThanDate + "\"}";
-    String dateRangeExpectedES =
-        "{\"range\": {\"timestamp\": {\"gte\": \"2016-10-06T00:00:00.558+03:00\", \"lte\": \"2016-10-06T23:59:59.558+03:00\"}}}";
+    }
 
-    // Validate that the query is marshalled correctly to the POJO and that
-    // the generated ElasticSearch syntax looks as expected.
-    RangeQuery dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
-
-    assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: " + dateRangeQuery.getField(),
-        field.equals(dateRangeQuery.getField()));
-    assertTrue("Unexpected type for 'gte' value.  Expected: String  Actual: " + dateRangeQuery.getGte().getClass().getName(),
-        dateRangeQuery.getGte() instanceof String);
-    assertTrue("Unexpected type for 'lte' value.  Expected: String  Actual: " + dateRangeQuery.getLte().getClass().getName(),
-        dateRangeQuery.getLte() instanceof String);
-    assertTrue("Unexpected marshalled value for 'gte'.  Expected: " + greaterThanDate + " Actual: " + dateRangeQuery.getGte(),
-        greaterThanDate.equals(dateRangeQuery.getGte()));
-    assertTrue("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDate + " Actual: " + dateRangeQuery.getLte(),
-        lessThanDate.equals(dateRangeQuery.getLte()));
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: " + dateRangeQuery.toElasticSearch(),
-        dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
-
-
-    // Generate a date range query using 'greater than' and 'less than or
-    // equal' operations.
-    dateRangeJson =
-        "{ \"field\": \"" + field + "\", \"gt\": \"" + greaterThanDate + "\", \"lte\": \"" + lessThanDate + "\"}";
-    dateRangeExpectedES =
-        "{\"range\": {\"timestamp\": {\"gt\": \"2016-10-06T00:00:00.558+03:00\", \"lte\": \"2016-10-06T23:59:59.558+03:00\"}}}";
-
-    // Validate that the query is marshalled correctly to the POJO and that
-    // the generated ElasticSearch syntax looks as expected.
-    dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
-
-    assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: " + dateRangeQuery.getField(),
-        field.equals(dateRangeQuery.getField()));
-
-    assertTrue("Unexpected type for 'gt' value.  Expected: String  Actual: " + dateRangeQuery.getGt().getClass().getName(),
-        dateRangeQuery.getGt() instanceof String);
-
-    assertTrue("Unexpected type for 'lte' value.  Expected: String  Actual: " + dateRangeQuery.getLte().getClass().getName(),
-        dateRangeQuery.getLte() instanceof String);
-
-    assertTrue("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDate + " Actual: " + dateRangeQuery.getGt(),
-        greaterThanDate.equals(dateRangeQuery.getGt()));
-
-    assertTrue("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDate + " Actual: " + dateRangeQuery.getLte(),
-        lessThanDate.equals(dateRangeQuery.getLte()));
-
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: " + dateRangeQuery.toElasticSearch(),
-        dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
-
-
-    // Generate a date range query using only a 'greater than' operation.
-    dateRangeJson =
-        "{ \"field\": \"" + field + "\", \"gt\": \"" + greaterThanDate + "\"}";
-    dateRangeExpectedES =
-        "{\"range\": {\"timestamp\": {\"gt\": \"2016-10-06T00:00:00.558+03:00\"}}}";
-
-    // Validate that the query is marshalled correctly to the POJO and that
-    // the generated ElasticSearch syntax looks as expected.
-    dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
-
-    assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: " + dateRangeQuery.getField(),
-        field.equals(dateRangeQuery.getField()));
-
-    assertTrue("Unexpected type for 'gt' value.  Expected: String  Actual: " + dateRangeQuery.getGt().getClass().getName(),
-        dateRangeQuery.getGt() instanceof String);
-
-    assertTrue("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDate + " Actual: " + dateRangeQuery.getGt(),
-        greaterThanDate.equals(dateRangeQuery.getGt()));
-
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: " + dateRangeQuery.toElasticSearch(),
-        dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
-
-  }
-
-  /**
-   * This test validates that numeric range queries can be marshalled to a Java
-   * POJO and unmarshalled to ElasticSearch syntax.
-   *
-   * @throws JsonParseException
-   * @throws JsonMappingException
-   * @throws IOException
-   */
-  @Test
-  public void numericRangeQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    String field = "version";
-    Integer greaterThanInt = 5;
-    Integer lessThanInt = 100;
-
-    ObjectMapper mapper = new ObjectMapper();
-
-    // Generate a numeric range query using 'greater than or equal' and 'less
-    // than or equal' operations.
-    String numericRangeJson =
-        "{ \"field\": \"" + field + "\", \"gte\": " + greaterThanInt + ", \"lte\": " + lessThanInt + "}";
-    String numericRangeExpectedES =
-        "{\"range\": {\"" + field + "\": {\"gte\": " + greaterThanInt + ", \"lte\": " + lessThanInt + "}}}";
-
-    // Validate that the query is marshalled correctly to the POJO and that
-    // the generated ElasticSearch syntax looks as expected.
-    RangeQuery numericRangeQuery = mapper.readValue(numericRangeJson, RangeQuery.class);
-
-    assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: " + numericRangeQuery.getField(),
-        field.equals(numericRangeQuery.getField()));
-    assertTrue("Unexpected type for 'gte' value.  Expected: Integer  Actual: " + numericRangeQuery.getGte().getClass().getName(),
-        numericRangeQuery.getGte() instanceof Integer);
-    assertTrue("Unexpected type for 'lte' value.  Expected: Integer  Actual: " + numericRangeQuery.getLte().getClass().getName(),
-        numericRangeQuery.getLte() instanceof Integer);
-    assertEquals("Unexpected marshalled value for 'gte'.  Expected: " + greaterThanInt + " Actual: " + numericRangeQuery.getGte(),
-        greaterThanInt, numericRangeQuery.getGte());
-    assertEquals("Unexpected marshalled value for 'lte'.  Expected: " + lessThanInt + " Actual: " + numericRangeQuery.getLte(),
-        lessThanInt, numericRangeQuery.getLte());
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + numericRangeExpectedES + " Actual: " + numericRangeQuery.toElasticSearch(),
-        numericRangeExpectedES.equals(numericRangeQuery.toElasticSearch()));
 
+    /**
+     * This test validates that we are able to marshal json structures representing parsed queries into POJOs and that
+     * we can then unmarshal those POJOs into ElasticSearch syntax.
+     *
+     * @throws JsonParseException
+     * @throws JsonMappingException
+     * @throws IOException
+     */
+    @Test
+    public void parsedQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String field = "fieldname";
+        String queryString = "The query string";
+
+        String queryJson = "{\"field\": \"" + field + "\", \"query-string\": \"" + queryString + "\"}";
+        String queryExpectedES =
+                "{\"query_string\": {\"default_field\": \"" + field + "\", \"query\": \"" + queryString + "\"}}";
+
+        ObjectMapper mapper = new ObjectMapper();
+        ParsedQuery pq = mapper.readValue(queryJson, ParsedQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field' - expected: " + field + " actual: " + pq.getField(),
+                field.equals(pq.getField()));
+        assertTrue("Unexpected marshalled value for 'query-string' - expected: " + queryString + " actual: "
+                + pq.getQueryString(), queryString.equals(pq.getQueryString()));
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + queryExpectedES + " Actual: " + pq.toElasticSearch(),
+                queryExpectedES.equals(pq.toElasticSearch()));
+    }
 
-    Double greaterThanDouble = 5.0;
-    Double lessThanDouble = 100.0;
 
-    // Generate a date range query using 'greater than' and 'less than or
-    // equal' operations.
-    numericRangeJson =
-        "{ \"field\": \"" + field + "\", \"gt\": " + greaterThanDouble + ", \"lte\": " + lessThanDouble + "}";
-    numericRangeExpectedES =
-        "{\"range\": {\"" + field + "\": {\"gt\": " + greaterThanDouble + ", \"lte\": " + lessThanDouble + "}}}";
+    /**
+     * This test validates that a ranged query cannot be parsed with values for both the 'gte' and 'gt' fields or the
+     * 'lte' and 'lt' fields, and that we do not allow mixing of numeric and date types in the same query.
+     *
+     * @throws JsonParseException
+     * @throws IOException
+     */
+    @Test
+    public void rangeQueryConflictingBoundsTest() throws JsonParseException, IOException {
+
+        String invalidGTAndGTE =
+                "{ \"field\": \"timestamp\", \"gte\": \"2016-10-06T00:00:00.558+03:00\", \"gt\": \"2016-10-06T23:59:59.558+03:00\"}";
+        String invalidLTAndLTE =
+                "{ \"field\": \"timestamp\", \"lte\": \"2016-10-06T00:00:00.558+03:00\", \"lt\": \"2016-10-06T23:59:59.558+03:00\"}";
+        String invalidTypes = "{ \"field\": \"timestamp\", \"lte\": 5, \"gte\": \"2016-10-06T23:59:59.558+03:00\"}";
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        // Attempt to parse a query where we are setting values for both the
+        // 'greater than' and 'greater than and equal to' operators.
+        boolean gotExpectedException = false;
+        try {
+            RangeQuery badRangeQuery = mapper.readValue(invalidGTAndGTE, RangeQuery.class);
+        } catch (JsonMappingException e) {
+            gotExpectedException = true;
+        }
+        assertTrue("Attempting to set both a 'gt' and 'gte' value on the same query should not have been allowed",
+                gotExpectedException);
+
+        // Attempt to parse a query where we are setting values for both the
+        // 'less than' and 'less than and equal to' operators.
+        gotExpectedException = false;
+        try {
+            RangeQuery badRangeQuery = mapper.readValue(invalidLTAndLTE, RangeQuery.class);
+        } catch (JsonMappingException e) {
+            gotExpectedException = true;
+        }
+        assertTrue("Attempting to set both a 'lt' and 'lte' value on the same query should not have been allowed",
+                gotExpectedException);
+
+        // Attempt to parse a query where we are mixing numeric and date values
+        // in the same query.
+        gotExpectedException = false;
+        try {
+            RangeQuery badRangeQuery = mapper.readValue(invalidTypes, RangeQuery.class);
+        } catch (JsonMappingException e) {
+            gotExpectedException = true;
+        }
+        assertTrue("Attempting to mix numeric and date values in the same query should not have been allowed",
+                gotExpectedException);
 
-    // Validate that the query is marshalled correctly to the POJO and that
-    // the generated ElasticSearch syntax looks as expected.
-    numericRangeQuery = mapper.readValue(numericRangeJson, RangeQuery.class);
 
-    assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: " + numericRangeQuery.getField(),
-        field.equals(numericRangeQuery.getField()));
+    }
 
-    assertTrue("Unexpected type for 'gt' value.  Expected: Double  Actual: " + numericRangeQuery.getGt().getClass().getName(),
-        numericRangeQuery.getGt() instanceof Double);
 
-    assertTrue("Unexpected type for 'lte' value.  Expected: Double  Actual: " + numericRangeQuery.getLte().getClass().getName(),
-        numericRangeQuery.getLte() instanceof Double);
+    /**
+     * This test validates that date range queries can be marshalled to a Java POJO and unmarshalled to ElasticSearch
+     * syntax.
+     *
+     * @throws JsonParseException
+     * @throws JsonMappingException
+     * @throws IOException
+     */
+    @Test
+    public void dateRangeQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String field = "timestamp";
+        String greaterThanDate = "2016-10-06T00:00:00.558+03:00";
+        String lessThanDate = "2016-10-06T23:59:59.558+03:00";
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        // Generate a date range query using 'greater than or equal' and 'less
+        // than or equal' operations.
+        String dateRangeJson = "{ \"field\": \"" + field + "\", \"gte\": \"" + greaterThanDate + "\", \"lte\": \""
+                + lessThanDate + "\"}";
+        String dateRangeExpectedES =
+                "{\"range\": {\"timestamp\": {\"gte\": \"2016-10-06T00:00:00.558+03:00\", \"lte\": \"2016-10-06T23:59:59.558+03:00\"}}}";
+
+        // Validate that the query is marshalled correctly to the POJO and that
+        // the generated ElasticSearch syntax looks as expected.
+        RangeQuery dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: "
+                + dateRangeQuery.getField(), field.equals(dateRangeQuery.getField()));
+        assertTrue("Unexpected type for 'gte' value.  Expected: String  Actual: "
+                + dateRangeQuery.getGte().getClass().getName(), dateRangeQuery.getGte() instanceof String);
+        assertTrue("Unexpected type for 'lte' value.  Expected: String  Actual: "
+                + dateRangeQuery.getLte().getClass().getName(), dateRangeQuery.getLte() instanceof String);
+        assertTrue("Unexpected marshalled value for 'gte'.  Expected: " + greaterThanDate + " Actual: "
+                + dateRangeQuery.getGte(), greaterThanDate.equals(dateRangeQuery.getGte()));
+        assertTrue("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDate + " Actual: "
+                + dateRangeQuery.getLte(), lessThanDate.equals(dateRangeQuery.getLte()));
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: "
+                        + dateRangeQuery.toElasticSearch(),
+                dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
+
+
+        // Generate a date range query using 'greater than' and 'less than or
+        // equal' operations.
+        dateRangeJson = "{ \"field\": \"" + field + "\", \"gt\": \"" + greaterThanDate + "\", \"lte\": \""
+                + lessThanDate + "\"}";
+        dateRangeExpectedES =
+                "{\"range\": {\"timestamp\": {\"gt\": \"2016-10-06T00:00:00.558+03:00\", \"lte\": \"2016-10-06T23:59:59.558+03:00\"}}}";
+
+        // Validate that the query is marshalled correctly to the POJO and that
+        // the generated ElasticSearch syntax looks as expected.
+        dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: "
+                + dateRangeQuery.getField(), field.equals(dateRangeQuery.getField()));
+
+        assertTrue("Unexpected type for 'gt' value.  Expected: String  Actual: "
+                + dateRangeQuery.getGt().getClass().getName(), dateRangeQuery.getGt() instanceof String);
+
+        assertTrue("Unexpected type for 'lte' value.  Expected: String  Actual: "
+                + dateRangeQuery.getLte().getClass().getName(), dateRangeQuery.getLte() instanceof String);
+
+        assertTrue("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDate + " Actual: "
+                + dateRangeQuery.getGt(), greaterThanDate.equals(dateRangeQuery.getGt()));
+
+        assertTrue("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDate + " Actual: "
+                + dateRangeQuery.getLte(), lessThanDate.equals(dateRangeQuery.getLte()));
+
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: "
+                        + dateRangeQuery.toElasticSearch(),
+                dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
+
+
+        // Generate a date range query using only a 'greater than' operation.
+        dateRangeJson = "{ \"field\": \"" + field + "\", \"gt\": \"" + greaterThanDate + "\"}";
+        dateRangeExpectedES = "{\"range\": {\"timestamp\": {\"gt\": \"2016-10-06T00:00:00.558+03:00\"}}}";
+
+        // Validate that the query is marshalled correctly to the POJO and that
+        // the generated ElasticSearch syntax looks as expected.
+        dateRangeQuery = mapper.readValue(dateRangeJson, RangeQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: "
+                + dateRangeQuery.getField(), field.equals(dateRangeQuery.getField()));
+
+        assertTrue("Unexpected type for 'gt' value.  Expected: String  Actual: "
+                + dateRangeQuery.getGt().getClass().getName(), dateRangeQuery.getGt() instanceof String);
+
+        assertTrue("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDate + " Actual: "
+                + dateRangeQuery.getGt(), greaterThanDate.equals(dateRangeQuery.getGt()));
+
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + dateRangeExpectedES + " Actual: "
+                        + dateRangeQuery.toElasticSearch(),
+                dateRangeExpectedES.equals(dateRangeQuery.toElasticSearch()));
 
-    assertEquals("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDouble + " Actual: " + numericRangeQuery.getGt(),
-        greaterThanDouble, numericRangeQuery.getGt());
+    }
 
-    assertEquals("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDouble + " Actual: " + numericRangeQuery.getLte(),
-        lessThanDouble, numericRangeQuery.getLte());
-
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + numericRangeExpectedES + " Actual: " + numericRangeQuery.toElasticSearch(),
-        numericRangeExpectedES.equals(numericRangeQuery.toElasticSearch()));
-  }
+    /**
+     * This test validates that numeric range queries can be marshalled to a Java POJO and unmarshalled to ElasticSearch
+     * syntax.
+     *
+     * @throws JsonParseException
+     * @throws JsonMappingException
+     * @throws IOException
+     */
+    @Test
+    public void numericRangeQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String field = "version";
+        Integer greaterThanInt = 5;
+        Integer lessThanInt = 100;
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        // Generate a numeric range query using 'greater than or equal' and 'less
+        // than or equal' operations.
+        String numericRangeJson =
+                "{ \"field\": \"" + field + "\", \"gte\": " + greaterThanInt + ", \"lte\": " + lessThanInt + "}";
+        String numericRangeExpectedES =
+                "{\"range\": {\"" + field + "\": {\"gte\": " + greaterThanInt + ", \"lte\": " + lessThanInt + "}}}";
+
+        // Validate that the query is marshalled correctly to the POJO and that
+        // the generated ElasticSearch syntax looks as expected.
+        RangeQuery numericRangeQuery = mapper.readValue(numericRangeJson, RangeQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: "
+                + numericRangeQuery.getField(), field.equals(numericRangeQuery.getField()));
+        assertTrue(
+                "Unexpected type for 'gte' value.  Expected: Integer  Actual: "
+                        + numericRangeQuery.getGte().getClass().getName(),
+                numericRangeQuery.getGte() instanceof Integer);
+        assertTrue(
+                "Unexpected type for 'lte' value.  Expected: Integer  Actual: "
+                        + numericRangeQuery.getLte().getClass().getName(),
+                numericRangeQuery.getLte() instanceof Integer);
+        assertEquals("Unexpected marshalled value for 'gte'.  Expected: " + greaterThanInt + " Actual: "
+                + numericRangeQuery.getGte(), greaterThanInt, numericRangeQuery.getGte());
+        assertEquals("Unexpected marshalled value for 'lte'.  Expected: " + lessThanInt + " Actual: "
+                + numericRangeQuery.getLte(), lessThanInt, numericRangeQuery.getLte());
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + numericRangeExpectedES + " Actual: "
+                        + numericRangeQuery.toElasticSearch(),
+                numericRangeExpectedES.equals(numericRangeQuery.toElasticSearch()));
+
+
+        Double greaterThanDouble = 5.0;
+        Double lessThanDouble = 100.0;
+
+        // Generate a date range query using 'greater than' and 'less than or
+        // equal' operations.
+        numericRangeJson =
+                "{ \"field\": \"" + field + "\", \"gt\": " + greaterThanDouble + ", \"lte\": " + lessThanDouble + "}";
+        numericRangeExpectedES = "{\"range\": {\"" + field + "\": {\"gt\": " + greaterThanDouble + ", \"lte\": "
+                + lessThanDouble + "}}}";
+
+        // Validate that the query is marshalled correctly to the POJO and that
+        // the generated ElasticSearch syntax looks as expected.
+        numericRangeQuery = mapper.readValue(numericRangeJson, RangeQuery.class);
+
+        assertTrue("Unexpected marshalled value for 'field'.  Expected: " + field + " Actual: "
+                + numericRangeQuery.getField(), field.equals(numericRangeQuery.getField()));
+
+        assertTrue("Unexpected type for 'gt' value.  Expected: Double  Actual: "
+                + numericRangeQuery.getGt().getClass().getName(), numericRangeQuery.getGt() instanceof Double);
+
+        assertTrue(
+                "Unexpected type for 'lte' value.  Expected: Double  Actual: "
+                        + numericRangeQuery.getLte().getClass().getName(),
+                numericRangeQuery.getLte() instanceof Double);
+
+        assertEquals("Unexpected marshalled value for 'gt'.  Expected: " + greaterThanDouble + " Actual: "
+                + numericRangeQuery.getGt(), greaterThanDouble, numericRangeQuery.getGt());
+
+        assertEquals("Unexpected marshalled value for 'lte'.  Expected: " + lessThanDouble + " Actual: "
+                + numericRangeQuery.getLte(), lessThanDouble, numericRangeQuery.getLte());
+
+        assertTrue(
+                "Unexpected ElasticSearch syntax.  Expected: " + numericRangeExpectedES + " Actual: "
+                        + numericRangeQuery.toElasticSearch(),
+                numericRangeExpectedES.equals(numericRangeQuery.toElasticSearch()));
+    }
 
 }
index a06a2a0..e8ca844 100644 (file)
@@ -29,8 +29,8 @@ import org.onap.aai.sa.rest.TestUtils;
 \r
 public class RangeQueryTest {\r
 \r
-    @Test(expected=IllegalArgumentException.class)\r
-    public void testSetGt(){\r
+    @Test(expected = IllegalArgumentException.class)\r
+    public void testSetGt() {\r
 \r
         RangeQuery rq = new RangeQuery();\r
         rq.setLt(new String("2x"));\r
@@ -40,8 +40,8 @@ public class RangeQueryTest {
         rq.setGt(new Integer(1));\r
     }\r
 \r
-    @Test(expected=IllegalArgumentException.class)\r
-    public void testSetGte(){\r
+    @Test(expected = IllegalArgumentException.class)\r
+    public void testSetGte() {\r
 \r
         RangeQuery rq = new RangeQuery();\r
         rq.setGt(new Integer(1));\r
@@ -50,8 +50,8 @@ public class RangeQueryTest {
         rq.setGte(new Integer(1));\r
     }\r
 \r
-    @Test(expected=IllegalArgumentException.class)\r
-    public void testSetLt(){\r
+    @Test(expected = IllegalArgumentException.class)\r
+    public void testSetLt() {\r
 \r
         RangeQuery rq = new RangeQuery();\r
         rq.setLt(new Integer(1));\r
@@ -66,8 +66,8 @@ public class RangeQueryTest {
         rq.setLt(new String("10"));\r
     }\r
 \r
-    @Test(expected=IllegalArgumentException.class)\r
-    public void testSetLte(){\r
+    @Test(expected = IllegalArgumentException.class)\r
+    public void testSetLte() {\r
         RangeQuery rq = new RangeQuery();\r
         rq.setGt(new Integer(1));\r
         rq.setTimeZone("CT");\r
@@ -88,12 +88,12 @@ public class RangeQueryTest {
 \r
         Aggregation a1 = getAggregationObject();\r
         Aggregation a2 = getAggregationObject();\r
-        Aggregation[] aggs= new Aggregation[] {a1, a2};\r
+        Aggregation[] aggs = new Aggregation[] {a1, a2};\r
         ss.setAggregations(aggs);\r
         Assert.assertNotNull(ss.toString());\r
     }\r
 \r
-    private Aggregation getAggregationObject(){\r
+    private Aggregation getAggregationObject() {\r
         Aggregation a = new Aggregation();\r
 \r
         AggregationStatement as = new AggregationStatement();\r
@@ -126,7 +126,7 @@ public class RangeQueryTest {
         Assert.assertEquals(dr.getToDate(), "21-12-2017");\r
         DateRange[] drs = {dr};\r
         dra.setDateRanges(drs);\r
-        Assert.assertTrue(dra.getDateRanges().length==1);\r
+        Assert.assertTrue(dra.getDateRanges().length == 1);\r
         Assert.assertNotNull(dra.toElasticSearch());\r
         Assert.assertNotNull(dra.toString());\r
         as.setDateRange(dra);\r
index 03cf238..45ad666 100644 (file)
@@ -36,234 +36,176 @@ import org.onap.aai.sa.rest.TestUtils;
 
 public class SearchStatementTest {
 
-  @Test
-  public void simpleQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    String field = "searchTags";
-    String queryString = "aai3255";
-    String queryJson =
-        "{"
-            + "\"queries\": ["
-            + "{\"may\": {\"parsed-query\": {"
-            + "\"field\": \"" + field + "\","
-            + "\"query-string\": \"" + queryString + "\"}}}"
-            + "]"
-            + "}"
-            + "}";
-
-    String queryES =
-        "{"
-            + "\"version\": true,"
-            + "\"query\": {"
-            + "\"bool\": {"
-            + "\"must\": [], "
-            + "\"should\": ["
-            + "{\"query_string\": {\"default_field\": \"searchTags\", \"query\": \"aai3255\"}}"
-            + "],"
-            + "\"must_not\": []}"
-            + "}"
-            + "}";
-
-    // Marshal our simple query JSON to a SearchStatement object.
-    ObjectMapper mapper = new ObjectMapper();
-    SearchStatement ss = mapper.readValue(queryJson, SearchStatement.class);
-
-    // We expect to have a search statement with one query.
-    assertEquals("Unexpected number of queries in marshalled result",
-        1, ss.getQueries().length);
-
-    // Validate that the query is of the expected type and contains the
-    // expected values.
-    QueryStatement query = ss.getQueries()[0].getQueryStatement();
-    assertNotNull("Expected marshalled statement to contain a 'parsed query'",
-        query.getParsedQuery());
-    assertTrue("Unexpected field name in marshalled query.  Expected: " + field + " Actual: " + query.getParsedQuery().getField(),
-        field.equals(query.getParsedQuery().getField()));
-    assertTrue("Unexpected query string in marshalled query.  Expected: " + queryString + " Actual: " + query.getParsedQuery().getQueryString(),
-        queryString.equals(query.getParsedQuery().getQueryString()));
-
-    // Validate that we are able to produce the expected ElasticSearch
-    // query syntax from the search statement.
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
-        queryES.equals(ss.toElasticSearch()));
-  }
-
-
-  @Test
-  public void simpleSortedQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    String field = "searchTags";
-    String queryString = "aai3255";
-    String queryJson =
-        "{"
-            + "\"queries\": ["
-            + "{\"may\": {\"parsed-query\": {"
-            + "\"field\": \"" + field + "\","
-            + "\"query-string\": \"" + queryString + "\"}}}"
-            + "],"
-            + "\"sort\": { \"field\": \"date\", \"order\": \"ascending\" }"
-            + "}";
-
-
-    String queryES =
-        "{"
-            + "\"version\": true,"
-            + "\"query\": {"
-            + "\"bool\": {"
-            + "\"must\": [], "
-            + "\"should\": ["
-            + "{\"query_string\": {\"default_field\": \"searchTags\", \"query\": \"aai3255\"}}"
-            + "],"
-            + "\"must_not\": []"
-            + "}"
-            + "}, "
-            + "\"sort\": { \"date\": { \"order\": \"asc\"}}"
-            + "}";
-
-    // Marshal our simple query JSON to a SearchStatement object.
-    ObjectMapper mapper = new ObjectMapper();
-    SearchStatement ss = mapper.readValue(queryJson, SearchStatement.class);
-
-    // We expect to have a search statement with one query.
-    assertEquals("Unexpected number of queries in marshalled result",
-        1, ss.getQueries().length);
-
-    // Validate that the query is of the expected type and contains the
-    // expected values.
-    QueryStatement query = ss.getQueries()[0].getQueryStatement();
-    assertNotNull("Expected marshalled statement to contain a 'parsed query'",
-        query.getParsedQuery());
-    assertTrue("Unexpected field name in marshalled query.  Expected: " + field + " Actual: " + query.getParsedQuery().getField(),
-        field.equals(query.getParsedQuery().getField()));
-    assertTrue("Unexpected query string in marshalled query.  Expected: " + queryString + " Actual: " + query.getParsedQuery().getQueryString(),
-        queryString.equals(query.getParsedQuery().getQueryString()));
-    System.out.println("GDF: ES = " + ss.toElasticSearch());
-    // Validate that we are able to produce the expected ElasticSearch
-    // query syntax from the search statement.
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
-        queryES.equals(ss.toElasticSearch()));
-    assertNull(ss.getAggregations());
-  }
-
-  @Test
-  public void filteredQueryTest() throws JsonParseException, JsonMappingException, IOException {
-
-    String filterField1 = "field1";
-    String filterField2 = "field2";
-    String filterField3 = "field3";
-    String filterValue1 = "a";
-    String filterValue2 = "b";
-    String filterValue3 = "string";
-    String filterJson = "{ \"any\": [ "
-        + "{\"match\": {\"field\": \"" + filterField1 + "\", \"value\": \"" + filterValue1 + "\"}},"
-        + "{\"match\": {\"field\": \"" + filterField2 + "\", \"value\": \"" + filterValue2 + "\"}}"
-        + "],"
-        + "\"all\": ["
-        + "{\"parsed-query\": {\"field\": \"" + filterField3 + "\", \"query-string\": \"" + filterValue3 + "\"}}"
-        + "]"
-        + "}";
-
-    String filterStanzaJson = "\"filter\": " + filterJson;
-
-    String queryStanzaJson = "\"queries\": [ "
-        + "{\"may\": {\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}}},"
-        + "{\"may\": {\"match\": {\"field\": \"searchTags\", \"value\": \"b\"}}},"
-        + "{\"may\": {\"parsed-query\": {\"field\": \"fieldname\", \"query-string\": \"string\"}}}"
-        + "]";
-
-    String queryES =
-        "{"
-            + "\"version\": true,"
-            + "\"query\": {"
-            + "\"bool\": {"
-            + "\"must\": [], "
-            + "\"should\": ["
-            + "{\"term\": {\"searchTags\" : \"a\"}}, "
-            + "{\"term\": {\"searchTags\" : \"b\"}}, "
-            + "{\"query_string\": {\"default_field\": \"fieldname\", \"query\": \"string\"}}"
-            + "],"
-            + "\"must_not\": [], "
-            + "\"filter\": {"
-            + "\"bool\": {"
-            + "\"must\": ["
-            + "{\"query_string\": {\"default_field\": \"field3\", \"query\": \"string\"}}"
-            + "],"
-            + "\"must_not\": [],"
-            + "\"should\": ["
-            + "{\"term\": {\"field1\" : \"a\"}}, "
-            + "{\"term\": {\"field2\" : \"b\"}}"
-            + "],"
-            + "\"must_not\": []"
-            + "}"
-            + "}"
-            + "}"
-            + "}"
-            + "}";
-
-    StringBuilder sb = new StringBuilder();
-    sb.append("{");
-    sb.append(filterStanzaJson).append(", ");
-    sb.append(queryStanzaJson);
-    sb.append("}");
-
-    ObjectMapper mapper = new ObjectMapper();
-    SearchStatement ss = mapper.readValue(sb.toString(), SearchStatement.class);
-
-    assertEquals("Unexpected number of queries in the 'any' list for this statement's filter",
-        2, ss.getFilter().getAny().length);
-    assertEquals("Unexpected number of queries in the 'all' list for this statement's filter",
-        1, ss.getFilter().getAll().length);
-
-    assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
-        queryES.equals(ss.toElasticSearch()));
-
-    assertNull(ss.getAggregations());
-  }
-
-  @Test
-  public void aggregationTest() {
-    String input = "{\r\n  \"queries\": [\r\n    {\r\n      \"must\": {\r\n        \"match\": {\r\n          \"field\": \"searchTags\",\r\n          \"value\": \"a\"\r\n        }\r\n      }\r\n    }\r\n  ],\r\n  \"aggregations\": [\r\n    {\r\n      \"name\": \"byDate\",\r\n      \"aggregation\": {\r\n        \"date-range\": {\r\n          \"field\": \"mydate\",\r\n          \"ranges\": [\r\n            {\r\n              \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n              \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n            }\r\n          ]\r\n        },\r\n        \"sub-aggregations\": [\r\n          {\r\n            \"name\": \"byTerm\",\r\n            \"aggregation\": {\r\n              \"group-by\": {\r\n                \"field\": \"myterm\"\r\n              }\r\n            }\r\n          },\r\n          {\r\n            \"name\": \"byDate\",\r\n            \"aggregation\": {\r\n              \"date-histogram\": {\r\n                \"field\": \"myDate\",\r\n                \"interval\": \"myInterval\"\r\n              }\r\n            }\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"2nd\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"anotherTerm\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
-
-    ObjectMapper mapper = new ObjectMapper();
-    try {
-      SearchStatement ss = mapper.readValue(input, SearchStatement.class);
-      Aggregation[] aggs = ss.getAggregations();
-      assertNotNull(aggs);
-      assertEquals("Unexpected number aggregations", 2, aggs.length);
-      assertEquals("byDate", aggs[0].getName());
-      assertNotNull(aggs[0].getStatement().getDateRange());
-      assertEquals("mydate", aggs[0].getStatement().getDateRange().getField());
-      assertNotNull(aggs[0].getStatement().getSubAggregations());
-      assertEquals(2, aggs[0].getStatement().getSubAggregations().length);
-      assertEquals("byTerm", aggs[0].getStatement().getSubAggregations()[0].getName());
-      assertEquals("byDate", aggs[0].getStatement().getSubAggregations()[1].getName());
-      assertNull(aggs[0].getStatement().getGroupBy());
-      assertEquals("2nd", aggs[1].getName());
-      assertNotNull(aggs[1].getStatement().getGroupBy());
-      assertEquals("anotherTerm", aggs[1].getStatement().getGroupBy().getField());
-      assertNull(aggs[1].getStatement().getDateRange());
-      assertNull(aggs[1].getStatement().getSubAggregations());
-
-    } catch (Exception e) {
-      fail("Encountered exception: " + e.getMessage());
+    @Test
+    public void simpleQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String field = "searchTags";
+        String queryString = "aai3255";
+        String queryJson = "{" + "\"queries\": [" + "{\"may\": {\"parsed-query\": {" + "\"field\": \"" + field + "\","
+                + "\"query-string\": \"" + queryString + "\"}}}" + "]" + "}" + "}";
+
+        String queryES = "{" + "\"version\": true," + "\"query\": {" + "\"bool\": {" + "\"must\": [], "
+                + "\"should\": [" + "{\"query_string\": {\"default_field\": \"searchTags\", \"query\": \"aai3255\"}}"
+                + "]," + "\"must_not\": []}" + "}" + "}";
+
+        // Marshal our simple query JSON to a SearchStatement object.
+        ObjectMapper mapper = new ObjectMapper();
+        SearchStatement ss = mapper.readValue(queryJson, SearchStatement.class);
+
+        // We expect to have a search statement with one query.
+        assertEquals("Unexpected number of queries in marshalled result", 1, ss.getQueries().length);
+
+        // Validate that the query is of the expected type and contains the
+        // expected values.
+        QueryStatement query = ss.getQueries()[0].getQueryStatement();
+        assertNotNull("Expected marshalled statement to contain a 'parsed query'", query.getParsedQuery());
+        assertTrue("Unexpected field name in marshalled query.  Expected: " + field + " Actual: "
+                + query.getParsedQuery().getField(), field.equals(query.getParsedQuery().getField()));
+        assertTrue(
+                "Unexpected query string in marshalled query.  Expected: " + queryString + " Actual: "
+                        + query.getParsedQuery().getQueryString(),
+                queryString.equals(query.getParsedQuery().getQueryString()));
+
+        // Validate that we are able to produce the expected ElasticSearch
+        // query syntax from the search statement.
+        assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
+                queryES.equals(ss.toElasticSearch()));
     }
-  }
 
-  @Test
-  public void resultSetRangeTest() throws IOException {
 
-    // Simple query with a result set subrange specified.
-    File queryWithSubrangeFile = new File("src/test/resources/json/queries/query-with-subrange.json");
-    String queryWithSubrangeStr = TestUtils.readFileToString(queryWithSubrangeFile);
-    String queryWithSubrangeExpectedESString =
-        "{\"version\": true,\"from\": 0, \"size\": 10, \"query\": {\"bool\": {\"must\": [{\"term\": {\"field1\" : \"Bob\"}}], \"should\": [],\"must_not\": []}}}";
+    @Test
+    public void simpleSortedQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String field = "searchTags";
+        String queryString = "aai3255";
+        String queryJson = "{" + "\"queries\": [" + "{\"may\": {\"parsed-query\": {" + "\"field\": \"" + field + "\","
+                + "\"query-string\": \"" + queryString + "\"}}}" + "],"
+                + "\"sort\": { \"field\": \"date\", \"order\": \"ascending\" }" + "}";
+
+
+        String queryES = "{" + "\"version\": true," + "\"query\": {" + "\"bool\": {" + "\"must\": [], "
+                + "\"should\": [" + "{\"query_string\": {\"default_field\": \"searchTags\", \"query\": \"aai3255\"}}"
+                + "]," + "\"must_not\": []" + "}" + "}, " + "\"sort\": { \"date\": { \"order\": \"asc\"}}" + "}";
+
+        // Marshal our simple query JSON to a SearchStatement object.
+        ObjectMapper mapper = new ObjectMapper();
+        SearchStatement ss = mapper.readValue(queryJson, SearchStatement.class);
+
+        // We expect to have a search statement with one query.
+        assertEquals("Unexpected number of queries in marshalled result", 1, ss.getQueries().length);
+
+        // Validate that the query is of the expected type and contains the
+        // expected values.
+        QueryStatement query = ss.getQueries()[0].getQueryStatement();
+        assertNotNull("Expected marshalled statement to contain a 'parsed query'", query.getParsedQuery());
+        assertTrue("Unexpected field name in marshalled query.  Expected: " + field + " Actual: "
+                + query.getParsedQuery().getField(), field.equals(query.getParsedQuery().getField()));
+        assertTrue(
+                "Unexpected query string in marshalled query.  Expected: " + queryString + " Actual: "
+                        + query.getParsedQuery().getQueryString(),
+                queryString.equals(query.getParsedQuery().getQueryString()));
+        System.out.println("GDF: ES = " + ss.toElasticSearch());
+        // Validate that we are able to produce the expected ElasticSearch
+        // query syntax from the search statement.
+        assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
+                queryES.equals(ss.toElasticSearch()));
+        assertNull(ss.getAggregations());
+    }
+
+    @Test
+    public void filteredQueryTest() throws JsonParseException, JsonMappingException, IOException {
+
+        String filterField1 = "field1";
+        String filterField2 = "field2";
+        String filterField3 = "field3";
+        String filterValue1 = "a";
+        String filterValue2 = "b";
+        String filterValue3 = "string";
+        String filterJson = "{ \"any\": [ " + "{\"match\": {\"field\": \"" + filterField1 + "\", \"value\": \""
+                + filterValue1 + "\"}}," + "{\"match\": {\"field\": \"" + filterField2 + "\", \"value\": \""
+                + filterValue2 + "\"}}" + "]," + "\"all\": [" + "{\"parsed-query\": {\"field\": \"" + filterField3
+                + "\", \"query-string\": \"" + filterValue3 + "\"}}" + "]" + "}";
+
+        String filterStanzaJson = "\"filter\": " + filterJson;
+
+        String queryStanzaJson = "\"queries\": [ "
+                + "{\"may\": {\"match\": {\"field\": \"searchTags\", \"value\": \"a\"}}},"
+                + "{\"may\": {\"match\": {\"field\": \"searchTags\", \"value\": \"b\"}}},"
+                + "{\"may\": {\"parsed-query\": {\"field\": \"fieldname\", \"query-string\": \"string\"}}}" + "]";
+
+        String queryES = "{" + "\"version\": true," + "\"query\": {" + "\"bool\": {" + "\"must\": [], "
+                + "\"should\": [" + "{\"term\": {\"searchTags\" : \"a\"}}, " + "{\"term\": {\"searchTags\" : \"b\"}}, "
+                + "{\"query_string\": {\"default_field\": \"fieldname\", \"query\": \"string\"}}" + "],"
+                + "\"must_not\": [], " + "\"filter\": {" + "\"bool\": {" + "\"must\": ["
+                + "{\"query_string\": {\"default_field\": \"field3\", \"query\": \"string\"}}" + "],"
+                + "\"must_not\": []," + "\"should\": [" + "{\"term\": {\"field1\" : \"a\"}}, "
+                + "{\"term\": {\"field2\" : \"b\"}}" + "]," + "\"must_not\": []" + "}" + "}" + "}" + "}" + "}";
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("{");
+        sb.append(filterStanzaJson).append(", ");
+        sb.append(queryStanzaJson);
+        sb.append("}");
+
+        ObjectMapper mapper = new ObjectMapper();
+        SearchStatement ss = mapper.readValue(sb.toString(), SearchStatement.class);
+
+        assertEquals("Unexpected number of queries in the 'any' list for this statement's filter", 2,
+                ss.getFilter().getAny().length);
+        assertEquals("Unexpected number of queries in the 'all' list for this statement's filter", 1,
+                ss.getFilter().getAll().length);
+
+        assertTrue("Unexpected ElasticSearch syntax.  Expected: " + queryES + " Actual: " + ss.toElasticSearch(),
+                queryES.equals(ss.toElasticSearch()));
+
+        assertNull(ss.getAggregations());
+    }
+
+    @Test
+    public void aggregationTest() {
+        String input =
+                "{\r\n  \"queries\": [\r\n    {\r\n      \"must\": {\r\n        \"match\": {\r\n          \"field\": \"searchTags\",\r\n          \"value\": \"a\"\r\n        }\r\n      }\r\n    }\r\n  ],\r\n  \"aggregations\": [\r\n    {\r\n      \"name\": \"byDate\",\r\n      \"aggregation\": {\r\n        \"date-range\": {\r\n          \"field\": \"mydate\",\r\n          \"ranges\": [\r\n            {\r\n              \"from\": \"2016-12-19T00:00:00.738-05:00\",\r\n              \"to\": \"2016-12-23T23:59:59.738-05:00\"\r\n            }\r\n          ]\r\n        },\r\n        \"sub-aggregations\": [\r\n          {\r\n            \"name\": \"byTerm\",\r\n            \"aggregation\": {\r\n              \"group-by\": {\r\n                \"field\": \"myterm\"\r\n              }\r\n            }\r\n          },\r\n          {\r\n            \"name\": \"byDate\",\r\n            \"aggregation\": {\r\n              \"date-histogram\": {\r\n                \"field\": \"myDate\",\r\n                \"interval\": \"myInterval\"\r\n              }\r\n            }\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"2nd\",\r\n      \"aggregation\": {\r\n        \"group-by\": {\r\n          \"field\": \"anotherTerm\"\r\n        }\r\n      }\r\n    }\r\n  ]\r\n}";
+
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            SearchStatement ss = mapper.readValue(input, SearchStatement.class);
+            Aggregation[] aggs = ss.getAggregations();
+            assertNotNull(aggs);
+            assertEquals("Unexpected number aggregations", 2, aggs.length);
+            assertEquals("byDate", aggs[0].getName());
+            assertNotNull(aggs[0].getStatement().getDateRange());
+            assertEquals("mydate", aggs[0].getStatement().getDateRange().getField());
+            assertNotNull(aggs[0].getStatement().getSubAggregations());
+            assertEquals(2, aggs[0].getStatement().getSubAggregations().length);
+            assertEquals("byTerm", aggs[0].getStatement().getSubAggregations()[0].getName());
+            assertEquals("byDate", aggs[0].getStatement().getSubAggregations()[1].getName());
+            assertNull(aggs[0].getStatement().getGroupBy());
+            assertEquals("2nd", aggs[1].getName());
+            assertNotNull(aggs[1].getStatement().getGroupBy());
+            assertEquals("anotherTerm", aggs[1].getStatement().getGroupBy().getField());
+            assertNull(aggs[1].getStatement().getDateRange());
+            assertNull(aggs[1].getStatement().getSubAggregations());
+
+        } catch (Exception e) {
+            fail("Encountered exception: " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void resultSetRangeTest() throws IOException {
 
-    ObjectMapper mapper = new ObjectMapper();
-    SearchStatement ss = mapper.readValue(queryWithSubrangeStr, SearchStatement.class);
+        // Simple query with a result set subrange specified.
+        File queryWithSubrangeFile = new File("src/test/resources/json/queries/query-with-subrange.json");
+        String queryWithSubrangeStr = TestUtils.readFileToString(queryWithSubrangeFile);
+        String queryWithSubrangeExpectedESString =
+                "{\"version\": true,\"from\": 0, \"size\": 10, \"query\": {\"bool\": {\"must\": [{\"term\": {\"field1\" : \"Bob\"}}], \"should\": [],\"must_not\": []}}}";
 
-    assertEquals("Unexpected index for result set start", ss.getFrom(), (Integer) 0);
-    assertEquals("Unexpected value for result set size", ss.getSize(), (Integer) 10);
-    assertTrue("Unexpected elastic search query generated from search statement",
-        ss.toElasticSearch().equals(queryWithSubrangeExpectedESString));
-  }
+        ObjectMapper mapper = new ObjectMapper();
+        SearchStatement ss = mapper.readValue(queryWithSubrangeStr, SearchStatement.class);
+
+        assertEquals("Unexpected index for result set start", ss.getFrom(), (Integer) 0);
+        assertEquals("Unexpected value for result set size", ss.getSize(), (Integer) 10);
+        assertTrue("Unexpected elastic search query generated from search statement",
+                ss.toElasticSearch().equals(queryWithSubrangeExpectedESString));
+    }
 }
index 9b93a25..832fa98 100644 (file)
@@ -30,20 +30,20 @@ import org.junit.Test;
 
 public class SortTest {
 
-  @Test
-  public void sortFieldTest() throws JsonParseException, JsonMappingException, IOException {
+    @Test
+    public void sortFieldTest() throws JsonParseException, JsonMappingException, IOException {
 
-    String field = "fieldname";
-    String order = "ascending";
-    String json = "{\"field\": \"" + field + "\", \"order\": \"" + order + "\"}";
+        String field = "fieldname";
+        String order = "ascending";
+        String json = "{\"field\": \"" + field + "\", \"order\": \"" + order + "\"}";
 
-    ObjectMapper mapper = new ObjectMapper();
-    Sort sort = mapper.readValue(json, Sort.class);
+        ObjectMapper mapper = new ObjectMapper();
+        Sort sort = mapper.readValue(json, Sort.class);
 
-    assertTrue("Unexpected field name in marshalled object.  Expected: " + field + " Actual: " + sort.getField(),
-        field.equals(sort.getField()));
-    assertTrue("Unexpected order field in marshalled object.  Expected: " + order + " Actual: " + sort.getOrder(),
-        order.equals(sort.getOrder().toString()));
+        assertTrue("Unexpected field name in marshalled object.  Expected: " + field + " Actual: " + sort.getField(),
+                field.equals(sort.getField()));
+        assertTrue("Unexpected order field in marshalled object.  Expected: " + order + " Actual: " + sort.getOrder(),
+                order.equals(sort.getOrder().toString()));
 
-  }
+    }
 }
index 40209d6..877b64f 100644 (file)
@@ -30,26 +30,26 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class ElasticSearchPayloadTranslatorTest {
-       
-       private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/index-mapping.json";
 
-       @Before
-       public void setup() throws Exception {
-               System.setProperty("CONFIG_HOME", System.getProperty("user.dir")+ File.separator + "src/test/resources/json");
-       }
-       
-       @Test
-       public void testPayloadTranslation() throws Exception {
-               String expectedErrMsg = "Sample error message for whitespace check";
-               File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
-           String documentJson = IOUtils.toString(new FileInputStream(schemaFile), "UTF-8");
-           assertTrue(documentJson.contains("\"type\": \"string\""));
-               assertTrue(documentJson.contains("\"index\": \"analyzed\""));
-               String translatedPayload = ElasticSearchPayloadTranslator.translateESPayload(documentJson);
-               assertTrue(translatedPayload.contains("\"type\":\"text\""));
-               assertTrue(translatedPayload.contains("\"index\":true"));
-               assertTrue(translatedPayload.contains("\"fielddata\":true"));
-               assertFalse(documentJson.contains("\"index\":\"analyzed\""));
-               assertTrue(translatedPayload.contains("\"errMsg\":\""+expectedErrMsg+"\""));
-       }
+    private final String SIMPLE_DOC_SCHEMA_JSON = "src/test/resources/json/index-mapping.json";
+
+    @Before
+    public void setup() throws Exception {
+        System.setProperty("CONFIG_HOME", System.getProperty("user.dir") + File.separator + "src/test/resources/json");
+    }
+
+    @Test
+    public void testPayloadTranslation() throws Exception {
+        String expectedErrMsg = "Sample error message for whitespace check";
+        File schemaFile = new File(SIMPLE_DOC_SCHEMA_JSON);
+        String documentJson = IOUtils.toString(new FileInputStream(schemaFile), "UTF-8");
+        assertTrue(documentJson.contains("\"type\": \"string\""));
+        assertTrue(documentJson.contains("\"index\": \"analyzed\""));
+        String translatedPayload = ElasticSearchPayloadTranslator.translateESPayload(documentJson);
+        assertTrue(translatedPayload.contains("\"type\":\"text\""));
+        assertTrue(translatedPayload.contains("\"index\":true"));
+        assertTrue(translatedPayload.contains("\"fielddata\":true"));
+        assertFalse(documentJson.contains("\"index\":\"analyzed\""));
+        assertTrue(translatedPayload.contains("\"errMsg\":\"" + expectedErrMsg + "\""));
+    }
 }