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 dirName = File.separator + dirName;
80 LOG.info("tmpdir = {}" , dirName);
81 if(!tmpDir.exists()) {
84 File file = new File(tmpDir + File.separator + fileName);
86 try (OutputStream os = new FileOutputStream(file, true);) {
88 byte[] bytes = new byte[1024];
89 while((read = uploadedInputStream.read(bytes)) != -1) {
90 os.write(bytes, 0, read);
93 return file.getAbsolutePath();
98 * get temp dirctory when upload package.
100 * @param dirName temp directory name
101 * @param fileName package name
104 public static String getTempDir(String dirName, String fileName) {
105 return Thread.currentThread().getContextClassLoader().getResource("/").getPath() + dirName + File.separator
106 + fileName.replace(CSAR_EXTENSION, "");
109 public static String getUnzipDir(String dirName) {
110 File tmpDir = new File(File.separator + dirName);
111 return tmpDir.getAbsolutePath().replace(CSAR_EXTENSION, "");
117 * @param dirName the directory of file
118 * @param fileName file name
121 public static boolean deleteFile(String dirName, String fileName) {
122 File tmpDir = new File(File.separator + dirName);
123 if(!tmpDir.exists()) {
126 File file = new File(tmpDir.getAbsolutePath() + File.separator + fileName);
128 boolean isFileDeleted=false;
129 String fileAbsPath = file.getAbsolutePath();
131 Files.delete(Paths.get(file.getPath()));
133 } catch (IOException e) {
134 LOG.error("fail to delete {} {} ", fileAbsPath, e);
136 return isFileDeleted;
141 public static String getCatalogueCsarPath() {
142 return File.separator + CATALOGUE_CSAR_DIR_NAME;
145 public static String getCatalogueImagePath() {
146 return File.separator + CATALOGUE_IMAGE_DIR_NAME;
152 * @param file file which to get the size
153 * @param fileUnit file unit
154 * @return String file size
156 public static String getFileSize(File file, int fileUnit) {
157 String fileSize = "";
158 DecimalFormat format = new DecimalFormat("#0.00");
160 fileSize = format.format((double)file.length() / fileUnit) + "M";
165 public static String formatFileSize(double fileLength, int fileUnit) {
166 DecimalFormat format = new DecimalFormat("#0.00");
167 return format.format(fileLength / fileUnit) + "M";
171 * fix package format.
173 * @param csarId package ID
176 public static String formatCsar(String csarId) {
177 String result = csarId;
178 if(csarId.indexOf(CSAR_EXTENSION) < 0) {
179 result += CSAR_EXTENSION;
185 * judge the file's format is yaml or not.
187 * @param file file to judge
190 public static boolean isYamlFile(File file) {
191 return !file.isDirectory() && file.getName().indexOf(".yaml") != -1;
195 * remove the csar suffix.
197 * @param csarName package name
200 public static String removeCsarSuffix(String csarName) {
201 return csarName.replaceAll(CSAR_EXTENSION, "");
205 * add the csar fuffix.
207 * @param csarName package name
210 public static String addCsarSuffix(String csarName) {
211 if(csarName.indexOf(CSAR_EXTENSION) == -1) {
212 return csarName + CSAR_EXTENSION;
220 * @param fileName file's name
223 public static String processFileName(String fileName) {
224 int index = fileName.indexOf(".zip");
229 return addCsarSuffix(fileName.replaceAll(".zip", ""));
233 * exchange object to string.
238 public static String objectToString(Object obj) {
242 Gson gson = new Gson();
244 return gson.toJson(obj);
247 public static String generateId() {
248 return UUID.randomUUID().toString();
252 * get the size format according file size.
254 * @param fileSize file size
255 * @return size format
257 public static String getFormatFileSize(long fileSize) {
263 return String.format("%.1f GB", (float)fileSize / gb);
264 } else if(fileSize >= mb) {
265 float fi = (float)fileSize / mb;
266 return String.format(fi > 100 ? "%.0f MB" : "%.1f MB", fi);
267 } else if(fileSize >= kb) {
268 float fi = (float)fileSize / kb;
269 return String.format(fi > 100 ? "%.0f KB" : "%.1f KB", fi);
271 return String.format("%d B", fileSize);
276 * get gson from json.
278 * @param jsonString json string
279 * @param templateClass template class
282 public static <T> T fromJson(String jsonString, Class<T> templateClass) {
283 Gson gson = new Gson();
284 return gson.fromJson(jsonString, templateClass);