7395ed1605e47080a23633caa787b8fa86c4edf8
[vfc/nfvo/catalog.git] /
1 /**\r
2  * Copyright 2016 [ZTE] and others.\r
3  *\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
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\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
15  */\r
16 package org.openo.commontosca.catalog.wrapper;\r
17 \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
27 \r
28 import javax.ws.rs.NotFoundException;\r
29 \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.lifecycle.LifeCycleServiceConsumer;\r
42 import org.openo.commontosca.catalog.common.ToolUtil;\r
43 import org.openo.commontosca.catalog.db.entity.PackageData;\r
44 import org.openo.commontosca.catalog.entity.CSARPackage;\r
45 import org.openo.commontosca.catalog.entity.EnumOperationalState;\r
46 import org.openo.commontosca.catalog.entity.EnumUsageState;\r
47 import org.openo.commontosca.catalog.entity.response.PackageMeta;\r
48 import org.openo.commontosca.catalog.ftp.FtpUtil;\r
49 import org.openo.commontosca.catalog.model.externalservice.entity.lifecycleEnity.InstanceEntity;\r
50 import org.slf4j.Logger;\r
51 import org.slf4j.LoggerFactory;\r
52 \r
53 import com.google.gson.Gson;\r
54 import com.google.gson.reflect.TypeToken;\r
55 \r
56 /**\r
57  * @author 00164331\r
58  * \r
59  */\r
60 public class PackageWrapperUtil {\r
61     private static final Logger LOG = LoggerFactory.getLogger(PackageWrapperUtil.class);\r
62 \r
63 \r
64     public static List<CSARPackage> formJson2Packages(String packageJson) {\r
65         List<CSARPackage> packageList =\r
66                 new Gson().fromJson(packageJson, new TypeToken<List<CSARPackage>>() {}.getType());\r
67         if (null == packageList || packageList.size() == 0) {\r
68             throw new NotFoundException("Package do not exist");\r
69         }\r
70         return packageList;\r
71     }\r
72 \r
73     public static long getPacakgeSize(String fileLocation) {\r
74         File file = new File(fileLocation);\r
75         return file.length();\r
76     }\r
77 \r
78     public static PackageData getPackageData(PackageMeta meta) {\r
79         PackageData packageData = new PackageData();\r
80         packageData.setCreateTime(meta.getCreateTime());\r
81         packageData.setDeletionPending(String.valueOf(meta.isDeletionPending()));\r
82         packageData.setDownloadUri(meta.getDownloadUri());\r
83         packageData.setFormat(meta.getFormat());\r
84         packageData.setModifyTime(meta.getModifyTime());\r
85         packageData.setName(meta.getName());\r
86         packageData.setCsarId(meta.getCsarId());\r
87         packageData.setOperationalState(meta.getOperationalState().toString());\r
88         packageData.setProvider(meta.getProvider());\r
89         String fileSize = meta.getSize();\r
90         packageData.setSize(fileSize);\r
91         packageData.setType(meta.getType());\r
92         packageData.setUsageState(meta.getUsageState().toString());\r
93         packageData.setVersion(meta.getVersion());\r
94         packageData.setOnBoardState(meta.getOnBoardState());\r
95         packageData.setProcessState(meta.getProcessState().toString());\r
96         return packageData;\r
97     }\r
98 \r
99     public static boolean isUploadEnd(String contentRange, String csarName) {\r
100         String range = contentRange;\r
101         range = range.replace("bytes", "").trim();\r
102         range = range.substring(0, range.indexOf("/"));\r
103         String size =\r
104                 contentRange.substring(contentRange.indexOf("/") + 1, contentRange.length()).trim();\r
105         int fileSize = Integer.parseInt(size);\r
106         String[] ranges = range.split("-");\r
107         int startPosition = Integer.parseInt(ranges[0]);\r
108         if (startPosition == 0) {\r
109             // delPackageBySync(csarName);\r
110         }\r
111         // index start from 0\r
112         int endPosition = Integer.parseInt(ranges[1]) + 1;\r
113         if (endPosition >= fileSize) {\r
114             return true;\r
115         }\r
116         return false;\r
117     }\r
118 \r
119     public static ArrayList<PackageData> getPackageInfoById(String csarId) {\r
120         ArrayList<PackageData> result = new ArrayList<PackageData>();\r
121         try {\r
122             result = PackageManager.getInstance().queryPackageByCsarId(csarId);\r
123         } catch (CatalogResourceException e) {\r
124             LOG.error("query package by csarId from db error ! " + e.getMessage());\r
125         }\r
126         return result;\r
127     }\r
128 \r
129     public static PackageMeta getPackageMeta(String fileName, String fileLocation,\r
130             PackageBasicInfo basic) {\r
131         PackageMeta packageMeta = new PackageMeta();\r
132         long size = getPacakgeSize(fileLocation);\r
133         packageMeta.setFormat(basic.getFormat());\r
134         String packageId = ToolUtil.generateId();\r
135         packageMeta.setName(fileName.replace(CommonConstant.CSAR_SUFFIX, ""));\r
136         packageMeta.setCsarId(packageId);\r
137         packageMeta.setType(basic.getType().toString());\r
138         packageMeta.setVersion(basic.getVersion());\r
139         packageMeta.setProvider(basic.getProvider());\r
140         packageMeta.setDeletionPending(false);\r
141         String sizeStr = ToolUtil.formatFileSize(size);\r
142         packageMeta.setSize(sizeStr);\r
143         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");\r
144         String currentTime = sdf1.format(new Date());\r
145         packageMeta.setCreateTime(currentTime);\r
146         packageMeta.setModifyTime(currentTime);\r
147         packageMeta.setOperationalState(EnumOperationalState.Disabled);\r
148         packageMeta.setUsageState(EnumUsageState.NotInUse);\r
149         packageMeta.setOnBoardState("false");\r
150         packageMeta.setProcessState(EnumProcessState.normal);\r
151         return packageMeta;\r
152     }\r
153 \r
154     public static String getPackagePath(String csarId) {\r
155         ArrayList<PackageData> packageList = new ArrayList<PackageData>();\r
156         String downloadUri = null;\r
157         try {\r
158             packageList = PackageManager.getInstance().queryPackageByCsarId(csarId);\r
159             downloadUri = packageList.get(0).getDownloadUri();\r
160         } catch (CatalogResourceException e) {\r
161             LOG.error("Query CSAR package by ID failed ! csarId = " + csarId);\r
162         }\r
163         return downloadUri;\r
164     }\r
165 \r
166 \r
167     public static HashSet<String> instanceConvertToHashSet(ArrayList<InstanceEntity> instancelist) {\r
168         HashSet<String> result = new HashSet<String>();\r
169         if (instancelist != null) {\r
170             for (InstanceEntity instance : instancelist) {\r
171                 result.add(instance.getServiceTemplateId());\r
172             }\r
173         }\r
174         return result;\r
175     }\r
176 \r
177     public static boolean isExistInstanceCSAR(String csarId) throws CometdException {\r
178         // 查询各O(GSO、NFVO、SDNO)的资源实例数据库,查询指定csarId对应的服务模版\r
179         ArrayList<ServiceTemplate> templateList = queryAvailableTemplatesByCsar(csarId);\r
180         // 调生命周期的接口查询所有实例,查询实例中是否包含指定csarId对应的服务模析ID\r
181         HashSet<String> templateSet =\r
182                 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
186                     return true;\r
187                 }\r
188             }\r
189         }\r
190         return false;\r
191     }\r
192 \r
193     public static ArrayList<ServiceTemplate> queryAvailableTemplatesByCsar(String csarId) {\r
194         return null;\r
195         // ArrayList<ServiceTemplate> resultlist = new ArrayList<ServiceTemplate>();\r
196         // String filter = LDAPUtil.getObjectClassFilter(LDAPConstant.OBJECTCLASS_CSAR);\r
197         // String result =\r
198         // LDAPDataFactory.getInstance().queryData(EnumLDAPData.SERVICETEMPLATE, null, false,\r
199         // filter);\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
205         // }\r
206         // }\r
207         // return resultlist;\r
208     }\r
209 \r
210     // public static void publishDeletionPendingStatusCometdMessage(String csarid) {\r
211     // try {\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
216     // cometdMessage);\r
217     // } catch (CometdException e) {\r
218     // LOG.error("publish delfinish cometdmsg fail.", e);\r
219     // }\r
220     // }\r
221 \r
222     /**\r
223      * @param ftpUrl\r
224      * @return\r
225      */\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
242         ftp.setIpAddr(ip);\r
243         ftp.setPath(path);\r
244         ftp.setPort(Integer.valueOf(port));\r
245         ftp.setPwd(pass);\r
246         ftp.setUserName(userName);\r
247         return ftp;\r
248     }\r
249 \r
250     /**\r
251      * @param ftpUrl\r
252      * @return\r
253      */\r
254     // public static String getFtpDir(String ftpUrl) {\r
255     // // TODO Auto-generated method stub\r
256     // return null;\r
257     // }\r
258 \r
259     /**\r
260      * @param ftpUrl\r
261      * @return\r
262      */\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
267     }\r
268 \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
273         try {\r
274             FtpUtil.startDown(ftp, tempDirName, remoteBaseDir);\r
275         } catch (Exception e) {\r
276             LOG.error("Down package from ftp failed !");\r
277         }\r
278     }\r
279 \r
280     /**\r
281      * @param dbResult\r
282      * @return\r
283      */\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
291             metas.add(meta);\r
292         }\r
293         return metas;\r
294     }\r
295 \r
296     private static PackageMeta packageData2PackageMeta(PackageData packageData) {\r
297         PackageMeta meta = new PackageMeta();\r
298         meta.setCsarId(packageData.getCsarId());\r
299         meta.setCreateTime(packageData.getCreateTime());\r
300         meta.setDeletionPending(Boolean.getBoolean(packageData.getDeletionPending()));\r
301         String packageUri =\r
302                 packageData.getDownloadUri() + packageData.getName() + CommonConstant.CSAR_SUFFIX;\r
303         String packageUrl = getUrl(packageUri);\r
304         meta.setDownloadUri(packageUrl);\r
305         meta.setFormat(packageData.getFormat());\r
306         meta.setModifyTime(packageData.getModifyTime());\r
307         meta.setName(packageData.getName());\r
308         meta.setOperationalState(EnumOperationalState.valueOf(packageData.getOperationalState()));\r
309         meta.setProvider(packageData.getProvider());\r
310         meta.setSize(packageData.getSize());\r
311         meta.setType(packageData.getType());\r
312         meta.setUsageState(EnumUsageState.valueOf(packageData.getUsageState()));\r
313         meta.setVersion(packageData.getVersion());\r
314         meta.setOnBoardState(packageData.getOnBoardState());\r
315         meta.setProcessState(EnumProcessState.valueOf(packageData.getProcessState()));\r
316         return meta;\r
317     }\r
318 \r
319     public static String getUrl(String uri) {\r
320         String url = null;\r
321         if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {\r
322             url = MsbAddrConfig.getMsbAddress() + uri.substring(1);\r
323         }\r
324         url = MsbAddrConfig.getMsbAddress() + uri;\r
325         String urlresult = url.replace("\\", "/");\r
326         return urlresult;\r
327     }\r
328 \r
329     public static String getLocalPath(String uri) {\r
330         File srcDir = new File(uri);\r
331         String localPath = srcDir.getAbsolutePath();\r
332         return localPath.replace("\\", "/");\r
333     }\r
334 \r
335     /**\r
336      * @param fileLocation\r
337      * @return\r
338      */\r
339     public static PackageBasicInfo getPacageBasicInfo(String fileLocation) {\r
340         PackageBasicInfo basicInfo = new PackageBasicInfo();\r
341         String unzipDir = ToolUtil.getUnzipDir(fileLocation);\r
342         boolean isXmlCsar = false;\r
343         try {\r
344             String tempfolder = unzipDir;\r
345             ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder);\r
346             if (unzipFiles.isEmpty()) {\r
347                 isXmlCsar = true;\r
348             }\r
349             for (String unzipFile : unzipFiles) {\r
350                 if (unzipFile.endsWith(CommonConstant.CSAR_META)) {\r
351                     basicInfo = readCsarMeta(unzipFile);\r
352                 }\r
353                 if (ToolUtil.isYamlFile(new File(unzipFile))) {\r
354                     isXmlCsar = false;\r
355                 }\r
356             }\r
357         } catch (IOException e) {\r
358             LOG.error("judge package type error !");\r
359         }\r
360         if (isXmlCsar) {\r
361             basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT);\r
362         } else {\r
363             basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT);\r
364         }\r
365         return basicInfo;\r
366     }\r
367 \r
368     /**\r
369      * @param unzipFile\r
370      * @return\r
371      */\r
372     private static PackageBasicInfo readCsarMeta(String unzipFile) {\r
373         PackageBasicInfo basicInfo = new PackageBasicInfo();\r
374         File file = new File(unzipFile);\r
375         BufferedReader reader = null;\r
376         try {\r
377             reader = new BufferedReader(new FileReader(file));\r
378             String tempString = null;\r
379             while ((tempString = reader.readLine()) != null) {\r
380                 if (tempString.startsWith(CommonConstant.CSAR_TYPE_META)) {\r
381                     int count = tempString.indexOf(":") + 1;\r
382                     basicInfo.setType(EnumType.valueOf(tempString.substring(count)));\r
383                 }\r
384                 if (tempString.startsWith(CommonConstant.CSAR_PROVIDER_META)) {\r
385                     int count = tempString.indexOf(":") + 1;\r
386                     basicInfo.setProvider(tempString.substring(count));\r
387                 }\r
388                 if (tempString.startsWith(CommonConstant.CSAR_VERSION_META)) {\r
389                     int count = tempString.indexOf(":") + 1;\r
390                     basicInfo.setVersion(tempString.substring(count));\r
391                 }\r
392             }\r
393             reader.close();\r
394         } catch (IOException e) {\r
395             e.printStackTrace();\r
396         } finally {\r
397             if (reader != null) {\r
398                 try {\r
399                     reader.close();\r
400                 } catch (IOException e1) {\r
401                 }\r
402             }\r
403         }\r
404         return basicInfo;\r
405     }\r
406 }\r