summaryrefslogtreecommitdiffstats
path: root/juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java')
-rw-r--r--juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java297
1 files changed, 297 insertions, 0 deletions
diff --git a/juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java b/juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java
new file mode 100644
index 0000000..9899c34
--- /dev/null
+++ b/juju/juju-vnfmadapter/Juju-vnfmadapterService/service/src/main/java/org/openo/nfvo/jujuvnfmadapter/common/EntityUtils.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2016 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.openo.nfvo.jujuvnfmadapter.common;
+
+import java.io.File;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.openo.nfvo.jujuvnfmadapter.service.constant.Constant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import net.sf.json.JSONObject;
+
+/**
+ * <br/>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version NFVO 0.5 Aug 30, 2016
+ */
+public class EntityUtils {
+
+ private static final Logger LOG = LoggerFactory.getLogger(EntityUtils.class);
+
+ public static final String RESULT_CODE_KEY = "retCode";
+
+ public static final String MSG_KEY = "msg";
+
+ public static final String DATA_KEY = "data";
+
+ public static final String STATUS = "status";
+
+ /**
+ * Constructor<br/>
+ * <p>
+ * </p>
+ */
+ private EntityUtils() {
+ // Empty Constructor
+ }
+
+ /**
+ * <br>
+ *
+ * @param jsonObject
+ * @param clazz
+ * @return T
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T toEntity(JSONObject jsonObject, Class<?> clazz) throws Exception { // NOSONAR
+ T instance = (T)clazz.newInstance();
+ Field[] fields = clazz.getDeclaredFields();
+ for(int i = 0; i < fields.length; i++) {
+ fields[i].setAccessible(true);
+ fields[i].set(instance, jsonObject.get(fields[i].getName()));
+ }
+ return instance;
+ }
+
+ /**
+ * format the obj to str style as json format.
+ * <br/>
+ *
+ * @param obj
+ * @param clazz
+ * @return
+ * @since NFVO 0.5
+ */
+ public static String toString(Object obj, Class<?> clazz) {
+ JSONObject jsonObj = new JSONObject();
+ try {
+ Field[] fields = clazz.getDeclaredFields();
+ for(int i = 0; i < fields.length; i++) {
+ fields[i].setAccessible(true);
+ jsonObj.put(fields[i].getName(), obj != null ? fields[i].get(obj) : "");
+ }
+ } catch(Exception e) {
+ LOG.error("to string error:", e);
+ }
+ return jsonObj.toString();
+ }
+
+ /**
+ * <br>
+ * <p>
+ * </p>
+ *
+ * @author
+ */
+ public static class ExeRes {
+
+ public static final int SUCCESS = 0;
+
+ public static final int FAILURE = -1;
+
+ private int code;
+
+ private String body;
+
+ /**
+ * @return Returns the code.
+ */
+ public int getCode() {
+ return code;
+ }
+
+ /**
+ * @param code The code to set.
+ */
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ /**
+ * @return Returns the body.
+ */
+ public String getBody() {
+ return body;
+ }
+
+ /**
+ * @param body The body to set.
+ */
+ public void setBody(String body) {
+ this.body = body;
+ }
+
+ @Override
+ public String toString() {
+ try {
+ return EntityUtils.toString(this, this.getClass());
+ } catch(Exception e) {
+ LOG.error("to string error:", e);
+ return "code:" + this.getCode() + ",body:" + this.getBody();
+ }
+ }
+
+ }
+
+ /**
+ * <br>
+ *
+ * @param command
+ * @return String
+ */
+ public static String formatCommand(List<String> command) {
+ StringBuilder builder = new StringBuilder();
+ if(command != null) {
+ for(String cmd : command) {
+ builder.append(cmd).append(" "); // NOSONAR
+ }
+ }
+ return builder.toString();
+
+ }
+
+ /**
+ * <br>
+ *
+ * @param dir
+ * @param command
+ * @return
+ */
+ public static ExeRes execute(String dir, String... command) {
+ List<String> commands = new ArrayList<>(command.length);
+ for(String arg : command) {
+ commands.add(arg);
+ }
+ return execute(dir, commands);
+
+ }
+
+ /**
+ * execute local command
+ * <br/>
+ *
+ * @param dir the command path
+ * @param command
+ * @return response msg
+ * @since NFVO 0.5
+ */
+ public static ExeRes execute(String dir, List<String> command) {
+ ExeRes er = new ExeRes();
+ StringBuilder sb = new StringBuilder();
+ try {
+ if(SwitchController.isDebugModel()) {
+ String resContent = new String(FileUtils.readFile(new File(JujuConfigUtil.getValue("juju_cmd_res_file")), "UTF-8"));
+ er.setBody(resContent);
+ return er;
+ }
+ ProcessBuilder pb = new ProcessBuilder(command);
+ if(StringUtils.isNotBlank(dir)) {
+ pb.directory(new File(dir));
+ }
+ pb.redirectErrorStream(true);
+ Process p = pb.start();
+
+ // wait the process result
+ buildProcessResult(er, p);
+
+ InputStream in = p.getInputStream();
+ byte[] buffer = new byte[1024];
+ int length;
+ while((length = in.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, length));
+ }
+ in.close();
+ er.setBody(sb.toString());
+ } catch(Exception e) {
+ er.setCode(ExeRes.FAILURE);
+ er.setBody(e.getMessage());
+ LOG.error("execute the command failed:{}", command, e);
+ }
+ return er;
+ }
+
+ /**
+ * <br/>
+ *
+ * @param er
+ * @param p
+ * @throws TimeoutException
+ * @throws InterruptedException
+ * @since NFVO 0.5
+ */
+ private static void buildProcessResult(ExeRes er, Process p) throws TimeoutException, InterruptedException {
+ Worker worker = new Worker(p);
+ worker.start();
+ try {
+ worker.join(Constant.PROCESS_WAIT_MILLIS);
+ if(worker.exitValue != null) {
+ int exit = worker.exitValue;
+ if(exit != 0) {
+ er.setCode(ExeRes.FAILURE);
+ LOG.warn("the process exit non-normal");
+ } else {
+ er.setCode(ExeRes.SUCCESS);
+ }
+ } else {
+ er.setCode(ExeRes.FAILURE);
+ LOG.warn("the process execute timeout.");
+ throw new TimeoutException();
+ }
+ } catch(InterruptedException e) {
+ worker.interrupt();
+ Thread.currentThread().interrupt();
+ throw e;
+ }
+ }
+
+ private static class Worker extends Thread {
+
+ private final Process process;
+
+ private Integer exitValue;
+
+ private Worker(Process process) {
+ this.process = process;
+ }
+
+ /**
+ * <br/>
+ *
+ * @since NFVO 0.5
+ */
+ @Override
+ public void run() {
+ try {
+ exitValue = process.waitFor();
+ } catch(InterruptedException e) {
+ return;
+ }
+ }
+
+ }
+}