aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--products/pom.xml2
-rw-r--r--profiles/command/pom.xml2
-rw-r--r--profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java124
-rw-r--r--profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/ProcessRunner.java264
-rw-r--r--profiles/command/src/main/java/org/onap/cli/fw/cmd/conf/OnapCommandCmdConstants.java4
-rw-r--r--profiles/command/src/main/java/org/onap/cli/fw/cmd/schema/OnapCommandSchemaCmdLoader.java62
-rw-r--r--profiles/command/src/test/resources/open-cli-schema/sample-test-schema-1.1.yaml46
-rw-r--r--profiles/command/src/test/resources/open-cli.properties45
8 files changed, 320 insertions, 229 deletions
diff --git a/products/pom.xml b/products/pom.xml
index faa6d8e7..e28d0bd3 100644
--- a/products/pom.xml
+++ b/products/pom.xml
@@ -60,7 +60,7 @@
</activation>
<modules>
<module>onap-casablanca</module>
- <module>onap-beijing</module>
+ <module>onap-beijing</module>
</modules>
</profile>
<profile>
diff --git a/profiles/command/pom.xml b/profiles/command/pom.xml
index 4b0a07d3..50d3e171 100644
--- a/profiles/command/pom.xml
+++ b/profiles/command/pom.xml
@@ -54,7 +54,7 @@
<groupId>org.onap.cli</groupId>
<artifactId>cli-framework</artifactId>
<version>${project.version}</version>
- </dependency>
+ </dependency>
</dependencies>
<build>
<plugins>
diff --git a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
index d6e0e8c0..7b74e6ca 100644
--- a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
+++ b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
@@ -38,92 +38,92 @@ import org.onap.cli.fw.utils.OnapCommandUtils;
*/
@OnapCommandSchema(type = "cmd")
public class OpenCommandShellCmd extends OnapCommand {
-
- public OpenCommandShellCmd() {
+
+ public OpenCommandShellCmd() {
super.addDefaultSchemas(OnapCommandCmdConstants.DEFAULT_PARAMETER_CMD_FILE_NAME);
}
- private Map<String, String> resultMap = new HashMap<>();
-
- private List<String> command;
-
- private Map<String, String> envs;
-
- private String wd = null;
-
- private List<Integer> successStatusCodes = new ArrayList<>();
-
- public List<Integer> getSuccessStatusCodes() {
- return successStatusCodes;
- }
-
- public void setSuccessStatusCodes(ArrayList<Integer> successStatusCodes) {
- this.successStatusCodes = successStatusCodes;
- }
-
- public String getWd() {
- return wd;
- }
-
- public void setWd(String wd) {
- this.wd = wd;
- }
-
- public Map<String, String> getEnvs() {
- return envs;
- }
-
- public void setEnvs(Map<String, String> envs) {
- this.envs = envs;
- }
-
-
-
- public List<String> getCommand() {
- return command;
- }
-
- public void setCommand(List<String> command) {
- this.command = command;
- }
-
- public Map<String, String> getResultMap() {
+ private Map<String, String> resultMap = new HashMap<>();
+
+ private List<String> command;
+
+ private Map<String, String> envs;
+
+ private String wd = null;
+
+ private List<Integer> successStatusCodes = new ArrayList<>();
+
+ public List<Integer> getSuccessStatusCodes() {
+ return successStatusCodes;
+ }
+
+ public void setSuccessStatusCodes(ArrayList<Integer> successStatusCodes) {
+ this.successStatusCodes = successStatusCodes;
+ }
+
+ public String getWd() {
+ return wd;
+ }
+
+ public void setWd(String wd) {
+ this.wd = wd;
+ }
+
+ public Map<String, String> getEnvs() {
+ return envs;
+ }
+
+ public void setEnvs(Map<String, String> envs) {
+ this.envs = envs;
+ }
+
+
+
+ public List<String> getCommand() {
+ return command;
+ }
+
+ public void setCommand(List<String> command) {
+ this.command = command;
+ }
+
+ public Map<String, String> getResultMap() {
return resultMap;
}
-
+
public void setResultMap(Map<String, String> resultMap) {
this.resultMap = resultMap;
}
-
+
@Override
protected List<String> initializeProfileSchema(Map<String, ?> schemaMap, boolean validate) throws OnapCommandException {
return OnapCommandSchemaCmdLoader.parseCmdSchema(this, schemaMap, validate);
}
-
+
@Override
protected void run() throws OnapCommandException {
//Read the input arguments
Map<String, OnapCommandParameter> paramMap = this.getParametersMap();
-
+
//Process command
String []cmd = this.getCommand().toArray(new String []{});
String cwd = this.getWd();
List <String> envs = new ArrayList<>();
-
+
for (String env: this.getEnvs().keySet()) {
- envs.add(env + "=" + this.getEnvs().get(env));
+ envs.add(env + "=" + this.getEnvs().get(env));
}
-
+
ProcessRunner pr = new ProcessRunner(
- cmd,
- (envs.size() > 0) ? envs.toArray(new String []{}) : null,
- cwd);
+ cmd,
+ (envs.size() > 0) ? envs.toArray(new String []{}) : null,
+ cwd);
try {
- pr.run();
- } catch (InterruptedException | IOException e) {
- throw new OnapCommandExecutionFailed(this.getName(), e);
- }
-
+ pr.run();
+ } catch (InterruptedException | IOException e) {
+ throw new OnapCommandExecutionFailed(this.getName(), e);
+ }
+
//Populate outputs
this.getResult().getRecordsMap().get("output").getValues().add(pr.getOutput());
this.getResult().getRecordsMap().get("error").getValues().add(pr.getError());
diff --git a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/ProcessRunner.java b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/ProcessRunner.java
index 5bd3f463..c0b93bb8 100644
--- a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/ProcessRunner.java
+++ b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/ProcessRunner.java
@@ -1,133 +1,133 @@
-/*
- * Copyright 2018 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.cmd;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-public class ProcessRunner {
-
- private String []cmd = null;
- private static String shell = System.getProperty("os.name").toLowerCase().startsWith("windows") ? "cmd.exe /c " : "sh -c ";
- private String cwd = System.getProperty("user.home");
- private String []env = null;
- private int exitCode = -1;
- private String output;
- private String error;
- private Map<String, Object> results;
-
- public ProcessRunner(String []cmd, String []env, String cwd) {
- this.cmd = cmd;
-
- if (cwd != null && !cwd.isEmpty()) {
- this.cwd = cwd;
- }
-
- this.env = env;
- }
-
- public ProcessRunner(String []cmd, String cwd) {
- this(cmd, null, cwd);
- }
-
- public ProcessRunner(String []cmd) {
- this(cmd, null, null);
- }
-
- public ProcessRunner(String cmd, String []env, String cwd) {
- this(new String []{cmd}, env, cwd);
- }
-
- public ProcessRunner(String cmd, String cwd) {
- this(new String []{cmd}, null, cwd);
- }
-
- public ProcessRunner(String cmd) {
- this(new String []{cmd}, null, null);
- }
-
- @SuppressWarnings("unchecked")
- public void run() throws InterruptedException, IOException {
- Process p = null;
- if (this.cmd.length == 1) {
- p = Runtime.getRuntime().exec(this.shell + this.cmd[0], this.env, null);
- } else {
- List list = new ArrayList(Arrays.asList(this.shell.split(" ")));
- list.addAll(Arrays.asList(this.cmd));
- String []cmds = Arrays.copyOf(list.toArray(), list.size(), String[].class);
- p = Runtime.getRuntime().exec(cmds, this.env, null);
- }
-
- this.exitCode = p.waitFor();
- this.output = this.streamToString(p.getInputStream());
- this.error = this.streamToString(p.getErrorStream());
- p.destroy();
- }
-
- public String streamToString(InputStream stream) throws IOException {
- StringBuilder sb = new StringBuilder();
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(stream));
- String line = null;
- while ((line = br.readLine()) != null) {
- sb.append(line + System.getProperty("line.separator"));
- }
- } finally {
- br.close();
- }
- return sb.toString();
- }
-
- public int getExitCode() {
- return this.exitCode;
- }
-
- public String getOutput() {
- return this.output;
- }
-
- public String getError() {
- return this.error;
- }
-
- public static void main(String[] args) {
- try {
- ProcessRunner pr = new ProcessRunner("dir", null);
- pr.run();
- System.out.println(pr.getOutput());
- System.out.println(pr.getError());
- System.out.println(pr.getExitCode());
-
- pr = new ProcessRunner(new String [] {"dir", "c:"}, null);
- pr.run();
- System.out.println(pr.getOutput());
- System.out.println(pr.getError());
- System.out.println(pr.getExitCode());
-
- } catch (InterruptedException | IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
+/*
+ * Copyright 2018 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.cmd;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+public class ProcessRunner {
+
+ private String []cmd = null;
+ private static String shell = System.getProperty("os.name").toLowerCase().startsWith("windows") ? "cmd.exe /c " : "sh -c ";
+ private String cwd = System.getProperty("user.home");
+ private String []env = null;
+ private int exitCode = -1;
+ private String output;
+ private String error;
+ private Map<String, Object> results;
+
+ public ProcessRunner(String []cmd, String []env, String cwd) {
+ this.cmd = cmd;
+
+ if (cwd != null && !cwd.isEmpty()) {
+ this.cwd = cwd;
+ }
+
+ this.env = env;
+ }
+
+ public ProcessRunner(String []cmd, String cwd) {
+ this(cmd, null, cwd);
+ }
+
+ public ProcessRunner(String []cmd) {
+ this(cmd, null, null);
+ }
+
+ public ProcessRunner(String cmd, String []env, String cwd) {
+ this(new String []{cmd}, env, cwd);
+ }
+
+ public ProcessRunner(String cmd, String cwd) {
+ this(new String []{cmd}, null, cwd);
+ }
+
+ public ProcessRunner(String cmd) {
+ this(new String []{cmd}, null, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void run() throws InterruptedException, IOException {
+ Process p = null;
+ if (this.cmd.length == 1) {
+ p = Runtime.getRuntime().exec(this.shell + this.cmd[0], this.env, null);
+ } else {
+ List list = new ArrayList(Arrays.asList(this.shell.split(" ")));
+ list.addAll(Arrays.asList(this.cmd));
+ String []cmds = Arrays.copyOf(list.toArray(), list.size(), String[].class);
+ p = Runtime.getRuntime().exec(cmds, this.env, null);
+ }
+
+ this.exitCode = p.waitFor();
+ this.output = this.streamToString(p.getInputStream());
+ this.error = this.streamToString(p.getErrorStream());
+ p.destroy();
+ }
+
+ public String streamToString(InputStream stream) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = null;
+ try {
+ br = new BufferedReader(new InputStreamReader(stream));
+ String line = null;
+ while ((line = br.readLine()) != null) {
+ sb.append(line + System.getProperty("line.separator"));
+ }
+ } finally {
+ br.close();
+ }
+ return sb.toString();
+ }
+
+ public int getExitCode() {
+ return this.exitCode;
+ }
+
+ public String getOutput() {
+ return this.output;
+ }
+
+ public String getError() {
+ return this.error;
+ }
+
+ public static void main(String[] args) {
+ try {
+ ProcessRunner pr = new ProcessRunner("dir", null);
+ pr.run();
+ System.out.println(pr.getOutput());
+ System.out.println(pr.getError());
+ System.out.println(pr.getExitCode());
+
+ pr = new ProcessRunner(new String [] {"dir", "c:"}, null);
+ pr.run();
+ System.out.println(pr.getOutput());
+ System.out.println(pr.getError());
+ System.out.println(pr.getExitCode());
+
+ } catch (InterruptedException | IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
} \ No newline at end of file
diff --git a/profiles/command/src/main/java/org/onap/cli/fw/cmd/conf/OnapCommandCmdConstants.java b/profiles/command/src/main/java/org/onap/cli/fw/cmd/conf/OnapCommandCmdConstants.java
index fcd182ab..e4f119e4 100644
--- a/profiles/command/src/main/java/org/onap/cli/fw/cmd/conf/OnapCommandCmdConstants.java
+++ b/profiles/command/src/main/java/org/onap/cli/fw/cmd/conf/OnapCommandCmdConstants.java
@@ -29,11 +29,11 @@ public class OnapCommandCmdConstants {
public static final String ENVIRONMENT = "environment";
public static final String WD = "working_directory";
public static final String SUCCESS_EXIT_CODE = "success_code";
-
+
public static final String CMD_MANDATORY_SECTIONS = "cli.schema.cmd.sections.mandatory";
public static final String CMD_SECTIONS = "cli.schema.cmd.sections";
- public static final String DEFAULT_PARAMETER_CMD_FILE_NAME = "default_input_parameters_cmd.yaml";
+ public static final String DEFAULT_PARAMETER_CMD_FILE_NAME = "default_input_parameters_cmd.yaml";
private OnapCommandCmdConstants() {
//as per coding standard !
}
diff --git a/profiles/command/src/main/java/org/onap/cli/fw/cmd/schema/OnapCommandSchemaCmdLoader.java b/profiles/command/src/main/java/org/onap/cli/fw/cmd/schema/OnapCommandSchemaCmdLoader.java
index c3764eaa..55fab733 100644
--- a/profiles/command/src/main/java/org/onap/cli/fw/cmd/schema/OnapCommandSchemaCmdLoader.java
+++ b/profiles/command/src/main/java/org/onap/cli/fw/cmd/schema/OnapCommandSchemaCmdLoader.java
@@ -33,7 +33,7 @@ public class OnapCommandSchemaCmdLoader {
// to follow standards !
}
-
+
/**
* Load the schema.
*
@@ -50,40 +50,40 @@ public class OnapCommandSchemaCmdLoader {
ArrayList<String> errorList = new ArrayList<>();
Map<String, ?> valMap = (Map<String, ?>) values.get(OnapCommandCmdConstants.CMD);
- if (valMap != null) {
- if (validate) {
- OnapCommandUtils.validateTags(errorList, valMap, OnapCommandConfig.getCommaSeparatedList(OnapCommandCmdConstants.CMD_SECTIONS),
- OnapCommandConfig.getCommaSeparatedList(OnapCommandCmdConstants.CMD_MANDATORY_SECTIONS), OnapCommandCmdConstants.CMD);
- }
- for (Map.Entry<String, ?> entry1 : valMap.entrySet()) {
- String key1 = entry1.getKey();
+ if (valMap != null) {
+ if (validate) {
+ OnapCommandUtils.validateTags(errorList, valMap, OnapCommandConfig.getCommaSeparatedList(OnapCommandCmdConstants.CMD_SECTIONS),
+ OnapCommandConfig.getCommaSeparatedList(OnapCommandCmdConstants.CMD_MANDATORY_SECTIONS), OnapCommandCmdConstants.CMD);
+ }
+ for (Map.Entry<String, ?> entry1 : valMap.entrySet()) {
+ String key1 = entry1.getKey();
+
+ switch (key1) {
+ case OnapCommandCmdConstants.COMMAND:
+ Object o = valMap.get(key1);
+ if (o instanceof List) {
+ cmd.setCommand((List<String>) o);
+ } else {
+ cmd.setCommand(Arrays.asList(new String [] {(String) o}));
+ }
+ break;
- switch (key1) {
- case OnapCommandCmdConstants.COMMAND:
- Object o = valMap.get(key1);
- if (o instanceof List) {
- cmd.setCommand((List<String>) o);
- } else {
- cmd.setCommand(Arrays.asList(new String [] {(String) o}));
- }
- break;
+ case OnapCommandCmdConstants.ENVIRONMENT:
+ Map<String, String> envMap = (Map<String, String>) valMap.get(key1);
+ cmd.setEnvs(envMap);
- case OnapCommandCmdConstants.ENVIRONMENT:
- Map<String, String> envMap = (Map<String, String>) valMap.get(key1);
- cmd.setEnvs(envMap);
+ break;
- break;
+ case OnapCommandCmdConstants.WD:
+ cmd.setWd((String)valMap.get(key1));
+ break;
- case OnapCommandCmdConstants.WD:
- cmd.setWd((String)valMap.get(key1));
- break;
-
- case OnapCommandCmdConstants.SUCCESS_EXIT_CODE:
- cmd.setSuccessStatusCodes((ArrayList) valMap.get(key1));
- break;
- }
- }
- }
+ case OnapCommandCmdConstants.SUCCESS_EXIT_CODE:
+ cmd.setSuccessStatusCodes((ArrayList) valMap.get(key1));
+ break;
+ }
+ }
+ }
return errorList;
diff --git a/profiles/command/src/test/resources/open-cli-schema/sample-test-schema-1.1.yaml b/profiles/command/src/test/resources/open-cli-schema/sample-test-schema-1.1.yaml
new file mode 100644
index 00000000..2bf2e858
--- /dev/null
+++ b/profiles/command/src/test/resources/open-cli-schema/sample-test-schema-1.1.yaml
@@ -0,0 +1,46 @@
+# Copyright 2018 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.
+
+open_cli_schema_version: 1.0
+name: sample-cmd-1
+description: Oclip sample command to following the shell command features
+info:
+ product: open-cli
+ service: test
+ type: cmd
+
+results:
+ direction: landscape
+ attributes:
+ - name: attr1
+ description: Attr1
+ scope: short
+ type: string
+ - name: attr2
+ description: Attr2
+ scope: long
+ type: string
+cmd:
+ command:
+ - d:/temp/test.bat
+ environment:
+ AA: aa
+ success_codes:
+ - 0
+ working_directory: .
+
+ result_map:
+ attr1: NA
+ attr2: NA
+ sample_output: NA
diff --git a/profiles/command/src/test/resources/open-cli.properties b/profiles/command/src/test/resources/open-cli.properties
new file mode 100644
index 00000000..87594520
--- /dev/null
+++ b/profiles/command/src/test/resources/open-cli.properties
@@ -0,0 +1,45 @@
+# Copyright 2018 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.
+
+cli.product_name=open-cli
+cli.version=1.0
+
+cli.discover_always=false
+
+#schema validation
+cli.schema.base.sections=open_cli_schema_version,name,description,parameters,results,info
+cli.schema.base.sections.mandatory=open_cli_schema_version
+
+cli.schema.base.info.sections=product,service,type,author,ignore
+cli.schema.base.info.sections.mandatory=product,service
+
+cli.schema.base.parameters.sections=name,description,type,short_option,long_option, is_optional,default_value,is_secured,is_include
+cli.schema.base.parameters.sections.mandatory=name,description,type
+
+cli.schema.base.results.sections=name,description,scope,type,is_secured, default_value
+cli.schema.base.results.sections.mandatory=name, description, type, scope
+
+cli.schema.boolean_values=true,false
+cli.schema.command.type=cmd,auth,catalog
+
+# moco properties
+cli.sample.gen.enable=false
+cli.sample.gen.target=.
+
+# mrkanag Move this to db, once exteranl command registration is supported in place of discovery
+cli.schema.profile.available=cmd
+
+#other properties to load (it should be hanled when plugins are made as externally register-able
+#when command plugin management support is enabled in oclip
+cli.schema.profile.confs=open-cli-cmd.properties \ No newline at end of file