2 * Copyright 2017 Huawei Technologies Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.vnfsdk.marketplace.common;
20 import java.io.FileOutputStream;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.io.OutputStream;
24 import java.text.DecimalFormat;
25 import java.util.Collection;
26 import java.util.UUID;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import com.google.gson.Gson;
30 import java.nio.file.Files;
31 import java.nio.file.Paths;
34 * common utility class.
36 public class ToolUtil {
38 private static final Logger LOG = LoggerFactory.getLogger(ToolUtil.class);
40 public static final String CATALOGUE_CSAR_DIR_NAME = "csar";
42 public static final String CATALOGUE_IMAGE_DIR_NAME = "image";
44 public static final String CSAR_EXTENSION = ".csar";
46 public static final int FILE_PERCENT = 1024 * 1024; // 1M
51 public static boolean isEmptyString(String val) {
52 return val == null || "".equals(val);
55 public static boolean isTrimedEmptyString(String val) {
56 return val == null || "".equals(val.trim());
59 public static boolean isTrimedEmptyArray(String[] val) {
60 return val == null || val.length == 0;
63 public static boolean isEmptyCollection(Collection<?> coll) {
64 return null == coll || coll.isEmpty();
68 * store chunk file to local temp directory.
70 * @param dirName directory name
71 * @param fileName file name
72 * @param uploadedInputStream upload input stream
74 * @throws IOException e
76 public static String storeChunkFileInLocal(String dirName, String fileName, InputStream uploadedInputStream)
78 File tmpDir = new File(dirName);
79 LOG.info("tmpdir = " + File.separator + dirName);
80 if(!tmpDir.exists()) {
83 File file = new File(tmpDir + File.separator + fileName);
85 try (OutputStream os = new FileOutputStream(file, true);) {
87 byte[] bytes = new byte[1024];
88 while((read = uploadedInputStream.read(bytes)) != -1) {
89 os.write(bytes, 0, read);
92 return file.getAbsolutePath();
97 * get temp dirctory when upload package.
99 * @param dirName temp directory name
100 * @param fileName package name
103 public static String getTempDir(String dirName, String fileName) {
104 return Thread.currentThread().getContextClassLoader().getResource("/").getPath() + dirName + File.separator
105 + fileName.replace(CSAR_EXTENSION, "");
108 public static String getUnzipDir(String dirName) {
109 File tmpDir = new File(File.separator + dirName);
110 return tmpDir.getAbsolutePath().replace(CSAR_EXTENSION, "");
116 * @param dirName the directory of file
117 * @param fileName file name
120 public static boolean deleteFile(String dirName, String fileName) {
121 File tmpDir = new File(File.separator + dirName);
122 if(!tmpDir.exists()) {
125 File file = new File(tmpDir.getAbsolutePath() + File.separator + fileName);
127 boolean isFileDeleted=false;
128 String fileAbsPath = file.getAbsolutePath();
130 Files.delete(Paths.get(file.getPath()));
132 } catch (IOException e) {
133 LOG.error("fail to delete {} {} ", fileAbsPath, e);
135 return isFileDeleted;
140 public static String getCatalogueCsarPath() {
141 return File.separator + CATALOGUE_CSAR_DIR_NAME;
144 public static String getCatalogueImagePath() {
145 return File.separator + CATALOGUE_IMAGE_DIR_NAME;
151 * @param file file which to get the size
152 * @param fileUnit file unit
153 * @return String file size
155 public static String getFileSize(File file, int fileUnit) {
156 String fileSize = "";
157 DecimalFormat format = new DecimalFormat("#0.00");
159 fileSize = format.format((double)file.length() / fileUnit) + "M";
164 public static String formatFileSize(double fileLength, int fileUnit) {
165 DecimalFormat format = new DecimalFormat("#0.00");
166 return format.format(fileLength / fileUnit) + "M";
170 * fix package format.
172 * @param csarId package ID
175 public static String formatCsar(String csarId) {
176 String result = csarId;
177 if(csarId.indexOf(CSAR_EXTENSION) < 0) {
178 result += CSAR_EXTENSION;
184 * judge the file's format is yaml or not.
186 * @param file file to judge
189 public static boolean isYamlFile(File file) {
190 return !file.isDirectory() && file.getName().indexOf(".yaml") != -1;
194 * remove the csar suffix.
196 * @param csarName package name
199 public static String removeCsarSuffix(String csarName) {
200 return csarName.replaceAll(CSAR_EXTENSION, "");
204 * add the csar fuffix.
206 * @param csarName package name
209 public static String addCsarSuffix(String csarName) {
210 if(csarName.indexOf(CSAR_EXTENSION) == -1) {
211 return csarName + CSAR_EXTENSION;
219 * @param fileName file's name
222 public static String processFileName(String fileName) {
223 int index = fileName.indexOf(".zip");
228 return addCsarSuffix(fileName.replaceAll(".zip", ""));
232 * exchange object to string.
237 public static String objectToString(Object obj) {
241 Gson gson = new Gson();
243 return gson.toJson(obj);
246 public static String generateId() {
247 return UUID.randomUUID().toString();
251 * get the size format according file size.
253 * @param fileSize file size
254 * @return size format
256 public static String getFormatFileSize(long fileSize) {
262 return String.format("%.1f GB", (float)fileSize / gb);
263 } else if(fileSize >= mb) {
264 float fi = (float)fileSize / mb;
265 return String.format(fi > 100 ? "%.0f MB" : "%.1f MB", fi);
266 } else if(fileSize >= kb) {
267 float fi = (float)fileSize / kb;
268 return String.format(fi > 100 ? "%.0f KB" : "%.1f KB", fi);
270 return String.format("%d B", fileSize);
275 * get gson from json.
277 * @param jsonString json string
278 * @param templateClass template class
281 public static <T> T fromJson(String jsonString, Class<T> templateClass) {
282 Gson gson = new Gson();
283 return gson.fromJson(jsonString, templateClass);