diff options
author | 2017-12-11 20:34:44 +0530 | |
---|---|---|
committer | 2017-12-12 15:48:55 +0530 | |
commit | 0d97a835fa2052ded5a31e8921baf641c8e9bb57 (patch) | |
tree | 800584529f77c8ff26f05a73abd3fa71205a69a7 /framework/src/main/java/org/onap | |
parent | 03c54a40daf75644ec0bcbc73636e3eb427c1604 (diff) |
Make Http as separate plugin
Issue-ID: CLI-66
Change-Id: I8ad78f417f6dbb00e29effdd3ed8ec1939aee81d
Signed-off-by: Kanagaraj Manickam k00365106 <kanagaraj.manickam@huawei.com>
Diffstat (limited to 'framework/src/main/java/org/onap')
43 files changed, 433 insertions, 2675 deletions
diff --git a/framework/src/main/java/org/onap/cli/fw/ad/OnapAuthClient.java b/framework/src/main/java/org/onap/cli/fw/ad/OnapAuthClient.java deleted file mode 100644 index 6a324808..00000000 --- a/framework/src/main/java/org/onap/cli/fw/ad/OnapAuthClient.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.ad; - -import java.util.HashMap; -import java.util.Map; - -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.OnapCommandRegistrar; -import org.onap.cli.fw.cmd.OnapHttpCommand; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; -import org.onap.cli.fw.error.OnapCommandException; -import org.onap.cli.fw.error.OnapCommandHttpFailure; -import org.onap.cli.fw.error.OnapCommandInvalidParameterValue; -import org.onap.cli.fw.error.OnapCommandNotFound; -import org.onap.cli.fw.http.HttpInput; -import org.onap.cli.fw.http.HttpResult; -import org.onap.cli.fw.http.OnapHttpConnection; -import org.onap.cli.fw.output.OnapCommandResultAttribute; -import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; -import org.onap.cli.fw.utils.OnapCommandUtils; - -/** - * Oclip Auth client helps to do login and logout. - * - */ -public class OnapAuthClient { - - private OnapHttpCommand cmd = null; - - private OnapHttpConnection http = null; - - public OnapAuthClient(OnapHttpCommand cmd, boolean debug) throws OnapCommandHttpFailure, OnapCommandInvalidParameterValue { - this.cmd = cmd; - this.http = new OnapHttpConnection(debug); - } - - /** - * Login. - * - * @throws OnapCommandException - * exception - */ - public void login() throws OnapCommandException { - - // For development purpose, its introduced and is not supported for production - if (OnapCommandConfg.isAuthIgnored()) { - return; - } - - OnapCommand login = OnapCommandDiscoveryUtils.findAuthCommand(this.cmd, "login"); - - OnapCommandUtils.copyParamsFrom(this.cmd, login); - login.execute(); - - //It is safely assumed that all outputs are considered as common http headers. - Map<String, String> headers = new HashMap<>(); - for (OnapCommandResultAttribute attr: login.getResult().getRecords()) { - String headerValue = attr.getValues().get(0); - if (headerValue != null && !headerValue.isEmpty()) { - headers.put(attr.getName(), attr.getValues().get(0)); - } - } - - this.http.setCommonHeaders(headers); - } - - /** - * Logout. - * - * @throws OnapCommandException - * exception - */ - public void logout() throws OnapCommandException { - // For development purpose, its introduced and is not supported for production - if (OnapCommandConfg.isAuthIgnored()) { - return; - } - - OnapCommand logout = OnapCommandDiscoveryUtils.findAuthCommand(this.cmd, "logout"); - - OnapCommandUtils.copyParamsFrom(this.cmd, logout); - - logout.execute(); - - this.http.close(); - } - - /** - * Find given service base path. - * - * @throws OnapCommandException - * exception - */ - public String getServiceUrl() throws OnapCommandException { - return this.getServiceUrl(this.cmd); - } - - private String getServiceUrl(OnapHttpCommand cmd) throws OnapCommandException { - if (cmd.getService().isModeDirect()){ - return cmd.getParametersMap().get(Constants.DEAFULT_PARAMETER_HOST_URL).getValue().toString(); - } else { //Catalog mode - OnapCommand catalog = OnapCommandRegistrar.getRegistrar().get("catalog"); - - Map<String, String> paramsOverrides = new HashMap<>(); - paramsOverrides.put(Constants.CATALOG_SERVICE_NAME, cmd.getService().getName()); - paramsOverrides.put(Constants.CATALOG_SERVICE_VERSION, cmd.getService().getVersion()); - - OnapCommandUtils.copyParamsFrom(cmd, catalog, paramsOverrides); - - catalog.execute(); - - String hostUrl = catalog.getResult().getRecordsMap().get(Constants.CATALOG_SERVICE_HOST_URL).getValues().get(0); - hostUrl = hostUrl.trim(); - if (hostUrl.endsWith("/")) { - hostUrl = hostUrl.substring(0, hostUrl.length()-1); - } - - String basePath = catalog.getResult().getRecordsMap().get(Constants.CATALOG_SERVICE_BASE_PATH).getValues().get(0); - basePath = basePath.trim(); - if (basePath.startsWith("/")) { - basePath = basePath.substring(1); - } - - return hostUrl + "/" + basePath; - } - } - - - public String getDebugInfo() { - return this.http.getDebugInfo(); - } - - /** - * Http call to external service. - * - * @param input - * http input - * @return http result - * @throws OnapCommandHttpFailure - * exception - */ - public HttpResult run(HttpInput input) throws OnapCommandHttpFailure { - return this.http.request(input); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/ad/OnapService.java b/framework/src/main/java/org/onap/cli/fw/ad/OnapService.java deleted file mode 100644 index a16c4434..00000000 --- a/framework/src/main/java/org/onap/cli/fw/ad/OnapService.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.ad; - -import org.onap.cli.fw.conf.Constants; - -/** - * Oclip Service as reported in api catalog. - */ -public class OnapService { - /* - * Oclip Service name like aai. - */ - private String serviceName; - - /* - * Oclip Service API version like v1, v2, etc - */ - private String serviceVersion; - - private String basePath; - - /** - * Mode of service consideration. By default, it goes with - * 'catalog' mode, where basePath will be discovered by - * the framework using serviceName and serviceVersion - * Another mode is 'direct', in which bastPath will be - * same as OnapCredentails.ServiceUrl. - */ - private String mode = Constants.MODE_DIRECT; - - private String authType = Constants.AUTH_NONE; - - public String getMode() { - return mode; - } - - public void setMode(String mode) { - this.mode = mode; - } - - public boolean isModeDirect() { - return this.getMode().equals(Constants.MODE_DIRECT); - } - - public String getAuthType() { - return this.authType; - } - - public void setAuthType(String auth) { - this.authType = auth; - } - - public boolean isNoAuth() { - return this.authType.equalsIgnoreCase(Constants.AUTH_NONE); - } - - public String getName() { - return serviceName; - } - - public void setName(String name) { - this.serviceName = name; - } - - public String getVersion() { - return serviceVersion; - } - - public void setVersion(String version) { - this.serviceVersion = version; - } - - public String getBasePath() { - return basePath; - } - - public void setBasePath(String basePath) { - this.basePath = basePath; - } - - @Override - public String toString() { - return this.getName() + " " + this.getVersion(); - } - -}
\ No newline at end of file diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLoginCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLoginCommand.java deleted file mode 100644 index 28a86a9b..00000000 --- a/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLoginCommand.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.cmd; - -import java.util.Map; - -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.impl.auth.BasicScheme; -import org.onap.cli.fw.OnapCommandSchema; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.error.OnapCommandException; -import org.onap.cli.fw.input.OnapCommandParameter; - -@OnapCommandSchema(schema = "basic-login.yaml") -public class BasicAuthLoginCommand extends OnapHttpCommand { - - @Override - protected void run() throws OnapCommandException { - - //get the input arguments - Map<String, OnapCommandParameter> paramMap = getParametersMap(); - OnapCommandParameter usernameParam = paramMap.get(Constants.DEAFULT_PARAMETER_USERNAME); - String username = usernameParam.getValue().toString(); - OnapCommandParameter usernamePassword = paramMap.get(Constants.DEAFULT_PARAMETER_PASSWORD); - String password = usernamePassword.getValue().toString(); - - //Execute the command to get token - String authToken = BasicScheme.authenticate(new UsernamePasswordCredentials( - username, password), "UTF-8", false).getValue(); - - //Fill out the result part - this.getResult().getRecordsMap().get(Constants.AUTH_SERVICE_AUTHORIZATION).getValues().add(authToken); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLogoutCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLogoutCommand.java deleted file mode 100644 index 553b28f8..00000000 --- a/framework/src/main/java/org/onap/cli/fw/cmd/BasicAuthLogoutCommand.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.cmd; - -import org.onap.cli.fw.OnapCommandSchema; -import org.onap.cli.fw.error.OnapCommandException; - -@OnapCommandSchema(schema = "basic-logout.yaml") -public class BasicAuthLogoutCommand extends OnapHttpCommand { - - @Override - protected void run() throws OnapCommandException { - //do nothing // NOSONAR - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/CatalogCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/CatalogCommand.java deleted file mode 100644 index 34bf90c2..00000000 --- a/framework/src/main/java/org/onap/cli/fw/cmd/CatalogCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.cmd; - -import org.onap.cli.fw.OnapCommandSchema; -import org.onap.cli.fw.error.OnapCommandException; - -@OnapCommandSchema(schema = "catalog.yaml") -public class CatalogCommand extends OnapHttpCommand { - - @Override - protected void run() throws OnapCommandException { - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/OnapCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/OnapCommand.java index d931aaf3..4b7fe976 100644 --- a/framework/src/main/java/org/onap/cli/fw/OnapCommand.java +++ b/framework/src/main/java/org/onap/cli/fw/cmd/OnapCommand.java @@ -14,33 +14,26 @@ * limitations under the License. */ -package org.onap.cli.fw; +package org.onap.cli.fw.cmd; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; -import org.onap.cli.fw.conf.Constants; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandHelpFailed; -import org.onap.cli.fw.error.OnapCommandInvalidParameterType; -import org.onap.cli.fw.error.OnapCommandInvalidPrintDirection; -import org.onap.cli.fw.error.OnapCommandInvalidResultAttributeScope; -import org.onap.cli.fw.error.OnapCommandInvalidSchema; -import org.onap.cli.fw.error.OnapCommandInvalidSchemaVersion; import org.onap.cli.fw.error.OnapCommandNotInitialized; -import org.onap.cli.fw.error.OnapCommandParameterNameConflict; -import org.onap.cli.fw.error.OnapCommandParameterOptionConflict; -import org.onap.cli.fw.error.OnapCommandRegistrationFailed; -import org.onap.cli.fw.error.OnapCommandSchemaNotFound; import org.onap.cli.fw.info.OnapCommandInfo; import org.onap.cli.fw.input.OnapCommandParameter; import org.onap.cli.fw.output.OnapCommandResult; import org.onap.cli.fw.output.OnapCommandResultAttribute; import org.onap.cli.fw.output.OnapCommandResultAttributeScope; -import org.onap.cli.fw.output.ResultType; +import org.onap.cli.fw.output.OnapCommandResultType; +import org.onap.cli.fw.schema.OnapCommandSchemaLoader; import org.onap.cli.fw.utils.OnapCommandHelperUtils; -import org.onap.cli.fw.utils.OnapCommandSchemaLoaderUtils; import org.onap.cli.fw.utils.OnapCommandUtils; /** @@ -57,19 +50,16 @@ public abstract class OnapCommand { private OnapCommandInfo info = new OnapCommandInfo(); - private List<OnapCommandParameter> cmdParameters = new ArrayList<>(); + private Set<OnapCommandParameter> cmdParameters = new HashSet<>(); private OnapCommandResult cmdResult = new OnapCommandResult(); protected boolean isInitialzied = false; public String getSchemaVersion() { - return Constants.OPEN_CLI_SCHEMA_VERSION_VALUE_1_0; + return OnapCommandConstants.OPEN_CLI_SCHEMA_VERSION_VALUE_1_0; } - /** - * Oclip command description, defined by derived command. - */ public String getDescription() { return this.cmdDescription; } @@ -78,9 +68,6 @@ public abstract class OnapCommand { this.cmdDescription = description; } - /* - * Oclip command name like user-create, ns-list, etc , defined by derived command - */ public String getName() { return this.cmdName; } @@ -97,27 +84,18 @@ public abstract class OnapCommand { this.info = info; } - public void setParameters(List<OnapCommandParameter> parameters) { + public void setParameters(Set<OnapCommandParameter> parameters) { this.cmdParameters = parameters; } - /* - * Oclip command input parameters, defined by derived command - */ - public List<OnapCommandParameter> getParameters() { + public Set<OnapCommandParameter> getParameters() { return this.cmdParameters; } - /* - * Oclip command input parameters, defined by derived command - */ public Map<String, OnapCommandParameter> getParametersMap() { return OnapCommandUtils.getInputMap(this.getParameters()); } - /* - * Oclip command output results, defined by derived command - */ public OnapCommandResult getResult() { return this.cmdResult; } @@ -137,24 +115,7 @@ public abstract class OnapCommand { /** * Initialize this command from command schema and assumes schema is already validated. * - * @throws OnapCommandRegistrationFailed - * Command Registration Exception - * @throws OnapCommandInvalidResultAttributeScope - * InvalidResultAttribute Exception - * @throws OnapCommandInvalidPrintDirection - * InvalidPrintDirection Exception - * @throws OnapCommandInvalidParameterType - * InvalidParameterType Exception - * @throws OnapCommandSchemaNotFound - * SchemaNotFound Exception - * @throws OnapCommandInvalidSchema - * InvalidSchema Exception - * @throws OnapCommandParameterOptionConflict - * ParameterOptionConflict Exception - * @throws OnapCommandParameterNameConflict - * ParameterNameConflict Exception - * @throws OnapCommandInvalidSchemaVersion - * InvalidSchemaVersion Exception + * @throws OnapCommandException * * @return List of error strings */ @@ -165,7 +126,7 @@ public abstract class OnapCommand { public List<String> initializeSchema(String schema, boolean validate) throws OnapCommandException { this.setSchemaName(schema); - List<String> errors = OnapCommandSchemaLoaderUtils.loadSchema(this, schema, true, validate); + List<String> errors = OnapCommandSchemaLoader.loadSchema(this, schema, true, validate); errors.addAll(this.initializeProfileSchema()); this.isInitialzied = true; @@ -204,17 +165,17 @@ public abstract class OnapCommand { Map<String, OnapCommandParameter> paramMap = this.getParametersMap(); // -h or --help is always higher precedence !, user can set this value to get help message - if (Constants.BOOLEAN_TRUE.equals(paramMap.get(Constants.DEFAULT_PARAMETER_HELP).getValue())) { + if (OnapCommandConstants.BOOLEAN_TRUE.equals(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_HELP).getValue())) { OnapCommandResult result = new OnapCommandResult(); - result.setType(ResultType.TEXT); + result.setType(OnapCommandResultType.TEXT); result.setOutput(this.printHelp()); return result; } // -v or --version is next higher precedence !, user can set this value to get help message - if (Constants.BOOLEAN_TRUE.equals(paramMap.get(Constants.DEFAULT_PARAMETER_VERSION).getValue())) { + if (OnapCommandConstants.BOOLEAN_TRUE.equals(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_VERSION).getValue())) { OnapCommandResult result = new OnapCommandResult(); - result.setType(ResultType.TEXT); + result.setType(OnapCommandResultType.TEXT); result.setOutput(this.printVersion()); return result; } @@ -224,17 +185,17 @@ public abstract class OnapCommand { // -f or --format this.cmdResult.setType( - ResultType.get(paramMap.get(Constants.DEFAULT_PARAMETER_OUTPUT_FORMAT).getValue().toString())); - if (Constants.BOOLEAN_TRUE.equals(paramMap.get(Constants.DEFAULT_PARAMETER_OUTPUT_ATTR_LONG).getValue())) { + OnapCommandResultType.get(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_OUTPUT_FORMAT).getValue().toString())); + if (OnapCommandConstants.BOOLEAN_TRUE.equals(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_OUTPUT_ATTR_LONG).getValue())) { this.cmdResult.setScope(OnapCommandResultAttributeScope.LONG); } // --no-title - if (Constants.BOOLEAN_TRUE.equals(paramMap.get(Constants.DEFAULT_PARAMETER_OUTPUT_NO_TITLE).getValue())) { + if (OnapCommandConstants.BOOLEAN_TRUE.equals(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_OUTPUT_NO_TITLE).getValue())) { this.cmdResult.setIncludeTitle(false); } // --debug - if (Constants.BOOLEAN_TRUE.equals(paramMap.get(Constants.DEFAULT_PARAMETER_DEBUG).getValue())) { + if (OnapCommandConstants.BOOLEAN_TRUE.equals(paramMap.get(OnapCommandConstants.DEFAULT_PARAMETER_DEBUG).getValue())) { this.cmdResult.setDebug(true); } diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/CommandType.java b/framework/src/main/java/org/onap/cli/fw/cmd/OnapCommandType.java index baaf7e12..e874a14e 100644 --- a/framework/src/main/java/org/onap/cli/fw/cmd/CommandType.java +++ b/framework/src/main/java/org/onap/cli/fw/cmd/OnapCommandType.java @@ -23,7 +23,7 @@ import org.onap.cli.fw.error.OnapCommandInvalidParameterType; * Command type supported by Oclip CLI. * */ -public enum CommandType { +public enum OnapCommandType { AUTH, CATALOG, @@ -38,7 +38,7 @@ public enum CommandType { * @throws OnapCommandInvalidParameterType * exception */ - public static CommandType get(String name) throws OnapCommandInvalidCommandType { + public static OnapCommandType get(String name) throws OnapCommandInvalidCommandType { if (AUTH.name().equalsIgnoreCase(name)) { return AUTH; } else if (CATALOG.name().equalsIgnoreCase(name)) { diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/OnapHttpCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/OnapHttpCommand.java deleted file mode 100644 index 892f367a..00000000 --- a/framework/src/main/java/org/onap/cli/fw/cmd/OnapHttpCommand.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.cmd; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.OnapCommandSchema; -import org.onap.cli.fw.ad.OnapAuthClient; -import org.onap.cli.fw.ad.OnapService; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; -import org.onap.cli.fw.error.OnapCommandException; -import org.onap.cli.fw.error.OnapCommandExecutionFailed; -import org.onap.cli.fw.error.OnapCommandFailedMocoGenerate; -import org.onap.cli.fw.http.HttpInput; -import org.onap.cli.fw.http.HttpResult; -import org.onap.cli.fw.output.OnapCommandResultAttribute; -import org.onap.cli.fw.utils.OnapCommandSchemaLoaderUtils; -import org.onap.cli.fw.utils.OnapCommandUtils; -import org.onap.cli.http.mock.MockJsonGenerator; -import org.onap.cli.http.mock.MockRequest; -import org.onap.cli.http.mock.MockResponse; - -/** - * Oclip http Command. - * - */ -@OnapCommandSchema(type = Constants.HTTP_SCHEMA_PROFILE) -public class OnapHttpCommand extends OnapCommand { - - private HttpInput input = new HttpInput(); - - private List<Integer> successStatusCodes = new ArrayList<>(); - - private Map<String, String> resultMap = new HashMap<>(); - - protected OnapAuthClient authClient; - - private OnapService oclipService = new OnapService(); - - public void setInput(HttpInput input) { - this.input = input; - } - - @Override - public String getSchemaVersion() { - return Constants.OPEN_CLI_SCHEMA_VERSION_VALUE_1_0; - } - - public void setSuccessStatusCodes(List<Integer> successStatusCodes) { - this.successStatusCodes = successStatusCodes; - } - - public void setResultMap(Map<String, String> resultMap) { - this.resultMap = resultMap; - } - - public HttpInput getInput() { - return input; - } - - public List<Integer> getSuccessStatusCodes() { - return successStatusCodes; - } - - public Map<String, String> getResultMap() { - return resultMap; - } - - /* - * Oclip service, this command uses to execute it. - */ - public OnapService getService() { - return this.oclipService; - } - - public void setService(OnapService service) { - this.oclipService = service; - } - - @Override - protected List<String> initializeProfileSchema() throws OnapCommandException { - return OnapCommandSchemaLoaderUtils.loadHttpSchema(this, this.getSchemaName(), true, false); - } - - @Override - protected void validate() throws OnapCommandException { - if (! this.isAuthRequired()) { - if (this.getParametersMap().containsKey(Constants.DEAFULT_PARAMETER_USERNAME)) { - this.getParametersMap().get(Constants.DEAFULT_PARAMETER_USERNAME).setOptional(true); - } - if (this.getParametersMap().containsKey(Constants.DEAFULT_PARAMETER_PASSWORD)) { - this.getParametersMap().get(Constants.DEAFULT_PARAMETER_PASSWORD).setOptional(true); - } - } - - super.validate(); - } - - private boolean isAuthRequired() { - return !this.getService().isNoAuth() - && "false".equals(this.getParametersMap().get(Constants.DEFAULT_PARAMETER_NO_AUTH).getValue()) - && this.getInfo().getCommandType().equals(CommandType.CMD); - } - - @Override - protected void run() throws OnapCommandException { - try { - // For auth/catalog type commands, login and logout logic is not required - boolean isAuthRequired = this.isAuthRequired(); - - this.authClient = new OnapAuthClient( - this, - this.getResult().isDebug()); - - if (isAuthRequired) { - this.authClient.login(); - } - - this.processRequest(); - - if (isAuthRequired) { - this.authClient.logout(); - } - - if (this.getResult().isDebug() && authClient != null) { - this.getResult().setDebugInfo(this.authClient.getDebugInfo()); - } - } catch (OnapCommandException e) { - if (this.getResult().isDebug() && authClient != null) { - this.getResult().setDebugInfo(this.authClient.getDebugInfo()); - } - throw e; - } - } - - protected void processRequest() throws OnapCommandException { - - HttpInput httpInput = OnapCommandUtils.populateParameters(this.getParametersMap(), this.getInput()); - httpInput.setUri(this.authClient.getServiceUrl() + httpInput.getUri()); - - HttpResult output = this.authClient.run(httpInput); - - this.getResult().setOutput(output); - if (!this.getSuccessStatusCodes().contains(output.getStatus())) { - throw new OnapCommandExecutionFailed(this.getName(), output.getBody(), output.getStatus()); - } - - Map<String, ArrayList<String>> results = OnapCommandUtils.populateOutputs(this.getResultMap(), output); - results = OnapCommandUtils.populateOutputsFromInputParameters(results, this.getParametersMap()); - - for (OnapCommandResultAttribute attr : this.getResult().getRecords()) { - attr.setValues(results.get(attr.getName())); - } - generateJsonMock(httpInput, output, this.getSchemaName()); - } - - private void generateJsonMock(HttpInput httpInput, HttpResult httpResult, String schemaName) - throws OnapCommandFailedMocoGenerate { - - if (OnapCommandConfg.isSampleGenerateEnabled()) { - try { - MockRequest mockRequest = new MockRequest(); - mockRequest.setMethod(httpInput.getMethod()); - mockRequest.setUri(httpInput.getUri()); - mockRequest.setHeaders(httpInput.getReqHeaders()); - mockRequest.setJson(httpInput.getBody()); - - MockResponse mockResponse = new MockResponse(); - mockResponse.setStatus(httpResult.getStatus()); - mockResponse.setJson(httpResult.getBody()); - - MockJsonGenerator.generateMocking(mockRequest, mockResponse, OnapCommandConfg.getSampleGenerateTargetFolder() - + "/" + schemaName.replace(".yaml", "") + "-moco.json"); - } catch (IOException error) { - throw new OnapCommandFailedMocoGenerate(schemaName, error); - } - } - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaRefreshCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaRefreshCommand.java index 40d8eee5..2458a141 100644 --- a/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaRefreshCommand.java +++ b/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaRefreshCommand.java @@ -18,11 +18,10 @@ package org.onap.cli.fw.cmd; import java.util.List; -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.OnapCommandSchema; import org.onap.cli.fw.error.OnapCommandException; +import org.onap.cli.fw.schema.OnapCommandSchema; +import org.onap.cli.fw.schema.OnapCommandSchemaInfo; import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; -import org.onap.cli.fw.utils.SchemaInfo; /** * Refresh external schema. @@ -34,13 +33,13 @@ public class OnapSchemaRefreshCommand extends OnapCommand { @Override protected void run() throws OnapCommandException { - List<SchemaInfo> schemas = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(true); + List<OnapCommandSchemaInfo> schemas = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(true); int i = 0; - for (SchemaInfo schema : schemas) { + for (OnapCommandSchemaInfo schema : schemas) { if (schema.isIgnore()) { continue; } - + i++; this.getResult().getRecordsMap().get("sr.no").getValues().add(String.valueOf(i)); this.getResult().getRecordsMap().get("command").getValues().add(schema.getCmdName()); diff --git a/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaValidateCommand.java b/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaValidateCommand.java index ff3f1c98..8448276b 100644 --- a/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaValidateCommand.java +++ b/framework/src/main/java/org/onap/cli/fw/cmd/OnapSchemaValidateCommand.java @@ -20,14 +20,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.OnapCommandRegistrar; -import org.onap.cli.fw.OnapCommandSchema; -import org.onap.cli.fw.conf.Constants; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.input.OnapCommandParameter; +import org.onap.cli.fw.registrar.OnapCommandRegistrar; +import org.onap.cli.fw.schema.OnapCommandSchema; +import org.onap.cli.fw.schema.OnapCommandSchemaLoader; import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; -import org.onap.cli.fw.utils.OnapCommandSchemaLoaderUtils; /** * Validate schema command. @@ -52,10 +51,10 @@ public class OnapSchemaValidateCommand extends OnapCommand { String ocsVersion = String.valueOf(versionParam.getValue()); String type = OnapCommandDiscoveryUtils.identitySchemaProfileType( - OnapCommandSchemaLoaderUtils.validateSchemaVersion(location, ocsVersion)); + OnapCommandSchemaLoader.validateSchemaVersion(location, ocsVersion)); OnapCommand cmd = null; - if (type.equals(Constants.BASIC_SCHEMA_PROFILE)) { + if (type.equals(OnapCommandConstants.BASIC_SCHEMA_PROFILE)) { cmd = new OnapCommand() { @Override protected void run() throws OnapCommandException { diff --git a/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfg.java b/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfg.java deleted file mode 100644 index 19e7b48b..00000000 --- a/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfg.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.conf; - -import java.io.IOException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.UUID; -import java.util.stream.Collectors; - -/** - * Oclip command constants. - * - */ -public final class OnapCommandConfg { - - private static Properties prps = new Properties(); - - /** - * Private constructor. - */ - private OnapCommandConfg() { - - } - - static { - try { - prps.load(OnapCommandConfg.class.getClassLoader().getResourceAsStream(Constants.CONF)); - } catch (IOException e) { - throw new RuntimeException(e); // NOSONAR - } - } - - /** - * is auth service ignored. - * - * @return boolean - */ - public static boolean isAuthIgnored() { - if ("true".equals(prps.getProperty(Constants.OPEN_IGNORE_AUTH))) { - return true; - } - - return false; - } - - /** - * is discovery should do every time. - * - * @return boolean - */ - public static boolean isDiscoverAlways() { - if ("true".equals(prps.getProperty(Constants.DISCOVER_ALWAYS))) { - return true; - } - - return false; - } - - public static String getVersion() { - return prps.getProperty(Constants.OPEN_CLI_VERSION); - } - - public static String getEnabledProductVersion() { - String version = System.getenv(Constants.OPEN_OPEN_CLI_PRODUCT_IN_USE_ENV_NAME); - if (version == null) { - version = prps.getProperty(Constants.OPEN_CLI_PRODUCT_NAME); - } - return version; - } - - /** - * checks if cookies based auth. - * - * @return boolean - */ - public static boolean isCookiesBasedAuth() { - if ("true".equals(prps.getProperty(Constants.HTTP_API_KEY_USE_COOKIES))) { - return true; - } - - return false; - } - - public static String getProductName() { - return prps.getProperty(Constants.OPEN_CLI_PRODUCT_NAME); - } - - private static Map<String, String> getHeaderValues(String headerKey, Map<String, String> paramMap) { - Map<String, String> mapHeaders = new HashMap<String, String> (); - if (prps.containsKey(headerKey)) { - Arrays.stream(prps.getProperty(headerKey) // NOSONAR - .split(",")).map(String::trim).forEach(header -> { - String headerName = prps.getProperty(headerKey+ "." + header); - String headerValue = prps.getProperty(headerKey + "." + header + ".value", null); - if (headerValue != null) { - headerValue = headerValue.replaceAll("uuid", UUID.randomUUID().toString()); - if (headerValue.contains("${")) { - String param = headerValue.substring(headerValue.indexOf("${")+2 ,headerValue.indexOf("}")); - String pattern = "${"+param+"}"; - headerValue = headerValue.replace(pattern, paramMap.getOrDefault(param, param)); - } - } - mapHeaders.put(headerName, headerValue); - }); - } - return mapHeaders; - } - - //mrkanag move this utils class - public static List<String> getSchemaAttrInfo(String key) { - return Arrays.stream(prps.getProperty(key).split(",")).map(String::trim).collect(Collectors.toList()); // NOSONAR - } - - public static String getSampleGenerateTargetFolder() { - return prps.getProperty(Constants.SAMPLE_GEN_TARGET_FOLDER, "."); - } - - public static boolean isSampleGenerateEnabled() { - return "true".equals(prps.getProperty(Constants.SAMPLE_GEN_ENABLED)); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfig.java b/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfig.java new file mode 100644 index 00000000..079a4410 --- /dev/null +++ b/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConfig.java @@ -0,0 +1,71 @@ +/* + * Copyright 2017 Huawei Technologies Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.cli.fw.conf; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; +import java.util.stream.Collectors; + +/** + * Oclip command constants. + * + */ +public final class OnapCommandConfig { + + private static Properties prps = new Properties(); + + /** + * Private constructor. + */ + private OnapCommandConfig() { + + } + + static { + loadProperties(prps, OnapCommandConstants.CONF); + for (String prpFile: getCommaSeparatedList(OnapCommandConstants.OPEN_CLI_PLUGIN_PRPS)) { + addProperties(prpFile); + } + } + + private static void loadProperties(Properties prps, String fileName) { + try { + prps.load(OnapCommandConfig.class.getClassLoader().getResourceAsStream(fileName)); + } catch (Exception e) { // NOSONAR + throw new RuntimeException(e); // NOSONAR + } + } + + private static void addProperties(String fileName) { + Properties ps = new Properties(); + loadProperties(ps, fileName); + + for (Object key: ps.keySet()) { + prps.put(key, ps.get(key)); + } + } + + public static String getPropertyValue(String propertyName) { + return prps.getProperty(propertyName); + } + + public static List<String> getCommaSeparatedList(String key) { + return Arrays.stream(getPropertyValue(key).split(",")).map(String::trim).collect(Collectors.toList()); // NOSONAR + } +} diff --git a/framework/src/main/java/org/onap/cli/fw/conf/Constants.java b/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConstants.java index 4c7581b7..6f911c29 100644 --- a/framework/src/main/java/org/onap/cli/fw/conf/Constants.java +++ b/framework/src/main/java/org/onap/cli/fw/conf/OnapCommandConstants.java @@ -17,17 +17,14 @@ package org.onap.cli.fw.conf; /** - * Constants. + * OnapCommandHttpConstants. * */ -public class Constants { +public class OnapCommandConstants { //config public static final String CONF = "open-cli.properties"; - public static final String OPEN_IGNORE_AUTH = "cli.ignore_auth"; public static final String OPEN_CLI_VERSION = "cli.version"; - public static final String HTTP_API_KEY_USE_COOKIES = "cli.http.api_key_use_cookies"; - public static final String TOP_LEVEL_PARAMS_LIST = "cli.schema.top_level_params_list"; public static final String TOP_LEVEL_MANDATORY_LIST = "cli.schema.top_level_mandatory_list"; public static final String SERVICE_PARAMS_LIST = "cli.schema.service_params_list"; @@ -38,35 +35,23 @@ public class Constants { public static final String INPUT_PARAMS_MANDATORY_LIST = "cli.schema.input_params_mandatory_list"; public static final String RESULT_PARAMS_LIST = "cli.schema.result_params_list"; public static final String RESULT_PARAMS_MANDATORY_LIST = "cli.schema.result_params_mandatory_list"; - public static final String HTTP_SECTIONS = "cli.schema.http_sections"; - public static final String HTTP_MANDATORY_SECTIONS = "cli.schema.http_mandatory_sections"; - public static final String HTTP_REQUEST_PARAMS = "cli.schema.http_request_params"; - public static final String HTTP_REQUEST_MANDATORY_PARAMS = "cli.schema.http_request_mandatory_params"; - public static final String HTTP_METHODS = "cli.schema.http_methods"; public static final String BOOLEAN_VALUE = "cli.schema.boolean_values"; - public static final String AUTH_VALUES = "cli.schema.auth_values"; - public static final String MODE_VALUES = "cli.schema.mode_values"; + public static final String COMMAND_TYPE_VALUES = "cli.command.type"; public static final String SCHEMA_TYPES_SUPPORTED = "cli.schema.type.supported"; - //http connection - public static final String SSLCONTEST_TLS = "TLSV1.2"; - public static final String APPLICATION_JSON = "application/json"; - public static final String OPEN_CLI_PRODUCT_NAME = "cli.product_name"; + public static final String OPEN_CLI_PLUGIN_PRPS = "cli.plugins-prps"; //schema public static final String OPEN_CLI_SCHEMA_VERSION = "open_cli_schema_version"; public static final String OPEN_CLI_SCHEMA_VERSION_VALUE_1_0 = "1.0"; - public static final String NAME = "name"; - public static final String DESCRIPTION = "description"; //Info public static final String INFO = "info"; - public static final String INFO_PRODUCT = "product"; - public static final String OPEN_OPEN_CLI_PRODUCT_IN_USE_ENV_NAME = "OPEN_CLI_PRODUCT_IN_USE"; + public static final String OPEN_CLI_PRODUCT_IN_USE_ENV_NAME = "OPEN_CLI_PRODUCT_IN_USE"; public static final String INFO_SERVICE = "service"; public static final String INFO_TYPE = "type"; @@ -94,18 +79,12 @@ public class Constants { public static final String PARAMETER_TYPE_MAP = "map"; public static final String DEFAULT_PARAMETER_FILE_NAME = "default_input_parameters.yaml"; - public static final String DEFAULT_PARAMETER_HTTP_FILE_NAME = "default_input_parameters_http.yaml"; - - public static final String DEAFULT_PARAMETER_USERNAME = "host-username"; - public static final String DEAFULT_PARAMETER_PASSWORD = "host-password"; - public static final String DEAFULT_PARAMETER_HOST_URL = "host-url"; public static final String DEFAULT_PARAMETER_HELP = "help"; public static final String DEFAULT_PARAMETER_VERSION = "version"; public static final String DEFAULT_PARAMETER_DEBUG = "debug"; public static final String DEFAULT_PARAMETER_OUTPUT_FORMAT = "format"; public static final String DEFAULT_PARAMETER_OUTPUT_ATTR_LONG = "long"; public static final String DEFAULT_PARAMETER_OUTPUT_NO_TITLE = "no-title"; - public static final String DEFAULT_PARAMETER_NO_AUTH = "no-auth"; //results public static final String RESULTS = "results"; @@ -124,6 +103,7 @@ public class Constants { public static final String PORTRAINT_COLUMN_NAME_PROPERTY = "property"; public static final String PORTRAINT_COLUMN_NAME_VALUE = "value"; + //discovery public static final String SCHEMA_DIRECTORY = "open-cli-schema"; public static final String YAML_PATTERN = "/**/*.yaml"; public static final String JSON_PATTERN = "/**/*.json"; @@ -136,50 +116,6 @@ public class Constants { //normal public static final String BASIC_SCHEMA_PROFILE = "basic"; - public static final String HTTP_SCHEMA_PROFILE = "http"; - - //http - public static final String HTTP = "http"; - - public static final String SERVICE = "service"; - public static final String VERSION = "version"; - public static final String BASE_PATH = "base_path"; - public static final String AUTH = "auth"; - public static final String AUTH_NONE = "none"; - public static final String AUTH_BASIC = "basic"; - public static final String MODE = "mode"; - public static final String MODE_DIRECT = "direct"; - public static final String MODE_CATALOG = "catalog"; - - public static final String REQUEST = "request"; - public static final String URI = "uri"; - public static final String BODY = "body"; - - public static final String METHOD_TYPE = "method"; - public static final String POST = "post"; - public static final String GET = "get"; - public static final String DELETE = "delete"; - public static final String PUT = "put"; - public static final String HEAD = "delete"; - - public static final String HEADERS = "headers"; - public static final String QUERIES = "queries"; - public static final String COOKIES = "cookies"; - - public static final String SUCCESS_CODES = "success_codes"; - - public static final String RESULT_MAP = "result_map"; - - public static final String SAMPLE_RESPONSE = "sample_response"; - - //swagger - public static final String EXECUTOR = "exec"; - - public static final String API = "api"; - public static final String CLIENT = "client"; - public static final String ENTITY = "entity"; - public static final String METHOD = "method"; - public static final String MULTIPART_ENTITY_NAME = "multipart_entity_name"; public static final String EXCEPTION = "exception"; public static final String BOOLEAN_TRUE = "true"; public static final String BOOLEAN_FALSE = "false"; @@ -189,37 +125,21 @@ public class Constants { public static final String SCHEMA_FILE_EMPTY = "The schema file cann't be null or empty"; public static final String SCHEMA_FILE_WRONG_EXTN = "Schema file should be '.yaml' extension"; public static final String SCHEMA_FILE_NOT_EXIST = "Schema file doesn't exist"; - public static final String HTTP_SECTION_EMPTY = "Http Section cann't be null or empty"; - public static final String HTTP_BODY_SECTION_EMPTY = "http body section under 'request:' cann't be null or empty"; - public static final String HTTP_BODY_FAILED_PARSING = "The http body json is failed to parse"; - public static final String HTTP_BODY_JSON_EMPTY = "The http body json cann't be null or empty"; - public static final String HTTP_SUCCESS_CODE_INVALID = "Invalid http success code."; - public static final String HTTP_SAMPLE_RESPONSE_EMPTY = "Sample response cann't be null or empty"; - public static final String HTTP_SAMPLE_RESPONSE_FAILED_PARSING = "The http Sample response json is failed to parse."; public static final String USE_DIRECTIVE = "use"; - public static final String SAMPLE_GEN_ENABLED = "cli.sample.gen.enable"; - public static final String SAMPLE_GEN_TARGET_FOLDER = "cli.sample.gen.target"; - public static final String SPL_ENTRY_UUID = "uuid"; public static final String SPL_ENTRY_ENV = "env:"; - //auth plugin - public static final String AUTH_SERVICE_AUTHORIZATION = "Authorization"; - - //catalog plugin - public static final String CATALOG_SERVICE_NAME = "catalog-service-name"; - public static final String CATALOG_SERVICE_VERSION = "catalog-service-version"; - public static final String CATALOG_SERVICE_BASE_PATH = "catalog-service-base-path"; - public static final String CATALOG_SERVICE_HOST_URL = "catalog-service-host-url"; - public static final String VERSION_INFO = "version.info"; public static final String VERSION_INFO_PLACE_HOLDER_VERSION = "__VERSION__"; public static final String VERSION_INFO_PLACE_HOLDER_AVL_PRD_VER = "__AVAILABLE_PRODUCT_VERSIONS__"; public static final String VERSION_INFO_PLACE_HOLDER_ENB_PRD_VER = "__ENABLED_PRODUCT_VERSIONS__"; - private Constants() { + public static final String SAMPLE_GEN_ENABLED = "cli.sample.gen.enable"; + public static final String SAMPLE_GEN_TARGET_FOLDER = "cli.sample.gen.target"; + + private OnapCommandConstants() { } } diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandFailedMocoGenerate.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandFailedMocoGenerate.java deleted file mode 100644 index 37e8fb35..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandFailedMocoGenerate.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * Invalid data for generating moco json . - * - */ -public class OnapCommandFailedMocoGenerate extends OnapCommandException { - - private static final long serialVersionUID = -5386652726982792831L; - - private static final String ERROR_CODE = "0xf002"; - - private static final String ERROR_MSG = "Failed to generate moco json "; - - public OnapCommandFailedMocoGenerate(String cmdName, String error) { - super(ERROR_CODE, ERROR_MSG + cmdName + ", " + error); - } - - public OnapCommandFailedMocoGenerate(String cmdName, Throwable throwable) { - super(ERROR_CODE, ERROR_MSG + cmdName , throwable); - } - -}
\ No newline at end of file diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpFailure.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpFailure.java deleted file mode 100644 index bec8dd0b..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpFailure.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * Command execution failed. - * - */ -public class OnapCommandHttpFailure extends OnapCommandException { - private static final long serialVersionUID = 488775545436993345L; - - private static final String ERROR_CODE = "0x3001"; - - public OnapCommandHttpFailure(String error, long httpStatus) { - super(ERROR_CODE, error, httpStatus); - } - - public OnapCommandHttpFailure(String error) { - super(ERROR_CODE, error); - } - - public OnapCommandHttpFailure(Throwable throwable) { - super(ERROR_CODE, throwable); - } - - public OnapCommandHttpFailure(Throwable throwable, long httpStatus) { - super(ERROR_CODE, throwable, httpStatus); - } - -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpHeaderNotFound.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpHeaderNotFound.java deleted file mode 100644 index 58fcdfd9..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpHeaderNotFound.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * OnapCommandParameterNotFound. - * - */ -public class OnapCommandHttpHeaderNotFound extends OnapCommandException { - - private static final long serialVersionUID = 6676137916079057963L; - - public OnapCommandHttpHeaderNotFound(String name) { - super("0x3003", "Http header " + name + " is not returned from the service"); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResponseBody.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResponseBody.java deleted file mode 100644 index 3e98d07d..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResponseBody.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * OnapCommandParameterNotFound. - * - */ -public class OnapCommandHttpInvalidResponseBody extends OnapCommandException { - - private static final long serialVersionUID = 6676137916079057963L; - - private static final String ERROR_CODE = "0x3004"; - private static final String ERR_MSG = "Http response body does not have json entry "; - - public OnapCommandHttpInvalidResponseBody(String name, String error) { - super(ERROR_CODE, ERR_MSG + name + ", " + error); - } - - public OnapCommandHttpInvalidResponseBody(String name, Throwable throwable) { - super(ERROR_CODE, ERR_MSG + name, throwable); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResultMap.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResultMap.java deleted file mode 100644 index 9303c6b2..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandHttpInvalidResultMap.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -import java.util.List; - -/** - * Invalid result map in HTTP section. - * - */ -public class OnapCommandHttpInvalidResultMap extends OnapCommandException { - - private static final long serialVersionUID = 6676137916023457963L; - - public OnapCommandHttpInvalidResultMap(List<String> invalidParams) { - super("0x3005", "Invalide result map parameters : " + invalidParams.toString()); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandInvalidRegistration.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandInvalidRegistration.java index db4c8e6a..1c90e9a0 100644 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandInvalidRegistration.java +++ b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandInvalidRegistration.java @@ -16,7 +16,7 @@ package org.onap.cli.fw.error; -import org.onap.cli.fw.OnapCommand; +import org.onap.cli.fw.cmd.OnapCommand; /** * Command class invalid. diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLoginFailed.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLoginFailed.java deleted file mode 100644 index e9c82259..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLoginFailed.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * Login failed. - * - */ -public class OnapCommandLoginFailed extends OnapCommandException { - - private static final long serialVersionUID = 5518154493762956959L; - - private static final String ERROR_CODE = "0x4001"; - private static final String ERROR_MESSAGE1 = "Login failed"; - - public OnapCommandLoginFailed(String error) { - super(ERROR_CODE, ERROR_MESSAGE1 + ", " + error); - } - - public OnapCommandLoginFailed(String error, int httpStatus) { - super(ERROR_CODE, ERROR_MESSAGE1 + ", " + error, httpStatus); - } - - public OnapCommandLoginFailed(Throwable throwable) { - super(ERROR_CODE, ERROR_MESSAGE1, throwable); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLogoutFailed.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLogoutFailed.java deleted file mode 100644 index df879021..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandLogoutFailed.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * Logout failed. - * - */ -public class OnapCommandLogoutFailed extends OnapCommandException { - - private static final long serialVersionUID = 1150649507734289032L; - private static final String ERROR_CODE = "0x4002"; - private static final String ERROR_MESSAGE1 = "Logout failed"; - - public OnapCommandLogoutFailed(String error) { - super(ERROR_CODE, ERROR_MESSAGE1 +", " + error); - } - - public OnapCommandLogoutFailed(Throwable throwable) { - super(ERROR_CODE, ERROR_MESSAGE1, throwable); - } - - public OnapCommandLogoutFailed(int statusCode) { - super(ERROR_CODE, ERROR_MESSAGE1, statusCode); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandServiceNotFound.java b/framework/src/main/java/org/onap/cli/fw/error/OnapCommandServiceNotFound.java deleted file mode 100644 index 9cc0e45f..00000000 --- a/framework/src/main/java/org/onap/cli/fw/error/OnapCommandServiceNotFound.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.error; - -/** - * Command not registered in MSB. - * - */ -public class OnapCommandServiceNotFound extends OnapCommandException { - - private static final long serialVersionUID = 8580121615330415065L; - - public OnapCommandServiceNotFound(String service) { - super("0xd001", "Service " + service + " is not found in MSB"); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/http/HttpInput.java b/framework/src/main/java/org/onap/cli/fw/http/HttpInput.java deleted file mode 100644 index 69439bd4..00000000 --- a/framework/src/main/java/org/onap/cli/fw/http/HttpInput.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.http; - -import java.util.HashMap; -import java.util.Map; - -/** - * Captures HTTP request URI, body and request &query parameters. <br> - */ -public class HttpInput { - - private String reqUri = ""; - - private String reqBody = ""; - - private String reqMethod = ""; - - private String multipartEntityName = ""; - - private Map<String, String> reqHeaders = new HashMap<>(); - - private Map<String, String> reqQueries = new HashMap<>(); - - private Map<String, String> reqCookies = new HashMap<>(); - - private boolean binaryData; - - public String getUri() { - return this.reqUri; - } - - public HttpInput setUri(String uri) { - this.reqUri = uri; - return this; - } - - public String getBody() { - return this.reqBody; - } - - public HttpInput setBody(String body) { - this.reqBody = body; - return this; - } - - public Map<String, String> getReqHeaders() { - return this.reqHeaders; - } - - /** - * header parameter setter. - * - * @param reqHeaders - * header map - * @return HttpInput - */ - public HttpInput setReqHeaders(Map<String, String> reqHeaders) { - if (reqHeaders != null) { - this.reqHeaders = reqHeaders; - } - return this; - } - - public String getMethod() { - return this.reqMethod; - } - - public HttpInput setMethod(String method) { - this.reqMethod = method; - return this; - } - - public String getMultipartEntityName() { - return this.multipartEntityName; - } - - public HttpInput setMultipartEntityName(String multipartEntityName) { - this.multipartEntityName = multipartEntityName; - return this; - } - - public Map<String, String> getReqQueries() { - return reqQueries; - } - - /** - * Request query parameters. - * - * @param reqQueries - * request queries - * @return HttpInput - */ - public HttpInput setReqQueries(Map<String, String> reqQueries) { - if (reqQueries != null) { - this.reqQueries = reqQueries; - } - return this; - } - - public Map<String, String> getReqCookies() { - return reqCookies; - } - - public HttpInput setReqCookies(Map<String, String> reqCookies) { - this.reqCookies = reqCookies; - return this; - } - - public boolean isBinaryData() { - return binaryData; - } - - public void setBinaryData(boolean binaryData) { - this.binaryData = binaryData; - } - - @Override - public String toString() { - return "\nURL: " + this.getUri() + "\nMethod: " + this.getMethod() + "\nRequest Queries: " - + this.getReqQueries() + "\nRequest Body: " + this.getBody() + "\nRequest Headers: " - + this.getReqHeaders().toString() + "\nRequest Cookies: " + this.getReqCookies().toString() - + "\nbinaryData=" + this.binaryData; - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/http/HttpResult.java b/framework/src/main/java/org/onap/cli/fw/http/HttpResult.java deleted file mode 100644 index e000ee15..00000000 --- a/framework/src/main/java/org/onap/cli/fw/http/HttpResult.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.http; - -import java.util.HashMap; -import java.util.Map; - -/** - * Captures HTTP response status, body and headers. <br> - * - */ -public class HttpResult { - - private int status; - - private String resBody; - - private Map<String, String> respHeaders = new HashMap<>(); - - private Map<String, String> respCookies = new HashMap<>(); - - public int getStatus() { - return this.status; - } - - public void setStatus(int status) { - this.status = status; - } - - public String getBody() { - return this.resBody; - } - - public void setBody(String body) { - this.resBody = body; - } - - public void setRespHeaders(Map<String, String> respHeaders) { - this.respHeaders = respHeaders; - } - - public Map<String, String> getRespHeaders() { - return this.respHeaders; - } - - public Map<String, String> getRespCookies() { - return respCookies; - } - - public void setRespCookies(Map<String, String> respCookies) { - this.respCookies = respCookies; - } - - public boolean isSuccess() { - return this.getStatus() >= 200 && this.getStatus() <= 300; - } - - @Override - public String toString() { - return "\nHTTP Status: " + this.getStatus() + "\nResponse Body: " + this.getBody() + "\nResponse Headers: " - + this.getRespHeaders() + "\nResponse Cookies: " + this.getRespCookies(); - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/http/OnapHttpConnection.java b/framework/src/main/java/org/onap/cli/fw/http/OnapHttpConnection.java deleted file mode 100644 index 6fdf7046..00000000 --- a/framework/src/main/java/org/onap/cli/fw/http/OnapHttpConnection.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.http; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.security.cert.X509Certificate; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.ParseException; -import org.apache.http.client.CookieStore; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.client.protocol.ClientContext; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.conn.HttpClientConnectionManager; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.ssl.AllowAllHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.conn.ssl.X509HostnameVerifier; -import org.apache.http.cookie.Cookie; -import org.apache.http.entity.StringEntity; -import org.apache.http.entity.mime.MultipartEntity; -import org.apache.http.entity.mime.content.FileBody; -import org.apache.http.impl.client.BasicCookieStore; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.client.LaxRedirectStrategy; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.impl.cookie.BasicClientCookie; -import org.apache.http.protocol.BasicHttpContext; -import org.apache.http.protocol.HttpContext; -import org.apache.http.util.EntityUtils; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.error.OnapCommandHttpFailure; - -/** - * Helps to make http connection.<br> - */ -public class OnapHttpConnection { - - private HttpClient httpClient = null; - - Map<String, String> mapCommonHeaders = new HashMap<String, String> (); - - protected boolean debug = false; - - private String debugDetails = ""; - - public static class TrustAllX509TrustManager implements X509TrustManager { - - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { - // No need to implement. - } - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { - // No need to implement. - } - } - - /** - * OnapHttpConnection Constructor. - * - * @param debug - * boolean - * @throws OnapCommandHttpFailure - * exception - */ - public OnapHttpConnection(boolean debug) throws OnapCommandHttpFailure { - this.debug = debug; - } - - private void initHttpClient(boolean isSecured) throws OnapCommandHttpFailure { - if (this.httpClient == null) { - try { - if (isSecured) { - SSLContext sslContext = SSLContext.getInstance(Constants.SSLCONTEST_TLS); - sslContext.init(null, new TrustManager[] { new TrustAllX509TrustManager() }, - new java.security.SecureRandom()); - X509HostnameVerifier hostnameVerifier = new AllowAllHostnameVerifier(); - Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder - .<ConnectionSocketFactory>create() - .register("https", new SSLConnectionSocketFactory(sslContext, hostnameVerifier)).build(); - HttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); - - this.httpClient = HttpClients.custom().setConnectionManager(connManager) - .setRedirectStrategy(new LaxRedirectStrategy()).build(); - } else { - this.httpClient = HttpClients.createDefault(); - } - } catch (Exception e) { - throw new OnapCommandHttpFailure(e); - } - } - } - - public String getDebugInfo() { - return this.debugDetails; - } - - private Map<String, String> getHttpHeaders(HttpResponse resp) { - Map<String, String> result = new HashMap<>(); - - Header[] hs = resp.getAllHeaders(); - for (int i = 0; i < hs.length; i++) { - result.put(hs[i].getName(), hs[i].getValue()); - } - - return result; - } - - private String getResponseBody(HttpResponse resp) throws OnapCommandHttpFailure { - if (resp.getEntity() == null) { - return null; - } - try { - String body = EntityUtils.toString(resp.getEntity(), StandardCharsets.UTF_8); - EntityUtils.consume(resp.getEntity()); - return body; - } catch (IOException e) { - throw new OnapCommandHttpFailure(e); - } - } - - private StringEntity getStringEntity(HttpInput input) { - return new StringEntity(input.getBody(), StandardCharsets.UTF_8); - } - - /** - * Post. <br> - * - * @param input - * HttpInput Obj - * @return HttpResult - * @throws OnapCommandHttpFailure - * http failure - */ - public HttpResult post(final HttpInput input) throws OnapCommandHttpFailure { - input.setMethod("post"); - return this.request(input); - } - - /** - * Get. <br> - * - * @param input - * input request - * @return HttpResult - * @throws OnapCommandHttpFailure - * excpetion - */ - public HttpResult get(final HttpInput input) throws OnapCommandHttpFailure { - input.setMethod("get"); - return this.request(input); - } - - /** - * Put. <br> - * - * @param input - * input request - * @return HttpResult - * @throws OnapCommandHttpFailure - * Exception - */ - public HttpResult put(final HttpInput input) throws OnapCommandHttpFailure { - input.setMethod("put"); - return this.request(input); - } - - /** - * Delete. <br> - * - * @param input - * input request - * @return HttpResult - * @throws OnapCommandHttpFailure - * exception - */ - public HttpResult delete(final HttpInput input) throws OnapCommandHttpFailure { - input.setMethod("delete"); - return this.request(input); - } - - public void setCommonHeaders(Map<String, String> headers) { - this.mapCommonHeaders = headers; - } - - private void addCommonHeaders(HttpInput input) { - if (!input.isBinaryData()) { - input.getReqHeaders().put("Content-Type", Constants.APPLICATION_JSON); - } - input.getReqHeaders().put("Accept", Constants.APPLICATION_JSON); - - for (String headerName : this.mapCommonHeaders.keySet()) { - input.getReqHeaders().put(headerName, this.mapCommonHeaders.get(headerName)); - } - } - - private void addCommonCookies(CookieStore cookieStore) { - for (String headerName : this.mapCommonHeaders.keySet()) { - Cookie cookie = new BasicClientCookie(headerName, this.mapCommonHeaders.get(headerName)); - cookieStore.addCookie(cookie); - } - } - - private void updateResultFromCookies(HttpResult result, List<Cookie> cookies) { - for (Cookie cookie : cookies) { - result.getRespCookies().put(cookie.getName(), cookie.getValue()); - } - } - - private String getDomain(String url) { - try { - return new URL(url).getHost(); - } catch (MalformedURLException e) { - // url is always proper !! - return url; - } - } - - private void updateInputFromCookies(HttpInput input, CookieStore cookieStore) { - addCommonCookies(cookieStore); - for (String cookieName : input.getReqCookies().keySet()) { - BasicClientCookie cookie = new BasicClientCookie(cookieName, input.getReqCookies().get(cookieName)); - cookie.setDomain(this.getDomain(input.getUri())); - cookieStore.addCookie(cookie); - } - - } - - /** - * Handles http method requests. - * - * @param input - * HttpInput - * @return HttpResult - * @throws OnapCommandHttpFailure - * exception - */ - public HttpResult request(HttpInput input) throws OnapCommandHttpFailure { - this.addCommonHeaders(input); - - HttpRequestBase requestBase = null; - if ("post".equals(input.getMethod())) { - HttpPost httpPost = new HttpPost(); - if (input.isBinaryData()) { - httpPost.setEntity(getMultipartEntity(input)); - } else { - httpPost.setEntity(this.getStringEntity(input)); - } - requestBase = httpPost; - } else if ("put".equals(input.getMethod())) { - HttpPut httpPut = new HttpPut(); - httpPut.setEntity(this.getStringEntity(input)); - requestBase = httpPut; - } else if ("get".equals(input.getMethod())) { - requestBase = new HttpGet(); - } else if ("delete".equals(input.getMethod())) { - requestBase = new HttpDelete(); - } else { - throw new IllegalArgumentException("Invalid HTTP method"); - } - - requestBase.setURI(URI.create(input.getUri())); - - for (Entry<String, String> h : input.getReqHeaders().entrySet()) { - requestBase.addHeader(h.getKey(), h.getValue()); - } - - HttpResult result = new HttpResult(); - - try { - this.debugDetails = ""; - CookieStore cookieStore = new BasicCookieStore(); - updateInputFromCookies(input, cookieStore); - HttpContext localContext = new BasicHttpContext(); - localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); - - this.initHttpClient(input.getUri().startsWith("https")); - - HttpResponse resp = this.httpClient.execute(requestBase, localContext); - String respContent = this.getResponseBody(resp); - result.setBody(respContent); - result.setStatus(resp.getStatusLine().getStatusCode()); - result.setRespHeaders(this.getHttpHeaders(resp)); - this.updateResultFromCookies(result, cookieStore.getCookies()); - } catch (ParseException | IOException e) { - throw new OnapCommandHttpFailure(e); - } finally { - if (this.debug) { - this.debugDetails = input + "" + result; - } - } - - return result; - } - - public void close() { - this.mapCommonHeaders.clear(); - } - - private HttpEntity getMultipartEntity(HttpInput input) { - FileBody fileBody = new FileBody(new File(input.getBody().trim())); - MultipartEntity multipartEntity = new MultipartEntity(); - String fileName = input.getMultipartEntityName() != "" ? input.getMultipartEntityName() : "upload"; - multipartEntity.addPart(fileName, fileBody); - return multipartEntity; - } -} diff --git a/framework/src/main/java/org/onap/cli/fw/info/OnapCommandInfo.java b/framework/src/main/java/org/onap/cli/fw/info/OnapCommandInfo.java index c52965f9..1496bcbb 100644 --- a/framework/src/main/java/org/onap/cli/fw/info/OnapCommandInfo.java +++ b/framework/src/main/java/org/onap/cli/fw/info/OnapCommandInfo.java @@ -16,7 +16,7 @@ package org.onap.cli.fw.info; -import org.onap.cli.fw.cmd.CommandType; +import org.onap.cli.fw.cmd.OnapCommandType; /** * Oclip Command info like product version, service, contact, etc. @@ -29,7 +29,7 @@ public class OnapCommandInfo { private String author; - private CommandType type = CommandType.CMD; + private OnapCommandType type = OnapCommandType.CMD; private boolean ignore = false; @@ -57,11 +57,11 @@ public class OnapCommandInfo { this.author = email; } - public CommandType getCommandType() { + public OnapCommandType getCommandType() { return type; } - public void setCommandType(CommandType type) { + public void setCommandType(OnapCommandType type) { this.type = type; } diff --git a/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameter.java b/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameter.java index ac2e8521..4b21ed4f 100644 --- a/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameter.java +++ b/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameter.java @@ -58,7 +58,7 @@ public class OnapCommandParameter { /* * Parameter type such as int, json, yaml, string, etc */ - private ParameterType parameterType; + private OnapCommandParameterType parameterType; /* * Default value @@ -130,18 +130,18 @@ public class OnapCommandParameter { this.longOption = longOption; } - public ParameterType getParameterType() { + public OnapCommandParameterType getParameterType() { return parameterType; } - public void setParameterType(ParameterType parameterType) { + public void setParameterType(OnapCommandParameterType parameterType) { this.parameterType = parameterType; if (this.defaultValue.isEmpty()) { - if (this.getParameterType().equals(ParameterType.BOOL)) { + if (this.getParameterType().equals(OnapCommandParameterType.BOOL)) { // For bool type always the default param is false this.defaultValue = "false"; - } else if (this.getParameterType().equals(ParameterType.UUID)) { + } else if (this.getParameterType().equals(OnapCommandParameterType.UUID)) { this.defaultValue = UUID.randomUUID().toString(); } } @@ -197,10 +197,10 @@ public class OnapCommandParameter { public void setValue(Object value) throws OnapCommandInvalidParameterValue { this.rawValue = value; - if (ParameterType.URL.equals(parameterType) && !value.toString().isEmpty() && !value.toString().startsWith("http") + if (OnapCommandParameterType.URL.equals(parameterType) && !value.toString().isEmpty() && !value.toString().startsWith("http") && !value.toString().startsWith("/")) { this.value = "/" + value; - } else if (ParameterType.ARRAY.equals(parameterType)) { + } else if (OnapCommandParameterType.ARRAY.equals(parameterType)) { if (!(value instanceof List)) { throw new OnapCommandInvalidParameterValue(this.getName()); } @@ -212,7 +212,7 @@ public class OnapCommandParameter { } catch (JsonProcessingException e) { throw new OnapCommandInvalidParameterValue(this.getName(), e); } - } else if (ParameterType.MAP.equals(parameterType)) { + } else if (OnapCommandParameterType.MAP.equals(parameterType)) { if (!(value instanceof Map)) { throw new OnapCommandInvalidParameterValue(this.getName()); } @@ -275,13 +275,50 @@ public class OnapCommandParameter { throw new OnapCommandParameterMissing(this.getName()); } - if (!this.isOptional() && ParameterType.BINARY.equals(parameterType)) { + if (!this.isOptional() && OnapCommandParameterType.BINARY.equals(parameterType)) { File file = new File(value.toString()); if (!file.isFile()) { throw new OnapCommandInvalidParameterValue(this.getName()); } } - // (mrkanag) validate for type supported ParameterType using constraints + // (mrkanag) validate for type supported OnapCommandParameterType using constraints + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((cmdName == null) ? 0 : cmdName.hashCode()); + result = prime * result + ((longOption == null) ? 0 : longOption.hashCode()); + result = prime * result + ((shortOption == null) ? 0 : shortOption.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + OnapCommandParameter other = (OnapCommandParameter) obj; + if (cmdName == null) { + if (other.cmdName != null) + return false; + } else if (!cmdName.equals(other.cmdName)) + return false; + if (longOption == null) { + if (other.longOption != null) + return false; + } else if (!longOption.equals(other.longOption)) + return false; + if (shortOption == null) { + if (other.shortOption != null) + return false; + } else if (!shortOption.equals(other.shortOption)) + return false; + return true; } } diff --git a/framework/src/main/java/org/onap/cli/fw/input/ParameterType.java b/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameterType.java index 6a9254f5..85ace4a6 100644 --- a/framework/src/main/java/org/onap/cli/fw/input/ParameterType.java +++ b/framework/src/main/java/org/onap/cli/fw/input/OnapCommandParameterType.java @@ -22,7 +22,7 @@ import org.onap.cli.fw.error.OnapCommandInvalidParameterType; * Parameter type supported by Oclip CLI. * */ -public enum ParameterType { +public enum OnapCommandParameterType { /** * JSON file. */ @@ -45,7 +45,7 @@ public enum ParameterType { * @throws OnapCommandInvalidParameterType * exception */ - public static ParameterType get(String name) throws OnapCommandInvalidParameterType { + public static OnapCommandParameterType get(String name) throws OnapCommandInvalidParameterType { if (JSON.name().equalsIgnoreCase(name)) { return JSON; } else if (YAML.name().equalsIgnoreCase(name)) { diff --git a/framework/src/main/java/org/onap/cli/fw/input/cache/Param.java b/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParamEntity.java index 5a32e886..85473d84 100644 --- a/framework/src/main/java/org/onap/cli/fw/input/cache/Param.java +++ b/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParamEntity.java @@ -16,7 +16,7 @@ package org.onap.cli.fw.input.cache; -public class Param { +public class OnapCommandParamEntity { private String product; diff --git a/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParameterCache.java b/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParameterCache.java index 0b70b5c1..55833167 100644 --- a/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParameterCache.java +++ b/framework/src/main/java/org/onap/cli/fw/input/cache/OnapCommandParameterCache.java @@ -16,15 +16,24 @@ package org.onap.cli.fw.input.cache; +import static org.onap.cli.fw.conf.OnapCommandConstants.DATA_DIRECTORY; +import static org.onap.cli.fw.conf.OnapCommandConstants.DATA_PATH_JSON_PATTERN; + +import java.io.File; +import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.onap.cli.fw.conf.Constants; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandLoadProfileFailed; import org.onap.cli.fw.error.OnapCommandPersistProfileFailed; -import org.onap.cli.fw.utils.OnapCommandProfileUtils; +import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; +import org.springframework.core.io.Resource; + +import com.fasterxml.jackson.databind.ObjectMapper; public class OnapCommandParameterCache { @@ -32,7 +41,7 @@ public class OnapCommandParameterCache { private static OnapCommandParameterCache single = null; - private String profileName = Constants.PARAM_CACHE_FILE_NAME; + private String profileName = OnapCommandConstants.PARAM_CACHE_FILE_NAME; private OnapCommandParameterCache() { @@ -78,12 +87,12 @@ public class OnapCommandParameterCache { } private void persist() { - List<Param> params = new ArrayList<>(); + List<OnapCommandParamEntity> params = new ArrayList<>(); for (String p: this.paramCache.keySet()) { for (String name: this.paramCache.get(p).keySet()) { - Param param = new Param(); + OnapCommandParamEntity param = new OnapCommandParamEntity(); param.setProduct(p); param.setName(name); param.setValue(this.paramCache.get(p).get(name)); @@ -93,21 +102,21 @@ public class OnapCommandParameterCache { } try { - OnapCommandProfileUtils.persistProfile(params, this.profileName); + this.persistProfile(params, this.profileName); } catch (OnapCommandPersistProfileFailed e) { throw new RuntimeException(e); // NOSONAR } } private void load() { - List<Param> params= new ArrayList<>(); + List<OnapCommandParamEntity> params= new ArrayList<>(); try { - params = OnapCommandProfileUtils.loadParamFromCache(this.profileName); + params = this.loadParamFromCache(this.profileName); } catch (OnapCommandLoadProfileFailed e) { throw new RuntimeException(e); // NOSONAR } - for (Param p : params) { + for (OnapCommandParamEntity p : params) { this.add(p.getProduct(), p.getName(), p.getValue()); } } @@ -116,4 +125,39 @@ public class OnapCommandParameterCache { this.profileName = profileName; this.load(); } + + private void persistProfile(List<OnapCommandParamEntity> params, String profileName) throws OnapCommandPersistProfileFailed { + if (params != null) { + try { + Resource[] resources = OnapCommandDiscoveryUtils.findResources(DATA_DIRECTORY); + if (resources != null && resources.length == 1) { + String path = resources[0].getURI().getPath(); + File file = new File(path + File.separator + profileName + ".json"); + ObjectMapper mapper = new ObjectMapper(); + mapper.writerWithDefaultPrettyPrinter().writeValue(file, params); + } + } catch (IOException e1) { + throw new OnapCommandPersistProfileFailed(e1); + } + } + } + + private List<OnapCommandParamEntity> loadParamFromCache(String profileName) throws OnapCommandLoadProfileFailed { + List<OnapCommandParamEntity> params = new ArrayList<>(); + + try { + Resource resource = OnapCommandDiscoveryUtils.findResource(profileName + ".json", + DATA_PATH_JSON_PATTERN); + if (resource != null) { + File file = new File(resource.getURI().getPath()); + ObjectMapper mapper = new ObjectMapper(); + OnapCommandParamEntity[] list = mapper.readValue(file, OnapCommandParamEntity[].class); + params.addAll(Arrays.asList(list)); + } + } catch (IOException e) { + throw new OnapCommandLoadProfileFailed(e); + } + + return params; + } } diff --git a/framework/src/main/java/org/onap/cli/fw/output/PrintDirection.java b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandPrintDirection.java index 96ad713f..5a8e6657 100644 --- a/framework/src/main/java/org/onap/cli/fw/output/PrintDirection.java +++ b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandPrintDirection.java @@ -22,7 +22,7 @@ import org.onap.cli.fw.error.OnapCommandInvalidPrintDirection; * How to print the result. * */ -public enum PrintDirection { +public enum OnapCommandPrintDirection { LANDSCAPE, PORTRAIT; /** * Get print direction. @@ -33,7 +33,7 @@ public enum PrintDirection { * @throws OnapCommandInvalidPrintDirection * exception */ - public static PrintDirection get(String name) throws OnapCommandInvalidPrintDirection { + public static OnapCommandPrintDirection get(String name) throws OnapCommandInvalidPrintDirection { if (LANDSCAPE.name().equalsIgnoreCase(name)) { return LANDSCAPE; } else if (PORTRAIT.name().equalsIgnoreCase(name)) { diff --git a/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResult.java b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResult.java index ae5d86ca..4eaab81a 100644 --- a/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResult.java +++ b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResult.java @@ -21,11 +21,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.onap.cli.fw.conf.Constants; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandOutputFormatNotsupported; import org.onap.cli.fw.error.OnapCommandOutputPrintingFailed; -import org.onap.cli.fw.input.ParameterType; +import org.onap.cli.fw.input.OnapCommandParameterType; import org.onap.cli.fw.output.print.OnapCommandPrint; import org.onap.cli.fw.utils.OnapCommandUtils; @@ -47,7 +47,7 @@ public class OnapCommandResult { /* * Type requested by user */ - private ResultType type = ResultType.TABLE; + private OnapCommandResultType type = OnapCommandResultType.TABLE; /* * Scope requested by user @@ -65,7 +65,7 @@ public class OnapCommandResult { * * loaded from schema file */ - private PrintDirection printDirection = PrintDirection.LANDSCAPE; + private OnapCommandPrintDirection printDirection = OnapCommandPrintDirection.LANDSCAPE; private String debugInfo = ""; @@ -84,11 +84,11 @@ public class OnapCommandResult { */ private boolean isDebug = false; - public PrintDirection getPrintDirection() { + public OnapCommandPrintDirection getPrintDirection() { return printDirection; } - public void setPrintDirection(PrintDirection printDirection) { + public void setPrintDirection(OnapCommandPrintDirection printDirection) { this.printDirection = printDirection; } @@ -123,11 +123,11 @@ public class OnapCommandResult { return recordMap; } - public ResultType getType() { + public OnapCommandResultType getType() { return type; } - public void setType(ResultType type) { + public void setType(OnapCommandResultType type) { this.type = type; } @@ -189,9 +189,9 @@ public class OnapCommandResult { OnapCommandPrint print = new OnapCommandPrint(); print.setPrintTitle(this.isIncludeTitle()); - if (this.getPrintDirection().equals(PrintDirection.LANDSCAPE)) { + if (this.getPrintDirection().equals(OnapCommandPrintDirection.LANDSCAPE)) { for (OnapCommandResultAttribute record : this.getScopedRecords()) { - if (record.getType().equals(ParameterType.JSON)) { + if (record.getType().equals(OnapCommandParameterType.JSON)) { print.addColumn(record.getName(), OnapCommandUtils.jsonFlatten(record.getValues())); } else { print.addColumn(record.getName(), record.getValues()); @@ -200,11 +200,11 @@ public class OnapCommandResult { } else { // Add property column OnapCommandResultAttribute prp = new OnapCommandResultAttribute(); - prp.setName(Constants.PORTRAINT_COLUMN_NAME_PROPERTY); + prp.setName(OnapCommandConstants.PORTRAINT_COLUMN_NAME_PROPERTY); prp.setScope(OnapCommandResultAttributeScope.SHORT); // Add value column OnapCommandResultAttribute val = new OnapCommandResultAttribute(); - val.setName(Constants.PORTRAINT_COLUMN_NAME_VALUE); + val.setName(OnapCommandConstants.PORTRAINT_COLUMN_NAME_VALUE); val.setScope(OnapCommandResultAttributeScope.SHORT); for (OnapCommandResultAttribute record : this.getScopedRecords()) { @@ -224,11 +224,11 @@ public class OnapCommandResult { printOutput = this.getDebugInfo() + "\n"; } - if (this.getType().equals(ResultType.JSON)) { + if (this.getType().equals(OnapCommandResultType.JSON)) { return printOutput + print.printJson(); - } else if (this.getType().equals(ResultType.TABLE)) { + } else if (this.getType().equals(OnapCommandResultType.TABLE)) { return printOutput + print.printTable(this.isIncludeSeparator()); - } else if (this.getType().equals(ResultType.CSV)) { + } else if (this.getType().equals(OnapCommandResultType.CSV)) { return printOutput + print.printCsv(); } diff --git a/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultAttribute.java b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultAttribute.java index fe4ed32e..c00c88b1 100644 --- a/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultAttribute.java +++ b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultAttribute.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.onap.cli.fw.input.ParameterType; +import org.onap.cli.fw.input.OnapCommandParameterType; /** * Oclip command output records, helps to define the title and its description while command is defined and during run @@ -53,7 +53,7 @@ public class OnapCommandResultAttribute { */ private OnapCommandResultAttributeScope outScope = OnapCommandResultAttributeScope.SHORT; - private ParameterType paramType = ParameterType.STRING; + private OnapCommandParameterType paramType = OnapCommandParameterType.STRING; private boolean isSecured = false; @@ -92,11 +92,11 @@ public class OnapCommandResultAttribute { this.outScope = scope; } - public ParameterType getType() { + public OnapCommandParameterType getType() { return paramType; } - public void setType(ParameterType type) { + public void setType(OnapCommandParameterType type) { this.paramType = type; } diff --git a/framework/src/main/java/org/onap/cli/fw/output/ResultType.java b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultType.java index 49ddf457..ebd13ebd 100644 --- a/framework/src/main/java/org/onap/cli/fw/output/ResultType.java +++ b/framework/src/main/java/org/onap/cli/fw/output/OnapCommandResultType.java @@ -20,7 +20,7 @@ package org.onap.cli.fw.output; * Oclip command result format. * */ -public enum ResultType { +public enum OnapCommandResultType { TABLE, CSV, JSON, YAML, TEXT; /** @@ -39,13 +39,13 @@ public enum ResultType { } /** - * Get ResultType. + * Get OnapCommandResultType. * * @param name * format name - * @return ResultType + * @return OnapCommandResultType */ - public static ResultType get(String name) { + public static OnapCommandResultType get(String name) { if (TABLE.name().equalsIgnoreCase(name)) { return TABLE; } diff --git a/framework/src/main/java/org/onap/cli/fw/output/print/OnapCommandPrint.java b/framework/src/main/java/org/onap/cli/fw/output/print/OnapCommandPrint.java index 96ce59b2..3946c5da 100644 --- a/framework/src/main/java/org/onap/cli/fw/output/print/OnapCommandPrint.java +++ b/framework/src/main/java/org/onap/cli/fw/output/print/OnapCommandPrint.java @@ -29,7 +29,7 @@ import java.util.StringTokenizer; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import org.onap.cli.fw.error.OnapCommandOutputPrintingFailed; -import org.onap.cli.fw.output.PrintDirection; +import org.onap.cli.fw.output.OnapCommandPrintDirection; /** * Oclip Command Table print. @@ -39,17 +39,17 @@ public class OnapCommandPrint { public static final int MAX_COLUMN_LENGTH = 50; - private PrintDirection direction; + private OnapCommandPrintDirection direction; private Map<String, List<String>> data = new LinkedHashMap<>(); private boolean printTitle = true; - public PrintDirection getDirection() { + public OnapCommandPrintDirection getDirection() { return direction; } - public void setDirection(PrintDirection direction) { + public void setDirection(OnapCommandPrintDirection direction) { this.direction = direction; } diff --git a/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java b/framework/src/main/java/org/onap/cli/fw/registrar/OnapCommandRegistrar.java index d50ff464..f8fb73fd 100644 --- a/framework/src/main/java/org/onap/cli/fw/OnapCommandRegistrar.java +++ b/framework/src/main/java/org/onap/cli/fw/registrar/OnapCommandRegistrar.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.onap.cli.fw; +package org.onap.cli.fw.registrar; import java.io.IOException; import java.util.HashMap; @@ -24,8 +24,9 @@ import java.util.Map; import java.util.Set; import org.apache.commons.io.IOUtils; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; +import org.onap.cli.fw.cmd.OnapCommand; +import org.onap.cli.fw.conf.OnapCommandConfig; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandHelpFailed; import org.onap.cli.fw.error.OnapCommandInvalidRegistration; @@ -34,15 +35,16 @@ import org.onap.cli.fw.error.OnapCommandProductVersionInvalid; import org.onap.cli.fw.error.OnapCommandRegistrationProductInfoMissing; import org.onap.cli.fw.error.OnapUnsupportedSchemaProfile; import org.onap.cli.fw.input.cache.OnapCommandParameterCache; +import org.onap.cli.fw.output.OnapCommandPrintDirection; import org.onap.cli.fw.output.OnapCommandResult; import org.onap.cli.fw.output.OnapCommandResultAttribute; import org.onap.cli.fw.output.OnapCommandResultAttributeScope; -import org.onap.cli.fw.output.PrintDirection; -import org.onap.cli.fw.output.ResultType; +import org.onap.cli.fw.output.OnapCommandResultType; +import org.onap.cli.fw.schema.OnapCommandSchema; +import org.onap.cli.fw.schema.OnapCommandSchemaInfo; import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; import org.onap.cli.fw.utils.OnapCommandHelperUtils; import org.onap.cli.fw.utils.OnapCommandUtils; -import org.onap.cli.fw.utils.SchemaInfo; /** @@ -57,7 +59,7 @@ public class OnapCommandRegistrar { private Set<String> availableProductVersions = new HashSet<>(); - private String enabledProductVersion = OnapCommandConfg.getEnabledProductVersion(); + private String enabledProductVersion = null; private boolean isInteractiveMode = false; @@ -114,6 +116,13 @@ public class OnapCommandRegistrar { this.registryProfilePlugins.put(profile, cmd); } + private OnapCommandRegistrar() { + this.enabledProductVersion = System.getenv(OnapCommandConstants.OPEN_CLI_PRODUCT_IN_USE_ENV_NAME); + if (this.enabledProductVersion == null) { + this.enabledProductVersion = OnapCommandConfig.getPropertyValue(OnapCommandConstants.OPEN_CLI_PRODUCT_NAME); + } + } + /** * Get global registrar. * @@ -190,7 +199,7 @@ public class OnapCommandRegistrar { * @throws OnapCommandException * exception */ - public List<SchemaInfo> listCommandInfo() throws OnapCommandException { + public List<OnapCommandSchemaInfo> listCommandInfo() throws OnapCommandException { return OnapCommandDiscoveryUtils.discoverSchemas(); } @@ -256,11 +265,11 @@ public class OnapCommandRegistrar { } private void autoDiscoverSchemas() throws OnapCommandException { - List<SchemaInfo> schemas = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(true); + List<OnapCommandSchemaInfo> schemas = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(true); Map<String, Class<OnapCommand>> plugins = this.autoDiscoverCommandPlugins(); - for (SchemaInfo schema : schemas) { + for (OnapCommandSchemaInfo schema : schemas) { if (schema.isIgnore()) { continue; } @@ -283,7 +292,7 @@ public class OnapCommandRegistrar { public String getVersion() { String version = this.getClass().getPackage().getImplementationVersion(); if (version == null) { - version = OnapCommandConfg.getVersion(); + version = OnapCommandConfig.getPropertyValue(OnapCommandConstants.OPEN_CLI_VERSION); } String buildTime = OnapCommandHelperUtils.findLastBuildTime(); @@ -297,14 +306,14 @@ public class OnapCommandRegistrar { String versionInfo = ""; try { - versionInfo = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(Constants.VERSION_INFO)); + versionInfo = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(OnapCommandConstants.VERSION_INFO)); } catch (IOException e) { //Never occurs // NOSONAR } - versionInfo = versionInfo.replaceAll(Constants.VERSION_INFO_PLACE_HOLDER_ENB_PRD_VER, configuredProductVersion); - versionInfo = versionInfo.replaceAll(Constants.VERSION_INFO_PLACE_HOLDER_AVL_PRD_VER, this.availableProductVersions.toString()); - versionInfo = versionInfo.replaceAll(Constants.VERSION_INFO_PLACE_HOLDER_VERSION + "", version + buildTime); + versionInfo = versionInfo.replaceAll(OnapCommandConstants.VERSION_INFO_PLACE_HOLDER_ENB_PRD_VER, configuredProductVersion); + versionInfo = versionInfo.replaceAll(OnapCommandConstants.VERSION_INFO_PLACE_HOLDER_AVL_PRD_VER, this.availableProductVersions.toString()); + versionInfo = versionInfo.replaceAll(OnapCommandConstants.VERSION_INFO_PLACE_HOLDER_VERSION + "", version + buildTime); return versionInfo; } @@ -326,32 +335,32 @@ public class OnapCommandRegistrar { private String getHelp(boolean isEnabledProductVersionOnly) throws OnapCommandHelpFailed { OnapCommandResult help = new OnapCommandResult(); - help.setType(ResultType.TABLE); - help.setPrintDirection(PrintDirection.LANDSCAPE); + help.setType(OnapCommandResultType.TABLE); + help.setPrintDirection(OnapCommandPrintDirection.LANDSCAPE); OnapCommandResultAttribute attr = new OnapCommandResultAttribute(); - attr.setName(Constants.NAME.toUpperCase()); - attr.setDescription(Constants.DESCRIPTION); + attr.setName(OnapCommandConstants.NAME.toUpperCase()); + attr.setDescription(OnapCommandConstants.DESCRIPTION); attr.setScope(OnapCommandResultAttributeScope.SHORT); help.getRecords().add(attr); OnapCommandResultAttribute attrVer = new OnapCommandResultAttribute(); if (!isEnabledProductVersionOnly) { - attrVer.setName(Constants.INFO_PRODUCT.toUpperCase()); - attrVer.setDescription(Constants.DESCRIPTION); + attrVer.setName(OnapCommandConstants.INFO_PRODUCT.toUpperCase()); + attrVer.setDescription(OnapCommandConstants.DESCRIPTION); attrVer.setScope(OnapCommandResultAttributeScope.SHORT); help.getRecords().add(attrVer); } OnapCommandResultAttribute attrSrv = new OnapCommandResultAttribute(); - attrSrv.setName(Constants.SERVICE.toUpperCase()); - attrSrv.setDescription(Constants.SERVICE); + attrSrv.setName(OnapCommandConstants.INFO_SERVICE.toUpperCase()); + attrSrv.setDescription(OnapCommandConstants.INFO_SERVICE); attrSrv.setScope(OnapCommandResultAttributeScope.SHORT); help.getRecords().add(attrSrv); OnapCommandResultAttribute attrDesc = new OnapCommandResultAttribute(); - attrDesc.setName(Constants.DESCRIPTION.toUpperCase()); - attrDesc.setDescription(Constants.DESCRIPTION); + attrDesc.setName(OnapCommandConstants.DESCRIPTION.toUpperCase()); + attrDesc.setDescription(OnapCommandConstants.DESCRIPTION); attrDesc.setScope(OnapCommandResultAttributeScope.SHORT); help.getRecords().add(attrDesc); diff --git a/framework/src/main/java/org/onap/cli/fw/OnapCommandSchema.java b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchema.java index d5f71044..12eede74 100644 --- a/framework/src/main/java/org/onap/cli/fw/OnapCommandSchema.java +++ b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchema.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.onap.cli.fw; +package org.onap.cli.fw.schema; import java.lang.annotation.Documented; import java.lang.annotation.Retention; diff --git a/framework/src/main/java/org/onap/cli/fw/utils/SchemaInfo.java b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchemaInfo.java index beb02a37..67675480 100644 --- a/framework/src/main/java/org/onap/cli/fw/utils/SchemaInfo.java +++ b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchemaInfo.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.onap.cli.fw.utils; +package org.onap.cli.fw.schema; -import org.onap.cli.fw.cmd.CommandType; -import org.onap.cli.fw.conf.Constants; +import org.onap.cli.fw.cmd.OnapCommandType; +import org.onap.cli.fw.conf.OnapCommandConstants; /** - * SchemaInfo is used in discovery caching. + * OnapCommandSchemaInfo is used in discovery caching. * */ -public class SchemaInfo { +public class OnapCommandSchemaInfo { /** * Name of the schema file name @@ -44,11 +44,11 @@ public class SchemaInfo { */ private String version; - private String type = CommandType.CMD.name(); + private String type = OnapCommandType.CMD.name(); - private String schemaProfile = Constants.BASIC_SCHEMA_PROFILE; + private String schemaProfile = OnapCommandConstants.BASIC_SCHEMA_PROFILE; - private String ignore = Constants.BOOLEAN_FALSE; + private String ignore = OnapCommandConstants.BOOLEAN_FALSE; public String getSchemaName() { return schemaName; @@ -107,7 +107,7 @@ public class SchemaInfo { } public boolean isIgnore() { - return Constants.BOOLEAN_TRUE.equalsIgnoreCase(this.getIgnore()); + return OnapCommandConstants.BOOLEAN_TRUE.equalsIgnoreCase(this.getIgnore()); } public String getIgnore() { diff --git a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandSchemaLoaderUtils.java b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchemaLoader.java index 04bfd23c..8aea883e 100644 --- a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandSchemaLoaderUtils.java +++ b/framework/src/main/java/org/onap/cli/fw/schema/OnapCommandSchemaLoader.java @@ -14,68 +14,43 @@ * limitations under the License. */ -package org.onap.cli.fw.utils; - -import static org.onap.cli.fw.conf.Constants.ATTRIBUTES; -import static org.onap.cli.fw.conf.Constants.AUTH; -import static org.onap.cli.fw.conf.Constants.AUTH_VALUES; -import static org.onap.cli.fw.conf.Constants.BODY; -import static org.onap.cli.fw.conf.Constants.BOOLEAN_TRUE; -import static org.onap.cli.fw.conf.Constants.COMMAND_TYPE_VALUES; -import static org.onap.cli.fw.conf.Constants.DEAFULT_PARAMETER_PASSWORD; -import static org.onap.cli.fw.conf.Constants.DEAFULT_PARAMETER_USERNAME; -import static org.onap.cli.fw.conf.Constants.DEFAULT_PARAMETER_FILE_NAME; -import static org.onap.cli.fw.conf.Constants.DEFAULT_PARAMETER_HTTP_FILE_NAME; -import static org.onap.cli.fw.conf.Constants.DEFAULT_PARAMETER_NO_AUTH; -import static org.onap.cli.fw.conf.Constants.DEFAULT_VALUE; -import static org.onap.cli.fw.conf.Constants.DESCRIPTION; -import static org.onap.cli.fw.conf.Constants.DIRECTION; -import static org.onap.cli.fw.conf.Constants.HEADERS; -import static org.onap.cli.fw.conf.Constants.HTTP; -import static org.onap.cli.fw.conf.Constants.HTTP_MANDATORY_SECTIONS; -import static org.onap.cli.fw.conf.Constants.HTTP_SECTIONS; -import static org.onap.cli.fw.conf.Constants.INFO; -import static org.onap.cli.fw.conf.Constants.INFO_AUTHOR; -import static org.onap.cli.fw.conf.Constants.INFO_IGNORE; -import static org.onap.cli.fw.conf.Constants.INFO_PARAMS_LIST; -import static org.onap.cli.fw.conf.Constants.INFO_PARAMS_MANDATORY_LIST; -import static org.onap.cli.fw.conf.Constants.INFO_PRODUCT; -import static org.onap.cli.fw.conf.Constants.INFO_SERVICE; -import static org.onap.cli.fw.conf.Constants.INFO_TYPE; -import static org.onap.cli.fw.conf.Constants.INPUT_PARAMS_LIST; -import static org.onap.cli.fw.conf.Constants.INPUT_PARAMS_MANDATORY_LIST; -import static org.onap.cli.fw.conf.Constants.IS_INCLUDE; -import static org.onap.cli.fw.conf.Constants.IS_OPTIONAL; -import static org.onap.cli.fw.conf.Constants.IS_SECURED; -import static org.onap.cli.fw.conf.Constants.LONG_OPTION; -import static org.onap.cli.fw.conf.Constants.METHOD_TYPE; -import static org.onap.cli.fw.conf.Constants.MODE; -import static org.onap.cli.fw.conf.Constants.MODE_VALUES; -import static org.onap.cli.fw.conf.Constants.MULTIPART_ENTITY_NAME; -import static org.onap.cli.fw.conf.Constants.NAME; -import static org.onap.cli.fw.conf.Constants.OPEN_CLI_SCHEMA_VERSION; -import static org.onap.cli.fw.conf.Constants.PARAMETERS; -import static org.onap.cli.fw.conf.Constants.QUERIES; -import static org.onap.cli.fw.conf.Constants.REQUEST; -import static org.onap.cli.fw.conf.Constants.RESULTS; -import static org.onap.cli.fw.conf.Constants.RESULT_MAP; -import static org.onap.cli.fw.conf.Constants.RESULT_PARAMS_LIST; -import static org.onap.cli.fw.conf.Constants.RESULT_PARAMS_MANDATORY_LIST; -import static org.onap.cli.fw.conf.Constants.SAMPLE_RESPONSE; -import static org.onap.cli.fw.conf.Constants.SCHEMA_FILE_NOT_EXIST; -import static org.onap.cli.fw.conf.Constants.SCHEMA_FILE_WRONG_EXTN; -import static org.onap.cli.fw.conf.Constants.SCHEMA_PATH_PATERN; -import static org.onap.cli.fw.conf.Constants.SCOPE; -import static org.onap.cli.fw.conf.Constants.SERVICE; -import static org.onap.cli.fw.conf.Constants.SERVICE_PARAMS_LIST; -import static org.onap.cli.fw.conf.Constants.SERVICE_PARAMS_MANDATORY_LIST; -import static org.onap.cli.fw.conf.Constants.SHORT_OPTION; -import static org.onap.cli.fw.conf.Constants.SUCCESS_CODES; -import static org.onap.cli.fw.conf.Constants.TOP_LEVEL_MANDATORY_LIST; -import static org.onap.cli.fw.conf.Constants.TOP_LEVEL_PARAMS_LIST; -import static org.onap.cli.fw.conf.Constants.TYPE; -import static org.onap.cli.fw.conf.Constants.URI; -import static org.onap.cli.fw.conf.Constants.VERSION; +package org.onap.cli.fw.schema; + +import static org.onap.cli.fw.conf.OnapCommandConstants.ATTRIBUTES; +import static org.onap.cli.fw.conf.OnapCommandConstants.BOOLEAN_TRUE; +import static org.onap.cli.fw.conf.OnapCommandConstants.COMMAND_TYPE_VALUES; +import static org.onap.cli.fw.conf.OnapCommandConstants.DEFAULT_PARAMETER_FILE_NAME; +import static org.onap.cli.fw.conf.OnapCommandConstants.DEFAULT_VALUE; +import static org.onap.cli.fw.conf.OnapCommandConstants.DESCRIPTION; +import static org.onap.cli.fw.conf.OnapCommandConstants.DIRECTION; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_AUTHOR; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_IGNORE; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_PARAMS_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_PARAMS_MANDATORY_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_PRODUCT; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_SERVICE; +import static org.onap.cli.fw.conf.OnapCommandConstants.INFO_TYPE; +import static org.onap.cli.fw.conf.OnapCommandConstants.INPUT_PARAMS_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.INPUT_PARAMS_MANDATORY_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.IS_INCLUDE; +import static org.onap.cli.fw.conf.OnapCommandConstants.IS_OPTIONAL; +import static org.onap.cli.fw.conf.OnapCommandConstants.IS_SECURED; +import static org.onap.cli.fw.conf.OnapCommandConstants.LONG_OPTION; +import static org.onap.cli.fw.conf.OnapCommandConstants.NAME; +import static org.onap.cli.fw.conf.OnapCommandConstants.OPEN_CLI_SCHEMA_VERSION; +import static org.onap.cli.fw.conf.OnapCommandConstants.PARAMETERS; +import static org.onap.cli.fw.conf.OnapCommandConstants.RESULTS; +import static org.onap.cli.fw.conf.OnapCommandConstants.RESULT_PARAMS_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.RESULT_PARAMS_MANDATORY_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCHEMA_FILE_NOT_EXIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCHEMA_FILE_WRONG_EXTN; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCHEMA_PATH_PATERN; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCOPE; +import static org.onap.cli.fw.conf.OnapCommandConstants.SHORT_OPTION; +import static org.onap.cli.fw.conf.OnapCommandConstants.TOP_LEVEL_MANDATORY_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.TOP_LEVEL_PARAMS_LIST; +import static org.onap.cli.fw.conf.OnapCommandConstants.TYPE; import java.io.File; import java.io.FileInputStream; @@ -90,12 +65,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.ad.OnapService; -import org.onap.cli.fw.cmd.CommandType; -import org.onap.cli.fw.cmd.OnapHttpCommand; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; +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; import org.onap.cli.fw.error.OnapCommandInvalidSchema; import org.onap.cli.fw.error.OnapCommandInvalidSchemaVersion; @@ -104,15 +77,17 @@ import org.onap.cli.fw.error.OnapCommandParameterOptionConflict; import org.onap.cli.fw.error.OnapCommandSchemaNotFound; import org.onap.cli.fw.info.OnapCommandInfo; import org.onap.cli.fw.input.OnapCommandParameter; -import org.onap.cli.fw.input.ParameterType; +import org.onap.cli.fw.input.OnapCommandParameterType; +import org.onap.cli.fw.output.OnapCommandPrintDirection; import org.onap.cli.fw.output.OnapCommandResult; import org.onap.cli.fw.output.OnapCommandResultAttribute; import org.onap.cli.fw.output.OnapCommandResultAttributeScope; -import org.onap.cli.fw.output.PrintDirection; +import org.onap.cli.fw.utils.OnapCommandDiscoveryUtils; +import org.onap.cli.fw.utils.OnapCommandUtils; import org.springframework.core.io.Resource; import org.yaml.snakeyaml.Yaml; -public class OnapCommandSchemaLoaderUtils { +public class OnapCommandSchemaLoader { /** * Validates schema version. @@ -138,10 +113,10 @@ public class OnapCommandSchemaLoaderUtils { throw new OnapCommandSchemaNotFound(schemaName, e); } if (inputStream == null) { - inputStream = OnapCommandSchemaLoaderUtils.loadSchemaFromFile(schemaName); + inputStream = OnapCommandSchemaLoader.loadSchemaFromFile(schemaName); } - Map<String, ?> values = OnapCommandSchemaLoaderUtils.loadSchema(inputStream, schemaName); + Map<String, ?> values = OnapCommandSchemaLoader.loadSchema(inputStream, schemaName); String schemaVersion = ""; if (values.keySet().contains(OPEN_CLI_SCHEMA_VERSION)) { Object obj = values.get(OPEN_CLI_SCHEMA_VERSION); @@ -173,16 +148,16 @@ public class OnapCommandSchemaLoaderUtils { validateSchemaVersion(DEFAULT_PARAMETER_FILE_NAME, cmd.getSchemaVersion()) : new HashMap<>(); //mrkanag default_parameter is supported only for parameters. if (defaultParameterMap.containsKey(INFO)) { - defaultParameterMap.remove(Constants.INFO); + defaultParameterMap.remove(OnapCommandConstants.INFO); } - errors.addAll(OnapCommandSchemaLoaderUtils.parseSchema(cmd, defaultParameterMap, validateSchema)); + errors.addAll(OnapCommandSchemaLoader.parseSchema(cmd, defaultParameterMap, validateSchema)); } Map<String, List<Map<String, String>>> commandYamlMap = (Map<String, List<Map<String, String>>>)validateSchemaVersion(schemaName, cmd.getSchemaVersion()); - errors.addAll(OnapCommandSchemaLoaderUtils.parseSchema(cmd, commandYamlMap, validateSchema)); + errors.addAll(OnapCommandSchemaLoader.parseSchema(cmd, commandYamlMap, validateSchema)); return errors; } catch (OnapCommandException e) { @@ -192,37 +167,7 @@ public class OnapCommandSchemaLoaderUtils { } } - 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 ? - validateSchemaVersion(DEFAULT_PARAMETER_HTTP_FILE_NAME, cmd.getSchemaVersion()) : new HashMap<>(); - - //mrkanag default_parameter is supported only for parameters. - if (defaultParameterMap.containsKey(INFO)) { - defaultParameterMap.remove(Constants.INFO); - } - - errors.addAll(OnapCommandSchemaLoaderUtils.parseSchema(cmd, defaultParameterMap, validateSchema)); - } - - Map<String, List<Map<String, String>>> commandYamlMap = - (Map<String, List<Map<String, String>>>)validateSchemaVersion(schemaName, cmd.getSchemaVersion()); - - errors.addAll(OnapCommandSchemaLoaderUtils.parseHttpSchema(cmd, commandYamlMap, validateSchema)); - - return errors; - - } catch (OnapCommandException e) { - throw e; - } catch (Exception e) { - throw new OnapCommandInvalidSchema(schemaName, e); - } - } - - static List<String> parseSchema(OnapCommand cmd, + public static List<String> parseSchema(OnapCommand cmd, final Map<String, ?> values, boolean validate) throws OnapCommandException { @@ -231,8 +176,8 @@ public class OnapCommandSchemaLoaderUtils { List<String> longOptions = new ArrayList<>(); if (validate) { - OnapCommandUtils.validateTags(exceptionList, (Map<String, Object>) values, OnapCommandConfg.getSchemaAttrInfo(TOP_LEVEL_PARAMS_LIST), - OnapCommandConfg.getSchemaAttrInfo(TOP_LEVEL_MANDATORY_LIST), "root level"); + OnapCommandUtils.validateTags(exceptionList, (Map<String, Object>) values, OnapCommandConfig.getCommaSeparatedList(TOP_LEVEL_PARAMS_LIST), + OnapCommandConfig.getCommaSeparatedList(TOP_LEVEL_MANDATORY_LIST), "root level"); } @@ -261,8 +206,8 @@ public class OnapCommandSchemaLoaderUtils { if (infoMap != null) { if (validate) { OnapCommandUtils.validateTags(exceptionList, (Map<String, Object>) values.get(key), - OnapCommandConfg.getSchemaAttrInfo(INFO_PARAMS_LIST), - OnapCommandConfg.getSchemaAttrInfo(INFO_PARAMS_MANDATORY_LIST), INFO); + OnapCommandConfig.getCommaSeparatedList(INFO_PARAMS_LIST), + OnapCommandConfig.getCommaSeparatedList(INFO_PARAMS_MANDATORY_LIST), INFO); HashMap<String, String> validationMap = new HashMap<>(); validationMap.put(INFO_TYPE, COMMAND_TYPE_VALUES); @@ -274,9 +219,9 @@ public class OnapCommandSchemaLoaderUtils { exceptionList.add("Attribute '" + secKey + "' under '" + INFO + "' is empty"); } else { String value = String.valueOf(obj); - if (!OnapCommandConfg.getSchemaAttrInfo(validationMap.get(secKey)).contains(value)) { + if (!OnapCommandConfig.getCommaSeparatedList(validationMap.get(secKey)).contains(value)) { exceptionList.add("Attribute '" + secKey + "' contains invalid value. Valide values are " - + OnapCommandConfg.getSchemaAttrInfo(validationMap.get(key))); // + + OnapCommandConfig.getCommaSeparatedList(validationMap.get(key))); // } } } @@ -299,7 +244,7 @@ public class OnapCommandSchemaLoaderUtils { case INFO_TYPE: Object obj = infoMap.get(key1); - info.setCommandType(CommandType.get(obj.toString())); + info.setCommandType(OnapCommandType.get(obj.toString())); break; case INFO_AUTHOR: @@ -309,7 +254,7 @@ public class OnapCommandSchemaLoaderUtils { case INFO_IGNORE: Object ignore = infoMap.get(key1); - info.setIgnore(ignore.toString().equalsIgnoreCase(Constants.BOOLEAN_TRUE)); + info.setIgnore(ignore.toString().equalsIgnoreCase(OnapCommandConstants.BOOLEAN_TRUE)); break; } } @@ -341,8 +286,8 @@ public class OnapCommandSchemaLoaderUtils { } if (validate) { - OnapCommandUtils.validateTags(exceptionList, parameter, OnapCommandConfg.getSchemaAttrInfo(INPUT_PARAMS_LIST), - OnapCommandConfg.getSchemaAttrInfo(INPUT_PARAMS_MANDATORY_LIST), PARAMETERS); + OnapCommandUtils.validateTags(exceptionList, parameter, OnapCommandConfig.getCommaSeparatedList(INPUT_PARAMS_LIST), + OnapCommandConfig.getCommaSeparatedList(INPUT_PARAMS_MANDATORY_LIST), PARAMETERS); } for (Map.Entry<String, String> entry1 : parameter.entrySet()) { @@ -390,7 +335,7 @@ public class OnapCommandSchemaLoaderUtils { case TYPE: try { - param.setParameterType(ParameterType.get(parameter.get(key2))); + param.setParameterType(OnapCommandParameterType.get(parameter.get(key2))); } catch (OnapCommandException ex) { OnapCommandUtils.throwOrCollect(ex, exceptionList, validate); } @@ -461,7 +406,7 @@ public class OnapCommandSchemaLoaderUtils { switch (key3) { case DIRECTION: try { - result.setPrintDirection(PrintDirection.get((String) valueMap.get(key3))); + result.setPrintDirection(OnapCommandPrintDirection.get((String) valueMap.get(key3))); } catch (OnapCommandException ex) { OnapCommandUtils.throwOrCollect(ex, exceptionList, validate); } @@ -473,8 +418,8 @@ public class OnapCommandSchemaLoaderUtils { for (Map<String, String> map : attrs) { OnapCommandResultAttribute attr = new OnapCommandResultAttribute(); if (validate) { - OnapCommandUtils.validateTags(exceptionList, map, OnapCommandConfg.getSchemaAttrInfo(RESULT_PARAMS_LIST), - OnapCommandConfg.getSchemaAttrInfo(RESULT_PARAMS_MANDATORY_LIST), ATTRIBUTES); + OnapCommandUtils.validateTags(exceptionList, map, OnapCommandConfig.getCommaSeparatedList(RESULT_PARAMS_LIST), + OnapCommandConfig.getCommaSeparatedList(RESULT_PARAMS_MANDATORY_LIST), ATTRIBUTES); } Set<String> resultParamNames = new HashSet<>(); @@ -508,7 +453,7 @@ public class OnapCommandSchemaLoaderUtils { case TYPE: try { - attr.setType(ParameterType.get(map.get(key4))); + attr.setType(OnapCommandParameterType.get(map.get(key4))); } catch (OnapCommandException ex) { OnapCommandUtils.throwOrCollect(ex, exceptionList, validate); } @@ -548,173 +493,6 @@ public class OnapCommandSchemaLoaderUtils { return exceptionList; } - /** - * Load the schema. - * - * @param cmd - * OnapHttpCommand - * @param schemaName - * schema name - * @throws OnapCommandException - * on error - */ - static ArrayList<String> parseHttpSchema(OnapHttpCommand cmd, - final Map<String, ?> values, - boolean validate) throws OnapCommandException { - ArrayList<String> errorList = new ArrayList<>(); - try { - Map<String, ?> valMap = (Map<String, ?>) values.get(HTTP); - - if (valMap != null) { - if (validate) { - OnapCommandUtils.validateTags(errorList, valMap, OnapCommandConfg.getSchemaAttrInfo(HTTP_SECTIONS), - OnapCommandConfg.getSchemaAttrInfo(HTTP_MANDATORY_SECTIONS), PARAMETERS); - errorList.addAll(OnapCommandUtils.validateHttpSchemaSection(values)); - } - for (Map.Entry<String, ?> entry1 : valMap.entrySet()) { - String key1 = entry1.getKey(); - - switch (key1) { - case REQUEST: - Map<String, ?> map = (Map<String, ?>) valMap.get(key1); - - for (Map.Entry<String, ?> entry2 : map.entrySet()) { - try { - String key2 = entry2.getKey(); - - switch (key2) { - case URI: - Object obj = map.get(key2); - cmd.getInput().setUri(obj.toString()); - break; - case METHOD_TYPE: - Object method = map.get(key2); - cmd.getInput().setMethod(method.toString()); - break; - case BODY: - Object body = map.get(key2); - cmd.getInput().setBody(body.toString()); - break; - case HEADERS: - Map<String, String> head = (Map<String, String>) map.get(key2); - cmd.getInput().setReqHeaders(head); - break; - case QUERIES: - Map<String, String> query = (Map<String, String>) map.get(key2); - - cmd.getInput().setReqQueries(query); - break; - case MULTIPART_ENTITY_NAME: - Object multipartEntityName = map.get(key2); - cmd.getInput().setMultipartEntityName(multipartEntityName.toString()); - break; - } - }catch (Exception ex) { - OnapCommandUtils.throwOrCollect(new OnapCommandInvalidSchema(cmd.getSchemaName(), ex), errorList, validate); - } - } - break; - - case SERVICE: - Map<String, String> serviceMap = (Map<String, String>) valMap.get(key1); - - if (serviceMap != null) { - if (validate) { - OnapCommandUtils.validateTags(errorList, (Map<String, Object>) valMap.get(key1), - OnapCommandConfg.getSchemaAttrInfo(SERVICE_PARAMS_LIST), - OnapCommandConfg.getSchemaAttrInfo(SERVICE_PARAMS_MANDATORY_LIST), SERVICE); - - HashMap<String, String> validationMap = new HashMap<>(); - validationMap.put(AUTH, AUTH_VALUES); - validationMap.put(MODE, MODE_VALUES); - - for (String secKey : validationMap.keySet()) { - if (serviceMap.containsKey(secKey)) { - Object obj = serviceMap.get(secKey); - if (obj == null) { - errorList.add("Attribute '" + secKey + "' under '" + SERVICE + "' is empty"); - } else { - String value = String.valueOf(obj); - if (!OnapCommandConfg.getSchemaAttrInfo(validationMap.get(secKey)).contains(value)) { - errorList.add("Attribute '" + secKey + "' contains invalid value. Valide values are " - + OnapCommandConfg.getSchemaAttrInfo(validationMap.get(key1))); // - } - } - } - } - } - - OnapService srv = new OnapService(); - - for (Map.Entry<String, String> entry : serviceMap.entrySet()) { - String key = entry.getKey(); - - switch (key) { - case NAME: - srv.setName(serviceMap.get(key)); - break; - - case VERSION: - srv.setVersion(serviceMap.get(key).toString()); - break; - - case 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(DEAFULT_PARAMETER_USERNAME).setInclude(false); - cmd.getParametersMap().get(DEAFULT_PARAMETER_PASSWORD).setInclude(false); - cmd.getParametersMap().get(DEFAULT_PARAMETER_NO_AUTH).setInclude(false); - } - break; - - //mrkanag: from auth command, add the parameters to the command's parameters list - - case MODE: - Object mode = serviceMap.get(key); - srv.setMode(mode.toString()); - break; - } - } - cmd.setService(srv); - } - break; - - case SUCCESS_CODES: - if (validate) { - OnapCommandUtils.validateHttpSccessCodes(errorList, (List<Object>) valMap.get(key1)); - } - cmd.setSuccessStatusCodes((ArrayList) valMap.get(key1)); - break; - - case RESULT_MAP: - if (validate) { - OnapCommandUtils.validateHttpResultMap(errorList, values); - } - cmd.setResultMap((Map<String, String>) valMap.get(key1)); - break; - - case SAMPLE_RESPONSE: - // (mrkanag) implement sample response handling - break; - } - } - } - }catch (OnapCommandException e) { - OnapCommandUtils.throwOrCollect(e, errorList, validate); - } - - //Handle the parameters for auth - if (!cmd.getService().isNoAuth()) { - OnapCommand login = OnapCommandDiscoveryUtils.findAuthCommand(cmd, "login"); - OnapCommandUtils.copyParamSchemasFrom(login, cmd); - } - - return errorList; - } - public static InputStream loadSchemaFromFile(String schemaLocation) throws OnapCommandInvalidSchema { File schemaFile = new File(schemaLocation); try { @@ -743,7 +521,7 @@ public class OnapCommandSchemaLoaderUtils { */ public static Map<String, ?> loadSchema(Resource resource) throws OnapCommandInvalidSchema { try { - return OnapCommandSchemaLoaderUtils.loadSchema(resource.getInputStream(), resource.getFilename()); + return OnapCommandSchemaLoader.loadSchema(resource.getInputStream(), resource.getFilename()); } catch (IOException e) { throw new OnapCommandInvalidSchema(resource.getFilename(), e); } diff --git a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandDiscoveryUtils.java b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandDiscoveryUtils.java index e1b3ea2b..7d305a86 100644 --- a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandDiscoveryUtils.java +++ b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandDiscoveryUtils.java @@ -16,13 +16,13 @@ package org.onap.cli.fw.utils; -import static org.onap.cli.fw.conf.Constants.DATA_DIRECTORY; -import static org.onap.cli.fw.conf.Constants.DATA_PATH_JSON_PATTERN; -import static org.onap.cli.fw.conf.Constants.DISCOVERY_FILE; -import static org.onap.cli.fw.conf.Constants.NAME; -import static org.onap.cli.fw.conf.Constants.OPEN_CLI_SCHEMA_VERSION; -import static org.onap.cli.fw.conf.Constants.SCHEMA_DIRECTORY; -import static org.onap.cli.fw.conf.Constants.SCHEMA_PATH_PATERN; +import static org.onap.cli.fw.conf.OnapCommandConstants.DATA_DIRECTORY; +import static org.onap.cli.fw.conf.OnapCommandConstants.DATA_PATH_JSON_PATTERN; +import static org.onap.cli.fw.conf.OnapCommandConstants.DISCOVERY_FILE; +import static org.onap.cli.fw.conf.OnapCommandConstants.NAME; +import static org.onap.cli.fw.conf.OnapCommandConstants.OPEN_CLI_SCHEMA_VERSION; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCHEMA_DIRECTORY; +import static org.onap.cli.fw.conf.OnapCommandConstants.SCHEMA_PATH_PATERN; import java.io.File; import java.io.IOException; @@ -34,16 +34,15 @@ import java.util.List; import java.util.Map; import java.util.ServiceLoader; -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.OnapCommandRegistrar; -import org.onap.cli.fw.cmd.OnapHttpCommand; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; +import org.onap.cli.fw.cmd.OnapCommand; +import org.onap.cli.fw.conf.OnapCommandConfig; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandDiscoveryFailed; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandInstantiationFailed; import org.onap.cli.fw.error.OnapCommandInvalidSchema; -import org.onap.cli.fw.error.OnapCommandNotFound; +import org.onap.cli.fw.schema.OnapCommandSchemaInfo; +import org.onap.cli.fw.schema.OnapCommandSchemaLoader; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; @@ -64,11 +63,11 @@ public class OnapCommandDiscoveryUtils { * @throws OnapCommandDiscoveryFailed * exception */ - public static SchemaInfo getSchemaInfo(String cmd, String version) throws OnapCommandException { - List<SchemaInfo> list = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(false); - SchemaInfo schemaInfo = null; + public static OnapCommandSchemaInfo getSchemaInfo(String cmd, String version) throws OnapCommandException { + List<OnapCommandSchemaInfo> list = OnapCommandDiscoveryUtils.discoverOrLoadSchemas(false); + OnapCommandSchemaInfo schemaInfo = null; if (list != null) { - for (SchemaInfo schema : list) { + for (OnapCommandSchemaInfo schema : list) { if (cmd.equals(schema.getCmdName()) && version.equals(schema.getProduct())) { schemaInfo = schema; break; @@ -87,9 +86,10 @@ public class OnapCommandDiscoveryUtils { * @throws OnapCommandDiscoveryFailed * exception */ - public static List<SchemaInfo> discoverOrLoadSchemas(boolean forceRefresh) throws OnapCommandException { - List<SchemaInfo> schemas = new ArrayList<>(); - if (forceRefresh || OnapCommandConfg.isDiscoverAlways() || !OnapCommandDiscoveryUtils.isAlreadyDiscovered()) { + public static List<OnapCommandSchemaInfo> discoverOrLoadSchemas(boolean forceRefresh) throws OnapCommandException { + List<OnapCommandSchemaInfo> schemas = new ArrayList<>(); + if (forceRefresh || Boolean.parseBoolean(OnapCommandConfig.getPropertyValue(OnapCommandConstants.DISCOVER_ALWAYS)) + || !OnapCommandDiscoveryUtils.isAlreadyDiscovered()) { schemas = OnapCommandDiscoveryUtils.discoverSchemas(); if (!schemas.isEmpty()) { OnapCommandDiscoveryUtils.persistSchemaInfo(schemas); @@ -101,7 +101,7 @@ public class OnapCommandDiscoveryUtils { if (resource != null) { File file = new File(resource.getURI().getPath()); ObjectMapper mapper = new ObjectMapper(); - SchemaInfo[] list = mapper.readValue(file, SchemaInfo[].class); + OnapCommandSchemaInfo[] list = mapper.readValue(file, OnapCommandSchemaInfo[].class); schemas.addAll(Arrays.asList(list)); } } catch (IOException e) { @@ -144,7 +144,7 @@ public class OnapCommandDiscoveryUtils { * @throws OnapCommandDiscoveryFailed * exception */ - public static void persistSchemaInfo(List<SchemaInfo> schemas) throws OnapCommandDiscoveryFailed { + public static void persistSchemaInfo(List<OnapCommandSchemaInfo> schemas) throws OnapCommandDiscoveryFailed { if (schemas != null) { try { Resource[] resources = OnapCommandDiscoveryUtils.findResources(DATA_DIRECTORY); @@ -219,13 +219,13 @@ public class OnapCommandDiscoveryUtils { public static String identitySchemaProfileType(Map<String, ?> schemaYamlMap) { - for (String schemeType : OnapCommandConfg.getSchemaAttrInfo(Constants.SCHEMA_TYPES_SUPPORTED)) { + for (String schemeType : OnapCommandConfig.getCommaSeparatedList(OnapCommandConstants.SCHEMA_TYPES_SUPPORTED)) { if (schemaYamlMap.get(schemeType) != null) { return schemeType; } } - return Constants.BASIC_SCHEMA_PROFILE; + return OnapCommandConstants.BASIC_SCHEMA_PROFILE; } /** @@ -237,8 +237,8 @@ public class OnapCommandDiscoveryUtils { * @throws OnapCommandInvalidSchema * exception */ - public static List<SchemaInfo> discoverSchemas() throws OnapCommandException { - List<SchemaInfo> extSchemas = new ArrayList<>(); + public static List<OnapCommandSchemaInfo> discoverSchemas() throws OnapCommandException { + List<OnapCommandSchemaInfo> extSchemas = new ArrayList<>(); try { Resource[] res = findResources(SCHEMA_PATH_PATERN); if (res != null && res.length > 0) { @@ -246,21 +246,21 @@ public class OnapCommandDiscoveryUtils { for (Resource resource : res) { try { - resourceMap = OnapCommandSchemaLoaderUtils.loadSchema(resource); + resourceMap = OnapCommandSchemaLoader.loadSchema(resource); } catch (OnapCommandException e) { OnapCommandUtils.LOG.error("Ignores invalid schema " + resource.getURI().toString(), e); continue; } if (resourceMap != null && resourceMap.size() > 0) { - SchemaInfo schema = new SchemaInfo(); + OnapCommandSchemaInfo schema = new OnapCommandSchemaInfo(); schema.setSchemaURI(resource.getURI().toString()); Object obj = resourceMap.get(OPEN_CLI_SCHEMA_VERSION); schema.setVersion(obj.toString()); - if (!schema.getVersion().equalsIgnoreCase(Constants.OPEN_CLI_SCHEMA_VERSION_VALUE_1_0)) { + if (!schema.getVersion().equalsIgnoreCase(OnapCommandConstants.OPEN_CLI_SCHEMA_VERSION_VALUE_1_0)) { OnapCommandUtils.LOG.info("Unsupported Schema version found " + schema.getSchemaURI()); continue; } @@ -268,17 +268,17 @@ public class OnapCommandDiscoveryUtils { schema.setSchemaName(resource.getFilename()); schema.setCmdName((String) resourceMap.get(NAME)); - Map<String, ?> infoMap = (Map<String, ?>) resourceMap.get(Constants.INFO); - if (infoMap != null && infoMap.get(Constants.INFO_TYPE) != null) { - schema.setType(infoMap.get(Constants.INFO_TYPE).toString()); + Map<String, ?> infoMap = (Map<String, ?>) resourceMap.get(OnapCommandConstants.INFO); + if (infoMap != null && infoMap.get(OnapCommandConstants.INFO_TYPE) != null) { + schema.setType(infoMap.get(OnapCommandConstants.INFO_TYPE).toString()); } - if (infoMap != null && infoMap.get(Constants.INFO_PRODUCT) != null) { - schema.setProduct(infoMap.get(Constants.INFO_PRODUCT).toString()); + if (infoMap != null && infoMap.get(OnapCommandConstants.INFO_PRODUCT) != null) { + schema.setProduct(infoMap.get(OnapCommandConstants.INFO_PRODUCT).toString()); } - if (infoMap != null && infoMap.get(Constants.INFO_IGNORE) != null) { - schema.setIgnore(infoMap.get(Constants.INFO_IGNORE).toString()); + if (infoMap != null && infoMap.get(OnapCommandConstants.INFO_IGNORE) != null) { + schema.setIgnore(infoMap.get(OnapCommandConstants.INFO_IGNORE).toString()); } schema.setSchemaProfile(identitySchemaProfileType(resourceMap)); @@ -322,27 +322,4 @@ public class OnapCommandDiscoveryUtils { } } - - /** - * - * @param authAction login/logout - * @return - * @throws OnapCommandException - */ - public static OnapCommand findAuthCommand(OnapHttpCommand forCmd, String authAction) throws OnapCommandException { - OnapCommand auth = null; - try { - //mrkanag: fix this to discover the auth command by matching info->product & service - auth = OnapCommandRegistrar.getRegistrar().get( - forCmd.getInfo().getService() + "-" + - forCmd.getService().getAuthType() + "-" + authAction, - forCmd.getInfo().getProduct()); - } catch (OnapCommandNotFound e) { - auth = OnapCommandRegistrar.getRegistrar().get( - forCmd.getService().getAuthType() + "-" + authAction, - forCmd.getInfo().getProduct()); - } - - return auth; - } } diff --git a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandHelperUtils.java b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandHelperUtils.java index f5ac764b..5e8c3f52 100644 --- a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandHelperUtils.java +++ b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandHelperUtils.java @@ -16,24 +16,24 @@ package org.onap.cli.fw.utils; -import static org.onap.cli.fw.conf.Constants.DESCRIPTION; -import static org.onap.cli.fw.conf.Constants.NAME; +import static org.onap.cli.fw.conf.OnapCommandConstants.DESCRIPTION; +import static org.onap.cli.fw.conf.OnapCommandConstants.NAME; import java.io.IOException; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; -import org.onap.cli.fw.OnapCommand; +import org.onap.cli.fw.cmd.OnapCommand; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandHelpFailed; import org.onap.cli.fw.input.OnapCommandParameter; -import org.onap.cli.fw.input.ParameterType; +import org.onap.cli.fw.input.OnapCommandParameterType; +import org.onap.cli.fw.output.OnapCommandPrintDirection; import org.onap.cli.fw.output.OnapCommandResult; import org.onap.cli.fw.output.OnapCommandResultAttribute; import org.onap.cli.fw.output.OnapCommandResultAttributeScope; -import org.onap.cli.fw.output.PrintDirection; -import org.onap.cli.fw.output.ResultType; +import org.onap.cli.fw.output.OnapCommandResultType; public class OnapCommandHelperUtils { @@ -87,8 +87,8 @@ public class OnapCommandHelperUtils { // Add parameters OnapCommandResult paramTable = new OnapCommandResult(); - paramTable.setPrintDirection(PrintDirection.LANDSCAPE); - paramTable.setType(ResultType.TABLE); + paramTable.setPrintDirection(OnapCommandPrintDirection.LANDSCAPE); + paramTable.setType(OnapCommandResultType.TABLE); paramTable.setIncludeTitle(false); paramTable.setIncludeSeparator(false); @@ -137,8 +137,8 @@ public class OnapCommandHelperUtils { } optSecondCol += " It is of type " + param.getParameterType().name() + "."; - if (param.getParameterType().equals(ParameterType.JSON) - || param.getParameterType().equals(ParameterType.YAML)) { + if (param.getParameterType().equals(OnapCommandParameterType.JSON) + || param.getParameterType().equals(OnapCommandParameterType.YAML)) { optSecondCol += " It's recommended to input the complete path of the file, which is having the value for it."; } if (param.isOptional()) { @@ -168,8 +168,8 @@ public class OnapCommandHelperUtils { // Add results OnapCommandResult resultTable = new OnapCommandResult(); - resultTable.setPrintDirection(PrintDirection.PORTRAIT); - resultTable.setType(ResultType.TABLE); + resultTable.setPrintDirection(OnapCommandPrintDirection.PORTRAIT); + resultTable.setType(OnapCommandResultType.TABLE); resultTable.setIncludeTitle(false); resultTable.setIncludeSeparator(false); @@ -195,7 +195,7 @@ public class OnapCommandHelperUtils { } // Error - help += "\n\nError::\n\n On error, it prints <HTTP STATUS CODE>::<ERROR CODE>::<ERROR MESSAGE>\n"; + help += "\n\nError::\n\n On error, it prints <STATUS CODE>::<ERROR CODE>::<ERROR MESSAGE>\n"; return help; } diff --git a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandProfileUtils.java b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandProfileUtils.java deleted file mode 100644 index b1fff95d..00000000 --- a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandProfileUtils.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2017 Huawei Technologies Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.cli.fw.utils; - -import static org.onap.cli.fw.conf.Constants.DATA_DIRECTORY; -import static org.onap.cli.fw.conf.Constants.DATA_PATH_JSON_PATTERN; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.onap.cli.fw.error.OnapCommandLoadProfileFailed; -import org.onap.cli.fw.error.OnapCommandPersistProfileFailed; -import org.onap.cli.fw.input.cache.Param; -import org.springframework.core.io.Resource; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class OnapCommandProfileUtils { - - public static List<Param> loadParamFromCache(String profileName) throws OnapCommandLoadProfileFailed { - List<Param> params = new ArrayList<>(); - - try { - Resource resource = OnapCommandDiscoveryUtils.findResource(profileName + ".json", - DATA_PATH_JSON_PATTERN); - if (resource != null) { - File file = new File(resource.getURI().getPath()); - ObjectMapper mapper = new ObjectMapper(); - Param[] list = mapper.readValue(file, Param[].class); - params.addAll(Arrays.asList(list)); - } - } catch (IOException e) { - throw new OnapCommandLoadProfileFailed(e); - } - - return params; - } - - public static void persistProfile(List<Param> params, String profileName) throws OnapCommandPersistProfileFailed { - if (params != null) { - try { - Resource[] resources = OnapCommandDiscoveryUtils.findResources(DATA_DIRECTORY); - if (resources != null && resources.length == 1) { - String path = resources[0].getURI().getPath(); - File file = new File(path + File.separator + profileName + ".json"); - ObjectMapper mapper = new ObjectMapper(); - mapper.writerWithDefaultPrettyPrinter().writeValue(file, params); - } - } catch (IOException e1) { - throw new OnapCommandPersistProfileFailed(e1); - } - } - } - -} diff --git a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandUtils.java b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandUtils.java index 57a2e303..ad739cd7 100644 --- a/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandUtils.java +++ b/framework/src/main/java/org/onap/cli/fw/utils/OnapCommandUtils.java @@ -16,63 +16,31 @@ package org.onap.cli.fw.utils; -import static org.onap.cli.fw.conf.Constants.ATTRIBUTES; -import static org.onap.cli.fw.conf.Constants.BODY; -import static org.onap.cli.fw.conf.Constants.BOOLEAN_VALUE; -import static org.onap.cli.fw.conf.Constants.HEADERS; -import static org.onap.cli.fw.conf.Constants.HTTP; -import static org.onap.cli.fw.conf.Constants.HTTP_BODY_FAILED_PARSING; -import static org.onap.cli.fw.conf.Constants.HTTP_BODY_JSON_EMPTY; -import static org.onap.cli.fw.conf.Constants.HTTP_METHODS; -import static org.onap.cli.fw.conf.Constants.HTTP_REQUEST_MANDATORY_PARAMS; -import static org.onap.cli.fw.conf.Constants.HTTP_REQUEST_PARAMS; -import static org.onap.cli.fw.conf.Constants.HTTP_SUCCESS_CODE_INVALID; -import static org.onap.cli.fw.conf.Constants.METHOD; -import static org.onap.cli.fw.conf.Constants.NAME; -import static org.onap.cli.fw.conf.Constants.PARAMETERS; -import static org.onap.cli.fw.conf.Constants.QUERIES; -import static org.onap.cli.fw.conf.Constants.REQUEST; -import static org.onap.cli.fw.conf.Constants.RESULTS; -import static org.onap.cli.fw.conf.Constants.RESULT_MAP; -import static org.onap.cli.fw.conf.Constants.URI; - -import java.io.IOException; +import static org.onap.cli.fw.conf.OnapCommandConstants.BOOLEAN_VALUE; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; -import org.onap.cli.fw.OnapCommand; -import org.onap.cli.fw.cmd.OnapHttpCommand; -import org.onap.cli.fw.conf.Constants; -import org.onap.cli.fw.conf.OnapCommandConfg; +import org.onap.cli.fw.cmd.OnapCommand; +import org.onap.cli.fw.conf.OnapCommandConfig; +import org.onap.cli.fw.conf.OnapCommandConstants; import org.onap.cli.fw.error.OnapCommandException; -import org.onap.cli.fw.error.OnapCommandHttpHeaderNotFound; -import org.onap.cli.fw.error.OnapCommandHttpInvalidResponseBody; -import org.onap.cli.fw.error.OnapCommandHttpInvalidResultMap; import org.onap.cli.fw.error.OnapCommandInvalidParameterValue; import org.onap.cli.fw.error.OnapCommandParameterNotFound; import org.onap.cli.fw.error.OnapCommandResultEmpty; -import org.onap.cli.fw.error.OnapCommandResultMapProcessingFailed; -import org.onap.cli.fw.http.HttpInput; -import org.onap.cli.fw.http.HttpResult; import org.onap.cli.fw.input.OnapCommandParameter; -import org.onap.cli.fw.input.ParameterType; +import org.onap.cli.fw.input.OnapCommandParameterType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.JsonPath; -import net.minidev.json.JSONArray; -import net.minidev.json.JSONObject; - /** * Provides helper method to parse Yaml files and produce required objects. * @@ -87,7 +55,7 @@ public class OnapCommandUtils { } - static void throwOrCollect(OnapCommandException ex, List<String> list, boolean shouldCollectException) + public static void throwOrCollect(OnapCommandException ex, List<String> list, boolean shouldCollectException) throws OnapCommandException { if (shouldCollectException) { list.add(ex.getMessage()); @@ -96,7 +64,7 @@ public class OnapCommandUtils { } } - static void validateTags(List<String> schemaErrors, Map<String, ?> yamlMap, List<String> totalParams, + public static void validateTags(List<String> schemaErrors, Map<String, ?> yamlMap, List<String> totalParams, List<String> mandatoryParams, String section) { // mrkanag capture invalid entries as well for (String param : totalParams) { @@ -123,76 +91,19 @@ public class OnapCommandUtils { * string * @return boolean */ - static boolean validateBoolean(String toValidate) { - return OnapCommandConfg.getSchemaAttrInfo(BOOLEAN_VALUE).contains(toValidate.toLowerCase()); + public static boolean validateBoolean(String toValidate) { + return OnapCommandConfig.getCommaSeparatedList(BOOLEAN_VALUE).contains(toValidate.toLowerCase()); } - private static String emptySection(String section) { + public static String emptySection(String section) { return "The section '" + section + ":' cann't be null or empty"; } - static String invalidBooleanValueMessage(String section, String attribute, String value) { + public static String invalidBooleanValueMessage(String section, String attribute, String value) { return "The value '" + value + "' of '" + attribute + "' present under '" + section + "' should be boolean"; } - private static Set<String> validateHttpQueries(Map<String, Object> requestMap) { - Map<String, Object> queries = (Map<String, Object>) requestMap.get(QUERIES); - Set<String> queryParamNames = new HashSet<>(); - if (queries != null) { - for (Entry<String, Object> entry : queries.entrySet()) { - parseParameters(String.valueOf(entry.getValue()), queryParamNames); - } - } - return queryParamNames; - } - - - private static Set<String> validateHttpHeaders(Map<String, Object> requestMap) { - - Map<String, Object> headers = (Map<String, Object>) requestMap.get(HEADERS); - Set<String> headerParamNames = new HashSet<>(); - if (headers != null) { - for (Entry<String, Object> entry : headers.entrySet()) { - parseParameters(String.valueOf(entry.getValue()), headerParamNames); - } - } - return headerParamNames; - } - - private static Set<String> validateHttpBody(List<String> errorList, Map<String, Object> requestMap) { - Set<String> bodyParamNames = new HashSet<>(); - Object bodyString = requestMap.get(BODY); - if (bodyString == null) { - return bodyParamNames; - } - - String body = String.valueOf(bodyString); - JSONObject obj = null; - try { - obj = new ObjectMapper().readValue(body, JSONObject.class); - } catch (IOException e1) { // NOSONAR - errorList.add(HTTP_BODY_FAILED_PARSING); - } - if (obj == null || "".equals(obj.toString())) { - errorList.add(HTTP_BODY_JSON_EMPTY); - } - parseParameters(body, bodyParamNames); - - return bodyParamNames; - } - - private static Set<String> validateHttpUri(List<String> errorList, Map<String, Object> requestMap) { - Set<String> uriParamNames = new HashSet<>(); - String uri = (String) requestMap.get(URI); - if (uri == null || uri.isEmpty()) { - errorList.add(emptySection(URI)); - return uriParamNames; - } - parseParameters(uri, uriParamNames); - return uriParamNames; - } - - private static void parseParameters(String line, Set<String> paramNames) { + public static void parseParameters(String line, Set<String> paramNames) { int currentIdx = 0; while (currentIdx < line.length()) { @@ -209,108 +120,6 @@ public class OnapCommandUtils { } - private static Set<String> getRequestParams(Map<String, ?> yamlMap) { - - Set<String> set = new HashSet<>(); - - @SuppressWarnings("unchecked") - List<Map<String, Object>> inputParams = (List<Map<String, Object>>) yamlMap.get(PARAMETERS); - - if (inputParams != null) { - for (Map<String, Object> map : inputParams) { - for (Entry<String, Object> entry : map.entrySet()) { - Object key = entry.getKey(); - - if (NAME.equals(key)) { - set.add(String.valueOf(entry.getValue())); - break; - } - } - } - } - - return set; - } - - static void validateHttpResultMap(List<String> errorList, Map<String, ?> values) throws OnapCommandException { - Map<String, ?> valMap = (Map<String, ?>) values.get(HTTP); - List<Map<String, String>> attributes = (List<Map<String, String>>) ((Map<String, ?>)values.get(RESULTS)).get(ATTRIBUTES); - Set<String> resultMapParams = ((Map<String, String>) valMap.get(RESULT_MAP)).keySet(); - - Set<String> resultAttNames = attributes.stream().map(map -> map.get(NAME)) - .collect(Collectors.toSet()); - - List<String> invaliResultMapParams = resultMapParams.stream() - .filter(p -> !resultAttNames.contains(p)).collect(Collectors.toList()); - - if (!invaliResultMapParams.isEmpty()) { - throwOrCollect(new OnapCommandHttpInvalidResultMap(invaliResultMapParams), errorList, true); - } - } - - static void validateHttpSccessCodes(List<String> errorList, List<Object> requestSuccessCodes) { - - if (requestSuccessCodes == null || requestSuccessCodes.isEmpty()) { - errorList.add(HTTP_SUCCESS_CODE_INVALID); - return; - } - - for (Object successCode : requestSuccessCodes) { - Integer code = (Integer) successCode; - if (code < 200 || code >= 300) { - if ( code != 404) { - errorList.add(HTTP_SUCCESS_CODE_INVALID); - } - } - } - - } - - static ArrayList<String> validateHttpSchemaSection(Map<String, ?> values) { - ArrayList<String> errorList = new ArrayList<>(); - Map<String, ?> map = (Map<String, ?>) values.get(HTTP); - Map<String, Object> requestMap = (Map<String, Object>) map.get(REQUEST); - - if (requestMap != null && !requestMap.isEmpty()) { - validateTags(errorList, requestMap, OnapCommandConfg.getSchemaAttrInfo(HTTP_REQUEST_PARAMS), - OnapCommandConfg.getSchemaAttrInfo(HTTP_REQUEST_MANDATORY_PARAMS), REQUEST); - String method = (String) requestMap.get(METHOD); - if (method != null && !method.isEmpty()) { - if (!OnapCommandConfg.getSchemaAttrInfo(HTTP_METHODS).contains(method.toLowerCase())) { - errorList.add("Attribute '" + METHOD + "' under '" + REQUEST + "' is invalid, correct types are " - + OnapCommandConfg.getSchemaAttrInfo(HTTP_METHODS).toString()); - } - } else { - errorList.add("Http request method cann't be null or empty"); - } - - Set<String> requestParams = getRequestParams(values); - - Set<String> uriParams = validateHttpUri(errorList, requestMap); - - Set<String> bodyParams = validateHttpBody(errorList, requestMap); - - Set<String> headerParams = validateHttpHeaders(requestMap); - - Set<String> queryParams = validateHttpQueries(requestMap); - - HashSet<String> totoalParams = new HashSet<>(uriParams); - totoalParams.addAll(bodyParams); - totoalParams.addAll(headerParams); - totoalParams.addAll(queryParams); - - List<String> nonDeclaredParams = totoalParams.stream().filter(param -> !requestParams.contains(param)) - .collect(Collectors.toList()); - - nonDeclaredParams.stream().forEach(p -> errorList.add("The parameter '" + p - + "' declared under 'parameters:' section is not mapped into request section.")); - } else { - errorList.add(emptySection(REQUEST)); - } - return errorList; - } - - /** * Create Dict from list of Parameters. * @@ -318,7 +127,7 @@ public class OnapCommandUtils { * list of parameters * @return map */ - public static Map<String, OnapCommandParameter> getInputMap(List<OnapCommandParameter> inputs) { + public static Map<String, OnapCommandParameter> getInputMap(Set<OnapCommandParameter> inputs) { Map<String, OnapCommandParameter> map = new HashMap<>(); for (OnapCommandParameter param : inputs) { map.put(param.getName(), param); @@ -361,28 +170,6 @@ public class OnapCommandUtils { } /** - * Construct method name. - * - * @param name - * name - * @param prefix - * prefix - * @return string - */ - public static String formMethodNameFromAttributeName(String name, String prefix) { - if (name == null || name.isEmpty()) { - return name; - } - - String methodName = prefix; - for (String tk : name.split("-")) { - methodName += Character.toString(tk.charAt(0)).toUpperCase(); - methodName += tk.substring(1); - } - return methodName; - } - - /** * There are unique values like uuid is supported, so when input, output (default) values has * these special entries, then it will get replaced with it's value * @@ -410,13 +197,13 @@ public class OnapCommandUtils { String value = ""; switch (splEntry) { - case Constants.SPL_ENTRY_UUID: + case OnapCommandConstants.SPL_ENTRY_UUID: value = UUID.randomUUID().toString(); break; default: - if (splEntry.startsWith(Constants.SPL_ENTRY_ENV)) { + if (splEntry.startsWith(OnapCommandConstants.SPL_ENTRY_ENV)) { //start to read after env:ENV_VAR_NAME String envVarName = splEntry.substring(4); value = System.getenv(envVarName); @@ -463,10 +250,10 @@ public class OnapCommandUtils { String value = params.get(paramName).getValue().toString(); OnapCommandParameter param = params.get(paramName); - if (ParameterType.ARRAY.equals(param.getParameterType()) - || ParameterType.MAP.equals(param.getParameterType()) - || ParameterType.JSON.equals(param.getParameterType()) - || ParameterType.YAML.equals(param.getParameterType())) { + if (OnapCommandParameterType.ARRAY.equals(param.getParameterType()) + || OnapCommandParameterType.MAP.equals(param.getParameterType()) + || OnapCommandParameterType.JSON.equals(param.getParameterType()) + || OnapCommandParameterType.YAML.equals(param.getParameterType())) { // ignore the front and back double quotes in json body result += line.substring(currentIdx, idxS - 1) + value; currentIdx = idxE + 2; @@ -479,190 +266,6 @@ public class OnapCommandUtils { return result; } - private static ArrayList<String> replaceLineFromOutputResults(String line, HttpResult resultHttp) - throws OnapCommandHttpHeaderNotFound, OnapCommandHttpInvalidResponseBody, - OnapCommandResultMapProcessingFailed, OnapCommandResultEmpty { - String headerProcessedLine = ""; - - ArrayList<String> result = new ArrayList<>(); - if (!line.contains("$b{") && !line.contains("$h{")) { - result.add(line); - return result; - } - - /** - * In case of empty response body [] or {} - **/ - if (resultHttp.getBody().length() <= 2) { - return result; - } - - /** - * Process headers macros : line: $h{abc}-$b{$.[*].xyz} , After processing line will be [abc's - * value]-$b{$.[*].xyz} - **/ - int currentIdx = 0; - while (currentIdx < line.length()) { - int idxS = line.indexOf("$h{", currentIdx); - if (idxS == -1) { - headerProcessedLine += line.substring(currentIdx); - break; - } - int idxE = line.indexOf("}", idxS); - String headerName = line.substring(idxS + 3, idxE); - headerName = headerName.trim(); - if (!resultHttp.getRespHeaders().containsKey(headerName)) { - throw new OnapCommandHttpHeaderNotFound(headerName); - } - String value = resultHttp.getRespHeaders().get(headerName); - - headerProcessedLine += line.substring(currentIdx, idxS) + value; - currentIdx = idxE + 1; - } - - // Process body jsonpath macros - List<Object> values = new ArrayList<>(); - String bodyProcessedPattern = ""; - currentIdx = 0; - int maxRows = 1; // in normal case, only one row will be there - while (currentIdx < headerProcessedLine.length()) { - int idxS = headerProcessedLine.indexOf("$b{", currentIdx); - if (idxS == -1) { - bodyProcessedPattern += headerProcessedLine.substring(currentIdx); - break; - } - int idxE = headerProcessedLine.indexOf("}", idxS); - String jsonPath = headerProcessedLine.substring(idxS + 3, idxE); - jsonPath = jsonPath.trim(); - try { - // JSONArray or String - Object value = JsonPath.read(resultHttp.getBody(), jsonPath); - if (value instanceof JSONArray) { - JSONArray arr = (JSONArray) value; - if (arr.size() > maxRows) { - maxRows = arr.size(); - } - } - bodyProcessedPattern += headerProcessedLine.substring(currentIdx, idxS) + "%s"; - values.add(value); - currentIdx = idxE + 1; - } catch (Exception e) { - throw new OnapCommandHttpInvalidResponseBody(jsonPath, e); - } - } - - if (bodyProcessedPattern.isEmpty()) { - result.add(headerProcessedLine); - return result; - } else { - for (int i = 0; i < maxRows; i++) { - currentIdx = 0; - String bodyProcessedLine = ""; - int positionalIdx = 0; // %s positional idx - while (currentIdx < bodyProcessedPattern.length()) { - int idxS = bodyProcessedPattern.indexOf("%s", currentIdx); - if (idxS == -1) { - bodyProcessedLine += bodyProcessedPattern.substring(currentIdx); - break; - } - int idxE = idxS + 2; // %s - try { - Object value = values.get(positionalIdx); - String valueS = String.valueOf(value); - if (value instanceof JSONArray) { - JSONArray arr = (JSONArray) value; - if (!arr.isEmpty()) { - valueS = arr.get(i).toString(); - } else { - throw new OnapCommandResultEmpty(); - } - } - - bodyProcessedLine += bodyProcessedPattern.substring(currentIdx, idxS) + valueS; - currentIdx = idxE; - positionalIdx++; - } catch (OnapCommandResultEmpty e) { - throw e; - } catch (Exception e) { - throw new OnapCommandResultMapProcessingFailed(line, e); - } - } - result.add(bodyProcessedLine); - } - - return result; - } - } - - /** - * Set argument to param value. - * - * @param params - * map - * @param input - * HttpInput - * @return HttpInput - * @throws OnapCommandParameterNotFound - * exception - * @throws OnapCommandInvalidParameterValue - * exception - */ - public static HttpInput populateParameters(Map<String, OnapCommandParameter> params, HttpInput input) - throws OnapCommandException { - HttpInput inp = new HttpInput(); - for (OnapCommandParameter param : params.values()) { - if (ParameterType.BINARY.equals(param.getParameterType())) { - inp.setBinaryData(true); - break; - } - } - inp.setBody(replaceLineFromInputParameters(input.getBody(), params)); - inp.setUri(replaceLineFromInputParameters(input.getUri(), params)); - inp.setMethod(input.getMethod().toLowerCase()); - for (String h : input.getReqHeaders().keySet()) { - String value = input.getReqHeaders().get(h); - inp.getReqHeaders().put(h, replaceLineFromInputParameters(value, params)); - } - - for (String h : input.getReqQueries().keySet()) { - String value = input.getReqQueries().get(h); - inp.getReqQueries().put(h, replaceLineFromInputParameters(value, params)); - } - - return inp; - } - - /** - * Populate result. - * - * @param resultMap - * map - * @param resultHttp - * HttpResult - * @return map - * @throws OnapCommandHttpHeaderNotFound - * header not found exception - * @throws OnapCommandHttpInvalidResponseBody - * invalid response body exception - * @throws OnapCommandResultMapProcessingFailed - * map processing failed exception - */ - public static Map<String, ArrayList<String>> populateOutputs(Map<String, String> resultMap, HttpResult resultHttp) - throws OnapCommandException { - Map<String, ArrayList<String>> resultsProcessed = new HashMap<>(); - - for (Entry<String, String> entry : resultMap.entrySet()) { - String key = entry.getKey(); - try { - resultsProcessed.put(key, replaceLineFromOutputResults(resultMap.get(key), resultHttp)); - } catch(OnapCommandResultEmpty e) { - // pass // NOSONAR - } - } - - return resultsProcessed; - } - /** * Populate result from input parameters. * @@ -671,12 +274,7 @@ public class OnapCommandUtils { * @param params * Map<String, OnapCommandParameter> * @return map - * @throws OnapCommandHttpHeaderNotFound - * header not found exception - * @throws OnapCommandHttpInvalidResponseBody - * invalid response body exception - * @throws OnapCommandResultMapProcessingFailed - * map processing failed exception + * @throws OnapCommandException */ public static Map<String, ArrayList<String>> populateOutputsFromInputParameters( Map<String, ArrayList<String>> resultMap, |