9656cb6d35cbd6aa7f9f8211b5ce9affa3d8b829
[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.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
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.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
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 = 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   public static EnumOnboardState getEnumByValue(String value) {\r
297     if (value == "non-onBoarded") {\r
298       return EnumOnboardState.nonOnBoarded;\r
299     } else {\r
300       return EnumOnboardState.onBoarded;\r
301     }\r
302   }\r
303 \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
324     return meta;\r
325   }\r
326 \r
327   public static String getUrl(String uri) {\r
328     String url = null;\r
329     if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {\r
330       url = MsbAddrConfig.getMsbAddress() + uri.substring(1);\r
331     }\r
332     url = MsbAddrConfig.getMsbAddress() + uri;\r
333     String urlresult = url.replace("\\", "/");\r
334     return urlresult;\r
335   }\r
336 \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
341   }\r
342 \r
343   /**\r
344    * @param fileLocation\r
345    * @return\r
346    */\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
351     try {\r
352       String tempfolder = unzipDir;\r
353       ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder);\r
354       if (unzipFiles.isEmpty()) {\r
355         isXmlCsar = true;\r
356       }\r
357       for (String unzipFile : unzipFiles) {\r
358         if (unzipFile.endsWith(CommonConstant.CSAR_META)) {\r
359           basicInfo = readCsarMeta(unzipFile);\r
360         }\r
361         if (ToolUtil.isYamlFile(new File(unzipFile))) {\r
362           isXmlCsar = false;\r
363         }\r
364       }\r
365     } catch (IOException e) {\r
366       LOG.error("judge package type error !");\r
367     }\r
368     if (isXmlCsar) {\r
369       basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT);\r
370     } else {\r
371       basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT);\r
372     }\r
373     return basicInfo;\r
374   }\r
375 \r
376   /**\r
377    * @param unzipFile\r
378    * @return\r
379    */\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
384     try {\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
391         }\r
392         if (tempString.startsWith(CommonConstant.CSAR_PROVIDER_META)) {\r
393           int count = tempString.indexOf(":") + 1;\r
394           basicInfo.setProvider(tempString.substring(count));\r
395         }\r
396         if (tempString.startsWith(CommonConstant.CSAR_VERSION_META)) {\r
397           int count = tempString.indexOf(":") + 1;\r
398           basicInfo.setVersion(tempString.substring(count));\r
399         }\r
400       }\r
401       reader.close();\r
402     } catch (IOException e) {\r
403       e.printStackTrace();\r
404     } finally {\r
405       if (reader != null) {\r
406         try {\r
407           reader.close();\r
408         } catch (IOException e1) {\r
409         }\r
410       }\r
411     }\r
412     return basicInfo;\r
413   }\r
414 }\r