ed20c14ce0092d57a761c2cf9207d4159280205f
[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.EnumOnboardState;\r
46 import org.openo.commontosca.catalog.entity.EnumOperationalState;\r
47 import org.openo.commontosca.catalog.entity.EnumUsageState;\r
48 import org.openo.commontosca.catalog.entity.response.PackageMeta;\r
49 import org.openo.commontosca.catalog.ftp.FtpUtil;\r
50 import org.openo.commontosca.catalog.model.externalservice.entity.lifecycleEnity.InstanceEntity;\r
51 import org.slf4j.Logger;\r
52 import org.slf4j.LoggerFactory;\r
53 \r
54 import com.google.gson.Gson;\r
55 import com.google.gson.reflect.TypeToken;\r
56 \r
57 /**\r
58  * @author 00164331\r
59  * \r
60  */\r
61 public class PackageWrapperUtil {\r
62     private static final Logger LOG = LoggerFactory.getLogger(PackageWrapperUtil.class);\r
63 \r
64 \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
70         }\r
71         return packageList;\r
72     }\r
73 \r
74     public static long getPacakgeSize(String fileLocation) {\r
75         File file = new File(fileLocation);\r
76         return file.length();\r
77     }\r
78 \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
97         return packageData;\r
98     }\r
99 \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
104         String size =\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
111         }\r
112         // index start from 0\r
113         int endPosition = Integer.parseInt(ranges[1]) + 1;\r
114         if (endPosition >= fileSize) {\r
115             return true;\r
116         }\r
117         return false;\r
118     }\r
119 \r
120     public static ArrayList<PackageData> getPackageInfoById(String csarId) {\r
121         ArrayList<PackageData> result = new ArrayList<PackageData>();\r
122         try {\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
126         }\r
127         return result;\r
128     }\r
129 \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.formatFileSize(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
153     }\r
154 \r
155     public static String getPackagePath(String csarId) {\r
156         ArrayList<PackageData> packageList = new ArrayList<PackageData>();\r
157         String downloadUri = null;\r
158         try {\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
163         }\r
164         return downloadUri;\r
165     }\r
166 \r
167 \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
173             }\r
174         }\r
175         return result;\r
176     }\r
177 \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 =\r
183                 instanceConvertToHashSet(LifeCycleServiceConsumer.getInstances());\r
184         if (templateList != null && templateList.size() > 0 && templateSet.size() > 0) {\r
185             for (ServiceTemplate temp : templateList) {\r
186                 if (templateSet.contains(temp.getServiceTemplateId())) {\r
187                     return true;\r
188                 }\r
189             }\r
190         }\r
191         return false;\r
192     }\r
193 \r
194     public static ArrayList<ServiceTemplate> queryAvailableTemplatesByCsar(String csarId) {\r
195         return null;\r
196         // ArrayList<ServiceTemplate> resultlist = new ArrayList<ServiceTemplate>();\r
197         // String filter = LDAPUtil.getObjectClassFilter(LDAPConstant.OBJECTCLASS_CSAR);\r
198         // String result =\r
199         // LDAPDataFactory.getInstance().queryData(EnumLDAPData.SERVICETEMPLATE, null, false,\r
200         // filter);\r
201         // Type type = new TypeToken<ArrayList<ServiceTemplate>>() {}.getType();\r
202         // ArrayList<ServiceTemplate> templateList = new Gson().fromJson(result, type);\r
203         // for (ServiceTemplate temp : templateList) {\r
204         // if (temp.getCsarid().equals(csarId)) {\r
205         // resultlist.add(temp);\r
206         // }\r
207         // }\r
208         // return resultlist;\r
209     }\r
210 \r
211     // public static void publishDeletionPendingStatusCometdMessage(String csarid) {\r
212     // try {\r
213     // Map<String, Object> cometdMessage = new HashMap<String, Object>();\r
214     // cometdMessage.put("csarid", csarid);\r
215     // cometdMessage.put("status", "deletionPending");\r
216     // CometdService.getInstance().publish(CommonConstant.COMETD_CHANNEL_PACKAGE_DELETE,\r
217     // cometdMessage);\r
218     // } catch (CometdException e) {\r
219     // LOG.error("publish delfinish cometdmsg fail.", e);\r
220     // }\r
221     // }\r
222 \r
223     /**\r
224      * @param ftpUrl\r
225      * @return\r
226      */\r
227     public static Ftp getFtpDetail(String ftpUrl) {\r
228         Ftp ftp = new Ftp();\r
229         int index1 = ftpUrl.indexOf("ftp://");\r
230         int index2 = ftpUrl.indexOf("@");\r
231         String userPassSubString = ftpUrl.substring(index1, index2);\r
232         int index3 = userPassSubString.indexOf(":");\r
233         String userName = userPassSubString.substring(0, index3);\r
234         String pass = userPassSubString.substring(index3 + 1);\r
235         String subString1 = ftpUrl.substring(index2 + 1);\r
236         int index4 = subString1.indexOf("/");\r
237         String ipPortSubString = subString1.substring(0, index4);\r
238         int index5 = ipPortSubString.indexOf(":");\r
239         String ip = ipPortSubString.substring(0, index5);\r
240         String port = ipPortSubString.substring(index5 + 1);\r
241         int index6 = ftpUrl.lastIndexOf("/");\r
242         String path = ftpUrl.substring(0, index6);\r
243         ftp.setIpAddr(ip);\r
244         ftp.setPath(path);\r
245         ftp.setPort(Integer.valueOf(port));\r
246         ftp.setPwd(pass);\r
247         ftp.setUserName(userName);\r
248         return ftp;\r
249     }\r
250 \r
251     /**\r
252      * @param ftpUrl\r
253      * @return\r
254      */\r
255     // public static String getFtpDir(String ftpUrl) {\r
256     // // TODO Auto-generated method stub\r
257     // return null;\r
258     // }\r
259 \r
260     /**\r
261      * @param ftpUrl\r
262      * @return\r
263      */\r
264     public static String getPackageName(String ftpUrl) {\r
265         int index = ftpUrl.lastIndexOf("/");\r
266         String packageName = ftpUrl.substring(index);\r
267         return packageName;\r
268     }\r
269 \r
270     public static void downPackageFromFtp(String ftpUrl, String tempDirName) {\r
271         Ftp ftp = new Ftp();\r
272         ftp = PackageWrapperUtil.getFtpDetail(ftpUrl);\r
273         String remoteBaseDir = ftp.getPath();\r
274         try {\r
275             FtpUtil.startDown(ftp, tempDirName, remoteBaseDir);\r
276         } catch (Exception e) {\r
277             LOG.error("Down package from ftp failed !");\r
278         }\r
279     }\r
280 \r
281     /**\r
282      * @param dbResult\r
283      * @return\r
284      */\r
285     public static ArrayList<PackageMeta> packageDataList2PackageMetaList(\r
286             ArrayList<PackageData> dbResult) {\r
287         ArrayList<PackageMeta> metas = new ArrayList<PackageMeta>();\r
288         PackageMeta meta = new PackageMeta();\r
289         for (int i = 0; i < dbResult.size(); i++) {\r
290             PackageData data = dbResult.get(i);\r
291             meta = packageData2PackageMeta(data);\r
292             metas.add(meta);\r
293         }\r
294         return metas;\r
295     }\r
296     \r
297     public static EnumOnboardState getEnumByValue(String value) {\r
298         if(value == "non-onBoarded") {\r
299             return EnumOnboardState.nonOnBoarded;\r
300         } else {\r
301             return EnumOnboardState.onBoarded;\r
302         }\r
303     }\r
304 \r
305     private static PackageMeta packageData2PackageMeta(PackageData packageData) {\r
306         PackageMeta meta = new PackageMeta();\r
307         meta.setCsarId(packageData.getCsarId());\r
308         meta.setCreateTime(packageData.getCreateTime());\r
309         meta.setDeletionPending(Boolean.getBoolean(packageData.getDeletionPending()));\r
310         String packageUri =\r
311                 packageData.getDownloadUri() + packageData.getName() + CommonConstant.CSAR_SUFFIX;\r
312         String packageUrl = getUrl(packageUri);\r
313         meta.setDownloadUri(packageUrl);\r
314         meta.setFormat(packageData.getFormat());\r
315         meta.setModifyTime(packageData.getModifyTime());\r
316         meta.setName(packageData.getName());\r
317         meta.setOperationalState(EnumOperationalState.valueOf(packageData.getOperationalState()));\r
318         meta.setProvider(packageData.getProvider());\r
319         meta.setSize(packageData.getSize());\r
320         meta.setType(packageData.getType());\r
321         meta.setUsageState(EnumUsageState.valueOf(packageData.getUsageState()));\r
322         meta.setVersion(packageData.getVersion());\r
323         meta.setOnBoardState(packageData.getOnBoardState());\r
324         meta.setProcessState(EnumProcessState.valueOf(packageData.getProcessState()));\r
325         return meta;\r
326     }\r
327 \r
328     public static String getUrl(String uri) {\r
329         String url = null;\r
330         if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {\r
331             url = MsbAddrConfig.getMsbAddress() + uri.substring(1);\r
332         }\r
333         url = MsbAddrConfig.getMsbAddress() + uri;\r
334         String urlresult = url.replace("\\", "/");\r
335         return urlresult;\r
336     }\r
337 \r
338     public static String getLocalPath(String uri) {\r
339         File srcDir = new File(uri);\r
340         String localPath = srcDir.getAbsolutePath();\r
341         return localPath.replace("\\", "/");\r
342     }\r
343 \r
344     /**\r
345      * @param fileLocation\r
346      * @return\r
347      */\r
348     public static PackageBasicInfo getPacageBasicInfo(String fileLocation) {\r
349         PackageBasicInfo basicInfo = new PackageBasicInfo();\r
350         String unzipDir = ToolUtil.getUnzipDir(fileLocation);\r
351         boolean isXmlCsar = false;\r
352         try {\r
353             String tempfolder = unzipDir;\r
354             ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder);\r
355             if (unzipFiles.isEmpty()) {\r
356                 isXmlCsar = true;\r
357             }\r
358             for (String unzipFile : unzipFiles) {\r
359                 if (unzipFile.endsWith(CommonConstant.CSAR_META)) {\r
360                     basicInfo = readCsarMeta(unzipFile);\r
361                 }\r
362                 if (ToolUtil.isYamlFile(new File(unzipFile))) {\r
363                     isXmlCsar = false;\r
364                 }\r
365             }\r
366         } catch (IOException e) {\r
367             LOG.error("judge package type error !");\r
368         }\r
369         if (isXmlCsar) {\r
370             basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT);\r
371         } else {\r
372             basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT);\r
373         }\r
374         return basicInfo;\r
375     }\r
376 \r
377     /**\r
378      * @param unzipFile\r
379      * @return\r
380      */\r
381     private static PackageBasicInfo readCsarMeta(String unzipFile) {\r
382         PackageBasicInfo basicInfo = new PackageBasicInfo();\r
383         File file = new File(unzipFile);\r
384         BufferedReader reader = null;\r
385         try {\r
386             reader = new BufferedReader(new FileReader(file));\r
387             String tempString = null;\r
388             while ((tempString = reader.readLine()) != null) {\r
389                 if (tempString.startsWith(CommonConstant.CSAR_TYPE_META)) {\r
390                     int count = tempString.indexOf(":") + 1;\r
391                     basicInfo.setType(EnumType.valueOf(tempString.substring(count)));\r
392                 }\r
393                 if (tempString.startsWith(CommonConstant.CSAR_PROVIDER_META)) {\r
394                     int count = tempString.indexOf(":") + 1;\r
395                     basicInfo.setProvider(tempString.substring(count));\r
396                 }\r
397                 if (tempString.startsWith(CommonConstant.CSAR_VERSION_META)) {\r
398                     int count = tempString.indexOf(":") + 1;\r
399                     basicInfo.setVersion(tempString.substring(count));\r
400                 }\r
401             }\r
402             reader.close();\r
403         } catch (IOException e) {\r
404             e.printStackTrace();\r
405         } finally {\r
406             if (reader != null) {\r
407                 try {\r
408                     reader.close();\r
409                 } catch (IOException e1) {\r
410                 }\r
411             }\r
412         }\r
413         return basicInfo;\r
414     }\r
415 }\r