Use static constants instead
[cli.git] / profiles / http / src / main / java / org / onap / cli / fw / http / schema / OnapCommandSchemaHttpLoader.java
index a742473..55295aa 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.onap.cli.fw.cmd.OnapCommand;
+import org.onap.cli.fw.cmd.OnapCommandType;
 import org.onap.cli.fw.conf.OnapCommandConfig;
 import org.onap.cli.fw.conf.OnapCommandConstants;
 import org.onap.cli.fw.error.OnapCommandException;
@@ -46,13 +47,18 @@ import net.minidev.json.JSONObject;
 
 public class OnapCommandSchemaHttpLoader {
 
+    private static final String ATTRIBUTE = "Attribute '";
+
+    private OnapCommandSchemaHttpLoader() {
+        // to follow standards !
+    }
+
     public static List<String> loadHttpSchema(OnapHttpCommand cmd, String schemaName, boolean includeDefault,
                                           boolean validateSchema) throws OnapCommandException {
         try {
             List<String> errors = new ArrayList<>();
             if (includeDefault) {
-                Map<String, ?> defaultParameterMap = includeDefault ?
-                        OnapCommandSchemaLoader.validateSchemaVersion(OnapCommandHttpConstants.DEFAULT_PARAMETER_HTTP_FILE_NAME, cmd.getSchemaVersion()) : new HashMap<>();
+                Map<String, ?> defaultParameterMap = OnapCommandSchemaLoader.validateSchemaVersion(OnapCommandHttpConstants.DEFAULT_PARAMETER_HTTP_FILE_NAME, cmd.getSchemaVersion());
 
                 //mrkanag default_parameter is supported only for parameters.
                 if (defaultParameterMap.containsKey(OnapCommandConstants.INFO)) {
@@ -86,7 +92,7 @@ public class OnapCommandSchemaHttpLoader {
      * @throws OnapCommandException
      *             on error
      */
-    static ArrayList<String> parseHttpSchema(OnapHttpCommand cmd,
+    public static ArrayList<String> parseHttpSchema(OnapHttpCommand cmd,
                                                     final Map<String, ?> values,
                                                     boolean validate) throws OnapCommandException {
         ArrayList<String> errorList = new ArrayList<>();
@@ -96,7 +102,7 @@ public class OnapCommandSchemaHttpLoader {
             if (valMap != null) {
                 if (validate) {
                     OnapCommandUtils.validateTags(errorList, valMap, OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_SECTIONS),
-                            OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_MANDATORY_SECTIONS), OnapCommandConstants.PARAMETERS);
+                            OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_MANDATORY_SECTIONS), OnapCommandHttpConstants.HTTP);
                     errorList.addAll(validateHttpSchemaSection(values));
                 }
                 for (Map.Entry<String, ?> entry1 : valMap.entrySet()) {
@@ -131,6 +137,20 @@ public class OnapCommandSchemaHttpLoader {
                                             Map<String, String> query = (Map<String, String>) map.get(key2);
 
                                             cmd.getInput().setReqQueries(query);
+                                            break;
+                                        case OnapCommandHttpConstants.CONTEXT:
+                                            Map<String, Object> context = (Map<String, Object>) map.get(key2);
+
+                                            for (String key: context.keySet()) {
+                                                switch (key) {
+                                                    case OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES:
+                                                        Boolean flag = (Boolean) context.get(OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES);
+                                                        cmd.getInput().getContext().put(OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES, flag.toString());
+                                                        break;
+                                                }
+                                            }
+
+
                                             break;
                                         case OnapCommandHttpConstants.MULTIPART_ENTITY_NAME:
                                             Object multipartEntityName = map.get(key2);
@@ -160,11 +180,11 @@ public class OnapCommandSchemaHttpLoader {
                                         if (serviceMap.containsKey(secKey)) {
                                             Object obj = serviceMap.get(secKey);
                                             if (obj == null) {
-                                                errorList.add("Attribute '" + secKey + "' under '" + OnapCommandHttpConstants.SERVICE + "' is empty");
+                                                errorList.add(ATTRIBUTE + secKey + "' under '" + OnapCommandHttpConstants.SERVICE + "' is empty");
                                             } else {
                                                 String value = String.valueOf(obj);
                                                 if (!OnapCommandConfig.getCommaSeparatedList(validationMap.get(secKey)).contains(value)) {
-                                                    errorList.add("Attribute '" + secKey + "' contains invalid value. Valide values are "
+                                                    errorList.add(ATTRIBUTE + secKey + "' contains invalid value. Valide values are "
                                                             + OnapCommandConfig.getCommaSeparatedList(validationMap.get(key1))); //
                                                 }
                                             }
@@ -189,23 +209,15 @@ public class OnapCommandSchemaHttpLoader {
                                         case OnapCommandHttpConstants.AUTH:
                                             Object obj = serviceMap.get(key);
                                             srv.setAuthType(obj.toString());
-
-                                            //On None type, username, password and no_auth are invalid
-                                            if (srv.isNoAuth()) {
-                                                cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
-                                                cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
-                                                cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
-                                            }
                                             break;
 
-                                            //mrkanag: from auth command, add the parameters to the command's parameters list
-
                                         case OnapCommandHttpConstants.MODE:
                                             Object mode = serviceMap.get(key);
                                             srv.setMode(mode.toString());
                                             break;
                                     }
                                 }
+
                                 cmd.setService(srv);
                             }
                             break;
@@ -234,10 +246,34 @@ public class OnapCommandSchemaHttpLoader {
             OnapCommandUtils.throwOrCollect(e, errorList, validate);
         }
 
-        //Handle the parameters for auth
+        //Handle the parameters for auth:
+        // for commands, copy params from login command to this command
         if (!cmd.getService().isNoAuth()) {
-            OnapCommand login = OnapCommandSchemaHttpLoader.findAuthCommand(cmd, "login");
-            OnapCommandUtils.copyParamSchemasFrom(login, cmd);
+            if (cmd.getInfo().getCommandType().equals(OnapCommandType.AUTH)) {
+                OnapCommandUtils.throwOrCollect(new OnapCommandInvalidSchema(
+                        cmd.getSchemaName(), "For auth type commands, http->service->auth should be none"),
+                        errorList,
+                        validate);
+            } else {
+                OnapCommand login = OnapCommandSchemaHttpLoader.findAuthCommand(cmd, "login");
+                OnapCommandUtils.copyParamSchemasFrom(login, cmd);
+            }
+        } else {
+            //with service->auth: none,
+            //normal cmd: ignore all auth parms
+            if (!cmd.getInfo().getCommandType().equals(OnapCommandType.AUTH)) {
+                cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
+                cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
+                cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
+            } else {
+                //auth: login and logout commands, ignore no-auth
+                cmd.getParametersMap().get(OnapCommandHttpConstants.DEFAULT_PARAMETER_NO_AUTH).setInclude(false);
+                //auth: only for logout commands, ignore username and password too
+                if (!cmd.getName().endsWith(OnapCommandHttpConstants.AUTH_SERVICE_LOGIN)) {
+                    cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_USERNAME).setInclude(false);
+                    cmd.getParametersMap().get(OnapCommandHttpConstants.DEAFULT_PARAMETER_PASSWORD).setInclude(false);
+                }
+            }
         }
 
         return errorList;
@@ -254,7 +290,7 @@ public class OnapCommandSchemaHttpLoader {
             String method = (String) requestMap.get(OnapCommandHttpConstants.METHOD);
             if (method != null && !method.isEmpty()) {
                 if (!OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_METHODS).contains(method.toLowerCase())) {
-                    errorList.add("Attribute '" + OnapCommandHttpConstants.METHOD + "' under '" + OnapCommandHttpConstants.REQUEST + "' is invalid, correct types are "
+                    errorList.add(ATTRIBUTE + OnapCommandHttpConstants.METHOD + "' under '" + OnapCommandHttpConstants.REQUEST + "' is invalid, correct types are "
                             + OnapCommandConfig.getCommaSeparatedList(OnapCommandHttpConstants.HTTP_METHODS).toString());
                 }
             } else {
@@ -315,6 +351,9 @@ public class OnapCommandSchemaHttpLoader {
 
         List<String> invaliResultMapParams = resultMapParams.stream()
                 .filter(p -> !resultAttNames.contains(p)).collect(Collectors.toList());
+        List<String> attributesMissing = resultAttNames.stream()
+                .filter(p -> !resultMapParams.contains(p)).collect(Collectors.toList());
+        invaliResultMapParams.addAll(attributesMissing);
 
         if (!invaliResultMapParams.isEmpty()) {
             OnapCommandUtils.throwOrCollect(new OnapCommandHttpInvalidResultMap(invaliResultMapParams), errorList, true);
@@ -352,15 +391,17 @@ public class OnapCommandSchemaHttpLoader {
         }
 
         String body = String.valueOf(bodyString);
-        JSONObject obj = null;
-        try {
-            obj = new ObjectMapper().readValue(body, JSONObject.class);
-        } catch (IOException e1) { // NOSONAR
-            errorList.add(OnapCommandHttpConstants.HTTP_BODY_FAILED_PARSING);
-        }
-        if (obj == null || "".equals(obj.toString())) {
+
+        if (body == null || "".equals(body)) {
             errorList.add(OnapCommandHttpConstants.HTTP_BODY_JSON_EMPTY);
+        } else {
+            try {
+                new ObjectMapper().readValue(body, JSONObject.class);
+            } catch (IOException e1) { // NOSONAR
+                errorList.add(OnapCommandHttpConstants.HTTP_BODY_FAILED_PARSING);
+            }
         }
+
         OnapCommandUtils.parseParameters(body, bodyParamNames);
 
         return bodyParamNames;
@@ -414,7 +455,7 @@ public class OnapCommandSchemaHttpLoader {
                        forCmd.getInfo().getService() + "-" +
                        forCmd.getService().getAuthType() + "-" + authAction,
                        forCmd.getInfo().getProduct());
-           } catch (OnapCommandNotFound e) {
+           } catch (OnapCommandNotFound e) {  // NOSONAR
                auth = OnapCommandRegistrar.getRegistrar().get(
                        forCmd.getService().getAuthType() + "-" + authAction,
                        forCmd.getInfo().getProduct());