2837fd36ccf3b649f8c38ac73928c56db0dc3dc9
[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.common.CommonConstant;\r
31 import org.openo.commontosca.catalog.common.FileUtil;\r
32 import org.openo.commontosca.catalog.common.MsbAddrConfig;\r
33 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;\r
34 import org.openo.commontosca.catalog.db.resource.PackageManager;\r
35 import org.openo.commontosca.catalog.entity.EnumProcessState;\r
36 import org.openo.commontosca.catalog.entity.EnumType;\r
37 import org.openo.commontosca.catalog.entity.request.PackageBasicInfo;\r
38 import org.openo.commontosca.catalog.ftp.Ftp;\r
39 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;\r
40 import org.openo.commontosca.catalog.model.externalservice.entity.lifecycle.InstanceEntity;\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.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.getFormatFileSize(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(EnumOnboardState.nonOnBoarded.getValue());\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) {\r
178     // 查询各O(GSO、NFVO、SDNO)的资源实例数据库,查询指定csarId对应的服务模版\r
179     ArrayList<ServiceTemplate> templateList = queryAvailableTemplatesByCsar(csarId);\r
180     // 调生命周期的接口查询所有实例,查询实例中是否包含指定csarId对应的服务模析ID\r
181     HashSet<String> templateSet = instanceConvertToHashSet(LifeCycleServiceConsumer.getInstances());\r
182     if (templateList != null && templateList.size() > 0 && templateSet.size() > 0) {\r
183       for (ServiceTemplate temp : templateList) {\r
184         if (templateSet.contains(temp.getServiceTemplateId())) {\r
185           return true;\r
186         }\r
187       }\r
188     }\r
189     return false;\r
190   }\r
191 \r
192   public static ArrayList<ServiceTemplate> queryAvailableTemplatesByCsar(String csarId) {\r
193     return null;\r
194     // ArrayList<ServiceTemplate> resultlist = new ArrayList<ServiceTemplate>();\r
195     // String filter = LDAPUtil.getObjectClassFilter(LDAPConstant.OBJECTCLASS_CSAR);\r
196     // String result =\r
197     // LDAPDataFactory.getInstance().queryData(EnumLDAPData.SERVICETEMPLATE, null, false,\r
198     // filter);\r
199     // Type type = new TypeToken<ArrayList<ServiceTemplate>>() {}.getType();\r
200     // ArrayList<ServiceTemplate> templateList = new Gson().fromJson(result, type);\r
201     // for (ServiceTemplate temp : templateList) {\r
202     // if (temp.getCsarid().equals(csarId)) {\r
203     // resultlist.add(temp);\r
204     // }\r
205     // }\r
206     // return resultlist;\r
207   }\r
208 \r
209   // public static void publishDeletionPendingStatusCometdMessage(String csarid) {\r
210   // try {\r
211   // Map<String, Object> cometdMessage = new HashMap<String, Object>();\r
212   // cometdMessage.put("csarid", csarid);\r
213   // cometdMessage.put("status", "deletionPending");\r
214   // CometdService.getInstance().publish(CommonConstant.COMETD_CHANNEL_PACKAGE_DELETE,\r
215   // cometdMessage);\r
216   // } catch (CometdException e) {\r
217   // LOG.error("publish delfinish cometdmsg fail.", e);\r
218   // }\r
219   // }\r
220 \r
221   /**\r
222    * @param ftpUrl\r
223    * @return\r
224    */\r
225   public static Ftp getFtpDetail(String ftpUrl) {\r
226     Ftp ftp = new Ftp();\r
227     int index1 = ftpUrl.indexOf("ftp://");\r
228     int index2 = ftpUrl.indexOf("@");\r
229     String userPassSubString = ftpUrl.substring(index1, index2);\r
230     int index3 = userPassSubString.indexOf(":");\r
231     String userName = userPassSubString.substring(0, index3);\r
232     String pass = userPassSubString.substring(index3 + 1);\r
233     String subString1 = ftpUrl.substring(index2 + 1);\r
234     int index4 = subString1.indexOf("/");\r
235     String ipPortSubString = subString1.substring(0, index4);\r
236     int index5 = ipPortSubString.indexOf(":");\r
237     String ip = ipPortSubString.substring(0, index5);\r
238     String port = ipPortSubString.substring(index5 + 1);\r
239     int index6 = ftpUrl.lastIndexOf("/");\r
240     String path = ftpUrl.substring(0, index6);\r
241     ftp.setIpAddr(ip);\r
242     ftp.setPath(path);\r
243     ftp.setPort(Integer.valueOf(port));\r
244     ftp.setPwd(pass);\r
245     ftp.setUserName(userName);\r
246     return ftp;\r
247   }\r
248 \r
249   /**\r
250    * @param ftpUrl\r
251    * @return\r
252    */\r
253   // public static String getFtpDir(String ftpUrl) {\r
254   // // TODO Auto-generated method stub\r
255   // return null;\r
256   // }\r
257 \r
258   /**\r
259    * @param ftpUrl\r
260    * @return\r
261    */\r
262   public static String getPackageName(String ftpUrl) {\r
263     int index = ftpUrl.lastIndexOf("/");\r
264     String packageName = ftpUrl.substring(index);\r
265     return packageName;\r
266   }\r
267 \r
268   public static void downPackageFromFtp(String ftpUrl, String tempDirName) {\r
269     Ftp ftp = new Ftp();\r
270     ftp = PackageWrapperUtil.getFtpDetail(ftpUrl);\r
271     String remoteBaseDir = ftp.getPath();\r
272     try {\r
273       FtpUtil.startDown(ftp, tempDirName, remoteBaseDir);\r
274     } catch (Exception e) {\r
275       LOG.error("Down package from ftp failed !");\r
276     }\r
277   }\r
278 \r
279   /**\r
280    * @param dbResult\r
281    * @return\r
282    */\r
283   public static ArrayList<PackageMeta> packageDataList2PackageMetaList(\r
284       ArrayList<PackageData> dbResult) {\r
285     ArrayList<PackageMeta> metas = new ArrayList<PackageMeta>();\r
286     PackageMeta meta = new PackageMeta();\r
287     for (int i = 0; i < dbResult.size(); i++) {\r
288       PackageData data = dbResult.get(i);\r
289       meta = packageData2PackageMeta(data);\r
290       metas.add(meta);\r
291     }\r
292     return metas;\r
293   }\r
294 \r
295   public static EnumOnboardState getEnumByValue(String value) {\r
296     if (value == "non-onBoarded") {\r
297       return EnumOnboardState.nonOnBoarded;\r
298     } else {\r
299       return EnumOnboardState.onBoarded;\r
300     }\r
301   }\r
302 \r
303   private static PackageMeta packageData2PackageMeta(PackageData packageData) {\r
304     PackageMeta meta = new PackageMeta();\r
305     meta.setCsarId(packageData.getCsarId());\r
306     meta.setCreateTime(packageData.getCreateTime());\r
307     meta.setDeletionPending(Boolean.getBoolean(packageData.getDeletionPending()));\r
308     String packageUri =\r
309         packageData.getDownloadUri() + packageData.getName() + CommonConstant.CSAR_SUFFIX;\r
310     String packageUrl = getUrl(packageUri);\r
311     meta.setDownloadUri(packageUrl);\r
312     meta.setFormat(packageData.getFormat());\r
313     meta.setModifyTime(packageData.getModifyTime());\r
314     meta.setName(packageData.getName());\r
315     meta.setOperationalState(EnumOperationalState.valueOf(packageData.getOperationalState()));\r
316     meta.setProvider(packageData.getProvider());\r
317     meta.setSize(packageData.getSize());\r
318     meta.setType(packageData.getType());\r
319     meta.setUsageState(EnumUsageState.valueOf(packageData.getUsageState()));\r
320     meta.setVersion(packageData.getVersion());\r
321     meta.setOnBoardState(packageData.getOnBoardState());\r
322     meta.setProcessState(EnumProcessState.valueOf(packageData.getProcessState()));\r
323     return meta;\r
324   }\r
325 \r
326   public static String getUrl(String uri) {\r
327     String url = null;\r
328     if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {\r
329       url = MsbAddrConfig.getMsbAddress() + uri.substring(1);\r
330     }\r
331     url = MsbAddrConfig.getMsbAddress() + uri;\r
332     String urlresult = url.replace("\\", "/");\r
333     return urlresult;\r
334   }\r
335 \r
336   public static String getLocalPath(String uri) {\r
337     File srcDir = new File(uri);\r
338     String localPath = srcDir.getAbsolutePath();\r
339     return localPath.replace("\\", "/");\r
340   }\r
341 \r
342   /**\r
343    * @param fileLocation\r
344    * @return\r
345    */\r
346   public static PackageBasicInfo getPacageBasicInfo(String fileLocation) {\r
347     PackageBasicInfo basicInfo = new PackageBasicInfo();\r
348     String unzipDir = ToolUtil.getUnzipDir(fileLocation);\r
349     boolean isXmlCsar = false;\r
350     try {\r
351       String tempfolder = unzipDir;\r
352       ArrayList<String> unzipFiles = FileUtil.unzip(fileLocation, tempfolder);\r
353       if (unzipFiles.isEmpty()) {\r
354         isXmlCsar = true;\r
355       }\r
356       for (String unzipFile : unzipFiles) {\r
357         if (unzipFile.endsWith(CommonConstant.CSAR_META)) {\r
358           basicInfo = readCsarMeta(unzipFile);\r
359         }\r
360         if (ToolUtil.isYamlFile(new File(unzipFile))) {\r
361           isXmlCsar = false;\r
362         }\r
363       }\r
364     } catch (IOException e) {\r
365       LOG.error("judge package type error !");\r
366     }\r
367     if (isXmlCsar) {\r
368       basicInfo.setFormat(CommonConstant.PACKAGE_XML_FORMAT);\r
369     } else {\r
370       basicInfo.setFormat(CommonConstant.PACKAGE_YAML_FORMAT);\r
371     }\r
372     return basicInfo;\r
373   }\r
374 \r
375   /**\r
376    * @param unzipFile\r
377    * @return\r
378    */\r
379   private static PackageBasicInfo readCsarMeta(String unzipFile) {\r
380     PackageBasicInfo basicInfo = new PackageBasicInfo();\r
381     File file = new File(unzipFile);\r
382     BufferedReader reader = null;\r
383     try {\r
384       reader = new BufferedReader(new FileReader(file));\r
385       String tempString = null;\r
386       while ((tempString = reader.readLine()) != null) {\r
387         if (tempString.startsWith(CommonConstant.CSAR_TYPE_META)) {\r
388           int count = tempString.indexOf(":") + 1;\r
389           basicInfo.setType(EnumType.valueOf(tempString.substring(count)));\r
390         }\r
391         if (tempString.startsWith(CommonConstant.CSAR_PROVIDER_META)) {\r
392           int count = tempString.indexOf(":") + 1;\r
393           basicInfo.setProvider(tempString.substring(count));\r
394         }\r
395         if (tempString.startsWith(CommonConstant.CSAR_VERSION_META)) {\r
396           int count = tempString.indexOf(":") + 1;\r
397           basicInfo.setVersion(tempString.substring(count));\r
398         }\r
399       }\r
400       reader.close();\r
401     } catch (IOException e) {\r
402       e.printStackTrace();\r
403     } finally {\r
404       if (reader != null) {\r
405         try {\r
406           reader.close();\r
407         } catch (IOException e1) {\r
408         }\r
409       }\r
410     }\r
411     return basicInfo;\r
412   }\r
413 }\r