2 * Copyright 2016 [ZTE] and others.
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
16 package org.openo.commontosca.catalog.wrapper;
\r
18 import java.io.BufferedReader;
\r
19 import java.io.File;
\r
20 import java.io.FileReader;
\r
21 import java.io.IOException;
\r
22 import java.text.SimpleDateFormat;
\r
23 import java.util.ArrayList;
\r
24 import java.util.Date;
\r
25 import java.util.HashSet;
\r
26 import java.util.List;
\r
28 import javax.ws.rs.NotFoundException;
\r
30 import org.openo.commontosca.catalog.cometd.CometdException;
\r
31 import org.openo.commontosca.catalog.common.CommonConstant;
\r
32 import org.openo.commontosca.catalog.common.FileUtil;
\r
33 import org.openo.commontosca.catalog.common.MsbAddrConfig;
\r
34 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
\r
35 import org.openo.commontosca.catalog.db.resource.PackageManager;
\r
36 import org.openo.commontosca.catalog.entity.EnumProcessState;
\r
37 import org.openo.commontosca.catalog.entity.EnumType;
\r
38 import org.openo.commontosca.catalog.entity.request.PackageBasicInfo;
\r
39 import org.openo.commontosca.catalog.ftp.Ftp;
\r
40 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
\r
41 import org.openo.commontosca.catalog.model.externalservice.entity.lifecycle.InstanceEntity;
\r
42 import org.openo.commontosca.catalog.model.externalservice.lifecycle.LifeCycleServiceConsumer;
\r
43 import org.openo.commontosca.catalog.common.ToolUtil;
\r
44 import org.openo.commontosca.catalog.db.entity.PackageData;
\r
45 import org.openo.commontosca.catalog.entity.CsarPackage;
\r
46 import org.openo.commontosca.catalog.entity.EnumOnboardState;
\r
47 import org.openo.commontosca.catalog.entity.EnumOperationalState;
\r
48 import org.openo.commontosca.catalog.entity.EnumUsageState;
\r
49 import org.openo.commontosca.catalog.entity.response.PackageMeta;
\r
50 import org.openo.commontosca.catalog.ftp.FtpUtil;
\r
51 import org.slf4j.Logger;
\r
52 import org.slf4j.LoggerFactory;
\r
54 import com.google.gson.Gson;
\r
55 import com.google.gson.reflect.TypeToken;
\r
61 public class PackageWrapperUtil {
\r
62 private static final Logger LOG = LoggerFactory.getLogger(PackageWrapperUtil.class);
\r
65 public static List<CsarPackage> formJson2Packages(String packageJson) {
\r
66 List<CsarPackage> packageList =
\r
67 new Gson().fromJson(packageJson, new TypeToken<List<CsarPackage>>() {}.getType());
\r
68 if (null == packageList || packageList.size() == 0) {
\r
69 throw new NotFoundException("Package do not exist");
\r
74 public static long getPacakgeSize(String fileLocation) {
\r
75 File file = new File(fileLocation);
\r
76 return file.length();
\r
79 public static PackageData getPackageData(PackageMeta meta) {
\r
80 PackageData packageData = new PackageData();
\r
81 packageData.setCreateTime(meta.getCreateTime());
\r
82 packageData.setDeletionPending(String.valueOf(meta.isDeletionPending()));
\r
83 packageData.setDownloadUri(meta.getDownloadUri());
\r
84 packageData.setFormat(meta.getFormat());
\r
85 packageData.setModifyTime(meta.getModifyTime());
\r
86 packageData.setName(meta.getName());
\r
87 packageData.setCsarId(meta.getCsarId());
\r
88 packageData.setOperationalState(meta.getOperationalState().toString());
\r
89 packageData.setProvider(meta.getProvider());
\r
90 String fileSize = meta.getSize();
\r
91 packageData.setSize(fileSize);
\r
92 packageData.setType(meta.getType());
\r
93 packageData.setUsageState(meta.getUsageState().toString());
\r
94 packageData.setVersion(meta.getVersion());
\r
95 packageData.setOnBoardState(meta.getOnBoardState());
\r
96 packageData.setProcessState(meta.getProcessState().toString());
\r
100 public static boolean isUploadEnd(String contentRange, String csarName) {
\r
101 String range = contentRange;
\r
102 range = range.replace("bytes", "").trim();
\r
103 range = range.substring(0, range.indexOf("/"));
\r
105 contentRange.substring(contentRange.indexOf("/") + 1, contentRange.length()).trim();
\r
106 int fileSize = Integer.parseInt(size);
\r
107 String[] ranges = range.split("-");
\r
108 int startPosition = Integer.parseInt(ranges[0]);
\r
109 if (startPosition == 0) {
\r
110 // delPackageBySync(csarName);
\r
112 // index start from 0
\r
113 int endPosition = Integer.parseInt(ranges[1]) + 1;
\r
114 if (endPosition >= fileSize) {
\r
120 public static ArrayList<PackageData> getPackageInfoById(String csarId) {
\r
121 ArrayList<PackageData> result = new ArrayList<PackageData>();
\r
123 result = PackageManager.getInstance().queryPackageByCsarId(csarId);
\r
124 } catch (CatalogResourceException e) {
\r
125 LOG.error("query package by csarId from db error ! " + e.getMessage());
\r
130 public static PackageMeta getPackageMeta(String fileName, String fileLocation,
\r
131 PackageBasicInfo basic) {
\r
132 PackageMeta packageMeta = new PackageMeta();
\r
133 long size = getPacakgeSize(fileLocation);
\r
134 packageMeta.setFormat(basic.getFormat());
\r
135 String packageId = ToolUtil.generateId();
\r
136 packageMeta.setName(fileName.replace(CommonConstant.CSAR_SUFFIX, ""));
\r
137 packageMeta.setCsarId(packageId);
\r
138 packageMeta.setType(basic.getType().toString());
\r
139 packageMeta.setVersion(basic.getVersion());
\r
140 packageMeta.setProvider(basic.getProvider());
\r
141 packageMeta.setDeletionPending(false);
\r
142 String sizeStr = ToolUtil.getFormatFileSize(size);
\r
143 packageMeta.setSize(sizeStr);
\r
144 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
\r
145 String currentTime = sdf1.format(new Date());
\r
146 packageMeta.setCreateTime(currentTime);
\r
147 packageMeta.setModifyTime(currentTime);
\r
148 packageMeta.setOperationalState(EnumOperationalState.Disabled);
\r
149 packageMeta.setUsageState(EnumUsageState.NotInUse);
\r
150 packageMeta.setOnBoardState(EnumOnboardState.nonOnBoarded.getValue());
\r
151 packageMeta.setProcessState(EnumProcessState.normal);
\r
152 return packageMeta;
\r
155 public static String getPackagePath(String csarId) {
\r
156 ArrayList<PackageData> packageList = new ArrayList<PackageData>();
\r
157 String downloadUri = null;
\r
159 packageList = PackageManager.getInstance().queryPackageByCsarId(csarId);
\r
160 downloadUri = packageList.get(0).getDownloadUri();
\r
161 } catch (CatalogResourceException e) {
\r
162 LOG.error("Query CSAR package by ID failed ! csarId = " + csarId);
\r
164 return downloadUri;
\r
168 public static HashSet<String> instanceConvertToHashSet(ArrayList<InstanceEntity> instancelist) {
\r
169 HashSet<String> result = new HashSet<String>();
\r
170 if (instancelist != null) {
\r
171 for (InstanceEntity instance : instancelist) {
\r
172 result.add(instance.getServiceTemplateId());
\r
178 public static boolean isExistInstanceCSAR(String csarId) throws CometdException {
\r
179 // 查询各O(GSO、NFVO、SDNO)的资源实例数据库,查询指定csarId对应的服务模版
\r
180 ArrayList<ServiceTemplate> templateList = queryAvailableTemplatesByCsar(csarId);
\r
181 // 调生命周期的接口查询所有实例,查询实例中是否包含指定csarId对应的服务模析ID
\r
182 HashSet<String> templateSet = instanceConvertToHashSet(LifeCycleServiceConsumer.getInstances());
\r
183 if (templateList != null && templateList.size() > 0 && templateSet.size() > 0) {
\r
184 for (ServiceTemplate temp : templateList) {
\r
185 if (templateSet.contains(temp.getServiceTemplateId())) {
\r
193 public static ArrayList<ServiceTemplate> queryAvailableTemplatesByCsar(String csarId) {
\r
195 // ArrayList<ServiceTemplate> resultlist = new ArrayList<ServiceTemplate>();
\r
196 // String filter = LDAPUtil.getObjectClassFilter(LDAPConstant.OBJECTCLASS_CSAR);
\r
198 // LDAPDataFactory.getInstance().queryData(EnumLDAPData.SERVICETEMPLATE, null, false,
\r
200 // Type type = new TypeToken<ArrayList<ServiceTemplate>>() {}.getType();
\r
201 // ArrayList<ServiceTemplate> templateList = new Gson().fromJson(result, type);
\r
202 // for (ServiceTemplate temp : templateList) {
\r
203 // if (temp.getCsarid().equals(csarId)) {
\r
204 // resultlist.add(temp);
\r
207 // return resultlist;
\r
210 // public static void publishDeletionPendingStatusCometdMessage(String csarid) {
\r
212 // Map<String, Object> cometdMessage = new HashMap<String, Object>();
\r
213 // cometdMessage.put("csarid", csarid);
\r
214 // cometdMessage.put("status", "deletionPending");
\r
215 // CometdService.getInstance().publish(CommonConstant.COMETD_CHANNEL_PACKAGE_DELETE,
\r
217 // } catch (CometdException e) {
\r
218 // LOG.error("publish delfinish cometdmsg fail.", e);
\r
226 public static Ftp getFtpDetail(String ftpUrl) {
\r
227 Ftp ftp = new Ftp();
\r
228 int index1 = ftpUrl.indexOf("ftp://");
\r
229 int index2 = ftpUrl.indexOf("@");
\r
230 String userPassSubString = ftpUrl.substring(index1, index2);
\r
231 int index3 = userPassSubString.indexOf(":");
\r
232 String userName = userPassSubString.substring(0, index3);
\r
233 String pass = userPassSubString.substring(index3 + 1);
\r
234 String subString1 = ftpUrl.substring(index2 + 1);
\r
235 int index4 = subString1.indexOf("/");
\r
236 String ipPortSubString = subString1.substring(0, index4);
\r
237 int index5 = ipPortSubString.indexOf(":");
\r
238 String ip = ipPortSubString.substring(0, index5);
\r
239 String port = ipPortSubString.substring(index5 + 1);
\r
240 int index6 = ftpUrl.lastIndexOf("/");
\r
241 String path = ftpUrl.substring(0, index6);
\r
244 ftp.setPort(Integer.valueOf(port));
\r
246 ftp.setUserName(userName);
\r
254 // public static String getFtpDir(String ftpUrl) {
\r
255 // // TODO Auto-generated method stub
\r
263 public static String getPackageName(String ftpUrl) {
\r
264 int index = ftpUrl.lastIndexOf("/");
\r
265 String packageName = ftpUrl.substring(index);
\r
266 return packageName;
\r
269 public static void downPackageFromFtp(String ftpUrl, String tempDirName) {
\r
270 Ftp ftp = new Ftp();
\r
271 ftp = PackageWrapperUtil.getFtpDetail(ftpUrl);
\r
272 String remoteBaseDir = ftp.getPath();
\r
274 FtpUtil.startDown(ftp, tempDirName, remoteBaseDir);
\r
275 } catch (Exception e) {
\r
276 LOG.error("Down package from ftp failed !");
\r
284 public static ArrayList<PackageMeta> packageDataList2PackageMetaList(
\r
285 ArrayList<PackageData> dbResult) {
\r
286 ArrayList<PackageMeta> metas = new ArrayList<PackageMeta>();
\r
287 PackageMeta meta = new PackageMeta();
\r
288 for (int i = 0; i < dbResult.size(); i++) {
\r
289 PackageData data = dbResult.get(i);
\r
290 meta = packageData2PackageMeta(data);
\r
296 public static EnumOnboardState getEnumByValue(String value) {
\r
297 if (value == "non-onBoarded") {
\r
298 return EnumOnboardState.nonOnBoarded;
\r
300 return EnumOnboardState.onBoarded;
\r
304 private static PackageMeta packageData2PackageMeta(PackageData packageData) {
\r
305 PackageMeta meta = new PackageMeta();
\r
306 meta.setCsarId(packageData.getCsarId());
\r
307 meta.setCreateTime(packageData.getCreateTime());
\r
308 meta.setDeletionPending(Boolean.getBoolean(packageData.getDeletionPending()));
\r
309 String packageUri =
\r
310 packageData.getDownloadUri() + packageData.getName() + CommonConstant.CSAR_SUFFIX;
\r
311 String packageUrl = getUrl(packageUri);
\r
312 meta.setDownloadUri(packageUrl);
\r
313 meta.setFormat(packageData.getFormat());
\r
314 meta.setModifyTime(packageData.getModifyTime());
\r
315 meta.setName(packageData.getName());
\r
316 meta.setOperationalState(EnumOperationalState.valueOf(packageData.getOperationalState()));
\r
317 meta.setProvider(packageData.getProvider());
\r
318 meta.setSize(packageData.getSize());
\r
319 meta.setType(packageData.getType());
\r
320 meta.setUsageState(EnumUsageState.valueOf(packageData.getUsageState()));
\r
321 meta.setVersion(packageData.getVersion());
\r
322 meta.setOnBoardState(packageData.getOnBoardState());
\r
323 meta.setProcessState(EnumProcessState.valueOf(packageData.getProcessState()));
\r
327 public static String getUrl(String uri) {
\r
329 if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {
\r
330 url = MsbAddrConfig.getMsbAddress() + uri.substring(1);
\r
332 url = MsbAddrConfig.getMsbAddress() + uri;
\r
333 String urlresult = url.replace("\\", "/");
\r
337 public static String getLocalPath(String uri) {
\r
338 File srcDir = new File(uri);
\r
339 String localPath = srcDir.getAbsolutePath();
\r
340 return localPath.replace("\\", "/");
\r
344 * @param fileLocation
\r
347 public static PackageBasicInfo getPacageBasicInfo(String fileLocation) {
\r
348 PackageBasicInfo basicInfo = new PackageBasicInfo();
\r
349 String unzipDir = ToolUtil.getUnzipDir(fileLocation);
\r
350 boolean isXmlCsar = false;
\r
352 String tempfolder = unzipDir;
\r
353 ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder);
\r
354 if (unzipFiles.isEmpty()) {
\r
357 for (String unzipFile : unzipFiles) {
\r
358 if (unzipFile.endsWith(CommonConstant.CSAR_META)) {
\r
359 basicInfo = readCsarMeta(unzipFile);
\r
361 if (ToolUtil.isYamlFile(new File(unzipFile))) {
\r
365 } catch (IOException e) {
\r
366 LOG.error("judge package type error !");
\r
369 basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT);
\r
371 basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT);
\r
380 private static PackageBasicInfo readCsarMeta(String unzipFile) {
\r
381 PackageBasicInfo basicInfo = new PackageBasicInfo();
\r
382 File file = new File(unzipFile);
\r
383 BufferedReader reader = null;
\r
385 reader = new BufferedReader(new FileReader(file));
\r
386 String tempString = null;
\r
387 while ((tempString = reader.readLine()) != null) {
\r
388 if (tempString.startsWith(CommonConstant.CSAR_TYPE_META)) {
\r
389 int count = tempString.indexOf(":") + 1;
\r
390 basicInfo.setType(EnumType.valueOf(tempString.substring(count)));
\r
392 if (tempString.startsWith(CommonConstant.CSAR_PROVIDER_META)) {
\r
393 int count = tempString.indexOf(":") + 1;
\r
394 basicInfo.setProvider(tempString.substring(count));
\r
396 if (tempString.startsWith(CommonConstant.CSAR_VERSION_META)) {
\r
397 int count = tempString.indexOf(":") + 1;
\r
398 basicInfo.setVersion(tempString.substring(count));
\r
402 } catch (IOException e) {
\r
403 e.printStackTrace();
\r
405 if (reader != null) {
\r
408 } catch (IOException e1) {
\r