diff options
author | 2017-07-31 11:06:26 +0530 | |
---|---|---|
committer | 2017-07-31 11:06:26 +0530 | |
commit | d0e21365a8bf7da9dd87915c52acb0a907dfe59b (patch) | |
tree | 06b4f5314b92ca2695bd3dbd9d545df6df242dd3 /vnfmarket-be/vnf-sdk-marketplace/src/main | |
parent | 6bf0d8e793ef1f55808bb54112f4839a18ee582a (diff) |
Market place initial code
Resolved:VNFSDK-53
VNF SDK market place
Change-Id: Ic9ac5491b4a43d03bce105abb295e10c476e1560
Signed-off-by: Murali-P <murali.p@huawei.com>
Diffstat (limited to 'vnfmarket-be/vnf-sdk-marketplace/src/main')
81 files changed, 7310 insertions, 0 deletions
diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonConstant.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonConstant.java new file mode 100644 index 00000000..7345fac5 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonConstant.java @@ -0,0 +1,121 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +public class CommonConstant { + // Package Status + public static final String PACKAGE_STATUS_DELETING = "deleting"; + + public static final String PACKAGE_STATUS_DELETE_FAIL = "deleteFailed"; + + public static final String PACKAGE_XML_FORMAT = "xml"; + + + public static final String PACKAGE_YAML_FORMAT = "yaml"; + + // host image progress + + public static final String TOSCA_METADATA = "TOSCA-Metadata"; + + public static final String CSAR_VERSION_META = "version"; + + public static final String CSAR_TYPE_META = "type"; + + public static final String CSAR_PROVIDER_META = "provider"; + + public static final String DEFINITIONS = "Definitions"; + + public static final String CSAR_META = "csar.meta"; + + public static final String CSAR_SUFFIX = ".csar"; + + public static final String HTTP_HEADER_CONTENT_RANGE = "Content-Range"; + + public static final String CATALOG_CSAR_DIR_NAME = "/csar"; + + public static final String REPORT_CSAR_DIR_NAME = "/reports"; + + public static final String COMETD_CHANNEL_PACKAGE_DELETE = "/package/delete"; + + public static final String SUCCESS_STR = "SUCCESS"; + + public static final int ONBOARDING_THREAD_COUNT = 1; + public static final int SUCESS = 0; + public static final int FAILED = -1; + + public static final String CATALOUGE_UPLOAD_URL = "/openoapi/catalog/v1/csars"; + + public static class functionTest + { + public static final String FUNCTEST_URL = "/openoapi/vnfsdk/v1/functest/"; + public static final String FUNCTEST_RESULT_URL = "/openoapi/vnfsdk/v1/functest/download/"; + public static final String FUNCTEST_OPERTYPE_ID = "functiontest"; + public static final String FUNCTEST_PACKAGE_EXISTS = "packageExists"; + public static final String FUNCTEST_EXEC = "functestexec"; + + private functionTest() { + } + } + + public static class LifeCycleTest + { + public static final String LIFECYCLE_TEST_URL = "/openoapi/nslcm/v1/vnfpackage"; + public static final String LIFECYCLE_TEST_OPERTYPE_ID = "lifecycletest"; + public static final String LIFECYCLE_TEST_EXEC = "lifecycleTestexec"; + private LifeCycleTest() { + } + } + + public static class HttpContext { + + public static final String CONTENT_TYPE = "Content-Type"; + + public static final String MEDIA_TYPE_JSON = "application/json;charset=UTF-8"; + + public static final String URL = "url"; + + public static final String METHOD_TYPE = "methodType"; + + private HttpContext() { + } + } + + public static class MethodType { + + public static final String POST = "post"; + + public static final String DELETE = "delete"; + + public static final String PUT = "put"; + + public static final String GET = "get"; + + private MethodType() { + } + } + + public static class MsbRegisterCode { + + public static final int MSDB_REGISTER_RETRIES = 12; + public static final int MSDB_REGISTER_RETRY_SLEEP = 10000; + + public static final int MSDB_REGISTER_FILE_NOT_EXISTS = 2; + public static final int MSDB_REGISTER_SUCESS = 0; + public static final int MSDB_REGISTER_FAILED = -1; + private MsbRegisterCode() { + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonErrorResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonErrorResponse.java new file mode 100644 index 00000000..853aceaa --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/CommonErrorResponse.java @@ -0,0 +1,41 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CommonErrorResponse { + + private String code; + + private String message; + + + public static Object failure(String message) { + return message; + } + + public CommonErrorResponse(String message) { + super(); + this.message = message; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/FileUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/FileUtil.java new file mode 100644 index 00000000..2897af6e --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/FileUtil.java @@ -0,0 +1,300 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.io.Resources; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + + +public final class FileUtil { + + public static final Logger logger = LoggerFactory.getLogger(FileUtil.class); + + private static final int BUFFER_SIZE = 2 * 1024 * 1024; + + private static final int TRY_COUNT = 3; + + private FileUtil() { + + } + + + /** + * create dir. + * @param dir dir to create + * @return boolean + */ + public static boolean createDirectory(String dir) { + File folder = new File(dir); + int tryCount = 0; + while (tryCount < TRY_COUNT) { + tryCount++; + if (!folder.exists() && !folder.mkdirs()) { + continue; + } else { + return true; + } + } + + return folder.exists(); + } + + /** + * delete file. + * @param file the file to delete + * @return boolean + */ + public static boolean deleteFile(File file) { + String hintInfo = file.isDirectory() ? "dir " : "file "; + boolean isFileDeleted = file.delete(); + boolean isFileExist = file.exists(); + if (!isFileExist) { + if (isFileDeleted) { + logger.info("delete " + hintInfo + file.getAbsolutePath()); + } else { + isFileDeleted = true; + logger.info("file not exist. no need delete " + hintInfo + file.getAbsolutePath()); + } + } else { + logger.info("fail to delete " + hintInfo + file.getAbsolutePath()); + } + return isFileDeleted; + } + + + /** + * unzip zip file. + * @param zipFileName file name to zip + * @param extPlace extPlace + * @return unzip file name + * @throws IOException e1 + */ + public static ArrayList<String> unzip(String zipFileName, String extPlace) throws IOException { + ZipFile zipFile = null; + ArrayList<String> unzipFileNams = new ArrayList<String>(); + + try { + zipFile = new ZipFile(zipFileName); + Enumeration<?> fileEn = zipFile.entries(); + byte[] buffer = new byte[BUFFER_SIZE]; + + while (fileEn.hasMoreElements()) { + InputStream input = null; + BufferedOutputStream bos = null; + try { + ZipEntry entry = (ZipEntry) fileEn.nextElement(); + if (entry.isDirectory()) { + continue; + } + + input = zipFile.getInputStream(entry); + File file = new File(extPlace, entry.getName()); + if (!file.getParentFile().exists()) { + createDirectory(file.getParentFile().getAbsolutePath()); + } + + bos = new BufferedOutputStream(new FileOutputStream(file)); + while (true) { + int length = input.read(buffer); + if (length == -1) { + break; + } + bos.write(buffer, 0, length); + } + unzipFileNams.add(file.getAbsolutePath()); + } finally { + closeOutputStream(bos); + closeInputStream(input); + } + } + } finally { + closeZipFile(zipFile); + } + return unzipFileNams; + } + + /** + * close InputStream. + * + * @param inputStream the inputstream to close + */ + public static void closeInputStream(InputStream inputStream) { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (Exception e1) { + logger.info("close InputStream error!"); + } + } + + /** + * close OutputStream. + * + * @param outputStream the output stream to close + */ + public static void closeOutputStream(OutputStream outputStream) { + try { + if (outputStream != null) { + outputStream.close(); + } + } catch (Exception e1) { + logger.info("close OutputStream error!"); + } + } + + public static void closeFileStream(FileInputStream ifs) { + try { + if (ifs != null) { + ifs.close(); + } + } catch (Exception e1) { + logger.info("close OutputStream error!"); + } + } + + /** + * close zipFile. + * + * @param zipFile the zipFile to close + */ + public static void closeZipFile(ZipFile zipFile) { + try { + if (zipFile != null) { + zipFile.close(); + zipFile = null; + } + } catch (IOException e1) { + logger.info("close ZipFile error!"); + } + } + + public static boolean checkFileExists(String filePath) + { + File file = new File(filePath); + return file.exists(); + } + + public static boolean deleteFile(String filePath) + { + File file = new File(filePath); + return deleteFile(file); + } + + public static boolean writeJsonDatatoFile(String fileAbsPath, Object obj) + { + logger.info("Write JsonData to file :"+fileAbsPath); + + boolean bResult = false; + if(checkFileExists(fileAbsPath)) + { + deleteFile(fileAbsPath); + } + + ObjectMapper mapper = new ObjectMapper(); + try + { + mapper.writeValue(new File(fileAbsPath), obj); + bResult = true; + } + catch (JsonGenerationException e) + { + logger.info("JsonGenerationException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + catch (JsonMappingException e) + { + logger.info("JsonMappingException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + catch (IOException e) + { + logger.info("IOException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + return bResult; + } + + public static <T> Object readJsonDatafFromFile(String fileAbsPath, Class<T> clazz) + { + if(!checkFileExists(fileAbsPath)) + { + logger.info("read JsonData from file , file not found :"+fileAbsPath); + return null; + } + + logger.info("read JsonData from file :"+fileAbsPath); + + T obj = null; + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + try + { + obj = mapper.readValue(new File(fileAbsPath), clazz); + } + catch (JsonParseException e1) + { + logger.info("JsonParseException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + catch (JsonMappingException e1) + { + logger.info("JsonMappingException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + catch (IOException e1) + { + logger.info("IOException Exception: writeJsonDatatoFile-->"+fileAbsPath); + } + return obj; + } + + public static boolean deleteDirectory(String path) + { + File file = new File(path); + return deleteDirectory(file); + } + + public static boolean deleteDirectory(File file) + { + if (!file.exists()) + { + return true; + } + if (file.isDirectory()) + { + for (File f : file.listFiles()) + { + deleteDirectory(f); + } + } + return file.delete(); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerAddrConfig.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerAddrConfig.java new file mode 100644 index 00000000..bb7c804e --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerAddrConfig.java @@ -0,0 +1,31 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + + +public class HttpServerAddrConfig { + + protected static String httpServerAddress; + + public static String getHttpServerAddress() { + return httpServerAddress; + } + + public static void setHttpServerAddress(String httpServerAddress) { + HttpServerAddrConfig.httpServerAddress = httpServerAddress; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerPathConfig.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerPathConfig.java new file mode 100644 index 00000000..fab2315c --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/HttpServerPathConfig.java @@ -0,0 +1,38 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +public class HttpServerPathConfig { + protected static String httpServerPath; + + static + { +// CatalogAppConfiguration configuration = new CatalogAppConfiguration(); +// Config.setConfigration(configuration); +// Config.getConfigration().setMsbServerAddr("http://127.0.0.1:80"); + MsbAddrConfig.setMsbAddress("http://127.0.0.1:8080"); + HttpServerAddrConfig.setHttpServerAddress("http://127.0.0.1:8080"); + HttpServerPathConfig.setHttpServerPath("../tomcat/webapps/ROOT/"); + } + + public static String getHttpServerPath() { + return httpServerPath; + } + + public static void setHttpServerPath(String httpServerPath) { + HttpServerPathConfig.httpServerPath = httpServerPath; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/JsonUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/JsonUtil.java new file mode 100644 index 00000000..ba456998 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/JsonUtil.java @@ -0,0 +1,118 @@ +/* + * 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.vnfsdk.marketplace.common; + +import java.io.File; +import java.io.IOException; + +import org.codehaus.jackson.map.DeserializationConfig; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.type.TypeReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Json tools class, packaging a number of commonly used Json methods.<br> + * + * @author + * @version GSO 0.5 2016-08-26 + */ +public final class JsonUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(JsonUtil.class); + + private JsonUtil() { + } + + /** + * Convert object to JSON.<br> + * + * @param obj The object to be converted + * @return The JSON string + * @since GSO 0.5 + */ + public static String toJson(Object obj) { + try { + return new ObjectMapper().writeValueAsString(obj); + } catch(IOException ex) { + LOGGER.error("Parser to json error.", ex); + throw new IllegalArgumentException("Parser obj to json error, obj = " + obj, ex); + } + } + + /** + * Convert JSON to object.<br> + * + * @param jsonStr The JSON to be converted + * @param objClass The object class + * @return The objClass object + * @since GSO 0.5 + */ + public static <T> T fromJson(String jsonStr, Class<T> objClass) { + try { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return mapper.readValue(jsonStr, objClass); + } catch(IOException ex) { + LOGGER.error("Parser to object error.", ex); + throw new IllegalArgumentException( + "Parser json to object error, json = " + jsonStr + ", expect class = " + objClass, ex); + } + } + + /** + * Convert JSON to object.<br> + * + * @param jsonStr The JSON to be converted + * @param typeRef The object type + * @return The typeRef object + * @since GSO 0.5 + */ + public static <T> T fromJson(String jsonStr, TypeReference<T> typeRef) { + try { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return mapper.readValue(jsonStr, typeRef); + } catch(IOException ex) { + LOGGER.error("Parser to object by type reference error.", ex); + throw new IllegalArgumentException( + "Parser json to object error, json = " + jsonStr + ", expect type = " + typeRef.getType(), ex); + } + } + + /** + * Turn a json file in to a java object. <br> + * + * @param file the json file need to change. + * @param objClass the java class json string represent. + * @return the java object parsed from json string. + * @since GSO 0.5 + */ + public static <T> T fromJson(File file, Class<T> objClass) { + try { + + ObjectMapper mapper = new ObjectMapper(); + + mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return mapper.readValue(file, objClass); + } catch(IOException ex) { + LOGGER.error("Parser to object error.", ex); + throw new IllegalArgumentException( + "Parser json to object error, file = " + file.getName() + ", expect class = " + objClass, ex); + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/MsbAddrConfig.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/MsbAddrConfig.java new file mode 100644 index 00000000..9d0e5ec9 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/MsbAddrConfig.java @@ -0,0 +1,30 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +public class MsbAddrConfig { + + protected static String msbAddress; + + public static String getMsbAddress() { + return msbAddress; + } + + public static void setMsbAddress(String msbAddress) { + MsbAddrConfig.msbAddress = msbAddress; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/RestUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/RestUtil.java new file mode 100644 index 00000000..fe3c4874 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/RestUtil.java @@ -0,0 +1,34 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +import javax.ws.rs.core.Response; + + +public class RestUtil { + + /** + * get rest exception. + * @param errorMsg error message + * @return Response + */ + public static Response getRestException(String errorMsg) { + String code = "001"; + return Response.status(Response.Status.INTERNAL_SERVER_ERROR) + .entity(new CommonErrorResponse(errorMsg)).build(); + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/ToolUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/ToolUtil.java new file mode 100644 index 00000000..d64e064e --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/common/ToolUtil.java @@ -0,0 +1,369 @@ +/** + * 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.openo.vnfsdk.marketplace.common; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + + + +/** + * common utility class. + * + */ +public class ToolUtil { + private static final Logger LOG = LoggerFactory.getLogger(ToolUtil.class); + + public static final String CATALOGUE_CSAR_DIR_NAME = "csar"; + + public static final String CATALOGUE_IMAGE_DIR_NAME = "image"; + + public static final int FILE_PERCENT = 1024 * 1024; // 1M + + public static boolean isEmptyString(String val) { + return val == null || "".equals(val); + } + + public static boolean isTrimedEmptyString(String val) { + return val == null || "".equals(val.trim()); + } + + public static boolean isTrimedEmptyArray(String[] val) { + return val == null || val.length == 0; + } + + /** + * trimed string. + * + * @param val string array to trim + * @return String[] + */ + public static String[] trimedStringArray(String[] val) { + if (isTrimedEmptyArray(val)) { + return val; + } + + String[] rets = new String[val.length]; + for (int i = 0; i < val.length; i++) { + rets[i] = val[i].trim(); + } + return rets; + } + + public static boolean isEmptyCollection(Collection<?> coll) { + return null == coll || coll.isEmpty(); + } + + /** + * store chunk file to local temp directory. + * + * @param dirName directory name + * @param fileName file name + * @param uploadedInputStream upload input stream + * @return String + * @throws IOException e + */ + public static String storeChunkFileInLocal(String dirName, String fileName, + InputStream uploadedInputStream) throws IOException { + File tmpDir = new File(dirName); + LOG.info("tmpdir = " + File.separator + dirName); + if (!tmpDir.exists()) { + tmpDir.mkdirs(); + } + File file = new File(tmpDir + File.separator + fileName); + OutputStream os = null; + try { + int read = 0; + byte[] bytes = new byte[1024]; + os = new FileOutputStream(file, true); + while ((read = uploadedInputStream.read(bytes)) != -1) { + os.write(bytes, 0, read); + } + os.flush(); + return file.getAbsolutePath(); + } finally { + if (os != null) { + os.close(); + } + } + } + + /** + * get temp dirctory when upload package. + * + * @param dirName temp directory name + * @param fileName package name + * @return String + */ + public static String getTempDir(String dirName, String fileName) { + // File tmpDir = new File(File.separator + dirName); + return Thread.currentThread().getContextClassLoader().getResource("/").getPath() + dirName + File.separator + + fileName.replace(".csar", ""); + } + + public static String getUnzipDir(String dirName) { + File tmpDir = new File(File.separator + dirName); + return tmpDir.getAbsolutePath().replace(".csar", ""); + } + + /** + * delete file. + * + * @param dirName the directory of file + * @param fileName file name + * @return boolean + */ + public static boolean deleteFile(String dirName, String fileName) { + File tmpDir = new File(getCataloguePath() + File.separator + dirName); + if (!tmpDir.exists()) { + return true; + } + File file = new File(tmpDir.getAbsolutePath() + File.separator + fileName); + if (file.exists()) { + return file.delete(); + } + return true; + } + + public static String getCataloguePath() { +// return Config.getConfigration().getCataloguePath(); + return ""; + } + + public static String getCatalogueCsarPath() { + return getCataloguePath() + File.separator + CATALOGUE_CSAR_DIR_NAME; + } + + public static String getCatalogueImagePath() { + return getCataloguePath() + File.separator + CATALOGUE_IMAGE_DIR_NAME; + } + + /** + * get file size. + * + * @param file file which to get the size + * @param fileUnit file unit + * @return String file size + */ + public static String getFileSize(File file, int fileUnit) { + String fileSize = ""; + DecimalFormat format = new DecimalFormat("#0.00"); + if (file.exists()) { + fileSize = format.format((double) file.length() / fileUnit) + "M"; + } + return fileSize; + } + + public static String formatFileSize(double fileLength, int fileUnit) { + DecimalFormat format = new DecimalFormat("#0.00"); + return format.format(fileLength / fileUnit) + "M"; + } + + /** + * get file size by content. + * + * @param contentRange content range + * @return String + */ + public static String getFileSizeByContent(String contentRange) { + String size = + contentRange.substring(contentRange.indexOf("/") + 1, contentRange.length()).trim(); + return formatFileSize(Double.parseDouble(size), FILE_PERCENT); + } + + /** + * fix package format. + * + * @param csarId package ID + * @return String + */ + public static String formatCsar(String csarId) { + String result = csarId; + if (csarId.indexOf(".csar") < 0) { + result += ".csar"; + } + return result; + } + + + /** + * delete the file and file directory. + * + * @param dir file + * @return boolean + */ + public static boolean deleteDir(File dir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + return dir.delete(); + } + + // public static boolean unZipCsar(String fileLocation) throws IOException { + // String tempfolder=System.getProperty("java.io.tmpdir"); + // ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder); + // if(unzipFiles.isEmpty()){ + // return true; + // } + // } + + /** + * judge the file's format is yaml or not. + * + * @param file file to judge + * @return boolean + */ + public static boolean isYamlFile(File file) { + if (!file.isDirectory() && file.getName().indexOf(".yaml") != -1) { + return true; + } + return false; + } + + /** + * remove the csar suffix. + * + * @param csarName package name + * @return String + */ + public static String removeCsarSuffix(String csarName) { + return csarName.replaceAll(".csar", ""); + } + + /** + * add the csar fuffix. + * + * @param csarName package name + * @return String + */ + public static String addCsarSuffix(String csarName) { + if (csarName.indexOf(".csar") == -1) { + return csarName + ".csar"; + } + return csarName; + } + + /** + * process file name. + * + * @param fileName file's name + * @return String + */ + public static String processFileName(String fileName) { + int index = fileName.indexOf(".zip"); + if (index == -1) { + return fileName; + } + + return addCsarSuffix(fileName.replaceAll(".zip", "")); + } + + /** + * exchange object to string. + * + * @param obj object + * @return String + */ + public static String objectToString(Object obj) { + if (obj == null) { + return ""; + } + Gson gson = new Gson(); + String str = gson.toJson(obj); + return str; + } + + public static String generateId() { + return UUID.randomUUID().toString(); + } + + /** + * get the size format according file size. + * + * @param fileSize file size + * @return size format + */ + public static String getFormatFileSize(long fileSize) { + long kb = 1024; + long mb = kb * 1024; + long gb = mb * 1024; + + if (fileSize >= gb) { + return String.format("%.1f GB", (float) fileSize / gb); + } else if (fileSize >= mb) { + float fi = (float) fileSize / mb; + return String.format(fi > 100 ? "%.0f MB" : "%.1f MB", fi); + } else if (fileSize >= kb) { + float fi = (float) fileSize / kb; + return String.format(fi > 100 ? "%.0f KB" : "%.1f KB", fi); + } else { + return String.format("%d B", fileSize); + } + } + + /** + * get gson from json. + * @param jsonString json string + * @param templateClass template class + * @return Template + */ + public static <T> T fromJson(String jsonString, Class<T> templateClass) { + Gson gson = new Gson(); + return gson.fromJson(jsonString, templateClass); + } + + /** + * gson to json. + * @param template class name + * @return String + */ + public static <T> String toJson(T template) { + Gson gson = new Gson(); + return gson.toJson(template); + } + + /** + * @param value + * @return + */ + public static String getAsString(JsonElement value) { + if (value.isJsonPrimitive()) { + return value.getAsString(); + } + + return value.toString(); + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/MarketplaceResourceType.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/MarketplaceResourceType.java new file mode 100644 index 00000000..e5140910 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/MarketplaceResourceType.java @@ -0,0 +1,25 @@ +/** + * 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.openo.vnfsdk.marketplace.db.common; + + +public enum MarketplaceResourceType { + SERVICETEMPLATE, PACKAGE, NODETEMPLATE, TEMPLATE, SERVICETEMPLATEMAPPING; + + public static MarketplaceResourceType getType(String type) { + return valueOf(type); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/Parameters.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/Parameters.java new file mode 100644 index 00000000..89416bfb --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/common/Parameters.java @@ -0,0 +1,22 @@ +/** + * 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.openo.vnfsdk.marketplace.db.common; + +public enum Parameters { + oid, name, provider, version, deletionPending, + type, status, csarId, vendor, serviceTemplateId, + nodeTemplateId, mappingId, nodeType; +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/connection/ConnectionUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/connection/ConnectionUtil.java new file mode 100644 index 00000000..d8c0d3ad --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/connection/ConnectionUtil.java @@ -0,0 +1,76 @@ +/** + * 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.openo.vnfsdk.marketplace.db.connection; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class is the session factory for the database to be used in the Driver Manager. + * <br/> + * + * @author + * @version + */ +public class ConnectionUtil { + + private static SqlSessionFactory sqlSessionFactory; + + private static final Logger LOGGER = LoggerFactory.getLogger(ConnectionUtil.class); + + /** + * Get the DB session for the myBaties. + * Constructor<br/> + * <p> + * </p> + * + * @since + */ + private ConnectionUtil() { + + } + + static { + InputStream inputStream; + try { + inputStream = Resources.getResourceAsStream("mybatis/configuration/configuration.xml"); + if(null == sqlSessionFactory) { + LOGGER.error("begin generate"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); + LOGGER.error("end generate = " + sqlSessionFactory); + } + } catch(FileNotFoundException ex) { + LOGGER.error("File Not Found Exception caught", ex); + + } catch(IOException ex) { + LOGGER.error("IO Exception caught", ex); + } catch(Exception ex) { + LOGGER.error("some exception", ex); + } + } + + public static SqlSessionFactory getSession() { + return sqlSessionFactory; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/BaseData.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/BaseData.java new file mode 100644 index 00000000..77acf90c --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/BaseData.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.db.entity; + +public class BaseData { + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/PackageData.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/PackageData.java new file mode 100644 index 00000000..ed137a3f --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/entity/PackageData.java @@ -0,0 +1,196 @@ +/** + * 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.openo.vnfsdk.marketplace.db.entity; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "catalog_package_table") +@JsonIgnoreProperties(ignoreUnknown = true) +public class PackageData extends BaseData { + + @Id + @Column(name = "CSARID") + private String csarId; + @Column(name = "DOWNLOADURi") + private String downloadUri; + + @Column(name = "NAME") + private String name; + + @Column(name = "SIZE") + private String size; + @Column(name = "VERSION") + private String version; + + @Column(name = "PROVIDER") + private String provider; + @Column(name = "TYPE") + private String type; + @Column(name = "FORMAT") + private String format; + + @Column(name = "DELETIONPENDING") + private String deletionPending; + + @Column(name = "MODIFYTIME") + private String modifyTime; + @Column(name = "SHORTDESC") + private String shortDesc; + @Column(name = "CREATETIME") + private String createTime; + @Column(name = "DETAILS") + private String details; + @Column(name = "REMARKS") + private String remarks; + @Column(name = "REPORT") + private String report; + @Column(name = "DOWNLOADCOUNT") + private int downloadCount; + + public String getReport() { + return report; + } + + public void setReport(String report) { + this.report = report; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDownloadUri() { + return downloadUri; + } + + public void setDownloadUri(String downloadUri) { + this.downloadUri = downloadUri; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getDeletionPending() { + return deletionPending; + } + + public void setDeletionPending(String deletionPending) { + this.deletionPending = deletionPending; + } + + public String getModifyTime() { + return modifyTime; + } + + public String getShortDesc() { + return shortDesc; + } + + public void setShortDesc(String shortDesc) { + this.shortDesc = shortDesc; + } + + public String getDetails() { + return details; + } + + public void setDetails(String details) { + this.details = details; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public void setModifyTime(String modifyTime) { + this.modifyTime = modifyTime; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getCsarId() { + return csarId; + } + + public void setCsarId(String csarId) { + this.csarId = csarId; + } + + public int getDownloadCount() { + return downloadCount; + } + + public void setDownloadCount(int downloadCount) { + this.downloadCount = downloadCount; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/ErrorCodeException.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/ErrorCodeException.java new file mode 100644 index 00000000..93472b05 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/ErrorCodeException.java @@ -0,0 +1,144 @@ +/** + * 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.openo.vnfsdk.marketplace.db.exception; + + +public class ErrorCodeException extends Exception { + + private static final long serialVersionUID = 3220072444842529499L; + private int categoryCode = 0; + private int errorCode = 1; + private String[] arguments = null; + + private static String defaultText = null; + + + public static void setDefaultText(String text) { + defaultText = text; + } + + + public static String getDefaultText() { + return defaultText; + } + + + public ErrorCodeException(int code, String debugMessage) { + this(code, debugMessage, null); + } + + /** + * error code exception. + * @param code error code + * @param debugMessage debug message + * @param arguments arguments + */ + public ErrorCodeException(int code, String debugMessage, String[] arguments) { + super(debugMessage); + this.errorCode = code; + this.arguments = arguments; + } + + + public ErrorCodeException(Throwable source, int code) { + this(source, code, (String[]) null); + } + + /** + * error code exception. + * @param source Throwable + * @param code error code + * @param arguments arguments + */ + public ErrorCodeException(Throwable source, int code, String[] arguments) { + super(source); + this.errorCode = code; + this.arguments = arguments; + } + + + public ErrorCodeException(Throwable source, int code, String debugMessage) { + this(source, code, debugMessage, null); + } + + /** + * error code exception. + * @param source Throwable + * @param code error code + * @param debugMessage debug message + * @param arguments arguments + */ + public ErrorCodeException(Throwable source, int code, String debugMessage, String[] arguments) { + super(debugMessage, source); + this.errorCode = code; + this.arguments = arguments; + } + + + public ErrorCodeException(int category, int code, String debugMessage) { + this(category, code, debugMessage, null); + } + + + public ErrorCodeException(int category, int code, String debugMessage, String[] arguments) { + super(debugMessage); + this.categoryCode = category; + this.errorCode = code; + this.arguments = arguments; + } + + + public ErrorCodeException(Throwable source, int category, int code) { + this(source, category, code, (String[]) null); + } + + + public ErrorCodeException(Throwable source, int category, int code, String[] arguments) { + super(source); + this.categoryCode = category; + this.errorCode = code; + this.arguments = arguments; + } + + + public ErrorCodeException(Throwable source, int category, int code, String debugMessage) { + this(source, category, code, debugMessage, null); + } + + + public ErrorCodeException(Throwable source, int category, int code, String debugMessage, + String[] arguments) { + super(debugMessage, source); + this.categoryCode = category; + this.errorCode = code; + this.arguments = arguments; + } + + + public int getCategory() { + return categoryCode; + } + + public int getErrorCode() { + return errorCode; + } + + + public String[] getArguments() { + return arguments; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/MarketplaceResourceException.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/MarketplaceResourceException.java new file mode 100644 index 00000000..ed9a6ea5 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/exception/MarketplaceResourceException.java @@ -0,0 +1,77 @@ +/** + * 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.openo.vnfsdk.marketplace.db.exception; + +public class MarketplaceResourceException extends ErrorCodeException { + private static final long serialVersionUID = 5699508780537383310L; + + + public MarketplaceResourceException(int errcode) { + super(errcode, ""); + } + + + public MarketplaceResourceException(int errcode, Throwable cause) { + super(cause, errcode); + } + + + public MarketplaceResourceException(int errcode, String message, Throwable cause) { + super(cause, errcode, message); + } + + + public MarketplaceResourceException() { + super(9999999, null); + } + + + public MarketplaceResourceException(String message) { + super(9999999, message); + } + + + public MarketplaceResourceException(Throwable cause) { + super(cause, 9999999); + } + + + public MarketplaceResourceException(String message, Throwable cause) { + super(cause, 9999999, message); + } + + + /** + * catalog resource exception. + * @param source throwable source + * @param errId error Id + * @param debugMessage debug message + * @param arguments arguments + */ + public MarketplaceResourceException(Throwable source, int errId, String debugMessage, + String[] arguments) { + super(source, errId, debugMessage, arguments); + } + + public MarketplaceResourceException(Throwable source, int category, int code, String debugMessage, + String[] arguments) { + super(source, category, code, debugMessage, arguments); + } + + public int getErrcode() { + return super.getErrorCode(); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/impl/MarketplaceDaoImpl.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/impl/MarketplaceDaoImpl.java new file mode 100644 index 00000000..6f1f330a --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/impl/MarketplaceDaoImpl.java @@ -0,0 +1,150 @@ +/** + * 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.openo.vnfsdk.marketplace.db.impl; + +import java.util.List; + +import javax.persistence.PersistenceException; + +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.openo.vnfsdk.marketplace.db.connection.ConnectionUtil; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.inf.IMarketplaceDao; +import org.openo.vnfsdk.marketplace.db.mapper.IMarketplaceMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class is the implementation for the DAO Layer for Driver Manager. + * <br/> + * + * @author + * @version + */ +public class MarketplaceDaoImpl implements IMarketplaceDao { + + private static final Logger LOGGER = LoggerFactory.getLogger(MarketplaceDaoImpl.class); + + private SqlSessionFactory sqlSessionFactory = null; + + /** + * + * Constructor<br/> + * <p> + * </p> + * + * @since + */ + public MarketplaceDaoImpl() { + sqlSessionFactory = ConnectionUtil.getSession(); + } + + /** + * get all package data. + * <br/> + * + * @return + * @since + */ + public List<PackageData> getAllPackageData() { + SqlSession session = sqlSessionFactory.openSession(); + List<PackageData> csars = null; + try { + IMarketplaceMapper mapper = session.getMapper(IMarketplaceMapper.class); + csars = mapper.getAllPackageData(); + session.commit(); + } catch(PersistenceException e) { + LOGGER.error("Exception caught {}", e); +// throw new DriverManagerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, +// ErrorCode.INVALID_DB); + } finally { + session.close(); + } + return csars; + } + + /** + * saving the package data object to the DB using the mybatis. + * <br/> + * + * @param dirverInstance + * @since + */ + public void savePackageData(PackageData lPackageData) { + SqlSession session = sqlSessionFactory.openSession(); + try { + IMarketplaceMapper mapper = session.getMapper(IMarketplaceMapper.class); + mapper.savePackageData(lPackageData); + session.commit(); + } catch(PersistenceException e) { + LOGGER.error("Exception caught {}", e); +// throw new DriverManagerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, +// ErrorCode.INVALID_DB); + } finally { + session.close(); + } + + } + + public List<PackageData> getPackageData(String csarId) { + SqlSession session = sqlSessionFactory.openSession(); + List<PackageData> csars = null; + try { + IMarketplaceMapper mapper = session.getMapper(IMarketplaceMapper.class); + csars = mapper.getPackageData(csarId); + session.commit(); + } catch(PersistenceException e) { + LOGGER.error("Exception caught {}", e); +// throw new DriverManagerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, +// ErrorCode.INVALID_DB); + } finally { + session.close(); + } + return csars; + } + + public void deletePackageData(String csarId) { + SqlSession session = sqlSessionFactory.openSession(); + try { + IMarketplaceMapper mapper = session.getMapper(IMarketplaceMapper.class); + mapper.deletePackageData(csarId); + session.commit(); + } catch(PersistenceException e) { + LOGGER.error("Exception caught {}", e); +// throw new DriverManagerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, +// ErrorCode.INVALID_DB); + } finally { + session.close(); + } + + } + + public void updatePackageData(PackageData oPackageData) { + SqlSession session = sqlSessionFactory.openSession(); + try { + IMarketplaceMapper mapper = session.getMapper(IMarketplaceMapper.class); + mapper.updatePackageData(oPackageData); + session.commit(); + } catch(PersistenceException e) { + LOGGER.error("Exception caught {}", e); + } finally { + session.close(); + } + + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/inf/IMarketplaceDao.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/inf/IMarketplaceDao.java new file mode 100644 index 00000000..65046e63 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/inf/IMarketplaceDao.java @@ -0,0 +1,56 @@ +/** + * 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.openo.vnfsdk.marketplace.db.inf; + +import java.util.List; + +import org.openo.vnfsdk.marketplace.db.entity.PackageData; + +/** + * DAO Layer for the Driver Manager Service. + * <br/> + * + * @author + * @version + */ +public interface IMarketplaceDao { + + /** + * get all package instance. + * <br/> + * + * @return + * @since + */ + List<PackageData> getAllPackageData(); + + /** + * saving the package instance object to the DB using the mybaties. + * <br/> + * + * @param packageInstance + * @since + */ + void savePackageData(PackageData lPackageData); + + List<PackageData> getPackageData(String csarID); + + void deletePackageData(String csarId); + + void updatePackageData(PackageData oPackageData); + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/mapper/IMarketplaceMapper.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/mapper/IMarketplaceMapper.java new file mode 100644 index 00000000..c0c1b6f6 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/mapper/IMarketplaceMapper.java @@ -0,0 +1,56 @@ +/** + * 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.openo.vnfsdk.marketplace.db.mapper; + +import java.util.List; + +import org.openo.vnfsdk.marketplace.db.entity.PackageData; + +/** + * Mapper Interface exposed to perform database operations for Driver Manager. + * <br/> + * + * @author + * @version + */ +public interface IMarketplaceMapper { + + /** + * mybaties mapper for getAllDriverInstance + * <br/> + * + * @return + * @since + */ + List<PackageData> getAllPackageData(); + + /** + * saving the driver instance object to the DB using the mybaties. + * <br/> + * + * @param dirverInstance + * @since + */ + void savePackageData(PackageData lPackageData); + + List<PackageData> getPackageData(String csarId); + + void deletePackageData(String csarId); + + void updatePackageData(PackageData oPackageData); + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/resource/PackageManager.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/resource/PackageManager.java new file mode 100644 index 00000000..7123b4e7 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/resource/PackageManager.java @@ -0,0 +1,151 @@ +/** + * 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.openo.vnfsdk.marketplace.db.resource; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import org.openo.vnfsdk.marketplace.db.common.Parameters; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.exception.MarketplaceResourceException; +import org.openo.vnfsdk.marketplace.db.util.MarketplaceDbUtil; +import org.openo.vnfsdk.marketplace.db.wrapper.PackageHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PackageManager { + private static final Logger LOGGER = LoggerFactory.getLogger(PackageManager.class); + private static PackageManager manager; + PackageHandler handler = new PackageHandler(); + + /** + * get PackageManager instance. + * @return PackageManager instance + */ + public static synchronized PackageManager getInstance() { + if (manager == null) { + manager = new PackageManager(); + } + return manager; + } + + private PackageManager() {} + + /** + * add package. + * @param packageData package data + * @return PackageData + * @throws MarketplaceResourceException e + */ + public PackageData addPackage(PackageData packageData) throws MarketplaceResourceException { + LOGGER.info("start add package info to db.info:" + MarketplaceDbUtil.objectToString(packageData)); + PackageData data = handler.create(packageData); + LOGGER.info(" package info to db end.info:" + MarketplaceDbUtil.objectToString(data)); + return data; + } + + /** + * query package by package id. + * @param csarId package id + * @return package data list + * @throws MarketplaceResourceException e + */ + public ArrayList<PackageData> queryPackageByCsarId(String csarId) + throws MarketplaceResourceException { + LOGGER.info("start query package info by csarid." + csarId); + ArrayList<PackageData> data = handler.queryByID(csarId); + LOGGER.info("query package info end.size:" + data.size() + "detail:" + + MarketplaceDbUtil.objectToString(data)); + return data; + } + + /** + * query package by condition. + * @param name package name + * @param provider package provider + * @param version package version + * @param deletionPending deletionPending + * @param type package type + * @return package data list + * @throws MarketplaceResourceException e + */ + public ArrayList<PackageData> queryPackage(String name, String provider, String version, + String deletionPending, String type) throws MarketplaceResourceException { + LOGGER.info("start query package info.name:" + name + " provider:" + provider + " version:" + + version + " type:" + type); + Map<String, String> queryParam = new HashMap<String, String>(); + if (MarketplaceDbUtil.isNotEmpty(name)) { + queryParam.put(Parameters.name.name(), name); + } + if (MarketplaceDbUtil.isNotEmpty(version)) { + queryParam.put(Parameters.version.name(), version); + } + if (MarketplaceDbUtil.isNotEmpty(deletionPending)) { + queryParam.put(Parameters.deletionPending.name(), deletionPending); + } + if (MarketplaceDbUtil.isNotEmpty(type)) { + queryParam.put(Parameters.type.name(), type); + } + if (MarketplaceDbUtil.isNotEmpty(provider)) { + queryParam.put(Parameters.provider.name(), provider); + } + ArrayList<PackageData> data = handler.query(queryParam); + LOGGER.info("query package info end.size:" + data.size() + "detail:" + + MarketplaceDbUtil.objectToString(data)); + return data; + } + + /** + * delete package according package id. + * @param packageId package id + * @throws MarketplaceResourceException e + */ + public void deletePackage(String packageId) throws MarketplaceResourceException { + LOGGER.info("start delete package info by id." + packageId); + handler.delete(packageId); + LOGGER.info(" delete package info end id." + packageId); + } + + /** + * update download count of package according package id. + * @param packageId package id + * @throws MarketplaceResourceException e + */ + public void updateDwonloadCount(String packageId) throws MarketplaceResourceException + { + LOGGER.info("Request received for Updating down load count for ID:" + packageId); + + //STEP 1: Get the Existing download count from DB + //------------------------------------------------- + ArrayList<PackageData> data = handler.queryByID(packageId); + if(data.isEmpty()) + { + LOGGER.info("Package Info not foun for ID:" + packageId); + return; + } + + //STEP 2: Increment download Count in DB + //-------------------------------------- + PackageData oPackageData = data.get(0); + int idownloadcount = oPackageData.getDownloadCount(); + oPackageData.setDownloadCount(++idownloadcount); + + handler.update(oPackageData); + + LOGGER.info("Download count updated to :" + idownloadcount); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/util/MarketplaceDbUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/util/MarketplaceDbUtil.java new file mode 100644 index 00000000..f9ec997d --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/util/MarketplaceDbUtil.java @@ -0,0 +1,48 @@ +/** + * 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.openo.vnfsdk.marketplace.db.util; + + +import com.google.gson.Gson; + +import java.util.UUID; + + +public class MarketplaceDbUtil { + + public static String generateId() { + return UUID.randomUUID().toString(); + } + + public static boolean isNotEmpty(String str) { + return str != null && !"".equals(str) && str.length() > 0; + } + + /** + * exchange object to string. + * @param obj Object + * @return string + */ + public static String objectToString(Object obj) { + Gson gson = new Gson(); + if (obj != null) { + return gson.toJson(obj); + } else { + return null; + } + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/BaseHandler.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/BaseHandler.java new file mode 100644 index 00000000..0b5b285a --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/BaseHandler.java @@ -0,0 +1,163 @@ +/** + * 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.openo.vnfsdk.marketplace.db.wrapper; + +import java.util.List; +import java.util.Map; + +import org.openo.vnfsdk.marketplace.db.entity.BaseData; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.exception.MarketplaceResourceException; +import org.openo.vnfsdk.marketplace.db.impl.MarketplaceDaoImpl; +import org.openo.vnfsdk.marketplace.db.inf.IMarketplaceDao; +import org.openo.vnfsdk.marketplace.db.util.MarketplaceDbUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + + + +/** + * an abstract class for NFV wrapper class. + * provide the common methods to process the CRUD rest request. + * + */ +public abstract class BaseHandler<T extends BaseData> { + private static final Logger logger = LoggerFactory.getLogger(BaseHandler.class); + + public Gson gson = new Gson(); + + /** + * create date. + * @param data data to create + * @param resouceType resouce type + * @return T + * @throws MarketplaceResourceException e1 + */ + @SuppressWarnings({"unchecked", "rawtypes"}) + public PackageData create(PackageData data, String resouceType) throws MarketplaceResourceException { + PackageData rtnData = null; + logger.info("BaseHandler:start create data.info:" + MarketplaceDbUtil.objectToString(data)); + try { +// check(data); + IMarketplaceDao dao = new MarketplaceDaoImpl(); + dao.savePackageData(data); + rtnData = data; + } catch (Exception e1) { + logger.error("BaseHandler:error while creating " + resouceType, e1); + // throw e1; + } + logger.info("BaseHandler:create data end.info:" + MarketplaceDbUtil.objectToString(data)); + return rtnData; + } + + /** + * delete data. + * @param data data to delete + * @param resouceType resource type + * @throws MarketplaceResourceException e1 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + public void delete(T data, String resouceType) throws MarketplaceResourceException { + logger.info("BaseHandler:start delete data.info:" + MarketplaceDbUtil.objectToString(data)); + IMarketplaceDao dao = new MarketplaceDaoImpl(); + dao.deletePackageData(((PackageData)data).getCsarId()); + logger.info("BaseHandler:delete data end"); + } + + /** + * query data. + * @param queryParam query parameter + * @param resouceType resource type + * @return T list + * @throws MarketplaceResourceException e1 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + public List<PackageData> query(Map<String, String> queryParam, String resouceType) + throws MarketplaceResourceException { + logger.info("BaseHandler:start query data .info:" + MarketplaceDbUtil.objectToString(queryParam)); + List<PackageData> datas = null; + IMarketplaceDao dao = new MarketplaceDaoImpl(); + datas = dao.getAllPackageData(); + logger.info("BaseHandler: query data end .info:" + MarketplaceDbUtil.objectToString(datas)); + return datas; + } + + /** + * union query. + * @param filter filter + * @param resouceType resource type + * @return T list + * @throws MarketplaceResourceException e1 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + public List<T> unionQuery(String filter, String resouceType) throws MarketplaceResourceException { + logger.info("BaseHandler:start union query data.fliter:" + filter); + List<T> datas = null; + /* try { + BaseDao dao = DaoManager.getInstance().getDao(resouceType); + datas = dao.unionQuery(filter); + + } catch (MarketplaceResourceException e1) { + logger.error("BaseHandler:error while union querying " + resouceType, e1); + throw e1; + }*/ + logger.info("BaseHandler:union query data end .info:" + MarketplaceDbUtil.objectToString(datas)); + return datas; + } + + /** + * union delete. + * @param filter filter + * @param resouceType resource type + * @return int + * @throws MarketplaceResourceException e1 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + public int unionDelete(String filter, String resouceType) throws MarketplaceResourceException { + logger.info("BaseHandler:start delete query data.fliter:" + filter); +// int num; + int num=0; + /*try { + BaseDao dao = DaoManager.getInstance().getDao(resouceType); + num = dao.unionDelete(filter); + + } catch (MarketplaceResourceException e1) { + logger.error("BaseHandler:error while union delete " + resouceType, e1); + throw e1; + }*/ + logger.info("BaseHandler:union delete data end .num:" + num); + return num; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + public void update(T data, String resouceType) throws MarketplaceResourceException { + logger.info("BaseHandler:start update data.info:" + MarketplaceDbUtil.objectToString(data)); + IMarketplaceDao dao = new MarketplaceDaoImpl(); + dao.updatePackageData((PackageData)data); + logger.info("update data end"); + } + + /** + * check if the related object id exists in the system. + * + * @param data data to check + * @throws MarketplaceResourceException e + */ + public abstract void check(T data) throws MarketplaceResourceException; + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/PackageHandler.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/PackageHandler.java new file mode 100644 index 00000000..a33e80a3 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/db/wrapper/PackageHandler.java @@ -0,0 +1,123 @@ +/** + * 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.openo.vnfsdk.marketplace.db.wrapper; + +import java.util.ArrayList; +import java.util.Map; + +import org.openo.vnfsdk.marketplace.db.common.MarketplaceResourceType; +import org.openo.vnfsdk.marketplace.db.common.Parameters; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.exception.MarketplaceResourceException; +import org.openo.vnfsdk.marketplace.db.impl.MarketplaceDaoImpl; +import org.openo.vnfsdk.marketplace.db.inf.IMarketplaceDao; +import org.openo.vnfsdk.marketplace.db.util.MarketplaceDbUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PackageHandler extends BaseHandler<PackageData> { + private static final Logger logger = LoggerFactory.getLogger(PackageHandler.class); + + /** + * create package data. + * @param packageData package data to create + * @return PackageData + * @throws MarketplaceResourceException e1 + */ + public PackageData create(PackageData packageData) throws MarketplaceResourceException { + logger.info("packageHandler:start create package info."); + PackageData data = null; + if (!MarketplaceDbUtil.isNotEmpty(packageData.getCsarId())) { + + logger.info("packageHandler:package info does not have csarid,generate UUID."); + String id = MarketplaceDbUtil.generateId(); + packageData.setCsarId(id); + } + Object result = create(packageData, MarketplaceResourceType.PACKAGE.name()); + if (result != null) { + data = (PackageData) result; + } else { + logger.info("packageHandler: query package info is null."); + } + logger.info("packageHandler: create package info end."); + return data; + } + + /** + * delete data. + * @param id package id + * @throws MarketplaceResourceException e + */ + public void delete(String id) throws MarketplaceResourceException { + logger.info("packageHandler:start delete package info."); + PackageData packageData = new PackageData(); + packageData.setCsarId(id); + delete(packageData, MarketplaceResourceType.PACKAGE.name()); + logger.info("packageHandler: delete package info end."); + } + + /** + * query package data by map. + * @param queryParam map data + * @return PackageData list + * @throws MarketplaceResourceException e + */ + public ArrayList<PackageData> query(Map<String, String> queryParam) + throws MarketplaceResourceException { + logger.info("packageHandler:start query package info."); + ArrayList<PackageData> data = new ArrayList<PackageData>(); + Object result = query(queryParam, MarketplaceResourceType.PACKAGE.name()); + if (result != null) { + data = (ArrayList<PackageData>) result; + } else { + logger.info("packageHandler: query package info is null."); + } + logger.info("packageHandler: query package info end."); + return data; + } + + /** + * query package data by map. + * @param queryParam map data + * @return PackageData list + * @throws MarketplaceResourceException e + */ + public ArrayList<PackageData> queryByID(String csarID) + throws MarketplaceResourceException { + logger.info("packageHandler:start query package info."); + ArrayList<PackageData> data = new ArrayList<PackageData>(); + logger.info("packageHandler:start query data .info:" + csarID); + IMarketplaceDao dao = new MarketplaceDaoImpl(); + Object result = dao.getPackageData(csarID); + if (result != null) { + data = (ArrayList<PackageData>) result; + } else { + logger.info("packageHandler: query package info is null."); + } + logger.info("packageHandler: query data end .info:" + MarketplaceDbUtil.objectToString(data)); + return data; + } + + public void update(PackageData oPackageData) throws MarketplaceResourceException{ + update(oPackageData, MarketplaceResourceType.PACKAGE.name()); + logger.info("packageHandler: update package info end."); + } + + @Override + public void check(PackageData packageData) throws MarketplaceResourceException { + + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarPackage.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarPackage.java new file mode 100644 index 00000000..8e8d8030 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarPackage.java @@ -0,0 +1,101 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public class CsarPackage { + private String id; + private String name; + private String createTime; + private String size; + private String status; + private String deletionPending; + private String format; + private String url; + private String type; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDeletionPending() { + return deletionPending; + } + + public void setDeletionPending(String deletionPending) { + this.deletionPending = deletionPending; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarQueryCondition.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarQueryCondition.java new file mode 100644 index 00000000..b1834f59 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/CsarQueryCondition.java @@ -0,0 +1,38 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CsarQueryCondition { + + private String csarId; + + private String name; + + private String provider; + + private String version; + + private Boolean deletionPending; + + private EnumType type; +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOnboardState.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOnboardState.java new file mode 100644 index 00000000..fb527c85 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOnboardState.java @@ -0,0 +1,30 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public enum EnumOnboardState { + onBoarded("onBoarded"), nonOnBoarded("non-onBoarded"); + + String value; + + EnumOnboardState(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationStatus.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationStatus.java new file mode 100644 index 00000000..8a972546 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationStatus.java @@ -0,0 +1,43 @@ +/* + * 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.vnfsdk.marketplace.entity; + +public enum EnumOperationStatus { + + SUCCESS("SUCCESS", 0), NOTSTARTED("NOTSTARTED", 1),FAILED("FAILED", -1), INPROGRESS("INPROGRESS", 2); + + private String name; + + private int index; + + + EnumOperationStatus(final String name, final int index) { + this.name = name; + this.index = index; + } + + + public int getIndex() { + return index; + } + + + public String getName() { + return name; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationalState.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationalState.java new file mode 100644 index 00000000..cd42e722 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumOperationalState.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public enum EnumOperationalState { + Enabled, Disabled +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumProcessState.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumProcessState.java new file mode 100644 index 00000000..a4c08ab3 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumProcessState.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public enum EnumProcessState { + normal, onBoarding, onBoardFailed, deleting, deleteFailed +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumResult.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumResult.java new file mode 100644 index 00000000..462e62b7 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumResult.java @@ -0,0 +1,62 @@ +/* + * 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.vnfsdk.marketplace.entity; + +/** + * enum of the result type + * + * @since crossdomain 0.5 + */ +public enum EnumResult { + + SUCCESS("SUCCESS", 0), FAIL("FAIL", -1); + + private String name; + + private int index; + + /** + * constructor + * + * @param name name + * @param index index + * @since crossdomain 0.5 + */ + EnumResult(final String name, final int index) { + this.name = name; + this.index = index; + } + + /** + * Gets index. + * + * @return Value of index. + */ + public int getIndex() { + return index; + } + + /** + * Gets name. + * + * @return Value of name. + */ + public String getName() { + return name; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumType.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumType.java new file mode 100644 index 00000000..5d823183 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumType.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public enum EnumType { + GSAR, SSAR, NSAR, NFAR +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumUsageState.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumUsageState.java new file mode 100644 index 00000000..91ae00c6 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/EnumUsageState.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public enum EnumUsageState { + InUse, NotInUse +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/VnfPackage.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/VnfPackage.java new file mode 100644 index 00000000..013946bf --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/VnfPackage.java @@ -0,0 +1,100 @@ +/** + * 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.openo.vnfsdk.marketplace.entity; + +public class VnfPackage { + private String vnfPackageId; + private String name; + private String version; + private String provider; + private String vnfd; + private EnumOperationalState operationalState = EnumOperationalState.Disabled; + private EnumUsageState usageState = EnumUsageState.InUse; + private String deletionPending; + private String vnfPackageUrl; + + public String getVnfPackageId() { + return vnfPackageId; + } + + public void setVnfPackageId(String vnfPackageId) { + this.vnfPackageId = vnfPackageId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getVnfd() { + return vnfd; + } + + public void setVnfd(String vnfd) { + this.vnfd = vnfd; + } + + public EnumOperationalState getOperationalState() { + return operationalState; + } + + public void setOperationalState(EnumOperationalState operationalState) { + this.operationalState = operationalState; + } + + public EnumUsageState getUsageState() { + return usageState; + } + + public void setUsageState(EnumUsageState usageState) { + this.usageState = usageState; + } + + public String getVnfPackageUrl() { + return vnfPackageUrl; + } + + public void setVnfPackageUrl(String vnfPackageUrl) { + this.vnfPackageUrl = vnfPackageUrl; + } + + public String getDeletionPending() { + return deletionPending; + } + + public void setDeletionPending(String deletionPending) { + this.deletionPending = deletionPending; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/request/PackageBasicInfo.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/request/PackageBasicInfo.java new file mode 100644 index 00000000..8fce7b8a --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/request/PackageBasicInfo.java @@ -0,0 +1,70 @@ +/** + * 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.openo.vnfsdk.marketplace.entity.request; + +import org.openo.vnfsdk.marketplace.entity.EnumType; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PackageBasicInfo { + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public EnumType getType() { + return type; + } + + public void setType(EnumType type) { + this.type = type; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + private String provider; + + private EnumType type; + + private String version; + + private String format; + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/CsarFileUriResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/CsarFileUriResponse.java new file mode 100644 index 00000000..7b4bfb4e --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/CsarFileUriResponse.java @@ -0,0 +1,47 @@ +/** + * 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.openo.vnfsdk.marketplace.entity.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CsarFileUriResponse { + + public String getDownloadUri() { + return downloadUri; + } + + public void setDownloadUri(String downloadUri) { + this.downloadUri = downloadUri; + } + + public String getLocalPath() { + return localPath; + } + + public void setLocalPath(String localPath) { + this.localPath = localPath; + } + + private String downloadUri; + + private String localPath; +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageMeta.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageMeta.java new file mode 100644 index 00000000..66460f15 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageMeta.java @@ -0,0 +1,190 @@ +/** + * 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.openo.vnfsdk.marketplace.entity.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PackageMeta { + + private String csarId; + + private String name; + + private String downloadUri; + + private String report; + + private String size; + + private String version; + + private String provider; + + private String type; + + private String format; + + private boolean deletionPending; + + private String createTime; + + private String modifyTime; + + private String shortDesc; + + private int downloadCount; + + private String details; + + private String remarks; + + public String getCsarId() { + return csarId; + } + + public void setCsarId(String csarId) { + this.csarId = csarId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDownloadUri() { + return downloadUri; + } + + public void setDownloadUri(String downloadUri) { + this.downloadUri = downloadUri; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public boolean isDeletionPending() { + return deletionPending; + } + + public void setDeletionPending(boolean deletionPending) { + this.deletionPending = deletionPending; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getModifyTime() { + return modifyTime; + } + + public void setModifyTime(String modifyTime) { + this.modifyTime = modifyTime; + } + + + + public String getShortDesc() { + return shortDesc; + } + + public void setShortDesc(String shortDesc) { + this.shortDesc = shortDesc; + } + + public String getDetails() { + return details; + } + + public void setDetails(String details) { + this.details = details; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getReport() { + return report; + } + + public void setReport(String report) { + this.report = report; + } + + + public int getDownloadCount() { + return downloadCount; + } + + public void setDownloadCount(int downloadCount) { + this.downloadCount = downloadCount; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageResponse.java new file mode 100644 index 00000000..c2ce36d5 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/PackageResponse.java @@ -0,0 +1,57 @@ +/** + * 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.openo.vnfsdk.marketplace.entity.response; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class PackageResponse { + private static final int STATUS_SUCCESS = 1; + + private int status; + private String message; + private String packageName; + private String processId; + private String exception; + private String reportPath; + + public String getReportPath() { + return reportPath; +} + +public void setReportPath(String reportPath) { + this.reportPath = reportPath; +} + +public boolean isSuccess() { + return this.status == STATUS_SUCCESS; + } + + @Override + public String toString() { + return "DeployPackageResponse [status=" + status + ", message=" + message + ", packageName=" + + packageName + ", processId=" + processId + ", exception=" + exception + "]"; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/UploadPackageResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/UploadPackageResponse.java new file mode 100644 index 00000000..b6811127 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/entity/response/UploadPackageResponse.java @@ -0,0 +1,48 @@ +/** + * 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.openo.vnfsdk.marketplace.entity.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UploadPackageResponse { + + private String csarId; + + private String functestReport; + + public String getCsarId() { + return csarId; + } + + public void setCsarId(String csarId) { + this.csarId = csarId; + } + + public String getFunctestReport() { + return functestReport; + } + + public void setFunctestReport(String functestReport) { + this.functestReport = functestReport; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManager.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManager.java new file mode 100644 index 00000000..8ecd7587 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManager.java @@ -0,0 +1,35 @@ +/** + * 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.openo.vnfsdk.marketplace.filemanage; + + +public interface FileManager { + + /** + * package upload api. + * @param srcPath source path + * @param dstPath/packageType/provider/packageName/version + * @return boolean + */ + boolean upload(String srcPath, String dstPath); + + boolean download(String srcPath, String dstPath); + + boolean delete(String srcPath); + + //ArrayList<FileLink> queryWorkFlow(String path); + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerFactory.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerFactory.java new file mode 100644 index 00000000..036440d0 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerFactory.java @@ -0,0 +1,53 @@ +/** + * 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.openo.vnfsdk.marketplace.filemanage; + +import org.openo.vnfsdk.marketplace.filemanage.http.HttpFileManagerImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FileManagerFactory { + private static final Logger logger = LoggerFactory.getLogger(FileManagerFactory.class); + + private static FileManager getHttpFileManager() { + return new HttpFileManagerImpl(); + } + + /** + * create file manager. + * @return FileManager + */ + public static FileManager createFileManager() { + switch (getType()) { + case http: + return getHttpFileManager(); + case ftp: + return null; + default: + return getHttpFileManager(); + } + } + + private static FileManagerType getType() { + String type = System.getenv("useFtp"); + logger.info("read environment varibale uesFtp:" + type); + if (type != null && "true".equals(type)) { + return FileManagerType.ftp; + } else { + return FileManagerType.http; + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerType.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerType.java new file mode 100644 index 00000000..046b6b24 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/FileManagerType.java @@ -0,0 +1,23 @@ +/** + * 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.openo.vnfsdk.marketplace.filemanage; + +public enum FileManagerType { + ftp, http; + public static FileManagerType getType(String type) { + return valueOf(type); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/HttpFileManagerImpl.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/HttpFileManagerImpl.java new file mode 100644 index 00000000..b28b5ff7 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/HttpFileManagerImpl.java @@ -0,0 +1,64 @@ +/** + * 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.openo.vnfsdk.marketplace.filemanage.http; + +import java.io.File; +import java.io.IOException; + +import org.openo.vnfsdk.marketplace.filemanage.FileManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class HttpFileManagerImpl implements FileManager { + private static final Logger LOGGER = LoggerFactory.getLogger(HttpFileManagerImpl.class); + + public boolean upload(String srcPath, String dstPath) { + boolean flag = true; + LOGGER.info("start upload file.srcPath:" + srcPath + " dstPath" + dstPath); + File srcFile = new File(srcPath); + if (!srcFile.exists()) { + LOGGER.error("src file not exist!"); + return false; + } + // File dstFile = new File(ToolUtil.getHttpServerPath() + dstPath); + // LOGGER.info("dstFile AbsolutePath:" + dstFile.getAbsolutePath()); + String targetDir = ToolUtil.getHttpServerAbsolutePath() + dstPath; + try { + ToolUtil.copyDirectory(srcPath, targetDir, true); + } catch (IOException e1) { + flag = false; + LOGGER.error("copy file failed.errorMsg:" + e1.getMessage()); + } + LOGGER.info("upload file success!"); + return flag; + } + + public boolean download(String srcPath, String dstPath) { + // TODO Auto-generated method stub + return false; + } + + public boolean delete(String srcPath) { + boolean flag = true; + LOGGER.info("start delete file from http server.srcPath:" + srcPath); + flag = ToolUtil.deleteDir(new File(ToolUtil.getHttpServerAbsolutePath() + srcPath)); + LOGGER.info("delete file from http server end.flag:" + flag); + return flag; + } + + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/ToolUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/ToolUtil.java new file mode 100644 index 00000000..b4f63883 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/filemanage/http/ToolUtil.java @@ -0,0 +1,198 @@ +/** + * 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.openo.vnfsdk.marketplace.filemanage.http; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.openo.vnfsdk.marketplace.common.HttpServerPathConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class ToolUtil { + private static final Logger LOGGER = LoggerFactory.getLogger(ToolUtil.class); + + /** + * copy from directory. + * @param srcDirName source directory name + * @param destDirName destination directory name + * @param overlay overwrite or not + * @return boolean + * @throws IOException e + */ + public static boolean copyDirectory(String srcDirName, String destDirName, boolean overlay) + throws IOException { + File srcDir = new File(srcDirName); + if (!srcDir.exists()) { + return false; + } else if (!srcDir.isDirectory()) { + return false; + } + + if (!destDirName.endsWith(File.separator)) { + destDirName = destDirName + File.separator; + } + File destDir = new File(destDirName); + if (destDir.exists()) { + if (overlay) { + new File(destDirName).delete(); + } else { + return false; + } + } else { + if (!destDir.mkdirs()) { + return false; + } + } + boolean flag = true; + File[] files = srcDir.listFiles(); + for (int i = 0; i < files.length; i++) { + if (files[i].isFile()) { + flag = copyFile(files[i].getAbsolutePath(), destDirName + files[i].getName(), true); + if (!flag) { + break; + } + } else if (files[i].isDirectory()) { + flag = copyDirectory(files[i].getAbsolutePath(), destDirName + files[i].getName(), overlay); + if (!flag) { + break; + } + } + } + if (!flag) { + String message = "Copy catagory " + srcDirName + " to " + destDirName + " failed!"; + LOGGER.error(message); + return false; + } else { + return true; + } + } + + /** + * copy file. + * @param srcFileName source file name + * @param destFileName target file name + * @param overlay overwrite or not + * @return boolean + */ + public static boolean copyFile(String srcFileName, String destFileName, boolean overlay) { + File srcFile = new File(srcFileName); + + if (!srcFile.exists()) { + String message = "Source file : " + srcFileName + " not exist !"; + LOGGER.error(message); + return false; + } else if (!srcFile.isFile()) { + return false; + } + + File destFile = new File(destFileName); + if (destFile.exists()) { + if (overlay) { + new File(destFileName).delete(); + } + } else { + if (!destFile.getParentFile().exists()) { + if (!destFile.getParentFile().mkdirs()) { + return false; + } + } + } + + int byteread = 0; + InputStream in = null; + OutputStream out = null; + + try { + in = new FileInputStream(srcFile); + out = new FileOutputStream(destFile); + byte[] buffer = new byte[1024]; + + while ((byteread = in.read(buffer)) != -1) { + out.write(buffer, 0, byteread); + } + return true; + } catch (FileNotFoundException e1) { + return false; + } catch (IOException e1) { + return false; + } finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + /** + * create directory. + * @param destDirName target directory name + * @return boolean + */ + public static boolean createDir(String destDirName) { + File dir = new File(destDirName); + if (dir.exists()) { + dir.delete(); + } + if (!destDirName.endsWith(File.separator)) { + destDirName = destDirName + File.separator; + } + if (dir.mkdirs()) { + return true; + } else { + return false; + } + } + + public static String getHttpServerAbsolutePath() { + return Thread.currentThread().getContextClassLoader().getResource("/").getPath() + HttpServerPathConfig.getHttpServerPath(); + } + + /** + * delete directory. + * @param dir file to delete + * @return boolean + */ + public static boolean deleteDir(File dir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + return dir.delete(); + } + + public static String getAppDeployPath() + { + return Thread.currentThread().getContextClassLoader().getResource("/").getPath(); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumPackageFormat.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumPackageFormat.java new file mode 100644 index 00000000..485e15da --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumPackageFormat.java @@ -0,0 +1,26 @@ +/** + * 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.openo.vnfsdk.marketplace.model.parser; + +/** + * enum data. + * + * @author 10189609 + * + */ +public enum EnumPackageFormat { + TOSCA_XML, TOSCA_YAML +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumTemplateType.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumTemplateType.java new file mode 100644 index 00000000..e634aea7 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/model/parser/EnumTemplateType.java @@ -0,0 +1,20 @@ +/** + * 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.openo.vnfsdk.marketplace.model.parser; + +public enum EnumTemplateType { + NS, VNF +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/AppServletContextListener.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/AppServletContextListener.java new file mode 100644 index 00000000..9ea074cb --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/AppServletContextListener.java @@ -0,0 +1,37 @@ +/* + * 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.vnfsdk.marketplace.msb; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +public class AppServletContextListener implements ServletContextListener +{ + + public void contextInitialized(ServletContextEvent eventData) + { + MsbRegister.handleMsbRegistration(); + } + + public void contextDestroyed(ServletContextEvent eventData) + { + MsbRegister.handleMsbUnRegistration(); + } +} + + + diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetails.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetails.java new file mode 100644 index 00000000..ab4190ee --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetails.java @@ -0,0 +1,57 @@ +/** + * 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.openo.vnfsdk.marketplace.msb; + +public class MsbDetails +{ + private MsbServer defaultServer; + private String ConnectTimeout; + private String thread; + private String idletimeout; + private String timeout; + + public MsbServer getDefaultServer() { + return defaultServer; + } + public void setDefaultServer(MsbServer defaultServer) { + this.defaultServer = defaultServer; + } + public String getConnectTimeout() { + return ConnectTimeout; + } + public void setConnectTimeout(String connectTimeout) { + ConnectTimeout = connectTimeout; + } + public String getThread() { + return thread; + } + public void setThread(String thread) { + this.thread = thread; + } + public String getIdletimeout() { + return idletimeout; + } + public void setIdletimeout(String idletimeout) { + this.idletimeout = idletimeout; + } + public String getTimeout() { + return timeout; + } + public void setTimeout(String timeout) { + this.timeout = timeout; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetailsHolder.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetailsHolder.java new file mode 100644 index 00000000..8c1d86ab --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbDetailsHolder.java @@ -0,0 +1,49 @@ +/** + * 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.openo.vnfsdk.marketplace.msb; + +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MsbDetailsHolder +{ + private static final Logger logger = LoggerFactory.getLogger(MsbDetailsHolder.class); + private static final String MSB_DETAILS_PATH = "etc/conf/restclient.json"; + private static MsbDetails msbDetails = null; + + private MsbDetailsHolder(){ + } + + public static synchronized MsbDetails getMsbDetails() + { + MsbDetailsHolder.loadMsbDetails(); + return msbDetails; + } + + private static synchronized void loadMsbDetails () + { + if(null != msbDetails) { + return; + } + + msbDetails = (MsbDetails)FileUtil.readJsonDatafFromFile(MSB_DETAILS_PATH, MsbDetails.class); + if (null == msbDetails) + { + logger.error("Failed to Load MSB Details !!!"); + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegister.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegister.java new file mode 100644 index 00000000..6ade1414 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegister.java @@ -0,0 +1,80 @@ +/* + * 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.vnfsdk.marketplace.msb; + +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MsbRegister +{ + private static final Logger logger = LoggerFactory.getLogger(MsbRegister.class); + + /** + * Interface top handle MSB Registration + */ + public static void handleMsbRegistration() + { + logger.info("VNF-SDK Market Place microservice register start."); + int retry = 0; + while(CommonConstant.MsbRegisterCode.MSDB_REGISTER_RETRIES >= retry) + { + int retCode = MsbRegistration.getInstance().register(); + if(CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS == retCode) + { + logger.info("microservice register failed, MSB Register File Not Exists !"); + break; + } + + if(CommonConstant.MsbRegisterCode.MSDB_REGISTER_SUCESS != retCode) + { + logger.warn("microservice register failed, try again after(ms):" + CommonConstant.MsbRegisterCode.MSDB_REGISTER_RETRY_SLEEP); + threadSleep(CommonConstant.MsbRegisterCode.MSDB_REGISTER_RETRY_SLEEP); + } + else + { + logger.info("microservice register success !"); + break; + } + + retry++; + logger.info("VNF-SDK Market Place microservice register [retry count]:" + retry); + } + logger.info("VNF-SDK Market Place microservice register end."); + } + + public static void handleMsbUnRegistration() + { + logger.info("VNF-SDK Market Place microservice handleMsbUnRegistration Start."); + MsbRegistration.getInstance().unRegister(); + logger.info("VNF-SDK Market Place microservice handleMsbUnRegistration end."); + } + + private static void threadSleep(int second) + { + try + { + Thread.sleep(second); + } + catch(InterruptedException error) + { + logger.error("thread sleep error.errorMsg:", error); + Thread.currentThread().interrupt(); + } + } +} + diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegistration.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegistration.java new file mode 100644 index 00000000..e1f39084 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbRegistration.java @@ -0,0 +1,217 @@ +/* + * 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.vnfsdk.marketplace.msb; + +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.MessageFormat; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.codehaus.jackson.map.ObjectMapper; +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.JsonUtil; +import org.openo.vnfsdk.marketplace.rest.RestResponse; +import org.openo.vnfsdk.marketplace.rest.RestfulClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class MsbRegistration { + private static final Logger LOGGER = LoggerFactory.getLogger(MsbRegistration.class); + + private static MsbRegistration oMsbRegistration = new MsbRegistration(); + + private static final String MSB_REGISTION_FILE = "etc/microservice/marketplace_rest.json"; + private static final String MSB_REGISTION_URL = "/openoapi/microservices/v1/services?createOrUpdate=false"; + private static final String MSB_UN_REGISTION_URL = "/openoapi/microservices/v1/services/{0}/version/{1}/nodes/{2}/{3}"; + private static final String NODES = "nodes"; + private static final String IP = "ip"; + private static final String PORT = "port"; + private static final String SERVICE_NAME = "serviceName"; + private static final String VERSION = "version"; + + private boolean bRegistrationStatus = false; + + private MsbRegistration () { + } + + public static MsbRegistration getInstance() + { + return oMsbRegistration; + } + /** + * Interface to handle MSB Registration + * @return + */ + public int register() + { + File file = new File(MSB_REGISTION_FILE); + if(!file.exists()) + { + LOGGER.info("Stop registering as can't find msb registion file:" + file.getAbsolutePath()); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS; + } + + Map<?, ?> msbRegistionBodyMap = getMsbRegistrationData(); + if(null == msbRegistionBodyMap) + { + LOGGER.info("Reading data from msb registion file failed:" + file.getAbsolutePath()); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS; + } + + LOGGER.info("Registering body: " + JsonUtil.toJson(msbRegistionBodyMap)); + + bRegistrationStatus = sendRequest(msbRegistionBodyMap); + + return bRegistrationStatus + ? CommonConstant.MsbRegisterCode.MSDB_REGISTER_SUCESS + : CommonConstant.MsbRegisterCode.MSDB_REGISTER_FAILED; + } + + private Map<?, ?> getMsbRegistrationData() + { + Map<?, ?> msbRegistionBodyMap = null; + try + { + ObjectMapper mapper = new ObjectMapper(); + byte[] bytes = Files.readAllBytes(Paths.get(MSB_REGISTION_FILE)); + msbRegistionBodyMap = mapper.readValue(bytes, Map.class); + + replaceLocalIp(msbRegistionBodyMap); + } + catch(IOException e) + { + LOGGER.error("Failed to get microservice bus registration body, " + e); + } + return msbRegistionBodyMap; + } + + /** + * Send MSB Registration request + * @param msbRegistionBodyMap + * @return + */ + private boolean sendRequest(Map<?, ?> msbRegistionBodyMap) + { + LOGGER.info("Start registering to microservice bus"); + String rawData = JsonUtil.toJson(msbRegistionBodyMap); + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) { + LOGGER.info("MSB Details is NULL , Registration Failed !!!"); + return false; + } + RestResponse oResponse = RestfulClient.sendPostRequest(oMsbDetails.getDefaultServer().getHost(), + oMsbDetails.getDefaultServer().getPort(), + MSB_REGISTION_URL, rawData); + + if(null == oResponse){ + LOGGER.info("Null Unregister Response for " + MSB_REGISTION_URL); + return false; + } + LOGGER.info("Response Code Received for MBS Registration:" + oResponse.getStatusCode()); + return isSuccess(oResponse.getStatusCode()) ? true : false; + } + + public int unRegister() + { + if(!bRegistrationStatus){ + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_SUCESS; + } + + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails){ + LOGGER.info("MSB Details is NULL , Registration Failed !!!"); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FAILED; + } + + File file = new File(MSB_REGISTION_FILE); + if(!file.exists()){ + LOGGER.info("Stop registering as can't find msb registion file:" + file.getAbsolutePath()); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS; + } + + Map<?, ?> msbRegistionBodyMap = getMsbRegistrationData(); + if(null == msbRegistionBodyMap){ + LOGGER.info("Reading data from msb registion file failed:" + file.getAbsolutePath()); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS; + } + + String serviceName = (String)msbRegistionBodyMap.get(SERVICE_NAME); + String version = (String)msbRegistionBodyMap.get(VERSION); + + @SuppressWarnings("unchecked") + List<Map<String, String>> nodes = (List<Map<String, String>>)msbRegistionBodyMap.get(NODES); + if((null == serviceName ) || (null == version ) || (null == nodes )) + { + LOGGER.info("Readed data is Invalid from msb registion file:" + file.getAbsolutePath()); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FILE_NOT_EXISTS; + } + + Map<String, String> node = nodes.get(0); + String ip = node.get(IP); + String port = node.get(PORT); + + String url = MessageFormat.format(MSB_UN_REGISTION_URL, serviceName, version, ip, port); + LOGGER.info("Start Unregister to microservice bus, url: " + url); + + RestResponse oResponse = RestfulClient.delete(oMsbDetails.getDefaultServer().getHost(), + Integer.parseInt(oMsbDetails.getDefaultServer().getPort()),url); + + if(null == oResponse) { + LOGGER.info("Null Unregister Response for " + url); + return CommonConstant.MsbRegisterCode.MSDB_REGISTER_FAILED; + } + LOGGER.info("Unregister Response " + oResponse.getStatusCode()); + return isSuccess(oResponse.getStatusCode()) ? + CommonConstant.MsbRegisterCode.MSDB_REGISTER_SUCESS : + CommonConstant.MsbRegisterCode.MSDB_REGISTER_FAILED; + } + + @SuppressWarnings("unchecked") + private void replaceLocalIp(Map<?, ?> msbRegistionBodyMap) + { + List<Map<String, String>> nodes = (List<Map<String, String>>)msbRegistionBodyMap.get(NODES); + Map<String, String> node = nodes.get(0); + if(StringUtils.isNotEmpty(node.get(IP))) { + return; + } + + try + { + InetAddress addr = InetAddress.getLocalHost(); + String ipAddress = addr.getHostAddress(); + node.put(IP, ipAddress); + + LOGGER.info("Local ip: " + ipAddress); + } + catch(UnknownHostException e) + { + LOGGER.error("Unable to get IP address, " + e); + } + } + + private boolean isSuccess(int httpCode) + { + return (httpCode == 200 || httpCode == 201) ? true : false; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbServer.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbServer.java new file mode 100644 index 00000000..fa3bcb02 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/msb/MsbServer.java @@ -0,0 +1,35 @@ +/** + * 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.openo.vnfsdk.marketplace.msb; + +public class MsbServer +{ + private String host; + private String port; + + public String getHost() { + return host; + } + public void setHost(String host) { + this.host = host; + } + public String getPort() { + return port; + } + public void setPort(String port) { + this.port = port; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingOperResult.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingOperResult.java new file mode 100644 index 00000000..68d85987 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingOperResult.java @@ -0,0 +1,33 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; +public class OnBoardingOperResult +{ + private String operId; + private int status; + public String getOperId() { + return operId; + } + public void setOperId(String operId) { + this.operId = operId; + } + public int getStatus() { + return status; + } + public void setStatus(int status) { + this.status = status; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingResult.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingResult.java new file mode 100644 index 00000000..52bfe100 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingResult.java @@ -0,0 +1,60 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +import java.util.List; + +public class OnBoardingResult +{ + private String csarId; + private String operTypeId; + private boolean operFinished; + private int operStatus; + + private List<OnBoardingOperResult> operResult; + + public String getOperTypeId() { + return operTypeId; + } + public void setOperTypeId(String operTypeId) { + this.operTypeId = operTypeId; + } + public boolean isOperFinished() { + return operFinished; + } + public void setOperFinished(boolean operFinished) { + this.operFinished = operFinished; + } + + public List<OnBoardingOperResult> getOperResult() { + return operResult; + } + public void setOperResult(List<OnBoardingOperResult> operResult) { + this.operResult = operResult; + } + public int getOperStatus() { + return operStatus; + } + public void setOperStatus(int operStatus) { + this.operStatus = operStatus; + } + public String getCsarId() { + return csarId; + } + public void setCsarId(String csarId) { + this.csarId = csarId; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingStep.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingStep.java new file mode 100644 index 00000000..b8a18085 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingStep.java @@ -0,0 +1,44 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +import java.util.List; + +public class OnBoardingStep +{ + private String operTypeName; + private String operTypeId; + private List<OperationDetails> oper; + + public String getOperTypeName() { + return operTypeName; + } + public void setOperTypeName(String operTypeName) { + this.operTypeName = operTypeName; + } + public String getOperTypeId() { + return operTypeId; + } + public void setOperTypeId(String operTypeId) { + this.operTypeId = operTypeId; + } + public List<OperationDetails> getOper() { + return oper; + } + public void setOper(List<OperationDetails> oper) { + this.oper = oper; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingSteps.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingSteps.java new file mode 100644 index 00000000..24410e86 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoardingSteps.java @@ -0,0 +1,32 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +import java.util.List; + +public class OnBoardingSteps +{ + private List<OnBoardingStep> operTypeList; + + public List<OnBoardingStep> getOperTypeList() { + return operTypeList; + } + + public void setOperTypeList(List<OnBoardingStep> operTypeList) { + this.operTypeList = operTypeList; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoradingRequest.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoradingRequest.java new file mode 100644 index 00000000..622c1731 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OnBoradingRequest.java @@ -0,0 +1,49 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +public class OnBoradingRequest { + private String csarId; + private String packageName; + private String packagePath; + private String csarIdCatalouge; + + public String getPackagePath() { + return packagePath; + } + public void setPackagePath(String packagePath) { + this.packagePath = packagePath; + } + public String getCsarId() { + return csarId; + } + public void setCsarId(String csarId) { + this.csarId = csarId; + } + public String getPackageName() { + return packageName; + } + public void setPackageName(String packageName) { + this.packageName = packageName; + } + public String getCsarIdCatalouge() { + return csarIdCatalouge; + } + public void setCsarIdCatalouge(String csarIdCatalouge) { + this.csarIdCatalouge = csarIdCatalouge; + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationDetails.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationDetails.java new file mode 100644 index 00000000..e8017320 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationDetails.java @@ -0,0 +1,34 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +public class OperationDetails +{ + private String operId; + private String operName; + public String getOperId() { + return operId; + } + public void setOperId(String operId) { + this.operId = operId; + } + public String getOperName() { + return operName; + } + public void setOperName(String operName) { + this.operName = operName; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationResult.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationResult.java new file mode 100644 index 00000000..af7a33ae --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/OperationResult.java @@ -0,0 +1,60 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +import java.util.List; + +public class OperationResult +{ + private String csarId; + private String operTypeId; + private boolean operFinished; + private int operStatus; + + private List<OnBoardingOperResult> operResult; + + public String getOperTypeId() { + return operTypeId; + } + public void setOperTypeId(String operTypeId) { + this.operTypeId = operTypeId; + } + public boolean isOperFinished() { + return operFinished; + } + public void setOperFinished(boolean operFinished) { + this.operFinished = operFinished; + } + + public List<OnBoardingOperResult> getOperResult() { + return operResult; + } + public void setOperResult(List<OnBoardingOperResult> operResult) { + this.operResult = operResult; + } + public int getOperStatus() { + return operStatus; + } + public void setOperStatus(int operStatus) { + this.operStatus = operStatus; + } + public String getCsarId() { + return csarId; + } + public void setCsarId(String csarId) { + this.csarId = csarId; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/ResultKey.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/ResultKey.java new file mode 100644 index 00000000..117325b9 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/entity/ResultKey.java @@ -0,0 +1,41 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.entity; + +public class ResultKey +{ + private String csarId; + private String operTypeId; + private String key; + public String getCsarId() { + return csarId; + } + public void setCsarId(String csarId) { + this.csarId = csarId; + } + public String getOperTypeId() { + return operTypeId; + } + public void setOperTypeId(String operTypeId) { + this.operTypeId = operTypeId; + } + public String getKey() { + return key; + } + public void setKey(String key) { + this.key = key; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestExceutor.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestExceutor.java new file mode 100644 index 00000000..336a40f0 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestExceutor.java @@ -0,0 +1,220 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.functiontest; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.openo.baseservice.roa.util.restclient.RestfulResponse; +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.msb.MsbDetails; +import org.openo.vnfsdk.marketplace.msb.MsbDetailsHolder; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.rest.RestConstant; +import org.openo.vnfsdk.marketplace.rest.RestResponse; +import org.openo.vnfsdk.marketplace.rest.RestfulClient; +import org.openo.vnfsdk.marketplace.rest.RestfulUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FunctionTestExceutor +{ + private static final Logger logger = LoggerFactory.getLogger(FunctionTestExceutor.class); + + private FunctionTestExceutor() + {} + + /** + * Interface to Send Request to Start Function test + * @param onBoradFuncTestReq + * @return + */ + public static String execFunctionTest(OnBoradingRequest onBoradFuncTestReq) + { + String packagePath = onBoradFuncTestReq.getPackagePath() + File.separator + onBoradFuncTestReq.getPackageName(); + logger.info("Package file path Function test:" + packagePath); + + String funcTestId = null; + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) + { + logger.error("Failed to get MSB details during execFunctionTest !!!"); + return funcTestId; + } + + FileInputStream ifs = null; + InputStream inStream = null; + + try + { + ifs = new FileInputStream(packagePath); + inStream = new BufferedInputStream(ifs); + + //IP and Port needs to be configured !!! + RestResponse rsp = RestfulClient.post(oMsbDetails.getDefaultServer().getHost(), + Integer.parseInt(oMsbDetails.getDefaultServer().getPort()), + CommonConstant.functionTest.FUNCTEST_URL,buildRequest(inStream)); + if(!checkValidResponse(rsp)) + { + return funcTestId; + } + + logger.error("Response for Function Test :" , rsp.getResult()); + funcTestId = rsp.getResult(); + return funcTestId.replaceAll("\"", ""); + } + catch (FileNotFoundException exp) + { + logger.error("Fine not fond Exception for file:" , onBoradFuncTestReq.getPackagePath()); + logger.error("Fine not fond Exception for :" , exp); + } + finally + { + FileUtil.closeInputStream(inStream); + FileUtil.closeFileStream(ifs); + } + return funcTestId; + } + + /** + * Interface to get Function Test Results + * @param key + * @return + */ + public static String getTestResultsByFuncTestKey(String key) + { + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) + { + logger.error("Failed to get MSB details during getTestResultsByFuncTestKey !!!"); + return null; + } + + logger.info("getTestResultsByFuncTestKey for Function Test Results for :" + key); + RestResponse rspGet = RestfulClient.get(oMsbDetails.getDefaultServer().getHost(), + Integer.parseInt(oMsbDetails.getDefaultServer().getPort()), + CommonConstant.functionTest.FUNCTEST_RESULT_URL + key); + if(!checkValidResponse(rspGet)) + { + logger.error("Failed to convert String Json Response to TestResults list:" + rspGet.getResult()); + return null; + } + logger.info("Function Test Results for Key:" + key + "Response:" + rspGet.getResult()); + return rspGet.getResult(); + } + + /** + * Interface to get Function Test Results + * @param key + * @return + */ + public static String executeFunctionTest(String strJsonRequest) + { + logger.info("executeFunctionTest Test request Received:" + strJsonRequest); + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) + { + logger.error("Failed to get MSB details during getTestResultsByFuncTestKey !!!"); + return null; + } + + logger.info("getTestResultsByFuncTestKey for Function Test Results for :" + strJsonRequest); + RestResponse rspGet = RestfulClient.sendPostRequest(oMsbDetails.getDefaultServer().getHost(), + oMsbDetails.getDefaultServer().getPort(), + CommonConstant.functionTest.FUNCTEST_RESULT_URL, + strJsonRequest); + if(!checkValidResponse(rspGet)) + { + logger.error("Failed to convert String Json Response to TestResults list:" + rspGet.getResult()); + return null; + } + logger.info("executeFunctionTest Function Test Result: " + rspGet.getResult()); + return rspGet.getResult(); + } + + /** + * Interface to get Function Test Results + * @param key + * @return + */ + public static String getTestResultsByFuncTestKeyMsb(String key) + { + logger.info("getTestResultsByFuncTestKey for Function Test Results for :" + key); + + Map<String, String> paramsMap = new HashMap<String, String>(); + paramsMap.put(CommonConstant.HttpContext.URL, CommonConstant.functionTest.FUNCTEST_RESULT_URL + key); + paramsMap.put(CommonConstant.HttpContext.METHOD_TYPE, CommonConstant.MethodType.GET); + + RestfulResponse response = RestfulUtil.sendRestRequest(paramsMap, null, null); + if(!checkValidRestResponse(response)) + { + logger.error("Respone for getTestResultsByFuncTestKeyMsb is not valid !!!"); + return null; + } + + if(null != response.getResponseContent()) + { + logger.info("Function Test Results via MSB for Key:" + key + "Response:" + response.getResponseContent()); + } + else + { + logger.info("NULL Function Test Results via MSB for Key:" + key); + } + return response.getResponseContent(); + } + + /** + * Check Response is Valid + * @param rsp + * @return + */ + private static boolean checkValidResponse(RestResponse rsp) + { + if (rsp.getStatusCode() == null || rsp.getResult() == null + || (RestConstant.RESPONSE_CODE_200 != rsp.getStatusCode() && RestConstant.RESPONSE_CODE_201 != rsp.getStatusCode())) + { + return false; + } + return true; + } + + private static boolean checkValidRestResponse(RestfulResponse rsp) + { + if ((rsp == null) || (RestConstant.RESPONSE_CODE_200 != rsp.getStatus() && RestConstant.RESPONSE_CODE_201 != rsp.getStatus())) + { + return false; + } + return true; + } + + @SuppressWarnings("deprecation") + private static HttpEntity buildRequest(InputStream inputStream) + throws FileNotFoundException { + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + builder.seContentType(ContentType.MULTIPART_FORM_DATA); + builder.addBinaryBody("file", inputStream); + return builder.build(); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestHook.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestHook.java new file mode 100644 index 00000000..f15d379e --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/functiontest/FunctionTestHook.java @@ -0,0 +1,217 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.functiontest; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.common.ToolUtil; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.entity.EnumOperationStatus; +import org.openo.vnfsdk.marketplace.entity.EnumResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingOperResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.onboarding.entity.ResultKey; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FunctionTestHook +{ + private static final Logger logger = LoggerFactory.getLogger(FunctionTestHook.class); + + /** + * Start Executing Function test + * @param onBoradingReq + * @return + */ + public int exec(OnBoradingRequest onBoradingReq) + { + logger.info("OnboradingRequest received for Package:" + onBoradingReq.getCsarId() + " Path:"+ onBoradingReq.getPackagePath()); + + buildResultPath(onBoradingReq); + + OnBoardingResult oFuncTestResult = new OnBoardingResult(); + buildFunctResponse(onBoradingReq,oFuncTestResult); + updateResult(oFuncTestResult); + + //STEP 1:Check Package Exists + //--------------------------- + if(!FileUtil.checkFileExists(onBoradingReq.getPackagePath())) + { + logger.info("Package Not Found at Path:" + onBoradingReq.getPackagePath() + ", Package Id:" + onBoradingReq.getCsarId()); + oFuncTestResult.setOperFinished(true); + oFuncTestResult.setOperStatus(EnumResult.FAIL.getIndex()); + buildFuncTestResponse(oFuncTestResult,CommonConstant.functionTest.FUNCTEST_PACKAGE_EXISTS,EnumOperationStatus.FAILED.getIndex()); + updateResult(oFuncTestResult); + return EnumResult.FAIL.getIndex(); + } + + buildFuncTestResponse(oFuncTestResult,CommonConstant.functionTest.FUNCTEST_PACKAGE_EXISTS,EnumOperationStatus.SUCCESS.getIndex()); + updateResult(oFuncTestResult); + + //STEP 2:Handle function test for Package + //--------------------------------------- + String functestResultKey = FunctionTestExceutor.execFunctionTest(onBoradingReq); + if(null == functestResultKey) + { + oFuncTestResult.setOperFinished(true); + oFuncTestResult.setOperStatus(EnumResult.FAIL.getIndex()); + buildFuncTestResponse(oFuncTestResult,CommonConstant.functionTest.FUNCTEST_EXEC,EnumOperationStatus.FAILED.getIndex()); + updateResult(oFuncTestResult); + return EnumResult.FAIL.getIndex(); + } + + oFuncTestResult.setOperFinished(true); + oFuncTestResult.setOperStatus(EnumResult.SUCCESS.getIndex()); + buildFuncTestResponse(oFuncTestResult,CommonConstant.functionTest.FUNCTEST_EXEC,EnumOperationStatus.SUCCESS.getIndex()); + updateResult(oFuncTestResult); + + //STEP 3:Store FuncTest key to get FuncTest Results + //------------------------------------------------- + storeFuncTestResultKey(onBoradingReq,functestResultKey); + + return (oFuncTestResult.getOperStatus() == EnumResult.SUCCESS.getIndex()) + ? EnumResult.SUCCESS.getIndex() : EnumResult.FAIL.getIndex(); + } + + /** + * + * @param onBoradingReq + */ + private void buildResultPath(OnBoradingRequest onBoradingReq) + { + String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId(); + if(!FileUtil.checkFileExists(filePath)) + { + FileUtil.createDirectory(filePath); + } + } + + /** + * + * @param packageData + * @return + */ + public static String getFuncTestResults(PackageData packageData) + { + logger.info("Function Test results request for Package:" + packageData.getCsarId()); + ResultKey keydata = getFuncTestResultKey(packageData); + if(null == keydata || keydata.getKey().isEmpty()) + { + logger.info("Function Test key Not Found for Package Id:",packageData.getCsarId()); + return null; + } + return FunctionTestExceutor.getTestResultsByFuncTestKey(keydata.getKey()); + } + + /** + * Store Function Test Result key + * @param onBoradingReq + * @param resultKey + */ + private void storeFuncTestResultKey(OnBoradingRequest onBoradingReq,String resultKey) + { + //Currently we will make JSON and Store JSON to Package Path) + //------------------------------------------------------------------------------- + String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId() + File.separator + "functestResultKey.json"; + + logger.info("Function test Results Key for Package Id:" + onBoradingReq.getCsarId() + ", Key:" + resultKey + " Path" + filePath); + + ResultKey oResultKey = new ResultKey(); + oResultKey.setCsarId(onBoradingReq.getCsarId()); + oResultKey.setOperTypeId(CommonConstant.functionTest.FUNCTEST_OPERTYPE_ID); + oResultKey.setKey(resultKey); + + FileUtil.writeJsonDatatoFile(filePath,oResultKey); + } + + /** + * Store Function test Execution Results + * @param oFuncTestResult + */ + private void updateResult(OnBoardingResult oFuncTestResult) + { + //STore Results to DB(Currently we will make JSON and Store JSON to Package Path) + //------------------------------------------------------------------------------- + logger.info("Function test Status for Package Id:" + oFuncTestResult.getCsarId() + ", Result:" + ToolUtil.objectToString(oFuncTestResult)); + String filePath = getResultStorePath() + File.separator + oFuncTestResult.getCsarId() + File.separator + "functionTest.json"; + FileUtil.writeJsonDatatoFile(filePath,oFuncTestResult); + } + + /** + * Build Function Test Response + * @param onBoradingReq + * @param oFuncTestResult + */ + private void buildFunctResponse(OnBoradingRequest onBoradingReq, OnBoardingResult oFuncTestResult) + { + oFuncTestResult.setOperFinished(false); + oFuncTestResult.setCsarId(onBoradingReq.getCsarId()); + oFuncTestResult.setOperTypeId(CommonConstant.functionTest.FUNCTEST_OPERTYPE_ID); + + OnBoardingOperResult oPackageExists = new OnBoardingOperResult(); + oPackageExists.setOperId(CommonConstant.functionTest.FUNCTEST_PACKAGE_EXISTS); + oPackageExists.setStatus(EnumOperationStatus.NOTSTARTED.getIndex()); + + OnBoardingOperResult functTesExec = new OnBoardingOperResult(); + functTesExec.setOperId(CommonConstant.functionTest.FUNCTEST_EXEC); + functTesExec.setStatus(EnumOperationStatus.NOTSTARTED.getIndex()); + + List<OnBoardingOperResult> operResult = new ArrayList<OnBoardingOperResult>(); + operResult.add(oPackageExists); + operResult.add(functTesExec); + + oFuncTestResult.setOperResult(operResult); + } + + public static OnBoardingResult getOnBoardingResult(PackageData packageData) + { + String filePath = getResultStorePath() + File.separator + packageData.getCsarId() +File.separator + "functionTest.json"; + logger.info("On Boarding Status for Package Id:" + packageData.getCsarId() + ", Result Path:" + filePath); + + return (OnBoardingResult)FileUtil.readJsonDatafFromFile(filePath,OnBoardingResult.class); + } + + private static ResultKey getFuncTestResultKey(PackageData packageData) + { + String fileName = getResultStorePath() + File.separator + packageData.getCsarId() + File.separator + "functestResultKey.json"; + + logger.info("Func Test Result key for Package Id:" + packageData.getCsarId() + ", Result Path:" + fileName); + return (ResultKey) FileUtil.readJsonDatafFromFile(fileName,ResultKey.class); + } + + private static String getResultStorePath() + { + return org.openo.vnfsdk.marketplace.filemanage.http.ToolUtil.getHttpServerAbsolutePath(); + } + + private void buildFuncTestResponse(OnBoardingResult oFuncTestResult, String opreKey, int operStatusVal) + { + List<OnBoardingOperResult> operStatusList = oFuncTestResult.getOperResult(); + for(OnBoardingOperResult operObj: operStatusList) + { + if(operObj.getOperId().equalsIgnoreCase(opreKey)) + { + operObj.setStatus(operStatusVal); + break; + } + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifeCycleTestReq.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifeCycleTestReq.java new file mode 100644 index 00000000..5a5db23c --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifeCycleTestReq.java @@ -0,0 +1,43 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + +import java.util.List; + +public class LifeCycleTestReq +{ + private String csarId; + private String labVimId; + private List<String> vimIds; + public String getCsarId() { + return csarId; + } + public void setCsarId(String csarId) { + this.csarId = csarId; + } + public String getLabVimId() { + return labVimId; + } + public void setLabVimId(String labVimId) { + this.labVimId = labVimId; + } + public List<String> getVimIds() { + return vimIds; + } + public void setVimIds(List<String> vimIds) { + this.vimIds = vimIds; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestExceutor.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestExceutor.java new file mode 100644 index 00000000..982b2140 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestExceutor.java @@ -0,0 +1,156 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + +import java.io.File; +import java.io.IOException; +import java.util.Map; + +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.JsonUtil; +import org.openo.vnfsdk.marketplace.msb.MsbDetails; +import org.openo.vnfsdk.marketplace.msb.MsbDetailsHolder; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.rest.RestConstant; +import org.openo.vnfsdk.marketplace.rest.RestResponse; +import org.openo.vnfsdk.marketplace.rest.RestfulClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class LifecycleTestExceutor +{ + private static final Logger logger = LoggerFactory.getLogger(LifecycleTestExceutor.class); + public static final String CATALOUGE_UPLOAD_URL_IN = "{0}:{1}/openoapi/catalog/v1/csars"; + + private LifecycleTestExceutor() + {} + + /** + * Interface to Send Request to Start Function test + * @param onBoradFuncTestReq + * @return + */ + @SuppressWarnings("unchecked") + public static String uploadPackageToCatalouge(OnBoradingRequest onBoradFuncTestReq) + { + String packagePath = onBoradFuncTestReq.getPackagePath() + File.separator + onBoradFuncTestReq.getPackageName(); + logger.info("Package file path uploadPackageToCatalouge:" + packagePath); + + String catalougeCsarId = null; + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) + { + logger.error("Failed to get MSB details during uploadPackageToCatalouge !!!"); + return catalougeCsarId; + } + + File fileData = new File (packagePath); + + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + builder.addBinaryBody("file", fileData, ContentType.MULTIPART_FORM_DATA, onBoradFuncTestReq.getPackageName()); + + //IP and Port needs to be configured !!! + RestResponse rsp = RestfulClient.post(oMsbDetails.getDefaultServer().getHost(),Integer.parseInt(oMsbDetails.getDefaultServer().getPort()),CommonConstant.CATALOUGE_UPLOAD_URL,builder.build()); + if(!checkValidResponse(rsp)) + { + logger.error("Failed to upload package to catalouge:" + rsp.getStatusCode()); + return catalougeCsarId; + } + + logger.info("Response for uploadPackageToCatalouge :" + rsp.getResult()); + catalougeCsarId = getCsarIdValue(rsp.getResult()); + + logger.info("CSARID for uploadPackageToCatalouge :" + catalougeCsarId); + return catalougeCsarId; + } + + + + + public static String execlifecycleTest(OnBoradingRequest onBoradFuncTestReq, LifeCycleTestReq oLifeCycleTestReq) + { + String packagePath = onBoradFuncTestReq.getPackagePath() + File.separator + onBoradFuncTestReq.getPackageName(); + logger.info("Package file path Function test:" + packagePath); + + MsbDetails oMsbDetails = MsbDetailsHolder.getMsbDetails(); + if(null == oMsbDetails) { + logger.error("Failed to get MSB details during execlifecycleTest !!!"); + return null; + } + + String rawDataJson = JsonUtil.toJson(oLifeCycleTestReq); + if(null == rawDataJson) { + logger.error("Failed to convert LifeCycleTestReq object to Json String !!!"); + return null; + } + + RestResponse oResponse = RestfulClient.sendPostRequest(oMsbDetails.getDefaultServer().getHost(), + oMsbDetails.getDefaultServer().getPort(), + CommonConstant.LifeCycleTest.LIFECYCLE_TEST_URL, rawDataJson); + + if(!checkValidResponse(oResponse)) { + logger.error("execlifecycleTest response is faliure :"+ oResponse.getStatusCode()); + return null; + } + logger.info("Response execlifecycleTest :"+ oResponse.getResult()); + return oResponse.getResult(); + } + + /** + * Check Response is Valid + * @param rsp + * @return + */ + private static boolean checkValidResponse(RestResponse rsp) + { + if (rsp.getStatusCode() == null || rsp.getResult() == null + || (RestConstant.RESPONSE_CODE_200 != rsp.getStatusCode() && RestConstant.RESPONSE_CODE_201 != rsp.getStatusCode())) + { + return false; + } + return true; + } + + /** + * + * @param strJsonData + * @return + */ + private static String getCsarIdValue(String strJsonData) + { + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + Map<String, String> dataMap = null; + try + { + dataMap = (Map<String, String>)mapper.readValue(strJsonData, Map.class); + } catch(JsonParseException e) { + logger.error("JsonParseException:Failed to upload package to catalouge:"); + } catch(JsonMappingException e) { + logger.error("JsonMappingException:Failed to upload package to catalouge:"); + } catch(IOException e) { + logger.error("IOException:Failed to upload package to catalouge:"); + } + return dataMap.get("csarId"); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestHook.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestHook.java new file mode 100644 index 00000000..29710df3 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/LifecycleTestHook.java @@ -0,0 +1,193 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.common.ToolUtil; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.entity.EnumOperationStatus; +import org.openo.vnfsdk.marketplace.entity.EnumResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingOperResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.onboarding.entity.ResultKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LifecycleTestHook +{ + private static final Logger logger = LoggerFactory.getLogger(LifecycleTestHook.class); + + /** + * Start Executing Function test + * @param onBoradingReq + * @return + */ + public int exec(OnBoradingRequest onBoradingReq) + { + logger.info("OnboradingRequest Lifecycle Request received for Package:" + onBoradingReq.getCsarId() + " Path:"+ onBoradingReq.getPackagePath()); + + buildResultPath(onBoradingReq); + + OnBoardingResult olifecycleTestResult = new OnBoardingResult(); + buildlifecycleTestResponse(onBoradingReq,olifecycleTestResult); + updateResult(olifecycleTestResult); + + if(null == onBoradingReq.getCsarIdCatalouge() || onBoradingReq.getCsarIdCatalouge().isEmpty()) + { + olifecycleTestResult.setOperFinished(true); + olifecycleTestResult.setOperStatus(EnumResult.FAIL.getIndex()); + buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.FAILED.getIndex()); + updateResult(olifecycleTestResult); + return EnumResult.FAIL.getIndex(); + } + + LifeCycleTestReq oLifeCycleTestReq = new LifeCycleTestReq(); + populateLifeCycleReq(onBoradingReq,oLifeCycleTestReq); + + + //STEP 2: Execute Life Cycle Test and Get Result Back !!!! + //--------------------------------------------------------- + String lifecycleTestResultKey = LifecycleTestExceutor.execlifecycleTest(onBoradingReq,oLifeCycleTestReq); + if(null == lifecycleTestResultKey) + { + olifecycleTestResult.setOperFinished(true); + olifecycleTestResult.setOperStatus(EnumResult.FAIL.getIndex()); + buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.FAILED.getIndex()); + updateResult(olifecycleTestResult); + return EnumResult.FAIL.getIndex(); + } + + olifecycleTestResult.setOperFinished(true); + olifecycleTestResult.setOperStatus(EnumResult.SUCCESS.getIndex()); + buildFuncTestResponse(olifecycleTestResult,CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC,EnumOperationStatus.SUCCESS.getIndex()); + updateResult(olifecycleTestResult); + + //STEP 3: Store FuncTest key to get FuncTest Results + //------------------------------------------------- + storelifecycleResultKey(onBoradingReq,lifecycleTestResultKey); + + return (olifecycleTestResult.getOperStatus() == EnumResult.SUCCESS.getIndex()) + ? EnumResult.SUCCESS.getIndex() : EnumResult.FAIL.getIndex(); + } + + private void populateLifeCycleReq(OnBoradingRequest onBoradingReq, LifeCycleTestReq oLifeCycleTestReq) + { + oLifeCycleTestReq.setCsarId(onBoradingReq.getCsarId()); + oLifeCycleTestReq.setLabVimId(oLifeCycleTestReq.getLabVimId()); + + List<String> vimIds = new ArrayList<String>(); + oLifeCycleTestReq.setVimIds(vimIds); + } + + /** + * + * @param onBoradingReq + */ + private void buildResultPath(OnBoradingRequest onBoradingReq) + { + String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId(); + if(!FileUtil.checkFileExists(filePath)) + { + FileUtil.createDirectory(filePath); + } + } + + /** + * Store Function test Execution Results + * @param oFuncTestResult + */ + private void updateResult(OnBoardingResult oFuncTestResult) + { + //STore Results to DB(Currently we will make JSON and Store JSON to Package Path) + //------------------------------------------------------------------------------- + logger.info("Lifecycle test Status for Package Id:" + oFuncTestResult.getCsarId() + ", Result:" + ToolUtil.objectToString(oFuncTestResult)); + String filePath = getResultStorePath() + File.separator + oFuncTestResult.getCsarId() + File.separator + "lifecycleTest.json"; + FileUtil.writeJsonDatatoFile(filePath,oFuncTestResult); + } + + /** + * Build Function Test Response + * @param onBoradingReq + * @param oFuncTestResult + */ + private void buildlifecycleTestResponse(OnBoradingRequest onBoradingReq, OnBoardingResult oTestResult) + { + oTestResult.setOperFinished(false); + oTestResult.setCsarId(onBoradingReq.getCsarId()); + oTestResult.setOperTypeId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_OPERTYPE_ID); + + OnBoardingOperResult lifecycleTestExec = new OnBoardingOperResult(); + lifecycleTestExec.setOperId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_EXEC); + lifecycleTestExec.setStatus(EnumOperationStatus.NOTSTARTED.getIndex()); + + List<OnBoardingOperResult> operResult = new ArrayList<OnBoardingOperResult>(); + operResult.add(lifecycleTestExec); + oTestResult.setOperResult(operResult); + } + + public static OnBoardingResult getOnBoardingResult(PackageData packageData) + { + String filePath = getResultStorePath() + File.separator + packageData.getCsarId() +File.separator + "lifecycleTest.json"; + logger.info("On Boarding Status for Package Id:" + packageData.getCsarId() + ", Result Path:" + filePath); + + return (OnBoardingResult)FileUtil.readJsonDatafFromFile(filePath,OnBoardingResult.class); + } + + /** + * Store Function Test Result key + * @param onBoradingReq + * @param resultKey + */ + private void storelifecycleResultKey(OnBoradingRequest onBoradingReq,String resultKey) + { + //Currently we will make JSON and Store JSON to Package Path) + //------------------------------------------------------------------------------- + String filePath = getResultStorePath() + File.separator + onBoradingReq.getCsarId() + File.separator + "lifecycleTestResultKey.json"; + + logger.info("Function test Results Key for Package Id:" + onBoradingReq.getCsarId() + ", Key:" + resultKey + " Path" + filePath); + + ResultKey oResultKey = new ResultKey(); + oResultKey.setCsarId(onBoradingReq.getCsarId()); + oResultKey.setOperTypeId(CommonConstant.LifeCycleTest.LIFECYCLE_TEST_OPERTYPE_ID); + oResultKey.setKey(resultKey); + + FileUtil.writeJsonDatatoFile(filePath,oResultKey); + } + + private static String getResultStorePath() + { + return org.openo.vnfsdk.marketplace.filemanage.http.ToolUtil.getHttpServerAbsolutePath(); + } + + private void buildFuncTestResponse(OnBoardingResult oFuncTestResult, String opreKey, int operStatusVal) + { + List<OnBoardingOperResult> operStatusList = oFuncTestResult.getOperResult(); + for(OnBoardingOperResult operObj: operStatusList) + { + if(operObj.getOperId().equalsIgnoreCase(opreKey)) + { + operObj.setStatus(operStatusVal); + break; + } + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/ValidateLifecycleTestResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/ValidateLifecycleTestResponse.java new file mode 100644 index 00000000..4bec21bc --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/ValidateLifecycleTestResponse.java @@ -0,0 +1,48 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + +public class ValidateLifecycleTestResponse +{ + private String jobId; + private String validate_status; + private String lifecycle_status; + private VnfInfo vnf_info; + public String getJobId() { + return jobId; + } + public void setJobId(String jobId) { + this.jobId = jobId; + } + public String getValidate_status() { + return validate_status; + } + public void setValidate_status(String validate_status) { + this.validate_status = validate_status; + } + public String getLifecycle_status() { + return lifecycle_status; + } + public void setLifecycle_status(String lifecycle_status) { + this.lifecycle_status = lifecycle_status; + } + public VnfInfo getVnf_info() { + return vnf_info; + } + public void setVnf_info(VnfInfo vnf_info) { + this.vnf_info = vnf_info; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VmsInfo.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VmsInfo.java new file mode 100644 index 00000000..f45a2ee4 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VmsInfo.java @@ -0,0 +1,42 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + + +public class VmsInfo +{ + private String ip; + private String username; + private String password; + public String getIp() { + return ip; + } + public void setIp(String ip) { + this.ip = ip; + } + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VnfInfo.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VnfInfo.java new file mode 100644 index 00000000..1afd6256 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/hooks/validatelifecycle/VnfInfo.java @@ -0,0 +1,31 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle; + +import java.util.List; + +public class VnfInfo +{ + private List<VmsInfo> vms; + + public List<VmsInfo> getVms() { + return vms; + } + + public void setVms(List<VmsInfo> vms) { + this.vms = vms; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/onboardmanager/OnBoardingHandler.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/onboardmanager/OnBoardingHandler.java new file mode 100644 index 00000000..7656932d --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/onboarding/onboardmanager/OnBoardingHandler.java @@ -0,0 +1,63 @@ +/** + * 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.openo.vnfsdk.marketplace.onboarding.onboardmanager; + +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.db.resource.PackageManager; +import org.openo.vnfsdk.marketplace.entity.EnumResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.onboarding.hooks.functiontest.FunctionTestHook; +import org.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle.LifecycleTestHook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class OnBoardingHandler +{ + private static final Logger logger = LoggerFactory.getLogger(OnBoardingHandler.class); + + public void handleOnBoardingReq(OnBoradingRequest onBoradingReq) + { + //Handle Package Life cycle/Validation + //------------------------------------ + LifecycleTestHook oLifecycleTestHook = new LifecycleTestHook(); + int iLifeCycleResponse = oLifecycleTestHook.exec(onBoradingReq); + if(EnumResult.SUCCESS.getIndex() != iLifeCycleResponse) + { + logger.error("Onboarding falied for Package Id during Lifecycle Test:" + onBoradingReq.getCsarId()); + } + + //Handle Package FunctionTest + //------------------------- + FunctionTestHook oFunctionTestHook = new FunctionTestHook(); + int iFuncTestResponse = oFunctionTestHook.exec(onBoradingReq); + if(EnumResult.SUCCESS.getIndex() != iFuncTestResponse) + { + logger.error("Onboarding falied for Package Id during Function Test:" + onBoradingReq.getCsarId()); + return; + } + + FileUtil.deleteDirectory(onBoradingReq.getPackagePath()); + try + { + PackageManager.getInstance().updateDwonloadCount(onBoradingReq.getCsarId()); + } + catch (Exception e) + { + logger.error("Download count udate failed for Package:" + onBoradingReq.getPackagePath() ,e); + } + } + +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/resource/PackageResource.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/resource/PackageResource.java new file mode 100644 index 00000000..e043ea56 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/resource/PackageResource.java @@ -0,0 +1,227 @@ +/** + * 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.openo.vnfsdk.marketplace.resource; + +import java.io.InputStream; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.eclipse.jetty.http.HttpStatus; +import org.glassfish.jersey.media.multipart.FormDataContentDisposition; +import org.glassfish.jersey.media.multipart.FormDataParam; +import org.openo.vnfsdk.marketplace.entity.response.CsarFileUriResponse; +import org.openo.vnfsdk.marketplace.entity.response.PackageMeta; +import org.openo.vnfsdk.marketplace.entity.response.UploadPackageResponse; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingResult; +import org.openo.vnfsdk.marketplace.wrapper.PackageWrapper; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; + +/** + * csar package service. + * + * @author 10189609 + * + */ +@Path("/PackageResource") +@Api(tags = {"Package Resource"}) +public class PackageResource { + + @Path("/updatestatus") + @POST + @ApiOperation(value = "update validate and lifecycle test status", response = UploadPackageResponse.class) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "update error", + response = String.class)}) + public Response updateValidateStatus( + @ApiParam(value = "http request body") @Context HttpServletRequest request, + @ApiParam(value = "http header") @Context HttpHeaders head + ) throws Exception { + InputStream input = request.getInputStream(); + return PackageWrapper.getInstance().updateValidateStatus(input, head); + + } + + + @Path("/csars") + @GET + @ApiOperation(value = "get csar package list by condition", response = PackageMeta.class, + responseContainer = "List") + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response queryPackageListByCond( + @ApiParam(value = "csar name") @QueryParam("name") String name, @ApiParam( + value = "csar provider") @QueryParam("provider") String provider, @ApiParam( + value = "csar version") @QueryParam("version") String version, @ApiParam( + value = "delay to delete") @QueryParam("deletionPending") String deletionPending, + @ApiParam(value = "csar type") @QueryParam("type") String type) { + return PackageWrapper.getInstance().queryPackageListByCond(name, provider, version, + deletionPending, type); + } + + @Path("/csars/{csarId}") + @GET + @ApiOperation(value = "get csar package list", response = PackageMeta.class, + responseContainer = "List") + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response queryPackageById( + @ApiParam(value = "csar id") @PathParam("csarId") String csarId) { + return PackageWrapper.getInstance().queryPackageById(csarId); + } + @Path("/csars") + @POST + @ApiOperation(value = "upload csar package", response = UploadPackageResponse.class) + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response uploadPackage( + @ApiParam(value = "file inputstream", + required = true) @FormDataParam("file") InputStream uploadedInputStream,@FormDataParam("params") String details, + @ApiParam(value = "file detail", + required = false) @FormDataParam("file") FormDataContentDisposition fileDetail, + @ApiParam(value = "http header") @Context HttpHeaders head) throws Exception { + return PackageWrapper.getInstance().uploadPackage(uploadedInputStream, fileDetail, details, head); + } + + @Path("/csars/{csarId}") + @DELETE + @ApiOperation(value = "delete a package") + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response delPackage(@ApiParam(value = "csar Id") @PathParam("csarId") String csarId) { + return PackageWrapper.getInstance().delPackage(csarId); + } + + @Path("/csars/{csarId}/files") + @GET + @ApiOperation(value = "get csar file uri by csarId", response = CsarFileUriResponse.class) + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response getCsarFileUri( + @ApiParam(value = "csar Id", required = true) @PathParam("csarId") String csarId) { + return PackageWrapper.getInstance().getCsarFileUri(csarId); + } + + @Path("/csars/{csarId}/downloaded") + @GET + @ApiOperation(value = "update download count for a package",response = Response.class) + public Response updateDwonloadCount(@ApiParam(value = "csar Id") @PathParam("csarId") String csarId) { + return PackageWrapper.getInstance().updateDwonloadCount(csarId); + } + + @Path("/csars/{csarId}/reupload") + @POST + @ApiOperation(value = "re-upload csar package", response = UploadPackageResponse.class) + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = String.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "resource grant error", + response = String.class)}) + public Response reUploadPackage( + @ApiParam(value = "csar Id") @PathParam("csarId") String csarId, + @ApiParam(value = "file inputstream", + required = true) @FormDataParam("file") InputStream uploadedInputStream,@FormDataParam("params") String details, + @ApiParam(value = "file detail", + required = false) @FormDataParam("file") FormDataContentDisposition fileDetail, + @ApiParam(value = "http header") @Context HttpHeaders head) throws Exception { + return PackageWrapper.getInstance().reUploadPackage(csarId,uploadedInputStream, fileDetail, details, head); + } + + @Path("/csars/{csarId}/onboardstatus") + @GET + @ApiOperation(value="Get VNF OnBoarding Result", response=OnBoardingResult.class) + @Produces(MediaType.APPLICATION_JSON) + public Response getOnBoardingResult(@ApiParam("csar Id") @PathParam("csarId") String csarId, + @ApiParam("operation type") @QueryParam("operTypeId") String operTypeId, + @ApiParam("operation id") @QueryParam("operId") String operId) + { + return PackageWrapper.getInstance().getOnBoardingResult(csarId, operTypeId, operId); + } + + @Path("/csars/{csarId}/operresult") + @GET + @ApiOperation(value = "Get VNF OnBoarded Opeartion Result", response = Response.class) + @Produces(MediaType.APPLICATION_JSON) + public Response getOperStatus(@ApiParam(value = "csar Id") @PathParam("csarId") String csarId, + @ApiParam(value = "operation type") @QueryParam("operTypeId") String operTypeId) { + return PackageWrapper.getInstance().getOperResultByOperTypeId(csarId,operTypeId); + } + + @Path("/csars/onboardsteps") + @GET + @ApiOperation(value="Get VNF OnBoarded Steps", response=Response.class) + @Produces(MediaType.APPLICATION_JSON) + public Response getOnBoardingSteps() + { + return PackageWrapper.getInstance().getOnBoardingSteps(); + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestConstant.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestConstant.java new file mode 100644 index 00000000..4617a27d --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestConstant.java @@ -0,0 +1,83 @@ +/* + * 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.openo.vnfsdk.marketplace.rest; + + +public class RestConstant { + + public static final String UNAME_KEY = "UNAME_KEY"; + + public static final String PWD_KEY = "PWD_KEY"; + + public static final String NETCONF = "NETCONF"; + + public static final String ASYNC = "ASYNC"; + + public static final String SYNC = "SYNC"; + + public static final String HEADERMAP_TYPE = "HEADERMAP_TYPE"; + + public static final String HEADERMAP_VALUE = "HEADERMAP_VALUE"; + + public static final String AUTH_TOKEN = "AUTH_TOKEN"; + + public static final String DEFAULT_HOST_ADDRESS = "localhost"; + + public static final int DEFAULT_PORT = 8080; + + public static final int DEFAULT_MAX_CONNECTION_PER_CONTROLLER = 10; + + public static final int DEFAULT_STRING_LENGTH_64 = 64; + + public static final int DEFAULT_STRING_LENGTH_128 = 128; + + public static final int RESPONSE_CODE_200 = 200; + + public static final int RESPONSE_CODE_201 = 201; + + public static class HttpContext { + + public static final String CONTENT_TYPE = "Content-Type"; + + public static final String MEDIA_TYPE_JSON = "application/json;charset=UTF-8"; + + public static final String URL = "url"; + + public static final String METHOD_TYPE = "methodType"; + + private HttpContext() { + } + } + + + public static class MethodType { + + public static final String POST = "post"; + + public static final String DELETE = "delete"; + + public static final String PUT = "put"; + + public static final String GET = "get"; + + private MethodType() { + } + } + + private RestConstant() { + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestResponse.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestResponse.java new file mode 100644 index 00000000..8ed1553f --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestResponse.java @@ -0,0 +1,49 @@ +/** + * 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.openo.vnfsdk.marketplace.rest; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class RestResponse { + + public Integer getStatusCode() { + return statusCode; + } + + public void setStatusCode(Integer statusCode) { + this.statusCode = statusCode; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + private Integer statusCode; + + private String result; +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulClient.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulClient.java new file mode 100644 index 00000000..78be4652 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulClient.java @@ -0,0 +1,168 @@ +/** + * 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.openo.vnfsdk.marketplace.rest; + +import java.io.File; +import java.io.IOException; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.ResponseHandler; +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.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RestfulClient { + private static final String HTTP = "http"; + private static final Logger logger = LoggerFactory.getLogger(RestfulClient.class); + + enum HttpMethod { + GET, POST, PUT, DELETE + } + + /** + * execute http. + * @param method http method + * @param ip ip + * @param port port + * @param url url + * @param body http body + * @return RestResponse + */ + public static RestResponse executeHttp(HttpMethod method, String ip, int port, String url, + HttpEntity body) { + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpResponse httpResponse = null; + RestResponse result = new RestResponse(); + try { + // specify the host, protocol, and port + HttpHost target = new HttpHost(ip, port, HTTP); + // specify the get request + HttpRequest request = getRequest(method, url, body); + httpResponse = httpclient.execute(target, request); + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) { + result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); + result.setResult(EntityUtils.toString(entity)); + } + } catch (Exception e1) { + logger.error("send get rest request error:", e1.getMessage()); + } finally { + if (httpclient != null) { + try { + httpclient.close(); + } catch (IOException e2) { + logger.error("close httpclient error:", e2.getMessage()); + } + } + } + return result; + } + + private static HttpRequest getRequest(HttpMethod method, String url, HttpEntity body) { + HttpRequest request = null; + switch (method) { + case GET: + request = new HttpGet(url); + break; + case POST: + request = new HttpPost(url); + ((HttpPost) request).setEntity(body); + break; + case PUT: + request = new HttpPut(url); + ((HttpPut) request).setEntity(body); + break; + case DELETE: + request = new HttpDelete(url); + break; + default: + break; + } + return request; + } + + public static RestResponse get(String ip, int port, String url) { + return executeHttp(HttpMethod.GET, ip, port, url, null); + } + + public static RestResponse delete(String ip, int port, String url) { + return executeHttp(HttpMethod.DELETE, ip, port, url, null); + } + + public static RestResponse post(String ip, int port, String url, HttpEntity requestBody) { + return executeHttp(HttpMethod.POST, ip, port, url, requestBody); + } + + public static RestResponse sendPostRequest(String ip, String port, String url, String strJson) + { + RestResponse result = new RestResponse(); + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + HttpResponse httpResponse = null; + try + { + String urlPost = "http://" + ip + ":" + port + url; + logger.info("URL formed for Post, URL :" + urlPost); + logger.info("URL formed for Post, JSON :" + strJson); + + HttpPost request = new HttpPost(urlPost); + + StringEntity params = new StringEntity(strJson); + request.addHeader("content-type", "application/json"); + request.setEntity(params); + + httpResponse = httpClient.execute(request); + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) + { + result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); + result.setResult(EntityUtils.toString(entity)); + } + } + catch (Exception ex) + { + logger.error("Send Post request error:", ex.getMessage()); + } + finally + { + try { + if(null != httpClient) { + httpClient.close(); + } + } + catch(IOException e){ + logger.error("IOException :Send Post request error:", e.getMessage()); + } + } + return result; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulUtil.java new file mode 100644 index 00000000..03912646 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/rest/RestfulUtil.java @@ -0,0 +1,104 @@ +/* + * 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.vnfsdk.marketplace.rest; + +import java.util.HashMap; +import java.util.Map; + +import org.openo.baseservice.remoteservice.exception.ServiceException; +import org.openo.baseservice.roa.util.restclient.Restful; +import org.openo.baseservice.roa.util.restclient.RestfulFactory; +import org.openo.baseservice.roa.util.restclient.RestfulParametes; +import org.openo.baseservice.roa.util.restclient.RestfulResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RestfulUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(RestfulUtil.class); + + private RestfulUtil() { + } + + /** + * Interface for Sending Request via REST + * @param paramsMap + * @param params + * @param queryParam + * @return + */ + public static RestfulResponse sendRestRequest(Map<String, String> paramsMap, String params,Map<String, String> queryParam) + { + if(null == paramsMap) + { + LOGGER.error("sendRestResponse : Input validation failed !"); + return null; + } + + String url = paramsMap.get(RestConstant.HttpContext.URL); + String methodType = paramsMap.get(RestConstant.HttpContext.METHOD_TYPE); + + RestfulResponse rsp = null; + Restful rest = RestfulFactory.getRestInstance(RestfulFactory.PROTO_HTTP); + + try + { + RestfulParametes restfulParametes = new RestfulParametes(); + Map<String, String> headerMap = new HashMap<String, String>(3); + headerMap.put(RestConstant.HttpContext.CONTENT_TYPE, RestConstant.HttpContext.MEDIA_TYPE_JSON); + restfulParametes.setHeaderMap(headerMap); + + if(null != params) + { + restfulParametes.setRawData(params); + } + + if(null != queryParam) + { + for(Map.Entry<String, String> curEntity : queryParam.entrySet()) + { + restfulParametes.putHttpContextHeader(curEntity.getKey(), curEntity.getValue()); + } + } + if(rest != null) + { + if(RestConstant.MethodType.GET.equalsIgnoreCase(methodType)) + { + rsp = rest.get(url, restfulParametes, null); + } + else if(RestConstant.MethodType.POST.equalsIgnoreCase(methodType)) + { + rsp = rest.post(url, restfulParametes, null); + } + else if(RestConstant.MethodType.PUT.equalsIgnoreCase(methodType)) + { + rsp = rest.put(url, restfulParametes, null); + } + else if(RestConstant.MethodType.DELETE.equalsIgnoreCase(methodType)) + { + rsp = rest.delete(url, restfulParametes, null); + } + } + } + catch(ServiceException e) + { + LOGGER.error("sendRestResponse, get restful response catch exception {}", e); + } + return rsp; + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapper.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapper.java new file mode 100644 index 00000000..f42ac636 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapper.java @@ -0,0 +1,596 @@ +/** + * 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.openo.vnfsdk.marketplace.wrapper; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; + +import net.sf.json.JSONObject; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.glassfish.jersey.media.multipart.FormDataContentDisposition; +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.common.JsonUtil; +import org.openo.vnfsdk.marketplace.common.RestUtil; +import org.openo.vnfsdk.marketplace.common.ToolUtil; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.exception.MarketplaceResourceException; +import org.openo.vnfsdk.marketplace.db.resource.PackageManager; +import org.openo.vnfsdk.marketplace.db.util.MarketplaceDbUtil; +import org.openo.vnfsdk.marketplace.entity.request.PackageBasicInfo; +import org.openo.vnfsdk.marketplace.entity.response.PackageMeta; +import org.openo.vnfsdk.marketplace.entity.response.UploadPackageResponse; +import org.openo.vnfsdk.marketplace.filemanage.FileManagerFactory; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingOperResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingResult; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoardingSteps; +import org.openo.vnfsdk.marketplace.onboarding.entity.OnBoradingRequest; +import org.openo.vnfsdk.marketplace.onboarding.hooks.functiontest.FunctionTestExceutor; +import org.openo.vnfsdk.marketplace.onboarding.hooks.functiontest.FunctionTestHook; +import org.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle.LifecycleTestExceutor; +import org.openo.vnfsdk.marketplace.onboarding.hooks.validatelifecycle.ValidateLifecycleTestResponse; +import org.openo.vnfsdk.marketplace.onboarding.onboardmanager.OnBoardingHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PackageWrapper { + private static PackageWrapper packageWrapper; + private static final Logger LOG = LoggerFactory.getLogger(PackageWrapper.class); + + /** + * get PackageWrapper instance. + * @return package wrapper instance + */ + public static PackageWrapper getInstance() { + if (packageWrapper == null) { + packageWrapper = new PackageWrapper(); + } + return packageWrapper; + } + + public Response updateValidateStatus(InputStream inputStream, HttpHeaders head) throws Exception + { + String reqParam = IOUtils.toString(inputStream); + LOG.info("updateValidateStatus request param:"+reqParam); + if(StringUtils.isBlank(reqParam)) { + LOG.error("The updateValidateStatus request params can't be null"); + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + ValidateLifecycleTestResponse lyfValidateResp = JsonUtil.fromJson(reqParam, ValidateLifecycleTestResponse.class); + if(!checkOperationSucess(lyfValidateResp)) + { + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + String funcTestResponse = FunctionTestExceutor.executeFunctionTest(reqParam); + if(null == funcTestResponse) + { + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + JSONObject funcTestRspObject = JSONObject.fromObject(funcTestResponse); + if(!funcTestRspObject.get("status").equals(CommonConstant.SUCCESS_STR)) + { + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + JSONObject result = new JSONObject(); + result.put("msg","SUCCESS"); + return Response.ok(ToolUtil.objectToString(result), MediaType.APPLICATION_JSON).build(); + } + + private boolean checkOperationSucess(ValidateLifecycleTestResponse lyfValidateResp) + { + boolean bOperStatus = false; + if(null == lyfValidateResp) + { + LOG.error("ValidateLifecycleTestResponse is NUll !!!"); + return bOperStatus; + } + if(lyfValidateResp.getLifecycle_status().equalsIgnoreCase(CommonConstant.SUCCESS_STR) + && lyfValidateResp.getValidate_status().equalsIgnoreCase(CommonConstant.SUCCESS_STR)) + { + LOG.error("Lifecycle/Validation Response failed :" + lyfValidateResp.getLifecycle_status() + File.separator + lyfValidateResp.getValidate_status()); + bOperStatus = true; + } + return bOperStatus; + } + + /** + * query package list by condition. + * @param name package name + * @param provider package provider + * @param version package version + * @param deletionPending package deletionPending + * @param type package type + * @return Response + */ + public Response queryPackageListByCond(String name, String provider, String version, + String deletionPending, String type) { + ArrayList<PackageData> dbresult = new ArrayList<PackageData>(); + ArrayList<PackageMeta> result = new ArrayList<PackageMeta>(); + LOG.info("query package info.name:" + name + " provider:" + provider + " version" + version + + " deletionPending" + deletionPending + " type:" + type); + try { + dbresult = + PackageManager.getInstance().queryPackage(name, provider, version, deletionPending, type); + result = PackageWrapperUtil.packageDataList2PackageMetaList(dbresult); + return Response.ok(ToolUtil.objectToString(result)).build(); + } catch (MarketplaceResourceException e1) { + LOG.error("query package by csarId from db error ! " + e1.getMessage()); + return RestUtil.getRestException(e1.getMessage()); + } + } + + /** + * query package by id. + * @param csarId package id + * @return Response + */ + public Response queryPackageById(String csarId) { + PackageData dbResult = new PackageData(); + PackageMeta result = new PackageMeta(); + dbResult = PackageWrapperUtil.getPackageInfoById(csarId); + result = PackageWrapperUtil.packageData2PackageMeta(dbResult); + return Response.ok(ToolUtil.objectToString(result)).build(); + } + + /** + * upload package. + * @param uploadedInputStream inputStream + * @param fileDetail package detail + * @param head http header + * @return Response + * @throws Exception e + */ + public Response uploadPackage(InputStream uploadedInputStream, + FormDataContentDisposition fileDetail, String details, HttpHeaders head) throws Exception + { + LOG.info("Upload/Reupload request Received !!!!"); + + String packageId = MarketplaceDbUtil.generateId(); + return handlePackageUpload(packageId,uploadedInputStream, fileDetail, details, head); + } + + /** + * Interface for Uploading package + * @param packageId + * @param uploadedInputStream + * @param fileDetail + * @param details + * @param head + * @return + * @throws IOException + * @throws MarketplaceResourceException + */ + private Response handlePackageUpload(String packageId,InputStream uploadedInputStream, FormDataContentDisposition fileDetail, + String details, HttpHeaders head) throws IOException, MarketplaceResourceException + { + boolean bResult = handleDataValidate(packageId,uploadedInputStream,fileDetail); + if(!bResult) + { + LOG.error("Validation of Input received for Package Upload failed !!!"); + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + LOG.info("the fileDetail = " + ToolUtil.objectToString(fileDetail)); + + String fileName = ToolUtil.processFileName(fileDetail.getFileName()); + String localDirName = ToolUtil.getTempDir(CommonConstant.CATALOG_CSAR_DIR_NAME, fileName); + + String contentRange = null; + if (head != null) + { + contentRange = head.getHeaderString(CommonConstant.HTTP_HEADER_CONTENT_RANGE); + } + LOG.info("store package chunk file, fileName:" + fileName + ",contentRange:" + contentRange); + if (ToolUtil.isEmptyString(contentRange)) + { + int fileSize = uploadedInputStream.available(); + contentRange = "0-" + fileSize + "/" + fileSize; + } + + String fileLocation = ToolUtil.storeChunkFileInLocal(localDirName, fileName, uploadedInputStream); + LOG.info("the fileLocation when upload package is :" + fileLocation); + + uploadedInputStream.close(); + + PackageBasicInfo basicInfo = PackageWrapperUtil.getPacageBasicInfo(fileLocation); + if (null == basicInfo.getType() || null == basicInfo.getProvider() || null == basicInfo.getVersion()) + { + LOG.error("Package basicInfo is incorrect ! basicIonfo = " + ToolUtil.objectToString(basicInfo)); + return Response.serverError().build(); + } + + UploadPackageResponse result = new UploadPackageResponse(); + Boolean isEnd = PackageWrapperUtil.isUploadEnd(contentRange, fileName); + if (isEnd) + { + PackageMeta packageMeta = PackageWrapperUtil.getPackageMeta(packageId,fileName, fileLocation, basicInfo, details); + + String path = basicInfo.getType().toString() + File.separator + basicInfo.getProvider() + File.separator + packageMeta.getCsarId() + File.separator + fileName.replace(".csar", "") + File.separator + basicInfo.getVersion(); + String dowloadUri = File.separator + path + File.separator; + packageMeta.setDownloadUri(dowloadUri); + + LOG.info("dest path is : " + path); + LOG.info("packageMeta = " + ToolUtil.objectToString(packageMeta)); + + PackageData packageData = PackageWrapperUtil.getPackageData(packageMeta); + + String destPath = File.separator + path + File.separator + File.separator; + boolean uploadResult = FileManagerFactory.createFileManager().upload(localDirName, destPath); + if (uploadResult) + { + //Create OnBoarding Request + //-------------------------- + OnBoradingRequest oOnboradingRequest = new OnBoradingRequest(); + oOnboradingRequest.setCsarId(packageId); + oOnboradingRequest.setPackageName(fileName); + oOnboradingRequest.setPackagePath(localDirName); + + //Upload the Package to CATALOUGE and get CSARID + //--------------------------------------------- + String catalougeCsarId = LifecycleTestExceutor.uploadPackageToCatalouge(oOnboradingRequest); + if((null == catalougeCsarId) || catalougeCsarId.isEmpty()) + { + LOG.error("Failed to Upload Package to catalougeCsarId " + ToolUtil.objectToString(basicInfo)); + return Response.status(Status.INTERNAL_SERVER_ERROR).build(); + } + oOnboradingRequest.setCsarIdCatalouge(catalougeCsarId); + LOG.info("catalougeCsarId :" + catalougeCsarId); + + + //Update Default download count to -1 + packageData.setCsarId(packageId); + packageData.setDownloadCount(-1); + PackageData packateDbData = PackageManager.getInstance().addPackage(packageData); + + LOG.info("Store package data to database succed ! packateDbData = " + ToolUtil.objectToString(packateDbData)); + LOG.info("upload package file end, fileName:" + fileName); + + result.setCsarId(packateDbData.getCsarId()); + + //Assign OnBoarding Request to OnBoarding Handler + //------------------------------------------------ + addOnBoardingRequest(oOnboradingRequest); + + LOG.info("OnboradingRequest Data : " + ToolUtil.objectToString(oOnboradingRequest)); + } + } + return Response.ok(ToolUtil.objectToString(result), MediaType.APPLICATION_JSON).build(); + } + + /** + * Execute OnBarding request + * @param oOnboradingRequest + */ + private void addOnBoardingRequest(final OnBoradingRequest oOnboradingRequest) + { + ExecutorService es = Executors.newFixedThreadPool(CommonConstant.ONBOARDING_THREAD_COUNT); + es.submit(new Callable<Integer>() + { + public Integer call() throws Exception + { + new OnBoardingHandler().handleOnBoardingReq(oOnboradingRequest); + return CommonConstant.SUCESS; + } + }); + } + + /** + * delete package by package id. + * @param csarId package id + * @return Response + */ + public Response delPackage(String csarId) { + LOG.info("delete package info.csarId:" + csarId); + if (ToolUtil.isEmptyString(csarId)) { + LOG.error("delete package fail, csarid is null"); + return Response.serverError().build(); + } + deletePackageDataById(csarId); + return Response.ok().build(); + } + + /** + * Delete Package by CSAR ID + * @param csarId + */ + private void deletePackageDataById(String csarId) { + String packagePath = PackageWrapperUtil.getPackagePath(csarId); + if (packagePath == null) { + LOG.error("package path is null! "); + } + + //Delete Package + FileManagerFactory.createFileManager().delete(packagePath); + //Delete Results Data + FileManagerFactory.createFileManager().delete(File.separator + csarId); + + + //delete package data from database + try { + PackageManager.getInstance().deletePackage(csarId); + } catch (MarketplaceResourceException e1) { + LOG.error("delete package by csarId from db error ! " + e1.getMessage(), e1); + } + } + + /** + * download package by package id. + * @param csarId package id + * @return Response + */ + public Response downloadCsarPackagesById(String csarId) { + PackageData packageData = PackageWrapperUtil.getPackageInfoById(csarId); + + String packageName = packageData.getName(); + String path = org.openo.vnfsdk.marketplace.filemanage.http.ToolUtil.getHttpServerAbsolutePath() +File.separatorChar+packageData.getType()+File.separatorChar+ + packageData.getProvider()+File.separatorChar+ packageData.getCsarId() +File.separator +packageName+File.separatorChar+packageData.getVersion() + +File.separator + packageName + ".csar"; + + LOG.info("downloadCsarPackagesById path is : " + path); + + File csarFile = new File(path); + if (!csarFile.exists()) { + return Response.status(Status.INTERNAL_SERVER_ERROR).build(); + } + + LOG.info("downloadCsarPackagesById ABS path is : " + csarFile.getAbsolutePath()); + + try + { + InputStream fis = new BufferedInputStream(new FileInputStream(csarFile.getAbsolutePath())); + return Response.ok(fis) + .header("Content-Disposition", "attachment; filename=\"" + csarFile.getName() + "\"") + .build(); + } + catch (Exception e1) + { + LOG.error("download vnf package fail.", e1); + return RestUtil.getRestException(e1.getMessage()); + } + } + + /** + * get package file uri. + * @param csarId package id + * @param relativePath file relative path + * @return Response + */ + public Response getCsarFileUri(String csarId) { + return downloadCsarPackagesById(csarId); + } + + /** + * Interface to Update Download count for CSAR ID + * @param csarId + * @return + */ + public Response updateDwonloadCount(String csarId) { + return handleDownladCountUpdate(csarId) ? + Response.ok().build() : + Response.status(Status.EXPECTATION_FAILED).build(); + } + + /** + * Handle downlowa count update + * @param csarId + * @return + */ + private boolean handleDownladCountUpdate(String csarId) { + boolean bupdateSucess = false; + try + { + PackageManager.getInstance().updateDwonloadCount(csarId); + bupdateSucess = true; + } + catch (Exception exp) + { + LOG.error("Updating Donwload count failed for Package with ID !!! : " + exp.getMessage(), exp); + } + return bupdateSucess; + } + + /** + * Interface to Re upload Package + * @param csarId + * @param uploadedInputStream + * @param fileDetail + * @param details + * @param head + * @return + * @throws Exception + */ + public Response reUploadPackage(String csarId, + InputStream uploadedInputStream, + FormDataContentDisposition fileDetail, + String details, + HttpHeaders head) throws Exception + { + LOG.info("Reupload request Received !!!!"); + + //STEP 1: Validate Input Data + //---------------------------- + boolean bResult = handleDataValidate(csarId,uploadedInputStream,fileDetail); + if(!bResult) + { + LOG.error("Validation of Input received for Package Upload failed during Reload!!!"); + return Response.status(Status.EXPECTATION_FAILED).build(); + } + + //STEP 2: Delete All Package Data based on package id + //---------------------------------------------------- + deletePackageDataById(csarId); + + //STEP 3: upload package with same package id + //------------------------------------------- + return handlePackageUpload(csarId,uploadedInputStream, fileDetail, details, head); + } + + /** + * Interface to get OnBoarding Result by Operation Type + * @param csarId + * @param operTypeId + * @param operId + * @return + */ + public Response getOnBoardingResult(String csarId, String operTypeId, String operId) + { + LOG.info("getOnBoardingResult request : csarId:" + csarId + " operTypeId:" + operTypeId + " operId:" + operId); + if ((null == csarId) || (null == operTypeId) || (null == operId)) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + if ((csarId.isEmpty()) || (operTypeId.isEmpty()) || (operId.isEmpty())) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + PackageData packageData = PackageWrapperUtil.getPackageInfoById(csarId); + if (null == packageData) { + return Response.status(Response.Status.PRECONDITION_FAILED).build(); + } + + handleDelayExec(operId); + + OnBoardingResult oOnBoardingResult = FunctionTestHook.getOnBoardingResult(packageData); + if (null == oOnBoardingResult) { + return Response.status(Response.Status.PRECONDITION_FAILED).build(); + } + filterOnBoardingResultByOperId(oOnBoardingResult, operId); + + String strResult = ToolUtil.objectToString(oOnBoardingResult); + LOG.info("getOnBoardingResult response : " + strResult); + return Response.ok(strResult, "application/json").build(); + } + + + private void filterOnBoardingResultByOperId(OnBoardingResult oOnBoardingResult, String operId) + { + if (0 == operId.compareToIgnoreCase("all")) { + return; + } + if (0 == operId.compareToIgnoreCase("download")) + { + List<OnBoardingOperResult> operResultListTemp = new ArrayList<OnBoardingOperResult>(); + OnBoardingOperResult operResultListTmp = new OnBoardingOperResult(); + operResultListTmp.setOperId("download"); + operResultListTmp.setStatus(0); + operResultListTemp.add(operResultListTmp); + oOnBoardingResult.setOperResult(operResultListTemp); + return; + } + List<OnBoardingOperResult> operResultListOut = new ArrayList<OnBoardingOperResult>(); + List<OnBoardingOperResult> operResultList = oOnBoardingResult.getOperResult(); + for (OnBoardingOperResult operResult : operResultList) { + if (0 == operResult.getOperId().compareToIgnoreCase(operId)) { + operResultListOut.add(operResult); + } + } + oOnBoardingResult.setOperResult(operResultListOut); + } + + /** + * Interface to get OnBoarding Status by Operation ID + * @param csarId + * @param operTypeId + * @return + */ + public Response getOperResultByOperTypeId(String csarId, String operTypeId) + { + LOG.error("getOnBoardingResult request : csarId:"+ csarId + " operTypeId:"+operTypeId); + if(null == csarId || null == operTypeId || csarId.isEmpty() || operTypeId.isEmpty()) + { + return Response.status(Status.BAD_REQUEST).build(); + } + + PackageData packageData = PackageWrapperUtil.getPackageInfoById(csarId); + if(null == packageData) + { + LOG.error("Failed to find package for PackageID:"+ csarId); + return Response.status(Status.PRECONDITION_FAILED).build(); + } + + //Get result key to fetch Function Test Results + //--------------------------------------------- + String strResult = FunctionTestHook.getFuncTestResults(packageData); + if(null == strResult) + { + LOG.error("NULL reponse for getOperResultByOperTypeId response :"+ strResult); + return Response.status(Status.INTERNAL_SERVER_ERROR).build(); + } + LOG.info("getOperResultByOperTypeId response :"+ strResult); + return Response.ok(strResult, MediaType.APPLICATION_JSON).build(); + } + + private boolean handleDataValidate(String packageId,InputStream uploadedInputStream, FormDataContentDisposition fileDetail) + { + boolean bvalidateOk = false; + if ((null != uploadedInputStream) && (fileDetail != null) && !ToolUtil.isEmptyString(packageId)) + { + bvalidateOk = true; + } + return bvalidateOk; + } + + /** + * Interface to get OnBoarding Steps + * @return + */ + public Response getOnBoardingSteps() + { + LOG.info("Get OnBoarding Steps request Received !!!"); + + String filePath = org.openo.vnfsdk.marketplace.filemanage.http.ToolUtil.getAppDeployPath() + File.separator +"generalconfig/OnBoardingSteps.json"; + LOG.info("Onboarding Steps Json file Path :" + filePath); + + OnBoardingSteps oOnBoardingSteps = (OnBoardingSteps)FileUtil.readJsonDatafFromFile(filePath, OnBoardingSteps.class); + if (null == oOnBoardingSteps) { + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + String strResult = ToolUtil.objectToString(oOnBoardingSteps); + LOG.info("getOnBoardingSteps response :" + strResult); + return Response.ok(strResult, MediaType.APPLICATION_JSON).build(); + } + + private void handleDelayExec(String operId) + { + if (0 == operId.compareToIgnoreCase(CommonConstant.functionTest.FUNCTEST_EXEC)) + { + try + { + Thread.sleep(8000); + } + catch (InterruptedException e) + { + LOG.info("handleDelayExex response : " + e.getMessage()); + } + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapperUtil.java b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapperUtil.java new file mode 100644 index 00000000..02cf567d --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/java/org/openo/vnfsdk/marketplace/wrapper/PackageWrapperUtil.java @@ -0,0 +1,356 @@ +/** + * 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.openo.vnfsdk.marketplace.wrapper; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +import org.openo.vnfsdk.marketplace.common.CommonConstant; +import org.openo.vnfsdk.marketplace.common.FileUtil; +import org.openo.vnfsdk.marketplace.common.MsbAddrConfig; +import org.openo.vnfsdk.marketplace.common.ToolUtil; +import org.openo.vnfsdk.marketplace.db.entity.PackageData; +import org.openo.vnfsdk.marketplace.db.exception.MarketplaceResourceException; +import org.openo.vnfsdk.marketplace.db.resource.PackageManager; +import org.openo.vnfsdk.marketplace.entity.EnumType; +import org.openo.vnfsdk.marketplace.entity.request.PackageBasicInfo; +import org.openo.vnfsdk.marketplace.entity.response.PackageMeta; +import org.openo.vnfsdk.marketplace.model.parser.EnumPackageFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.internal.LinkedTreeMap; + + +public class PackageWrapperUtil { + private static final Logger LOG = LoggerFactory.getLogger(PackageWrapperUtil.class); + + public static long getPacakgeSize(String fileLocation) { + File file = new File(fileLocation); + return file.length(); + } + + /** + * change package metadata to fix database. + * @param meta package metadata + * @param details + * @return package data in database + */ + public static PackageData getPackageData(PackageMeta meta) { + PackageData packageData = new PackageData(); + packageData.setCreateTime(meta.getCreateTime()); + packageData.setDeletionPending(String.valueOf(meta.isDeletionPending())); + packageData.setDownloadUri(meta.getDownloadUri()); + packageData.setFormat(meta.getFormat()); + packageData.setModifyTime(meta.getModifyTime()); + packageData.setName(meta.getName()); + packageData.setCsarId(meta.getCsarId()); + packageData.setProvider(meta.getProvider()); + String fileSize = meta.getSize(); + packageData.setSize(fileSize); + packageData.setType(meta.getType()); + packageData.setVersion(meta.getVersion()); + packageData.setDetails(meta.getDetails()); + packageData.setShortDesc(meta.getShortDesc()); + packageData.setRemarks(meta.getRemarks()); + return packageData; + } + + /** + * judge wether is the end of upload package. + * @param contentRange package sise range + * @param csarName package name + * @return boolean + */ + public static boolean isUploadEnd(String contentRange, String csarName) { + String range = contentRange; + range = range.replace("bytes", "").trim(); + range = range.substring(0, range.indexOf("/")); + String size = + contentRange.substring(contentRange.indexOf("/") + 1, contentRange.length()).trim(); + int fileSize = Integer.parseInt(size); + String[] ranges = range.split("-"); + int startPosition = Integer.parseInt(ranges[0]); + if (startPosition == 0) { + // delPackageBySync(csarName); + } + // index start from 0 + int endPosition = Integer.parseInt(ranges[1]) + 1; + if (endPosition >= fileSize) { + return true; + } + return false; + } + + /** + * get package detail by package id. + * @param csarId package id + * @return package detail + */ + public static PackageData getPackageInfoById(String csarId) { + PackageData result = new PackageData(); + ArrayList<PackageData> packageDataList = new ArrayList<PackageData>(); + try { + packageDataList = PackageManager.getInstance().queryPackageByCsarId(csarId); + if (packageDataList != null && packageDataList.size() > 0) { + result = PackageManager.getInstance().queryPackageByCsarId(csarId).get(0); + } + } catch (MarketplaceResourceException e1) { + LOG.error("query package by csarId from db error ! " + e1.getMessage()); + } + return result; + } + + /** + * get package metadata from basic info. + * @param fileName package name + * @param fileLocation the location of package + * @param basic basic infomation of package. include version, type and provider + * @return package metadata + */ + public static PackageMeta getPackageMeta(String packageId,String fileName, String fileLocation, + PackageBasicInfo basic, String details) { + PackageMeta packageMeta = new PackageMeta(); + long size = getPacakgeSize(fileLocation); + packageMeta.setFormat(basic.getFormat()); + + if(null == packageId) + { + packageId = ToolUtil.generateId(); + } + packageMeta.setCsarId(packageId); + + packageMeta.setName(fileName.replace(CommonConstant.CSAR_SUFFIX, "")); + packageMeta.setType(basic.getType().toString()); + packageMeta.setVersion(basic.getVersion()); + packageMeta.setProvider(basic.getProvider()); + packageMeta.setDeletionPending(false); + String sizeStr = ToolUtil.getFormatFileSize(size); + packageMeta.setSize(sizeStr); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String currentTime = sdf1.format(new Date()); + packageMeta.setCreateTime(currentTime); + packageMeta.setModifyTime(currentTime); + if(null != details) + { + LinkedTreeMap<String,String> csarDetails = ToolUtil.fromJson(details, LinkedTreeMap.class); + packageMeta.setDetails(csarDetails.get("details")); + packageMeta.setShortDesc(csarDetails.get("shortDesc")); + packageMeta.setRemarks(csarDetails.get("remarks")); + } + return packageMeta; + } + + /** + * get downloadUri from package metadata. + * @param csarId package id + * @return download uri + */ + public static String getPackagePath(String csarId) { + ArrayList<PackageData> packageList = new ArrayList<PackageData>(); + String downloadUri = null; + try { + packageList = PackageManager.getInstance().queryPackageByCsarId(csarId); + downloadUri = packageList.get(0).getDownloadUri(); + } catch (MarketplaceResourceException e1) { + LOG.error("Query CSAR package by ID failed ! csarId = " + csarId); + } + return downloadUri; + } + + + /** + * get package name from ftpUrl. + * @param ftpUrl ftp url + * @return package name + */ + public static String getPackageName(String ftpUrl) { + int index = ftpUrl.lastIndexOf("/"); + String packageName = ftpUrl.substring(index); + return packageName; + } + + /** + * translate package data from database to package metadata. + * @param dbResult data from database + * @return package metadata list + */ + public static ArrayList<PackageMeta> packageDataList2PackageMetaList( + ArrayList<PackageData> dbResult) { + ArrayList<PackageMeta> metas = new ArrayList<PackageMeta>(); + PackageMeta meta = new PackageMeta(); + if (dbResult.size() > 0) { + for (int i = 0; i < dbResult.size(); i++) { + PackageData data = dbResult.get(i); + meta = packageData2PackageMeta(data); + metas.add(meta); + } + } + return metas; + } + + public static PackageMeta packageData2PackageMeta(PackageData packageData) { + PackageMeta meta = new PackageMeta(); + meta.setCsarId(packageData.getCsarId()); + meta.setCreateTime(packageData.getCreateTime()); + meta.setDeletionPending(Boolean.getBoolean(packageData.getDeletionPending())); + String packageUri = + packageData.getDownloadUri() + packageData.getName() + CommonConstant.CSAR_SUFFIX; + String packageUrl = getUrl(packageUri); + meta.setDownloadUri(packageUrl); + meta.setReport(packageData.getReport()); + meta.setFormat(packageData.getFormat()); + meta.setModifyTime(packageData.getModifyTime()); + meta.setName(packageData.getName()); + meta.setDetails(packageData.getDetails()); + meta.setProvider(packageData.getProvider()); + meta.setSize(packageData.getSize()); + meta.setType(packageData.getType()); + meta.setShortDesc(packageData.getShortDesc()); + meta.setVersion(packageData.getVersion()); + meta.setRemarks(packageData.getRemarks()); + meta.setDownloadCount(packageData.getDownloadCount()); + return meta; + } + + /** + * add msb address as prefix to uri. + * @param uri uri + * @return url + */ + public static String getUrl(String uri) { + String url = null; +// if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) { +// url = MsbAddrConfig.getMsbAddress() + uri.substring(1); +// } +// url = MsbAddrConfig.getMsbAddress() + uri; + if ((getDownloadUriHead().endsWith("/")) && uri.startsWith("/")) { + url = getDownloadUriHead() + uri.substring(1); + } + url = getDownloadUriHead() + uri; + String urlresult = url.replace("\\", "/"); + return urlresult; + } + + public static String getDownloadUriHead() { + return MsbAddrConfig.getMsbAddress() + "/files/catalog-http"; + } + + /** + * get local path. + * @param uri uri + * @return local path + */ + public static String getLocalPath(String uri) { + File srcDir = new File(uri); + String localPath = srcDir.getAbsolutePath(); + return localPath.replace("\\", "/"); + } + + /** + * get package basic information. + * @param fileLocation package location + * @return package basic information + */ + public static PackageBasicInfo getPacageBasicInfo(String fileLocation) { + PackageBasicInfo basicInfo = new PackageBasicInfo(); + String unzipDir = ToolUtil.getUnzipDir(fileLocation); + boolean isXmlCsar = false; + try { + String tempfolder = unzipDir; + ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder); + if (unzipFiles.isEmpty()) { + isXmlCsar = true; + } + for (String unzipFile : unzipFiles) { + if (unzipFile.endsWith(CommonConstant.CSAR_META)) { + basicInfo = readCsarMeta(unzipFile); + } + if (ToolUtil.isYamlFile(new File(unzipFile))) { + isXmlCsar = false; + } + } + } catch (IOException e1) { + LOG.error("judge package type error ! " + e1.getMessage()); + } + if (isXmlCsar) { + basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT); + } else { + basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT); + } + return basicInfo; + } + + private static PackageBasicInfo readCsarMeta(String unzipFile) { + PackageBasicInfo basicInfo = new PackageBasicInfo(); + File file = new File(unzipFile); + BufferedReader reader = null; + try { + reader = new BufferedReader(new FileReader(file)); + String tempString = null; + while ((tempString = reader.readLine()) != null) { + if (!tempString.equals("")) { + int count1 = tempString.indexOf(":"); + String meta = tempString.substring(0, count1).trim(); + if (meta.equalsIgnoreCase(CommonConstant.CSAR_TYPE_META)) { + int count = tempString.indexOf(":") + 1; + basicInfo.setType(EnumType.valueOf(tempString.substring(count).trim())); + } + if (meta.equalsIgnoreCase(CommonConstant.CSAR_PROVIDER_META)) { + int count = tempString.indexOf(":") + 1; + basicInfo.setProvider(tempString.substring(count).trim()); + } + if (meta.equalsIgnoreCase(CommonConstant.CSAR_VERSION_META)) { + int count = tempString.indexOf(":") + 1; + basicInfo.setVersion(tempString.substring(count).trim()); + } + } + } + reader.close(); + } catch (IOException e2) { + e2.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e1) { + LOG.error("close reader failed ! " + e1.getMessage()); + } + } + } + return basicInfo; + } + + /** + * get package format enum. + * @param format package format + * @return package format enum + */ + public static EnumPackageFormat getPackageFormat(String format) { + if (format.equals("xml")) { + return EnumPackageFormat.TOSCA_XML; + } else if (format.equals("yml") || format.equals("yaml")) { + return EnumPackageFormat.TOSCA_YAML; + } else { + return null; + } + } +} diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/generalconfig/OnBoardingSteps.json b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/generalconfig/OnBoardingSteps.json new file mode 100644 index 00000000..ca69f285 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/generalconfig/OnBoardingSteps.json @@ -0,0 +1,54 @@ +{ + "operTypeList":[ + { + "operTypeName":"Validation", + "operTypeId":"validation", + "oper":[ + { + "operId":"upload_id_1", + "operName":"Validation Step 1 Execute" + }, + { + "operId":"upload_id_2", + "operName":"Validation Step 2 Execute" + }, + { + "operId":"upload_id_3", + "operName":"Validation Step 3 Execute" + }, + { + "operId":"upload_id_4", + "operName":"Validation Step 4 Execute" + } + ] + }, + { + "operTypeName":"LifeCycle", + "operTypeId":"lifecycletest", + "oper":[ + { + "operId":"lifecycleTestexec", + "operName":"LifeCycle Test Execute" + } + ] + }, + { + "operTypeName":"Function Test", + "operTypeId":"functiontest", + "oper":[ + { + "operId":"packageExists", + "operName":"Check Package exists" + }, + { + "operId":"download", + "operName":"Download Package from Repository" + }, + { + "operId":"functestexec", + "operName":"Execute Function Testing" + } + ] + } + ] +}
\ No newline at end of file diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/log4j.properties b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/log4j.properties new file mode 100644 index 00000000..f1a00ee8 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +log4j.rootLogger=INFO,root +log4j.appender.root.Append=true +log4j.appender.root.File=${catalina.base}/logs/vnfsdkmarketplace.log +log4j.appender.root.layout.ConversionPattern=%d %-5p [%t][%X{moduleID}][%C %L] %m%n +log4j.appender.root.layout=org.apache.log4j.PatternLayout +log4j.appender.root.MaxBackupIndex=50 +log4j.appender.root.MaxFileSize=20MB +log4j.appender.root=org.apache.log4j.RollingFileAppender
\ No newline at end of file diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/marketplace.properties b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/marketplace.properties new file mode 100644 index 00000000..6bf73453 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/marketplace.properties @@ -0,0 +1,15 @@ +# 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. +IP=msb.openo.org +PORT=80
\ No newline at end of file diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/configuration/configuration.xml b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/configuration/configuration.xml new file mode 100644 index 00000000..76da57c8 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/configuration/configuration.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE configuration +PUBLIC "//mybatis.org//DTD Config 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-config.dtd"> +<configuration> + <environments default="development"> + <environment id="development"> + <transactionManager type="JDBC" /> + <dataSource type="POOLED"> + <property name="driver" value="com.mysql.jdbc.Driver" /> + <property name="url" value="jdbc:mysql://127.0.0.1:3306/marketplaceDB" /> + <property name="username" value="root" /> + <property name="password" value="Changeme_123" /> + </dataSource> + </environment> + </environments> + <mappers> + <mapper resource="mybatis/sql/MarketplaceMapper.xml" /> + </mappers> +</configuration>
\ No newline at end of file diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/sql/MarketplaceMapper.xml b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/sql/MarketplaceMapper.xml new file mode 100644 index 00000000..27801ae5 --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/resources/mybatis/sql/MarketplaceMapper.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.openo.vnfsdk.marketplace.db.mapper.IMarketplaceMapper"> + + <select id="getAllPackageData" resultType="org.openo.vnfsdk.marketplace.db.entity.PackageData"> + SELECT + * + FROM + CSAR_PACKAGE_TABLE + </select> + + <select id="getPackageData" resultType="org.openo.vnfsdk.marketplace.db.entity.PackageData"> + SELECT + * + FROM + CSAR_PACKAGE_TABLE + WHERE + CSARID=#{csarId} + </select> + + <insert id="savePackageData" parameterType="org.openo.vnfsdk.marketplace.db.entity.PackageData"> + INSERT INTO + CSAR_PACKAGE_TABLE + (CSARID, DOWNLOADURI, REPORT, SIZE, FORMAT, CREATETIME, DELETIONPENDING, MODIFYTIME, SHORTDESC, NAME, VERSION, PROVIDER, TYPE, DETAILS, REMARKS,DOWNLOADCOUNT) + VALUES + (#{csarId}, #{downloadUri}, #{report}, #{size}, #{format},#{createTime}, #{deletionPending}, #{modifyTime}, #{shortDesc}, #{name}, #{version}, #{provider},#{type}, #{details}, #{remarks}, #{downloadCount}) + </insert> + + <delete id="deletePackageData" parameterType="String"> + DELETE FROM + CSAR_PACKAGE_TABLE + WHERE + CSARID=#{csarId} + </delete> + + <delete id="updatePackageData" parameterType="org.openo.vnfsdk.marketplace.db.entity.PackageData"> + UPDATE CSAR_PACKAGE_TABLE SET DOWNLOADCOUNT=#{downloadCount} + WHERE + CSARID=#{csarId} + </delete> + +</mapper>
\ No newline at end of file diff --git a/vnfmarket-be/vnf-sdk-marketplace/src/main/webapp/WEB-INF/web.xml b/vnfmarket-be/vnf-sdk-marketplace/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..c7480d0b --- /dev/null +++ b/vnfmarket-be/vnf-sdk-marketplace/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,43 @@ +<?xml version = "1.0" encoding = "UTF-8"?> +<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" + xmlns = "http://java.sun.com/xml/ns/javaee" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" + id = "WebApp_ID" version = "3.0"> + <listener> + <listener-class>org.openo.vnfsdk.marketplace.msb.AppServletContextListener</listener-class> + </listener> + <servlet> + <servlet-name>Jersey RESTful Application</servlet-name> + <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> + <init-param> + <param-name>jersey.config.server.provider.packages</param-name> + <param-value>org.openo.vnfsdk.marketplace.resource</param-value> + </init-param> + <init-param> + <param-name>jersey.config.server.provider.classnames</param-name> + <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> + </init-param> + </servlet> + <servlet-mapping> + <servlet-name>Jersey RESTful Application</servlet-name> + <url-pattern>/openoapi/vnfsdk-marketplace/v1/*</url-pattern> + </servlet-mapping> + + <filter> + <filter-name>CorsFilter</filter-name> + <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> + <init-param> + <param-name>cors.allowed.origins</param-name> + <param-value>*</param-value> + </init-param> + <init-param> + <param-name>cors.allowed.methods</param-name> + <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> + </init-param> + </filter> + <filter-mapping> + <filter-name>CorsFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> +</web-app>
\ No newline at end of file |