Fix Java code smells (Sonar and Checkstyle) 56/75756/1
authormark.j.leonard <mark.j.leonard@gmail.com>
Mon, 14 Jan 2019 15:48:40 +0000 (15:48 +0000)
committermark.j.leonard <mark.j.leonard@gmail.com>
Mon, 14 Jan 2019 15:55:10 +0000 (15:55 +0000)
Change-Id: I04cb9b4dee75560777bb3533f6a58268e10fc217
Issue-ID: AAI-2057
Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
16 files changed:
src/main/java/org/onap/aai/auth/AAIMicroServiceAuthCore.java
src/main/java/org/onap/aai/validation/ValidationServiceApplication.java
src/main/java/org/onap/aai/validation/config/EventReaderConfig.java
src/main/java/org/onap/aai/validation/config/ModelConfig.java
src/main/java/org/onap/aai/validation/config/PropertiesConfig.java
src/main/java/org/onap/aai/validation/config/RestConfig.java
src/main/java/org/onap/aai/validation/config/RuleIndexingConfig.java
src/main/java/org/onap/aai/validation/config/TopicConfig.java
src/main/java/org/onap/aai/validation/config/TopicPropertiesConfig.java
src/main/java/org/onap/aai/validation/config/ValidationControllerConfig.java
src/main/java/org/onap/aai/validation/config/ValidationServiceAuthConfig.java
src/main/java/org/onap/aai/validation/modeldriven/parser/XMLModelParser.java
src/main/java/org/onap/aai/validation/modeldriven/validator/InstanceReader.java
src/main/java/org/onap/aai/validation/modeldriven/validator/ModelReader.java
src/main/java/org/onap/aai/validation/ruledriven/RuleDrivenValidator.java
src/test/java/org/onap/aai/validation/config/TestTopicConfig.java

index 25273fc..4373711 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * ============LICENSE_START===================================================
  * Copyright (c) 2018 Amdocs
  * ============================================================================
@@ -6,7 +6,7 @@
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *        http://www.apache.org/licenses/LICENSE-2.0
+ *       http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -54,7 +54,7 @@ public class AAIMicroServiceAuthCore {
     private static boolean timerSet = false;
     private static String policyAuthFileName;
 
-    public enum HTTP_METHODS {
+    public enum HttpMethods {
         GET,
         PUT,
         DELETE,
@@ -73,6 +73,11 @@ public class AAIMicroServiceAuthCore {
         AAIMicroServiceAuthCore.defaultAuthFileName = Paths.get(defaultAuthFileName);
     }
 
+    /**
+     * @param authPolicyFile
+     * @throws AAIAuthException
+     *         if the policy file cannot be loaded
+     */
     public static synchronized void init(String authPolicyFile) throws AAIAuthException {
 
         try {
@@ -183,7 +188,7 @@ public class AAIMicroServiceAuthCore {
         JsonNode methodsNode = functionNode.path("methods");
 
         if (methodsNode.size() == 0) {
-            for (HTTP_METHODS method : HTTP_METHODS.values()) {
+            for (HttpMethods method : HttpMethods.values()) {
                 String fullFunctionName = method.toString() + ":" + functionName;
                 applicationLogger.debug("Installing (all methods) " + fullFunctionName + " on role " + roleName);
                 role.addAllowedFunction(fullFunctionName);
@@ -239,7 +244,7 @@ public class AAIMicroServiceAuthCore {
         }
 
         public boolean hasAllowedFunction(String functionName) {
-            return allowedFunctions.contains(functionName) ? true : false;
+            return allowedFunctions.contains(functionName);
         }
     }
 
index 8bf7a44..409e375 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*
  * ============LICENSE_START===================================================
  * Copyright (c) 2018 Amdocs
  * ============================================================================
  */
 package org.onap.aai.validation;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.eclipse.jetty.util.security.Password;
-import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.support.SpringBootServletInitializer;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ImportResource;
 
-import java.util.HashMap;
-
-
 /**
  * Validation Service Spring Boot Application.
  */
 
 @SpringBootApplication
-@ComponentScan(basePackages = "org.onap.aai.validation")
+@ComponentScan(basePackages = "org.onap.aai.validation.config")
 @ImportResource("classpath:validation-service-beans.xml")
 public class ValidationServiceApplication extends SpringBootServletInitializer {
 
-   // public static void main(String[] args) {
-   //     SpringApplication.run(ValidationServiceApplication.class, args);
-   // }
-
-
     public static void main(String[] args) {
-        HashMap<String, Object> props = new HashMap<>();
+        Map<String, Object> props = new HashMap<>();
         String keyStorePassword = System.getProperty("KEY_STORE_PASSWORD");
         if (keyStorePassword != null && !keyStorePassword.isEmpty()) {
             props.put("server.ssl.key-store-password", Password.deobfuscate(keyStorePassword));
@@ -53,5 +46,4 @@ public class ValidationServiceApplication extends SpringBootServletInitializer {
                 .run(args);
     }
 
-
 }
index c819351..377cffa 100644 (file)
@@ -24,140 +24,140 @@ import org.springframework.beans.factory.annotation.Value;
  */
 public class EventReaderConfig extends PropertiesConfig {
 
-       @Value("${event.domain.path}")
-       private String eventDomainPath;
+    @Value("${event.domain.path}")
+    private String eventDomainPath;
 
     @Value("${event.action.path}")
-       private String eventActionPath;
+    private String eventActionPath;
 
-       @Value("${event.type.path}")
-       private String eventTypePath;
+    @Value("${event.type.path}")
+    private String eventTypePath;
 
-       @Value("${event.entity.type.path}")
-       private String entityTypePath;
+    @Value("${event.entity.type.path}")
+    private String entityTypePath;
 
-       @Value("${event.entity.type.top.path}")
-       private String topEntityTypePath;
+    @Value("${event.entity.type.top.path}")
+    private String topEntityTypePath;
 
-       @Value("${event.entity.link.path}")
-       private String entityLinkPath;
+    @Value("${event.entity.link.path}")
+    private String entityLinkPath;
 
-       @Value("${event.entity.link.delimiter}")
-       private String entityLinkDelimiter;
-
-       @Value("${event.entity.path}")
-       private String entityPath;
-
-       @Value("${event.entity.nested.path}")
-       private String nestedEntityPath;
-
-       /** Entity relative path. Use when the entity has been extracted from the event. */
-       @Value("${entity.id.path}")
-       private String entityIdPath;
-
-       /** Entity relative path. Use when the entity has been extracted from the event. */
-       @Value("${entity.resource.version.path}")
-       private String entityResourceVersionPath;
-
-       public String getEventDomainPath() {
-               return eventDomainPath;
-       }
-
-       public void setEventDomainPath(String eventDomainPath) {
-               this.eventDomainPath = eventDomainPath;
-       }
-
-       public String getEventActionPath() {
-               return eventActionPath;
-       }
-
-       public void setEventActionPath(String eventActionPath) {
-               this.eventActionPath = eventActionPath;
-       }
-
-       public String getEventTypePath() {
-               return eventTypePath;
-       }
-
-       public void setEventTypePath(String eventTypePath) {
-               this.eventTypePath = eventTypePath;
-       }
-
-       public String getTopEntityTypePath() {
-               return topEntityTypePath;
-       }
-
-       public void setTopEntityTypePath(String topEntityTypePath) {
-               this.topEntityTypePath = topEntityTypePath;
-       }
-
-       public String getEntityLinkPath() {
-               return entityLinkPath;
-       }
-
-       public void setEntityLinkPath(String entityLinkPath) {
-               this.entityLinkPath = entityLinkPath;
-       }
-
-       public String getEntityLinkDelimiter() {
-               return entityLinkDelimiter;
-       }
-
-       public void setEntityLinkDelimiter(String entityLinkDelimiter) {
-               this.entityLinkDelimiter = entityLinkDelimiter;
-       }
-
-       public String getEntityTypePath() {
-               return entityTypePath;
-       }
-
-       public void setEntityTypePath(String entityTypePath) {
-               this.entityTypePath = entityTypePath;
-       }
-
-       public String getEntityPath() {
-               return entityPath;
-       }
-
-       public void setEntityPath(String entityPath) {
-               this.entityPath = entityPath;
-       }
-
-       /**
-        * Formats the nested entity path using the entity type provided.
-        *
-        * @param entityType
-        *            an entity type
-        * @return the formatted nested entity path
-        */
-       public String getNestedEntityPath(String entityType) {
-               return formatter(nestedEntityPath, entityType);
-       }
-
-       public void setNestedEntityPath(String nestedEntityPath) {
-               this.nestedEntityPath = nestedEntityPath;
-       }
-
-       /**
-        * Formats the entity ID path using the entity type provided.
-        *
-        * @param entityType
-        *            an entity type
-        * @return the formatted entity ID path
-        */
-       public String getEntityIdPath(String entityType) {
-               return formatter(entityIdPath, entityType);
-       }
-
-       public void setEntityIdPath(String entityIdPath) {
-               this.entityIdPath = entityIdPath;
-       }
-
-       public String getEntityResourceVersionPath() {
-               return entityResourceVersionPath;
-       }
-
-       public void setEntityResourceVersionPath(String entityResourceVersionPath) {
-               this.entityResourceVersionPath = entityResourceVersionPath;
-       }
-}
\ No newline at end of file
+    @Value("${event.entity.link.delimiter}")
+    private String entityLinkDelimiter;
+
+    @Value("${event.entity.path}")
+    private String entityPath;
+
+    @Value("${event.entity.nested.path}")
+    private String nestedEntityPath;
+
+    /** Entity relative path. Use when the entity has been extracted from the event. */
+    @Value("${entity.id.path}")
+    private String entityIdPath;
+
+    /** Entity relative path. Use when the entity has been extracted from the event. */
+    @Value("${entity.resource.version.path}")
+    private String entityResourceVersionPath;
+
+    public String getEventDomainPath() {
+        return eventDomainPath;
+    }
+
+    public void setEventDomainPath(String eventDomainPath) {
+        this.eventDomainPath = eventDomainPath;
+    }
+
+    public String getEventActionPath() {
+        return eventActionPath;
+    }
+
+    public void setEventActionPath(String eventActionPath) {
+        this.eventActionPath = eventActionPath;
+    }
+
+    public String getEventTypePath() {
+        return eventTypePath;
+    }
+
+    public void setEventTypePath(String eventTypePath) {
+        this.eventTypePath = eventTypePath;
+    }
+
+    public String getTopEntityTypePath() {
+        return topEntityTypePath;
+    }
+
+    public void setTopEntityTypePath(String topEntityTypePath) {
+        this.topEntityTypePath = topEntityTypePath;
+    }
+
+    public String getEntityLinkPath() {
+        return entityLinkPath;
+    }
+
+    public void setEntityLinkPath(String entityLinkPath) {
+        this.entityLinkPath = entityLinkPath;
+    }
+
+    public String getEntityLinkDelimiter() {
+        return entityLinkDelimiter;
+    }
+
+    public void setEntityLinkDelimiter(String entityLinkDelimiter) {
+        this.entityLinkDelimiter = entityLinkDelimiter;
+    }
+
+    public String getEntityTypePath() {
+        return entityTypePath;
+    }
+
+    public void setEntityTypePath(String entityTypePath) {
+        this.entityTypePath = entityTypePath;
+    }
+
+    public String getEntityPath() {
+        return entityPath;
+    }
+
+    public void setEntityPath(String entityPath) {
+        this.entityPath = entityPath;
+    }
+
+    /**
+     * Formats the nested entity path using the entity type provided.
+     *
+     * @param entityType
+     *        an entity type
+     * @return the formatted nested entity path
+     */
+    public String getNestedEntityPath(String entityType) {
+        return formatter(nestedEntityPath, entityType);
+    }
+
+    public void setNestedEntityPath(String nestedEntityPath) {
+        this.nestedEntityPath = nestedEntityPath;
+    }
+
+    /**
+     * Formats the entity ID path using the entity type provided.
+     *
+     * @param entityType
+     *        an entity type
+     * @return the formatted entity ID path
+     */
+    public String getEntityIdPath(String entityType) {
+        return formatter(entityIdPath, entityType);
+    }
+
+    public void setEntityIdPath(String entityIdPath) {
+        this.entityIdPath = entityIdPath;
+    }
+
+    public String getEntityResourceVersionPath() {
+        return entityResourceVersionPath;
+    }
+
+    public void setEntityResourceVersionPath(String entityResourceVersionPath) {
+        this.entityResourceVersionPath = entityResourceVersionPath;
+    }
+}
index 02e14bc..d4b01b1 100644 (file)
@@ -25,15 +25,15 @@ import org.springframework.beans.factory.annotation.Value;
  */
 public class ModelConfig {
 
-       @Value("${model.cache.expirySeconds}")
-       private Long modelCacheExpirySeconds;
+    @Value("${model.cache.expirySeconds}")
+    private Long modelCacheExpirySeconds;
 
-       public Long getModelCacheExpirySeconds() {
-               return modelCacheExpirySeconds;
-       }
+    public Long getModelCacheExpirySeconds() {
+        return modelCacheExpirySeconds;
+    }
 
-       public void setModelCacheExpirySeconds(Long modelCacheExpirySeconds) {
-               this.modelCacheExpirySeconds = modelCacheExpirySeconds;
-       }
+    public void setModelCacheExpirySeconds(Long modelCacheExpirySeconds) {
+        this.modelCacheExpirySeconds = modelCacheExpirySeconds;
+    }
 
-}
\ No newline at end of file
+}
index cf4bcb2..9232c4c 100644 (file)
@@ -24,18 +24,18 @@ import java.text.MessageFormat;
  */
 public class PropertiesConfig {
 
-       /**
-        * Replaces place-holders in property values.
-        *
-        * @param s
-        *            a string with place-holders in the form {n}
-        * @param args
-        *            values for place-holders
-        * @return a formated String with replaced place-holders.
-        */
-       public String formatter(String s, Object... args) {
-               MessageFormat formatter = new MessageFormat("");
-               formatter.applyPattern(s);
-               return formatter.format(args);
-       }
+    /**
+     * Replaces place-holders in property values.
+     *
+     * @param s
+     *        a string with place-holders in the form {n}
+     * @param args
+     *        values for place-holders
+     * @return a formated String with replaced place-holders.
+     */
+    public String formatter(String s, Object... args) {
+        MessageFormat formatter = new MessageFormat("");
+        formatter.applyPattern(s);
+        return formatter.format(args);
+    }
 }
index e99d6c2..344c203 100644 (file)
@@ -111,7 +111,7 @@ public class RestConfig {
      * @return the decrypted password
      */
     public String getTrustStorePassword() {
-       return trustStorePassword;
+        return trustStorePassword;
     }
 
     public void setTrustStorePassword(String trustStorePassword) {
@@ -132,7 +132,7 @@ public class RestConfig {
      * @return the decrypted password
      */
     public String getKeyStorePassword() {
-       return keyStorePassword;
+        return keyStorePassword;
     }
 
     public void setKeyStorePassword(String keyStorePassword) {
index 1d27705..67b0b8a 100644 (file)
@@ -65,7 +65,7 @@ public class RuleIndexingConfig extends PropertiesConfig {
     }
 
     public boolean skipOxmValidation(String event) {
-        if(excludedOxmValidationEvents == null) {
+        if (excludedOxmValidationEvents == null) {
             return false;
         }
         return excludedOxmValidationEvents.contains(event);
index ccf5d51..327db5e 100644 (file)
@@ -46,7 +46,7 @@ public class TopicConfig {
     List<Topic> publisherTopics = new ArrayList<>();
 
     @Autowired
-    public TopicConfig (@Value("${consumer.topic.names}") final String consumerNames,
+    public TopicConfig(@Value("${consumer.topic.names}") final String consumerNames,
             @Value("${publisher.topic.names}") final String publisherNames) {
         consumerTopicNames = Arrays.asList(consumerNames.split(","));
         publisherTopicNames = Arrays.asList(publisherNames.split(","));
@@ -57,8 +57,7 @@ public class TopicConfig {
      *
      * @return a list of topic configurations.
      */
-    public List<Topic> getConsumerTopics()
-    {
+    public List<Topic> getConsumerTopics() {
         return populateTopics(consumerTopics, consumerTopicNames);
     }
 
@@ -73,31 +72,31 @@ public class TopicConfig {
     }
 
     /**
-        * Populates the topics list with topic objects created from each item in the topicNames list.
-        *
-        * @param topics
-        *            The topic list to populate.
-        * @param topicNames
-        *            The list of topic names to populate the topic list with.
-        * @return The populated topic list.
-        */
-       private List<Topic> populateTopics(List<Topic> topics, List<String> topicNames) {
-               if (topics.isEmpty()) {
-                       for (String topicName : topicNames) {
-                               Topic topicConfig = new Topic();
-                               topicConfig.setName(getTopicProperties().getProperty(topicName + ".name"));
-                               topicConfig.setHost(getTopicProperties().getProperty(topicName + ".host"));
-                               topicConfig.setUsername(getTopicProperties().getProperty(topicName + ".username"));
-                               topicConfig.setPassword(getTopicProperties().getProperty(topicName + ".password"));
-                               topicConfig.setPartition(getTopicProperties().getProperty(topicName + ".publisher.partition"));
-                               topicConfig.setConsumerGroup(getTopicProperties().getProperty(topicName + ".consumer.group"));
-                               topicConfig.setConsumerId(getTopicProperties().getProperty(topicName + ".consumer.id"));
-                               topicConfig.setTransportType(getTopicProperties().getProperty(topicName + ".transport.type"));
-                               topics.add(topicConfig);
-                       }
-               }
-               return topics;
-       }
+     * Populates the topics list with topic objects created from each item in the topicNames list.
+     *
+     * @param topics
+     *        The topic list to populate.
+     * @param topicNames
+     *        The list of topic names to populate the topic list with.
+     * @return The populated topic list.
+     */
+    private List<Topic> populateTopics(List<Topic> topics, List<String> topicNames) {
+        if (topics.isEmpty()) {
+            for (String topicName : topicNames) {
+                Topic topicConfig = new Topic();
+                topicConfig.setName(getTopicProperties().getProperty(topicName + ".name"));
+                topicConfig.setHost(getTopicProperties().getProperty(topicName + ".host"));
+                topicConfig.setUsername(getTopicProperties().getProperty(topicName + ".username"));
+                topicConfig.setPassword(getTopicProperties().getProperty(topicName + ".password"));
+                topicConfig.setPartition(getTopicProperties().getProperty(topicName + ".publisher.partition"));
+                topicConfig.setConsumerGroup(getTopicProperties().getProperty(topicName + ".consumer.group"));
+                topicConfig.setConsumerId(getTopicProperties().getProperty(topicName + ".consumer.id"));
+                topicConfig.setTransportType(getTopicProperties().getProperty(topicName + ".transport.type"));
+                topics.add(topicConfig);
+            }
+        }
+        return topics;
+    }
 
     public List<String> getConsumerTopicNames() {
         return consumerTopicNames;
@@ -161,7 +160,7 @@ public class TopicConfig {
         }
 
         public String getPassword() {
-               return password;
+            return password;
         }
 
         public void setPassword(String password) {
@@ -206,8 +205,8 @@ public class TopicConfig {
 
         @Override
         public int hashCode() {
-            return Objects.hash(this.consumerGroup, this.consumerId, this.host, this.username, this.name, this.partition,
-                    this.password, this.transportType);
+            return Objects.hash(this.consumerGroup, this.consumerId, this.host, this.username, this.name,
+                    this.partition, this.password, this.transportType);
         }
 
         @Override
@@ -234,8 +233,8 @@ public class TopicConfig {
 
         @Override
         public String toString() {
-            return "Topic [name=" + name + ", host=" + host + ", username=" + username + ", password=" + password + ", partition="
-                    + partition + ", consumerGroup=" + consumerGroup + ", consumerId=" + consumerId
+            return "Topic [name=" + name + ", host=" + host + ", username=" + username + ", password=" + password
+                    + ", partition=" + partition + ", consumerGroup=" + consumerGroup + ", consumerId=" + consumerId
                     + ", transportType =" + transportType + "]";
         }
     }
index 4742cef..4a2dc16 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * ============LICENSE_START===================================================
  * Copyright (c) 2018 Amdocs
  * ============================================================================
@@ -6,7 +6,7 @@
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *        http://www.apache.org/licenses/LICENSE-2.0
+ *       http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  */
 package org.onap.aai.validation.config;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+import org.onap.aai.validation.logging.ApplicationMsgs;
 import org.onap.aai.validation.logging.LogHelper;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.config.PropertiesFactoryBean;
-import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
 @Configuration
 public class TopicPropertiesConfig {
 
@@ -38,38 +40,28 @@ public class TopicPropertiesConfig {
     @Value("${topics.properties.location}")
     private String topicsPropertiesLocation;
 
-    private static final String[] TOPICS_PROPERTIES_LOCATION_TPL = { "file:./%s/*.properties", "classpath:/%s/*.properties" };
+    private static final String[] propertyFilePatterns = { "file:./%s/*.properties", "classpath:/%s/*.properties" };
 
-    @Bean(name="topicProperties")
+    @Bean(name = "topicProperties")
     public Properties topicProperties() throws IOException {
-        PropertiesFactoryBean config = new PropertiesFactoryBean();
         PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-        List<Resource> resouceList = new ArrayList<Resource>();
-        try {
-            for (String p : bldrsPropLoc2Path(topicsPropertiesLocation)) {
-                Resource[] resources = resolver.getResources(p);
-                if (resources != null && resources.length > 0) {
-                    for (Resource resource : resources) {
-                        resouceList.add(resource);
-                    }
-                    break;
-                }
+        List<Resource> resourceList = new ArrayList<>();
+        for (String patternTemplate : propertyFilePatterns) {
+            String pattern = String.format(patternTemplate, topicsPropertiesLocation).replace("//", "/");
+            applicationLogger.info(ApplicationMsgs.LOAD_PROPERTIES, "using pattern " + pattern);
+            try {
+                resourceList.addAll(Arrays.asList(resolver.getResources(pattern)));
+            } catch (FileNotFoundException e) {
+                applicationLogger.info(ApplicationMsgs.LOAD_PROPERTIES, e.getMessage());
             }
-        } catch (Exception e) {
-            applicationLogger.logAuditError(e);
         }
-        config.setLocations(resouceList.toArray(new Resource[]{}));
+
+        applicationLogger.info(ApplicationMsgs.LOAD_PROPERTIES, resourceList.toString());
+
+        PropertiesFactoryBean config = new PropertiesFactoryBean();
+        config.setLocations(resourceList.toArray(new Resource[resourceList.size()]));
         config.afterPropertiesSet();
         return config.getObject();
     }
 
-    private static String[] bldrsPropLoc2Path(String topicsPropertiesLocation) {
-        String[] res = new String[TOPICS_PROPERTIES_LOCATION_TPL.length];
-        int indx = 0;
-        for (String tmpl : TOPICS_PROPERTIES_LOCATION_TPL) {
-            res[indx++] = String.format(tmpl, topicsPropertiesLocation).replace("//", "/");
-        }
-        return res;
-    }
-
 }
index 4110175..af01be3 100644 (file)
@@ -25,52 +25,52 @@ import org.springframework.beans.factory.annotation.Value;
  */
 public class ValidationControllerConfig extends PropertiesConfig {
 
-       @Value("${event.domain}")
-       private String eventDomain;
+    @Value("${event.domain}")
+    private String eventDomain;
 
-       @Value("#{'${event.action.exclude}'.split(',')}")
-       private List<String> excludedEventActions;
+    @Value("#{'${event.action.exclude}'.split(',')}")
+    private List<String> excludedEventActions;
 
-       @Value("#{'${event.type.rule}'.split(',')}")
-       private List<String> eventTypeRule;
+    @Value("#{'${event.type.rule}'.split(',')}")
+    private List<String> eventTypeRule;
 
-       @Value("#{'${event.type.model}'.split(',')}")
-       private List<String> eventTypeModel;
+    @Value("#{'${event.type.model}'.split(',')}")
+    private List<String> eventTypeModel;
 
-       @Value("${event.type.end:END-EVENT}")
+    @Value("${event.type.end:END-EVENT}")
     private String eventTypeEnd;
 
-       public String getEventDomain() {
-               return eventDomain;
-       }
+    public String getEventDomain() {
+        return eventDomain;
+    }
 
-       public void setEventDomain(String eventDomain) {
-               this.eventDomain = eventDomain;
-       }
+    public void setEventDomain(String eventDomain) {
+        this.eventDomain = eventDomain;
+    }
 
-       public List<String> getExcludedEventActions() {
-               return excludedEventActions;
-       }
+    public List<String> getExcludedEventActions() {
+        return excludedEventActions;
+    }
 
-       public void setExcludedEventActions(List<String> excludedEventActions) {
-               this.excludedEventActions = excludedEventActions;
-       }
+    public void setExcludedEventActions(List<String> excludedEventActions) {
+        this.excludedEventActions = excludedEventActions;
+    }
 
-       public List<String> getEventTypeRule() {
-               return eventTypeRule;
-       }
+    public List<String> getEventTypeRule() {
+        return eventTypeRule;
+    }
 
-       public void setEventTypeRule(List<String> eventTypeRule) {
-               this.eventTypeRule = eventTypeRule;
-       }
+    public void setEventTypeRule(List<String> eventTypeRule) {
+        this.eventTypeRule = eventTypeRule;
+    }
 
-       public List<String> getEventTypeModel() {
-               return eventTypeModel;
-       }
+    public List<String> getEventTypeModel() {
+        return eventTypeModel;
+    }
 
-       public void setEventTypeModel(List<String> eventTypeModel) {
-               this.eventTypeModel = eventTypeModel;
-       }
+    public void setEventTypeModel(List<String> eventTypeModel) {
+        this.eventTypeModel = eventTypeModel;
+    }
 
     public String getEventTypeEnd() {
         return eventTypeEnd;
index 62280fa..cd42e02 100644 (file)
@@ -21,26 +21,26 @@ import org.springframework.beans.factory.annotation.Value;
 
 public class ValidationServiceAuthConfig {
 
-       @Value("${auth.authentication.disable}")
-       private boolean authenticationDisable;
+    @Value("${auth.authentication.disable}")
+    private boolean authenticationDisable;
 
-       @Value("${auth.policy.file}")
-       private String authPolicyFile;
+    @Value("${auth.policy.file}")
+    private String authPolicyFile;
 
-       public boolean isAuthenticationDisable() {
-               return authenticationDisable;
-       }
+    public boolean isAuthenticationDisable() {
+        return authenticationDisable;
+    }
 
-       public void setAuthenticationDisable(boolean authenticationDisable) {
-               this.authenticationDisable = authenticationDisable;
-       }
+    public void setAuthenticationDisable(boolean authenticationDisable) {
+        this.authenticationDisable = authenticationDisable;
+    }
 
-       public String getAuthPolicyFile() {
-               return authPolicyFile;
-       }
+    public String getAuthPolicyFile() {
+        return authPolicyFile;
+    }
 
-       public void setAuthPolicyFile(String authPolicyFile) {
-               this.authPolicyFile = authPolicyFile;
-       }
+    public void setAuthPolicyFile(String authPolicyFile) {
+        this.authPolicyFile = authPolicyFile;
+    }
 
 }
index cf7aa38..5d4ab9d 100644 (file)
@@ -98,7 +98,6 @@ public class XMLModelParser {
         *            The XPath expression to run on the Node.
         * @return A List of Nodes representing the result of the XPath expression.
         */
-       @SuppressWarnings("unchecked")
        public static List<Node> getObjectsFromXPath(Node currentNode, String xPath) {
                return currentNode.selectNodes(xPath);
        }
index 7832e51..2d8544b 100644 (file)
@@ -41,276 +41,279 @@ import org.onap.aai.validation.reader.OxmReader;
  */
 public class InstanceReader {
 
-       private static final String MODEL_NAME = "model-name";
-       private static final String[] INVALID_ENTRIES = { "inventory-response-items", "extra-properties", MODEL_NAME };
-       private static final String RESOURCE_VERSION = "resource-version";
-       private static final String JSON_PATH_MODEL_ID = "$.*.persona-model-id";
-
-       private JsonReader jsonReader;
-       private OxmReader oxmReader;
-       private JsonParser jsonParser = new JsonParser();
-
-       /**
-        * @param jsonReader
-        * @param oxmReader
-        */
-       @Inject
-       public InstanceReader(JsonReader jsonReader, OxmReader oxmReader) {
-               this.jsonReader = jsonReader;
-               this.oxmReader = oxmReader;
-       }
-
-       public OxmReader getOxmReader() {
-               return oxmReader;
-       }
-
-       /**
-        * Gets object instance values.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @param mapping
-        *            defines the paths that allow the extraction of values from the object instance. This includes:
-        *            <ul>
-        *            <li>origin: path that serves as the starting point for the instance search</li>
-        *            <li>root: path to underlying instance objects that can be examined by recursively calling the
-        *            getValues method</li>
-        *            </ul>
-        *
-        * @return a {@link Multimap} of instances keyed by their model id.
-        * @throws ValidationServiceException
-        */
-       public Multimap<String, String> getValues(String json, ModelInstanceMapper mapping) throws ValidationServiceException {
-               Multimap<String, String> values = HashMultimap.create();
-
-               DocumentContext document = jsonReader.parse(json);
-
-               if (MappingType.RELATIONSHIP.equals(mapping.getMappingType())) {
-                       String rootPath = mapping.getInstance().getRoot();
-                       if (rootPath == null || rootPath.isEmpty()) {
-                               throw new ValidationServiceException(ValidationServiceError.INSTANCE_MAPPING_ROOT_ERROR);
-                       }
-
-                       JsonElement jsonElement = jsonReader.getJsonElement(document, rootPath);
-
-                       if (jsonElement instanceof JsonArray) {
-                               JsonArray jsonArray = jsonElement.getAsJsonArray();
-
-                               processRelatedObjects(values, jsonArray);
-                       }
-               } else {
-                       // We are dealing with attributes.
-                       String valuePath = mapping.getInstance().getValue();
-                       if (valuePath != null && !valuePath.isEmpty()) {
-                               List<String> attributes = jsonReader.get(json, valuePath);
-                               for (String attribute : attributes) {
-                                       values.put(attribute, null);
-                               }
-                       }
-               }
-
-               return values;
-       }
-
-       /**
-        * Gets the instance type, e.g. connector, pserver, etc.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @return the type of the entity
-        */
-       public String getInstanceType(String json) {
-               return getNamedQueryEntity(json).getEntityType();
-       }
-
-       /**
-        * Gets the id of the instance. Uses the {@link OxmReader} to identify the property holding the primary key.<br>
-        *
-        * WARNING: Some types of object appear to have more than one primary key. This method uses the first primary key.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @return the identifier of the object instance
-        * @throws ValidationServiceException
-        */
-       public String getInstanceId(String json) throws ValidationServiceException {
-               String instanceId = null;
-
-               InstanceEntity entity = getNamedQueryEntity(json);
-
-               List<String> primaryKeys = oxmReader.getPrimaryKeys(entity.getEntityType());
-
-               if (primaryKeys != null && !primaryKeys.isEmpty()) {
-                       JsonObject instance = entity.getObject().getAsJsonObject();
-                       JsonElement primaryKey = instance.get(primaryKeys.get(0));
-                       instanceId = primaryKey == null ? null : primaryKey.getAsString();
-               }
-
-               return instanceId;
-       }
-
-       /**
-        * Strips the instance out of its payload wrapping.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @param mappings
-        *            the definition of the paths that allow the extraction of the instance from the JSON payload
-        * @return
-        * @throws ValidationServiceException
-        */
-       public String getInstance(String json, List<ModelInstanceMapper> mappings) throws ValidationServiceException {
-               String origin = mappings.iterator().next().getInstance().getOrigin();
-               List<String> jsonList = jsonReader.get(json, origin);
-
-               if (!jsonList.isEmpty()) {
-                       return jsonList.get(0);
-               } else {
-                       throw new ValidationServiceException(ValidationServiceError.INSTANCE_READER_NO_INSTANCE, origin, json);
-               }
-       }
-
-       /**
-        * Extracts the entity from a Named Query JSON payload.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @return an {@link InstanceEntity} object
-        */
-       public InstanceEntity getNamedQueryEntity(String json) {
-               return getNamedQueryEntity(jsonParser.parse(json).getAsJsonObject());
-       }
-
-       /**
-        * Gets the model identifier of a given entity.
-        *
-        * @param entity
-        *            a JSON entity
-        * @return a model identifier attribute value if the attribute exists else a null is returned.
-        * @throws ValidationServiceException
-        */
-       public String getModelId(String entity) throws ValidationServiceException {
-               String modelId = null;
-               List<String> readResult = jsonReader.get(entity, JSON_PATH_MODEL_ID);
-               if (!readResult.isEmpty()) {
-                       modelId = readResult.get(0);
-               }
-               return modelId;
-       }
-
-       /**
-        * Gets the resource version of the instance.
-        *
-        * @param json
-        *            a Named Query JSON payload
-        * @return the resource version of the object instance
-        */
-       public String getResourceVersion(String json) {
-               String resourceVersion = null;
-
-               InstanceEntity entity = getNamedQueryEntity(json);
-
-               if (entity != null && entity.getObject() != null && entity.getObject().getAsJsonObject().has(RESOURCE_VERSION)) {
-                       resourceVersion = entity.getObject().getAsJsonObject().get(RESOURCE_VERSION).getAsString();
-               }
-               return resourceVersion;
-       }
-
-       /**
-        * Gets the model name of the instance.
-        *
-        * @param jsonString
-        *            a Named Query JSON payload
-        * @return the model name of the object instance
-        * @throws ValidationServiceException
-        */
-       public String getModelName(String jsonString) {
-               JsonObject jsonObject = jsonParser.parse(jsonString).getAsJsonObject();
-               return getModelName(jsonObject);
-       }
-
-       /**
-        * @param jsonObject
-        * @return
-        */
-       private String getModelName(JsonObject jsonObject) {
-               for (Entry<String, JsonElement> entry : jsonObject.entrySet()) {
-                       if (MODEL_NAME.equals(entry.getKey())) {
-                               return entry.getValue().getAsString();
-                       }
-               }
-               return null;
-       }
-
-       private void processRelatedObjects(Multimap<String, String> values, JsonArray jsonArray) {
-               for (JsonElement relatedObject : jsonArray) {
-                       JsonObject jsonObject = relatedObject.getAsJsonObject();
-
-                       InstanceEntity entity = getNamedQueryEntity(jsonObject);
-                       if (entity != null) {
-                               values.put(entity.getModelName() == null ? entity.getEntityType() : entity.getModelName(), jsonObject.toString());
-                       }
-               }
-       }
-
-       private InstanceEntity getNamedQueryEntity(JsonObject jsonObject) {
-               Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
-
-               String modelName = getModelName(jsonObject);
-
-               for (Entry<String, JsonElement> entry : entrySet) {
-                       if (!Arrays.asList(INVALID_ENTRIES).contains(entry.getKey())) {
-                               return new InstanceEntity(entry.getKey(), modelName, entry.getValue().getAsJsonObject(), jsonObject);
-                       }
-               }
-
-               return null;
-       }
-
-       /**
-        * An Entity bean for the InstanceReader
-        *
-        */
-       public class InstanceEntity {
-
-               private String entityType;
-               private String modelName;
-               private JsonObject object;
-               private JsonObject objectAndGraph;
-
-               /**
-                * @param entityType
-                * @param modelName
-                * @param object
-                * @param objectAndGraph
-                */
-               public InstanceEntity(String entityType, String modelName, JsonObject object, JsonObject objectAndGraph) {
-                       this.entityType = entityType;
-                       this.modelName = modelName;
-                       this.object = object;
-                       this.objectAndGraph = objectAndGraph;
-               }
-
-               public String getEntityType() {
-                       return entityType;
-               }
-
-               public String getModelName() {
-                       return modelName;
-               }
-
-               public JsonObject getObject() {
-                       return object;
-               }
-
-               public JsonObject getObjectAndGraph() {
-                       return objectAndGraph;
-               }
-
-               @Override
-               public String toString() {
-                       return "Entity [entityType=" + entityType + ", modelName=" + modelName + ", object=" + object.toString() + ", fullObject="
-                                       + objectAndGraph.toString() + "]";
-               }
-       }
-}
\ No newline at end of file
+    private static final String MODEL_NAME = "model-name";
+    private static final String[] INVALID_ENTRIES = { "inventory-response-items", "extra-properties", MODEL_NAME };
+    private static final String RESOURCE_VERSION = "resource-version";
+    private static final String JSON_PATH_MODEL_ID = "$.*.persona-model-id";
+
+    private JsonReader jsonReader;
+    private OxmReader oxmReader;
+    private JsonParser jsonParser = new JsonParser();
+
+    /**
+     * @param jsonReader
+     * @param oxmReader
+     */
+    @Inject
+    public InstanceReader(JsonReader jsonReader, OxmReader oxmReader) {
+        this.jsonReader = jsonReader;
+        this.oxmReader = oxmReader;
+    }
+
+    public OxmReader getOxmReader() {
+        return oxmReader;
+    }
+
+    /**
+     * Gets object instance values.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @param mapping
+     *        defines the paths that allow the extraction of values from the object instance. This includes:
+     *        <ul>
+     *        <li>origin: path that serves as the starting point for the instance search</li>
+     *        <li>root: path to underlying instance objects that can be examined by recursively calling the getValues
+     *        method</li>
+     *        </ul>
+     *
+     * @return a {@link Multimap} of instances keyed by their model id.
+     * @throws ValidationServiceException
+     */
+    public Multimap<String, String> getValues(String json, ModelInstanceMapper mapping)
+            throws ValidationServiceException {
+        Multimap<String, String> values = HashMultimap.create();
+
+        DocumentContext document = jsonReader.parse(json);
+
+        if (MappingType.RELATIONSHIP.equals(mapping.getMappingType())) {
+            String rootPath = mapping.getInstance().getRoot();
+            if (rootPath == null || rootPath.isEmpty()) {
+                throw new ValidationServiceException(ValidationServiceError.INSTANCE_MAPPING_ROOT_ERROR);
+            }
+
+            JsonElement jsonElement = jsonReader.getJsonElement(document, rootPath);
+
+            if (jsonElement instanceof JsonArray) {
+                JsonArray jsonArray = jsonElement.getAsJsonArray();
+
+                processRelatedObjects(values, jsonArray);
+            }
+        } else {
+            // We are dealing with attributes.
+            String valuePath = mapping.getInstance().getValue();
+            if (valuePath != null && !valuePath.isEmpty()) {
+                List<String> attributes = jsonReader.get(json, valuePath);
+                for (String attribute : attributes) {
+                    values.put(attribute, null); // NOSONAR
+                }
+            }
+        }
+
+        return values;
+    }
+
+    /**
+     * Gets the instance type, e.g. connector, pserver, etc.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @return the type of the entity
+     */
+    public String getInstanceType(String json) {
+        return getNamedQueryEntity(json).getEntityType();
+    }
+
+    /**
+     * Gets the id of the instance. Uses the {@link OxmReader} to identify the property holding the primary key.<br>
+     *
+     * WARNING: Some types of object appear to have more than one primary key. This method uses the first primary key.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @return the identifier of the object instance
+     * @throws ValidationServiceException
+     */
+    public String getInstanceId(String json) throws ValidationServiceException {
+        String instanceId = null;
+
+        InstanceEntity entity = getNamedQueryEntity(json);
+
+        List<String> primaryKeys = oxmReader.getPrimaryKeys(entity.getEntityType());
+
+        if (primaryKeys != null && !primaryKeys.isEmpty()) {
+            JsonObject instance = entity.getObject().getAsJsonObject();
+            JsonElement primaryKey = instance.get(primaryKeys.get(0));
+            instanceId = primaryKey == null ? null : primaryKey.getAsString();
+        }
+
+        return instanceId;
+    }
+
+    /**
+     * Strips the instance out of its payload wrapping.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @param mappings
+     *        the definition of the paths that allow the extraction of the instance from the JSON payload
+     * @return
+     * @throws ValidationServiceException
+     */
+    public String getInstance(String json, List<ModelInstanceMapper> mappings) throws ValidationServiceException {
+        String origin = mappings.iterator().next().getInstance().getOrigin();
+        List<String> jsonList = jsonReader.get(json, origin);
+
+        if (!jsonList.isEmpty()) {
+            return jsonList.get(0);
+        } else {
+            throw new ValidationServiceException(ValidationServiceError.INSTANCE_READER_NO_INSTANCE, origin, json);
+        }
+    }
+
+    /**
+     * Extracts the entity from a Named Query JSON payload.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @return an {@link InstanceEntity} object
+     */
+    public InstanceEntity getNamedQueryEntity(String json) {
+        return getNamedQueryEntity(jsonParser.parse(json).getAsJsonObject());
+    }
+
+    /**
+     * Gets the model identifier of a given entity.
+     *
+     * @param entity
+     *        a JSON entity
+     * @return a model identifier attribute value if the attribute exists else a null is returned.
+     * @throws ValidationServiceException
+     */
+    public String getModelId(String entity) throws ValidationServiceException {
+        String modelId = null;
+        List<String> readResult = jsonReader.get(entity, JSON_PATH_MODEL_ID);
+        if (!readResult.isEmpty()) {
+            modelId = readResult.get(0);
+        }
+        return modelId;
+    }
+
+    /**
+     * Gets the resource version of the instance.
+     *
+     * @param json
+     *        a Named Query JSON payload
+     * @return the resource version of the object instance
+     */
+    public String getResourceVersion(String json) {
+        String resourceVersion = null;
+
+        InstanceEntity entity = getNamedQueryEntity(json);
+
+        if (entity != null && entity.getObject() != null
+                && entity.getObject().getAsJsonObject().has(RESOURCE_VERSION)) {
+            resourceVersion = entity.getObject().getAsJsonObject().get(RESOURCE_VERSION).getAsString();
+        }
+        return resourceVersion;
+    }
+
+    /**
+     * Gets the model name of the instance.
+     *
+     * @param jsonString
+     *        a Named Query JSON payload
+     * @return the model name of the object instance
+     * @throws ValidationServiceException
+     */
+    public String getModelName(String jsonString) {
+        JsonObject jsonObject = jsonParser.parse(jsonString).getAsJsonObject();
+        return getModelName(jsonObject);
+    }
+
+    /**
+     * @param jsonObject
+     * @return
+     */
+    private String getModelName(JsonObject jsonObject) {
+        for (Entry<String, JsonElement> entry : jsonObject.entrySet()) {
+            if (MODEL_NAME.equals(entry.getKey())) {
+                return entry.getValue().getAsString();
+            }
+        }
+        return null;
+    }
+
+    private void processRelatedObjects(Multimap<String, String> values, JsonArray jsonArray) {
+        for (JsonElement relatedObject : jsonArray) {
+            JsonObject jsonObject = relatedObject.getAsJsonObject();
+
+            InstanceEntity entity = getNamedQueryEntity(jsonObject);
+            if (entity != null) {
+                values.put(entity.getModelName() == null ? entity.getEntityType() : entity.getModelName(),
+                        jsonObject.toString());
+            }
+        }
+    }
+
+    private InstanceEntity getNamedQueryEntity(JsonObject jsonObject) {
+        Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
+
+        String modelName = getModelName(jsonObject);
+
+        for (Entry<String, JsonElement> entry : entrySet) {
+            if (!Arrays.asList(INVALID_ENTRIES).contains(entry.getKey())) {
+                return new InstanceEntity(entry.getKey(), modelName, entry.getValue().getAsJsonObject(), jsonObject);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * An Entity bean for the InstanceReader
+     *
+     */
+    public class InstanceEntity {
+
+        private String entityType;
+        private String modelName;
+        private JsonObject object;
+        private JsonObject objectAndGraph;
+
+        /**
+         * @param entityType
+         * @param modelName
+         * @param object
+         * @param objectAndGraph
+         */
+        public InstanceEntity(String entityType, String modelName, JsonObject object, JsonObject objectAndGraph) {
+            this.entityType = entityType;
+            this.modelName = modelName;
+            this.object = object;
+            this.objectAndGraph = objectAndGraph;
+        }
+
+        public String getEntityType() {
+            return entityType;
+        }
+
+        public String getModelName() {
+            return modelName;
+        }
+
+        public JsonObject getObject() {
+            return object;
+        }
+
+        public JsonObject getObjectAndGraph() {
+            return objectAndGraph;
+        }
+
+        @Override
+        public String toString() {
+            return "Entity [entityType=" + entityType + ", modelName=" + modelName + ", object=" + object.toString()
+                    + ", fullObject=" + objectAndGraph.toString() + "]";
+        }
+    }
+}
index 04728a3..75dcefa 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * ============LICENSE_START===================================================
  * Copyright (c) 2018 Amdocs
  * ============================================================================
@@ -6,7 +6,7 @@
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *        http://www.apache.org/licenses/LICENSE-2.0
+ *       http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -37,200 +37,195 @@ import org.onap.aai.validation.modeldriven.parser.XMLModelParser;
  */
 public class ModelReader {
 
-       private static final String ATTRIBUTE_MODELTYPE = "model-type";
-
-       /**
-        * Do not instantiate an object of this class
-        */
-       private ModelReader() {
-               // Deliberately empty
-       }
-
-       /**
-        * Gets the values of a model element as defined by the model-instance mapping configuration. When the mapping
-        * type is "attribute", the multimap will be returned with a null value.
-        *
-        * @param modelElement
-        *            the model element from which the values will be extracted
-        * @param mapping
-        *            the model-instance mapping object defining the path to the model values
-        * @param modelCacheManager
-        *            the model cache manager used to retrieve further models
-        * @return a {@link Multimap} of model values.
-        * @throws ValidationServiceException
-        */
-       public static Multimap<String, Node> getValues(Node modelElement, ModelInstanceMapper mapping, ModelCacheManager modelCacheManager)
-                       throws ValidationServiceException {
-               Multimap<String, Node> values = HashMultimap.create();
-               
-               if (MappingType.ATTRIBUTE.equals(mapping.getMappingType())) {
-                       // Get attributes on current model element.
-                       Multimap<String, Node> modelValues = getModelValues(modelElement, mapping, false);
-                       if (modelValues.isEmpty()) {
-                               throw new ValidationServiceException(ValidationServiceError.MODEL_VALUE_ERROR,
-                                               mapping.getModel().getValue(), modelElement.asXML());
-                       }
-                       values.putAll(modelValues);
-               } else {
-                       // Get related objects.
-                       getValuesAndModels(modelElement, mapping, modelCacheManager, values);
-               }
-
-
-               return values;
-       }
-
-       /**
-        * Returns the model type property of the current model element.
-        *
-        * @param model
-        *            The current model element.
-        * @return the model type of the current element or null if not found.
-        */
-       public static String getModelType(Node model) {
-               String modelType = null;
-               List<Node> modelTypeElements = XMLModelParser.getObjectsFromXPath(model, ATTRIBUTE_MODELTYPE);
-               if (!modelTypeElements.isEmpty()) {
-                       modelType = modelTypeElements.iterator().next().getText();
-               }
-               return modelType;
-       }
-
-       /**
-        * @param model
-        * @param mapping
-        * @return True if supplied model is of type widget.
-        */
-       public static boolean isValidModelType(Node model, ModelInstanceMapper mapping) {
-               Collection<String> validTypes = mapping.getModel().getFilter().getValid();
-               return validTypes.isEmpty() ? false :validTypes.contains(getModelType(model));
-       }
-
-       /**
-        * Populates a Multimap of models. If a root and filter are defined in the mapping it will navigate the model to find a
-        * valid models according to the filter. If the root property is not defined a model is not returned.
-        *
-        * @param model
-        *            the model to be inspected
-        * @param mapping
-        *            the model-instance mapping object defining the root model
-        * @param modelCacheManager
-        *            the model cache manager used to retrieve further models
-        * @param models
-        *            a Multimap of models that will be populated with further models
-        * @throws ValidationServiceException
-        */
-       public static void getValuesAndModels(Node model, ModelInstanceMapper mapping, ModelCacheManager modelCacheManager, Multimap<String, Node> models) throws ValidationServiceException {
-               String root = mapping.getModel().getRoot();
-
-               if (root == null) {
-                       return;
-               }
-
-               List<Node> childModelElements = XMLModelParser.getObjectsFromXPath(model, root);
-               for (Node childModel : childModelElements) {
-                       // If the child element is a leaf, this could either mean the end of the hierarchy, or that we have
-                       // encountered a resource and need to retrieve a separate model to continue the model traversal.
-                       List<String> modelNames = getModelValuesList(childModel, mapping);
-                       if (!hasChildren(childModel, root) && !isValidModel(childModel, mapping) && mapping.getModel().getId() != null) {
-                               childModel = getChildModelNode(modelCacheManager, childModel, mapping);
-                       }
-
-                       if (isValidModel(childModel, mapping)) {
-                               for (String modelName : modelNames) {
-                                       models.put(modelName, childModel);
-                               }
-                       } else {
-                               getValuesAndModels(childModel, mapping, modelCacheManager, models);
-                       }
-               }
-       }
-
-       /**
-        * Find the next child model given a specific node.
-        *
-        * @param modelCacheManager
-        *            the model cache manager used to retrieve further models
-        * @param node
-        *            the top-level node under which child model nodes are searched
-        * @param rootXPath
-        *            the path expression to apply to the node to find child elements
-        * @param modelIdPath
-        *            the path expression to apply to the node to find the child model IDs
-        * @return either or the {@code node} if there were no matches for {@code id}
-        * @throws ValidationServiceException
-        */
-       private static Node getChildModelNode(ModelCacheManager modelCacheManager, Node node, ModelInstanceMapper mapping) throws ValidationServiceException {
-               Node childModel = node;
-
-               // Get the model for the specified node to check its type.
-               // Only one model ID is expected, although the API returns a list.
-               List<Node> childModelIds = XMLModelParser.getObjectsFromXPath(node, mapping.getModel().getId());
-
-               if (!childModelIds.isEmpty()) {
-                       // Found the child model ID, so retrieve the child model from cache.
-                       ModelId modelId = new ModelId(ModelId.ATTR_MODEL_NAME_VERSION_ID, childModelIds.iterator().next().getText());
-                       Node fullChildModel = modelCacheManager.get(modelId);
-
-                       if (fullChildModel != null && !isValidModelType(fullChildModel, mapping)) {
-                               // Child model is not a widget so replace current child model with the full child model
-                               // retrieved from the cache.
-                               List<Node> fullChildModelElements = XMLModelParser.getObjectsFromXPath(fullChildModel, mapping.getModel().getRoot());
-                               // Only one crown widget is expected, although the API returns a list.
-                               childModel = fullChildModelElements.isEmpty() ? node : fullChildModelElements.iterator().next();
-                       }
-               }
-
-               return childModel;
-       }
-
-       private static Multimap<String, Node> getModelValues(Node model, ModelInstanceMapper mapping, boolean addModel) {
-               Multimap<String, Node> values = HashMultimap.create();
-               List<String> valueStrings = getModelValuesList(model, mapping);
-               for (String value : valueStrings) {
-                       values.put(value, addModel ? model : null);
-               }
-               return values;
-       }
-
-       private static List<String> getModelValuesList(Node model, ModelInstanceMapper mapping) {
-               List<String> values = new ArrayList<>();
-               List<Node> valueElements = XMLModelParser.getObjectsFromXPath(model, mapping.getModel().getValue());
-               for (Node node : valueElements) {
-                       values.add(node.getText());
-               }
-               return values;
-       }
-
-       private static boolean isValidModel(Node node, ModelInstanceMapper mapping) {
-               Filter filter = mapping.getModel().getFilter();
-               if (filter == null) {
-                       return true;
-               }
-
-               List<String> valid = filter.getValid();
-               // If there are no valid values, return false.
-               if (valid.isEmpty()) {
-                       return false;
-               }
-
-               String filterXPath = filter.getPath();
-               if (filterXPath == null) {
-                       return false;
-               }
-
-               List<Node> filterNodes = XMLModelParser.getObjectsFromXPath(node, filterXPath);
-               for (Node filterNode : filterNodes) {
-                       String text = filterNode.getText();
-                       if (valid.contains(text)) {
-                               return true;
-                       }
-               }
-
-               return false;
-       }
-
-       private static boolean hasChildren(Node parent, String rootXPath) {
-               return !XMLModelParser.getObjectsFromXPath(parent, rootXPath).isEmpty();
-       }
-}
\ No newline at end of file
+    private static final String ATTRIBUTE_MODELTYPE = "model-type";
+
+    /**
+     * Do not instantiate an object of this class
+     */
+    private ModelReader() {
+        // Deliberately empty
+    }
+
+    /**
+     * Gets the values of a model element as defined by the model-instance mapping configuration. When the mapping type
+     * is "attribute", the multimap will be returned with a null value.
+     *
+     * @param modelElement
+     *        the model element from which the values will be extracted
+     * @param mapping
+     *        the model-instance mapping object defining the path to the model values
+     * @param modelCacheManager
+     *        the model cache manager used to retrieve further models
+     * @return a {@link Multimap} of model values.
+     * @throws ValidationServiceException
+     */
+    public static Multimap<String, Node> getValues(Node modelElement, ModelInstanceMapper mapping,
+            ModelCacheManager modelCacheManager) throws ValidationServiceException {
+        Multimap<String, Node> values = HashMultimap.create();
+
+        if (MappingType.ATTRIBUTE.equals(mapping.getMappingType())) {
+            // Get attributes on current model element.
+            Multimap<String, Node> modelValues = getModelValues(modelElement, mapping, false);
+            if (modelValues.isEmpty()) {
+                throw new ValidationServiceException(ValidationServiceError.MODEL_VALUE_ERROR,
+                        mapping.getModel().getValue(), modelElement.asXML());
+            }
+            values.putAll(modelValues);
+        } else {
+            // Get related objects.
+            getValuesAndModels(modelElement, mapping, modelCacheManager, values);
+        }
+
+
+        return values;
+    }
+
+    /**
+     * Returns the model type property of the current model element.
+     *
+     * @param model
+     *        The current model element.
+     * @return the model type of the current element or null if not found.
+     */
+    public static String getModelType(Node model) {
+        String modelType = null;
+        List<Node> modelTypeElements = XMLModelParser.getObjectsFromXPath(model, ATTRIBUTE_MODELTYPE);
+        if (!modelTypeElements.isEmpty()) {
+            modelType = modelTypeElements.iterator().next().getText();
+        }
+        return modelType;
+    }
+
+    /**
+     * @param model
+     * @param mapping
+     * @return True if supplied model is of type widget.
+     */
+    public static boolean isValidModelType(Node model, ModelInstanceMapper mapping) {
+        Collection<String> validTypes = mapping.getModel().getFilter().getValid();
+        return !validTypes.isEmpty() && validTypes.contains(getModelType(model));
+    }
+
+    /**
+     * Populates a Multimap of models. If a root and filter are defined in the mapping it will navigate the model to
+     * find a valid models according to the filter. If the root property is not defined a model is not returned.
+     *
+     * @param model
+     *        the model to be inspected
+     * @param mapping
+     *        the model-instance mapping object defining the root model
+     * @param modelCacheManager
+     *        the model cache manager used to retrieve further models
+     * @param models
+     *        a Multimap of models that will be populated with further models
+     * @throws ValidationServiceException
+     */
+    public static void getValuesAndModels(Node model, ModelInstanceMapper mapping, ModelCacheManager modelCacheManager,
+            Multimap<String, Node> models) throws ValidationServiceException {
+        String root = mapping.getModel().getRoot();
+
+        if (root == null) {
+            return;
+        }
+
+        List<Node> childModelElements = XMLModelParser.getObjectsFromXPath(model, root);
+        for (Node childModel : childModelElements) {
+            // If the child element is a leaf, this could either mean the end of the hierarchy, or that we have
+            // encountered a resource and need to retrieve a separate model to continue the model traversal.
+            List<String> modelNames = getModelValuesList(childModel, mapping);
+            if (!hasChildren(childModel, root) && !isValidModel(childModel, mapping.getModel().getFilter())
+                    && mapping.getModel().getId() != null) {
+                childModel = getChildModelNode(modelCacheManager, childModel, mapping);
+            }
+
+            if (isValidModel(childModel, mapping.getModel().getFilter())) {
+                for (String modelName : modelNames) {
+                    models.put(modelName, childModel);
+                }
+            } else {
+                getValuesAndModels(childModel, mapping, modelCacheManager, models);
+            }
+        }
+    }
+
+    /**
+     * Find the next child model given a specific node.
+     *
+     * @param modelCacheManager
+     *        the model cache manager used to retrieve further models
+     * @param node
+     *        the top-level node under which child model nodes are searched
+     * @param rootXPath
+     *        the path expression to apply to the node to find child elements
+     * @param modelIdPath
+     *        the path expression to apply to the node to find the child model IDs
+     * @return either or the {@code node} if there were no matches for {@code id}
+     * @throws ValidationServiceException
+     */
+    private static Node getChildModelNode(ModelCacheManager modelCacheManager, Node node, ModelInstanceMapper mapping)
+            throws ValidationServiceException {
+        Node childModel = node;
+
+        // Get the model for the specified node to check its type.
+        // Only one model ID is expected, although the API returns a list.
+        List<Node> childModelIds = XMLModelParser.getObjectsFromXPath(node, mapping.getModel().getId());
+
+        if (!childModelIds.isEmpty()) {
+            // Found the child model ID, so retrieve the child model from cache.
+            ModelId modelId =
+                    new ModelId(ModelId.ATTR_MODEL_NAME_VERSION_ID, childModelIds.iterator().next().getText());
+            Node fullChildModel = modelCacheManager.get(modelId);
+
+            if (fullChildModel != null && !isValidModelType(fullChildModel, mapping)) {
+                // Child model is not a widget so replace current child model with the full child model
+                // retrieved from the cache.
+                List<Node> fullChildModelElements =
+                        XMLModelParser.getObjectsFromXPath(fullChildModel, mapping.getModel().getRoot());
+                // Only one crown widget is expected, although the API returns a list.
+                childModel = fullChildModelElements.isEmpty() ? node : fullChildModelElements.iterator().next();
+            }
+        }
+
+        return childModel;
+    }
+
+    private static Multimap<String, Node> getModelValues(Node model, ModelInstanceMapper mapping, boolean addModel) {
+        Multimap<String, Node> values = HashMultimap.create();
+        List<String> valueStrings = getModelValuesList(model, mapping);
+        for (String value : valueStrings) {
+            values.put(value, addModel ? model : null); // NOSONAR
+        }
+        return values;
+    }
+
+    private static List<String> getModelValuesList(Node model, ModelInstanceMapper mapping) {
+        List<String> values = new ArrayList<>();
+        List<Node> valueElements = XMLModelParser.getObjectsFromXPath(model, mapping.getModel().getValue());
+        for (Node node : valueElements) {
+            values.add(node.getText());
+        }
+        return values;
+    }
+
+    private static boolean isValidModel(Node node, Filter filter) {
+        if (filter == null) {
+            return true;
+        }
+
+        final List<String> validValues = filter.getValid();
+
+        if (!validValues.isEmpty() && filter.getPath() != null) {
+            for (Node filterNode : XMLModelParser.getObjectsFromXPath(node, filter.getPath())) {
+                if (validValues.contains(filterNode.getText())) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    private static boolean hasChildren(Node parent, String rootXPath) {
+        return !XMLModelParser.getObjectsFromXPath(parent, rootXPath).isEmpty();
+    }
+}
index 2bc2d90..49b251e 100644 (file)
@@ -73,12 +73,15 @@ public class RuleDrivenValidator implements Validator {
     /**
      * Construct a Validator that is configured using rule files
      *
-     * @param configurationPath path to the Groovy rules files
-     * @param oxmReader required for validating entity types
-     * @param eventReader a reader for extracting entities from each event to be validated
+     * @param configurationPath
+     *        path to the Groovy rules files
+     * @param oxmReader
+     *        required for validating entity types
+     * @param eventReader
+     *        a reader for extracting entities from each event to be validated
      */
-    public RuleDrivenValidator(final Path configurationPath, final OxmReader oxmReader,
-            final EventReader eventReader, final RuleIndexingConfig ruleIndexingConfig) {
+    public RuleDrivenValidator(final Path configurationPath, final OxmReader oxmReader, final EventReader eventReader,
+            final RuleIndexingConfig ruleIndexingConfig) {
         this.configurationPath = configurationPath;
         this.oxmReader = oxmReader;
         this.eventReader = eventReader;
@@ -116,7 +119,7 @@ public class RuleDrivenValidator implements Validator {
     private void validateRulesConfiguration() throws ValidationServiceException {
         for (RuleManager ruleManager : ruleManagers.values()) {
             for (EntitySection entity : ruleManager.getEntities()) {
-                if(ruleIndexingConfig.isPresent() && ruleIndexingConfig.get().skipOxmValidation(entity.getName())) {
+                if (ruleIndexingConfig.isPresent() && ruleIndexingConfig.get().skipOxmValidation(entity.getName())) {
                     continue;
                 }
                 if (oxmReader != null && oxmReader.getPrimaryKeys(entity.getName()).isEmpty()) {
@@ -141,7 +144,6 @@ public class RuleDrivenValidator implements Validator {
 
     /*
      * (non-Javadoc)
-     *
      * @see org.onap.aai.validation.Validator#validate(java.lang.String)
      */
     @Override
@@ -173,7 +175,8 @@ public class RuleDrivenValidator implements Validator {
                     result.getSuccess() ? "pass" : "fail"));
 
             if (!result.getSuccess()) {
-                String errorMessage = MessageFormat.format(rule.getErrorMessage(), result.getErrorArguments().toArray());
+                String errorMessage =
+                        MessageFormat.format(rule.getErrorMessage(), result.getErrorArguments().toArray());
 
                 //@formatter:off
                 Violation violation = builder
@@ -200,8 +203,8 @@ public class RuleDrivenValidator implements Validator {
         if (eventType.isPresent()) {
             Optional<RuleManager> ruleManager = getRuleManager(eventType.get().toLowerCase(Locale.getDefault()));
             if (ruleManager.isPresent()) {
-                if (ruleIndexingConfig.isPresent() && ruleIndexingConfig.get().getIndexedEvents() != null &&
-                        ruleIndexingConfig.get().getIndexedEvents().contains(eventType.get())) {
+                if (ruleIndexingConfig.isPresent() && ruleIndexingConfig.get().getIndexedEvents() != null
+                        && ruleIndexingConfig.get().getIndexedEvents().contains(eventType.get())) {
                     rules = getRulesByIndex(entity, eventType.get(), ruleManager.get());
                 } else {
                     rules = Optional.of(ruleManager.get().getRulesForEntity(entity.getType()));
@@ -216,32 +219,35 @@ public class RuleDrivenValidator implements Validator {
         applicationLogger.debug(String.format("Retrieving indexed rules for key '%s'", rulesKey));
         Optional<List<Rule>> rules = Optional.of(ruleManager.getRulesForEntity(rulesKey));
         if (rules.get().isEmpty() && ruleIndexingConfig.isPresent()) {
-            if (ruleIndexingConfig.get().getDefaultIndexKey() == null || ruleIndexingConfig.get().getDefaultIndexKey().isEmpty()) {
+            if (ruleIndexingConfig.get().getDefaultIndexKey() == null
+                    || ruleIndexingConfig.get().getDefaultIndexKey().isEmpty()) {
                 applicationLogger.debug("Default index value not configured, unable to get rules");
                 applicationLogger.error(ApplicationMsgs.CANNOT_VALIDATE_ERROR, eventType);
                 return rules;
             }
-            String defaultKey = RuleManager.generateKey(new String[] {ruleIndexingConfig.get().getDefaultIndexKey()});
+            String defaultKey = RuleManager.generateKey(new String[] { ruleIndexingConfig.get().getDefaultIndexKey() });
             rules = Optional.of(ruleManager.getRulesForEntity(defaultKey));
         }
         return rules;
     }
 
     private String generateKey(Entity entity, String eventType) {
-        if (!ruleIndexingConfig.isPresent() || ruleIndexingConfig.get().getIndexAttributes() == null ||
-                ruleIndexingConfig.get().getIndexAttributes().isEmpty()) {
+        if (!ruleIndexingConfig.isPresent() || ruleIndexingConfig.get().getIndexAttributes() == null
+                || ruleIndexingConfig.get().getIndexAttributes().isEmpty()) {
             applicationLogger.debug(String.format(
-                    "Event '%s' is configured to use indexed rules but indexing attributes are not configured", eventType));
+                    "Event '%s' is configured to use indexed rules but indexing attributes are not configured",
+                    eventType));
             return "";
         }
         try {
             AttributeValues attributeValues = entity.getAttributeValues(ruleIndexingConfig.get().getIndexAttributes());
-            applicationLogger.debug("Generating index using attributes: " + attributeValues.generateReport().toString());
+            applicationLogger
+                    .debug("Generating index using attributes: " + attributeValues.generateReport().toString());
             Collection<Object> values = attributeValues.generateReport().values();
             return RuleManager.generateKey(values.stream().toArray(String[]::new));
         } catch (ValidationServiceException e) {
-            applicationLogger.debug("Failed to retrieve index key attributes from event");
-            applicationLogger.error(ApplicationMsgs.CANNOT_VALIDATE_ERROR, eventType);
+            applicationLogger.debug("Failed to retrieve index key attributes from event: " + e.getMessage());
+            applicationLogger.error(ApplicationMsgs.CANNOT_VALIDATE_ERROR, e, eventType);
             return "";
         }
     }
@@ -260,7 +266,8 @@ public class RuleDrivenValidator implements Validator {
     /**
      * Read the text content of the specified Path and append this to the specified String
      *
-     * @param sb StringBuilder for the rule configuration text
+     * @param sb
+     *        StringBuilder for the rule configuration text
      * @return a Consumer function that appends file content
      */
     private Consumer<? super Path> appendFileContent(StringBuilder sb) {
index efe82b8..30e28d8 100644 (file)
@@ -27,8 +27,6 @@ import javax.annotation.Resource;
 import javax.inject.Inject;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.aai.validation.config.TopicConfig;
-import org.onap.aai.validation.ValidationServiceApplication;
 import org.onap.aai.validation.config.TopicConfig.Topic;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -65,7 +63,7 @@ public class TestTopicConfig {
 
     @Test
     public void testGetConsumerTopicConfigurationObjects() throws Exception {
-        Topic eventTopic = new TopicConfig("aai-event","aai-data-integrity").new Topic();
+        Topic eventTopic = new TopicConfig("aai-event", "aai-data-integrity").new Topic();
         eventTopic.setName("aai-event");
         eventTopic.setHost("event-dummy-host");
         eventTopic.setUsername("event-dummy-username");
@@ -74,7 +72,7 @@ public class TestTopicConfig {
         eventTopic.setConsumerId("event-dummy-consumer-id");
         eventTopic.setTransportType("event-dummy-transport-type");
 
-        Topic exportTopic = new TopicConfig("aai-data-export","aai-data-integrity").new Topic();
+        Topic exportTopic = new TopicConfig("aai-data-export", "aai-data-integrity").new Topic();
         exportTopic.setName("aai-data-export");
         exportTopic.setHost("export-dummy-host");
         exportTopic.setUsername("export-dummy-username");
@@ -90,7 +88,7 @@ public class TestTopicConfig {
 
     @Test
     public void testGetPublisherTopicConfigurationObjects() throws Exception {
-        Topic integrityTopic = new TopicConfig("aai-data-export","aai-data-integrity").new Topic();
+        Topic integrityTopic = new TopicConfig("aai-data-export", "aai-data-integrity").new Topic();
         integrityTopic.setName("aai-data-integrity");
         integrityTopic.setHost("integrity-dummy-host");
         integrityTopic.setPartition("integrity-dummy-partition");