]>
Commit | Line | Data |
---|---|---|
1 | /** @file\r | |
2 | \r | |
3 | The file is used to create Far's mainfest file\r | |
4 | \r | |
5 | Copyright (c) 2006, Intel Corporation\r | |
6 | All rights reserved. This program and the accompanying materials\r | |
7 | are licensed and made available under the terms and conditions of the BSD License\r | |
8 | which accompanies this distribution. The full text of the license may be found at\r | |
9 | http://opensource.org/licenses/bsd-license.php\r | |
10 | \r | |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
13 | \r | |
14 | **/\r | |
15 | package org.tianocore.frameworkwizard.far;\r | |
16 | \r | |
17 | import java.io.File;\r | |
18 | import java.io.FileInputStream;\r | |
19 | import java.io.IOException;\r | |
20 | import java.io.InputStream;\r | |
21 | import java.util.ArrayList;\r | |
22 | import java.util.Iterator;\r | |
23 | import java.util.LinkedHashSet;\r | |
24 | import java.util.List;\r | |
25 | import java.util.Set;\r | |
26 | import java.util.regex.Matcher;\r | |
27 | import java.util.regex.Pattern;\r | |
28 | \r | |
29 | import javax.xml.parsers.DocumentBuilder;\r | |
30 | import javax.xml.parsers.DocumentBuilderFactory;\r | |
31 | import javax.xml.transform.OutputKeys;\r | |
32 | import javax.xml.transform.Result;\r | |
33 | import javax.xml.transform.Source;\r | |
34 | import javax.xml.transform.Transformer;\r | |
35 | import javax.xml.transform.TransformerFactory;\r | |
36 | import javax.xml.transform.dom.DOMSource;\r | |
37 | import javax.xml.transform.stream.StreamResult;\r | |
38 | \r | |
39 | import org.apache.xmlbeans.XmlException;\r | |
40 | import org.tianocore.frameworkwizard.common.Tools;\r | |
41 | import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r | |
42 | import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r | |
43 | import org.tianocore.frameworkwizard.workspace.Workspace;\r | |
44 | import org.w3c.dom.Document;\r | |
45 | import org.w3c.dom.Element;\r | |
46 | import org.w3c.dom.NamedNodeMap;\r | |
47 | import org.w3c.dom.Node;\r | |
48 | import org.w3c.dom.NodeList;\r | |
49 | \r | |
50 | public class Mainfest implements ManifestInterface {\r | |
51 | // /\r | |
52 | // / mainfest document\r | |
53 | // /\r | |
54 | Document mainfestDoc = null;\r | |
55 | \r | |
56 | // /\r | |
57 | // / Mainfest file element name\r | |
58 | // /\r | |
59 | final static String mfFileName = "FarMainfest.MF";\r | |
60 | \r | |
61 | //\r | |
62 | // Header\r | |
63 | //\r | |
64 | final static String farHeader = "FarHeader";\r | |
65 | \r | |
66 | final static String farHeader_FarName = "FarName";\r | |
67 | \r | |
68 | final static String farHeader_Abstract = "Abstract";\r | |
69 | \r | |
70 | final static String farHeader_Description = "Description";\r | |
71 | \r | |
72 | final static String farHeader_CopyRight = "CopyRight";\r | |
73 | \r | |
74 | final static String farHeader_License = "Licese";\r | |
75 | \r | |
76 | final static String farHeader_Specification = "Specification";\r | |
77 | \r | |
78 | //\r | |
79 | // Package list\r | |
80 | //\r | |
81 | final static String farPackageList = "FarPackageList";\r | |
82 | \r | |
83 | final static String farPlatformList = "FarPlatformList";\r | |
84 | \r | |
85 | final static String contents = "Contents";\r | |
86 | \r | |
87 | final static String userExtensions = "UserExtensions";\r | |
88 | \r | |
89 | //\r | |
90 | // Common node name\r | |
91 | //\r | |
92 | \r | |
93 | final static String guidValue = "GuidValue";\r | |
94 | \r | |
95 | final static String version = "Version";\r | |
96 | \r | |
97 | //\r | |
98 | // FarPackage node name\r | |
99 | //\r | |
100 | final static String farPackageList_FarPackage = "FarPackage";\r | |
101 | \r | |
102 | final static String farPackage_FarfileName = "FarFileName";\r | |
103 | \r | |
104 | final static String farPackage_DefaultPath = "DefaultPath";\r | |
105 | \r | |
106 | final static String farPlatformList_FarPlatform = "FarPlatform";\r | |
107 | \r | |
108 | final static String farFileName_FarGuid = "FarGuid";\r | |
109 | \r | |
110 | final static String farFileName_Md5sum = "Md5sum";\r | |
111 | \r | |
112 | //\r | |
113 | // mainfest header information.\r | |
114 | //\r | |
115 | FarHeader fhInfo = new FarHeader();\r | |
116 | \r | |
117 | //\r | |
118 | // FarPackage list\r | |
119 | //\r | |
120 | List<FarPackage> fPkgList = new ArrayList<FarPackage>();\r | |
121 | \r | |
122 | //\r | |
123 | // FarPlatform list\r | |
124 | //\r | |
125 | List<FarPlatformItem> fPlfList = new ArrayList<FarPlatformItem>();\r | |
126 | \r | |
127 | Set<File> files = new LinkedHashSet<File>();\r | |
128 | \r | |
129 | //\r | |
130 | // Mainfest file\r | |
131 | //\r | |
132 | File mfFile = null;\r | |
133 | \r | |
134 | public FarHeader getHeader() {\r | |
135 | return fhInfo;\r | |
136 | }\r | |
137 | \r | |
138 | public Mainfest() throws Exception {\r | |
139 | DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();\r | |
140 | DocumentBuilder dombuilder = domfac.newDocumentBuilder();\r | |
141 | Document document = dombuilder.newDocument();\r | |
142 | this.mainfestDoc = document;\r | |
143 | \r | |
144 | }\r | |
145 | \r | |
146 | public Mainfest(InputStream mainfestInputStream) throws Exception {\r | |
147 | DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();\r | |
148 | try {\r | |
149 | if (mainfestInputStream != null) {\r | |
150 | DocumentBuilder dombuilder = domfac.newDocumentBuilder();\r | |
151 | this.mainfestDoc = dombuilder.parse(mainfestInputStream);\r | |
152 | parseMainfest();\r | |
153 | }\r | |
154 | \r | |
155 | } catch (Exception e) {\r | |
156 | //\r | |
157 | // Will change to throw Wizader exception.\r | |
158 | //\r | |
159 | throw new Exception(e.getMessage());\r | |
160 | }\r | |
161 | }\r | |
162 | \r | |
163 | public void setFarHeader(FarHeader fHeader) {\r | |
164 | this.fhInfo = fHeader;\r | |
165 | }\r | |
166 | \r | |
167 | public void createManifest(List<PackageIdentification> pkgList, List<PlatformIdentification> plfList,\r | |
168 | Set<String> fileFilter) throws Exception {\r | |
169 | \r | |
170 | //\r | |
171 | // Add Package and it's contents to FarPackageList.\r | |
172 | //\r | |
173 | Iterator<PackageIdentification> pkgItem = pkgList.iterator();\r | |
174 | while (pkgItem.hasNext()) {\r | |
175 | PackageIdentification pkgId = pkgItem.next();\r | |
176 | \r | |
177 | //\r | |
178 | // Add package and it's contents to <FarPackageList>.\r | |
179 | //\r | |
180 | addPkgToPkgList(pkgId, fileFilter);\r | |
181 | }\r | |
182 | \r | |
183 | //\r | |
184 | // Add FarPlatform to this.farPlatformList.\r | |
185 | //\r | |
186 | Iterator<PlatformIdentification> plfItem = plfList.iterator();\r | |
187 | while (plfItem.hasNext()) {\r | |
188 | PlatformIdentification plfId = plfItem.next();\r | |
189 | \r | |
190 | //\r | |
191 | // Add platform to Mainifest.\r | |
192 | //\r | |
193 | addPlatformIdToFarPlatformItemList(plfId);\r | |
194 | }\r | |
195 | }\r | |
196 | \r | |
197 | public void setManifestFile(File mainfestFile) throws Exception {\r | |
198 | DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();\r | |
199 | DocumentBuilder dombuilder = domfac.newDocumentBuilder();\r | |
200 | InputStream is = new FileInputStream(mainfestFile);\r | |
201 | this.mainfestDoc = dombuilder.parse(is);\r | |
202 | }\r | |
203 | \r | |
204 | public void addPkgToPkgList(PackageIdentification packageId, Set<String> fileFilter) throws Exception {\r | |
205 | files.add(packageId.getSpdFile());\r | |
206 | \r | |
207 | FarPackage farPackage = new FarPackage();\r | |
208 | //\r | |
209 | // Add SPD file to FarPackage\r | |
210 | //\r | |
211 | File spdFile = new File(packageId.getPath());\r | |
212 | \r | |
213 | FarFileItem ffItem = new FarFileItem(spdFile.getName(), FarMd5.md5(spdFile));\r | |
214 | farPackage.setFarFile(ffItem);\r | |
215 | \r | |
216 | //\r | |
217 | // Add package guid value.\r | |
218 | //\r | |
219 | farPackage.setGuidValue(packageId.getGuid());\r | |
220 | \r | |
221 | //\r | |
222 | // Add package version\r | |
223 | //\r | |
224 | farPackage.setVersion(packageId.getVersion());\r | |
225 | \r | |
226 | //\r | |
227 | // Add DefaultPat: Package absoulte path - Workspace absolut\r | |
228 | // path.\r | |
229 | //\r | |
230 | String pkgDir = Tools.getFilePathOnly(packageId.getPath());\r | |
231 | File rootDir = new File(pkgDir);\r | |
232 | farPackage.setDefaultPath(Tools.getRelativePath(rootDir.getPath(), Workspace.getCurrentWorkspace()));\r | |
233 | \r | |
234 | //\r | |
235 | // Get package root dir contains.\r | |
236 | //\r | |
237 | Set<File> fileSet = new LinkedHashSet<File>();\r | |
238 | Set<File> fpdFileSet = new LinkedHashSet<File>();\r | |
239 | \r | |
240 | //\r | |
241 | // Get all files and fpd files\r | |
242 | //\r | |
243 | recursiveDirectory(fileSet, fpdFileSet, rootDir, fileFilter);\r | |
244 | \r | |
245 | //\r | |
246 | // Remove current package's SPD file\r | |
247 | //\r | |
248 | fileSet.remove(packageId.getSpdFile());\r | |
249 | \r | |
250 | files.addAll(fileSet);\r | |
251 | \r | |
252 | Iterator<File> iter = fileSet.iterator();\r | |
253 | List<FarFileItem> contents = new ArrayList<FarFileItem>();\r | |
254 | while (iter.hasNext()) {\r | |
255 | File normalFile = iter.next();\r | |
256 | String fileRelativePath = Tools.getRelativePath(normalFile.getPath(), pkgDir);\r | |
257 | ffItem = new FarFileItem(fileRelativePath, FarMd5.md5(normalFile));\r | |
258 | contents.add(ffItem);\r | |
259 | }\r | |
260 | \r | |
261 | farPackage.setContentList(contents);\r | |
262 | \r | |
263 | // List<FarPlatformItem> fpfList = new ArrayList<FarPlatformItem>();\r | |
264 | //\r | |
265 | // iter = fpdFileSet.iterator();\r | |
266 | //\r | |
267 | // while (iter.hasNext()) {\r | |
268 | // File fpdFile = iter.next();\r | |
269 | // PlatformIdentification platformId = new PlatformIdentification(wsTool\r | |
270 | // .getId(fpdFile.getPath(), OpenFile.openFpdFile(fpdFile\r | |
271 | // .getPath())));\r | |
272 | // addPlatformIdToFarPlatformItemList(fpfList, platformId);\r | |
273 | // }\r | |
274 | // farPackage.setFarPlatformList(fpfList);\r | |
275 | fPkgList.add(farPackage);\r | |
276 | }\r | |
277 | \r | |
278 | private void recursiveDirectory(Set<File> files, Set<File> fpds, File dir, Set<String> fileFilter) {\r | |
279 | if (isFilter(dir, fileFilter)) {\r | |
280 | return;\r | |
281 | }\r | |
282 | File[] allFilesInDir = dir.listFiles();\r | |
283 | for (int i = 0; i < allFilesInDir.length; i++) {\r | |
284 | if (allFilesInDir[i].isFile()) {\r | |
285 | if (isFilter(allFilesInDir[i], fileFilter)) {\r | |
286 | continue;\r | |
287 | }\r | |
288 | // if (allFilesInDir[i].getPath().toLowerCase().endsWith(".fpd")) {\r | |
289 | // fpds.add(allFilesInDir[i]);\r | |
290 | // } else {\r | |
291 | files.add(allFilesInDir[i]);\r | |
292 | // }\r | |
293 | } else {\r | |
294 | recursiveDirectory(files, fpds, allFilesInDir[i], fileFilter);\r | |
295 | }\r | |
296 | }\r | |
297 | }\r | |
298 | \r | |
299 | public void addPlatformIdToFarPlatformItemList(PlatformIdentification platformId) throws Exception {\r | |
300 | files.add(platformId.getFpdFile());\r | |
301 | \r | |
302 | FarPlatformItem fpfItem = new FarPlatformItem();\r | |
303 | FarFileItem ffItem;\r | |
304 | String fpfPath = platformId.getPath();\r | |
305 | File fpfFile = new File(fpfPath);\r | |
306 | //\r | |
307 | // Add farFileName\r | |
308 | //\r | |
309 | ffItem = new FarFileItem(Tools.getRelativePath(fpfFile.getPath(), Workspace.getCurrentWorkspace()),\r | |
310 | FarMd5.md5(fpfFile));\r | |
311 | fpfItem.setFarFile(ffItem);\r | |
312 | \r | |
313 | //\r | |
314 | // Add guid value\r | |
315 | //\r | |
316 | fpfItem.setGuidValue(platformId.getGuid());\r | |
317 | \r | |
318 | //\r | |
319 | // Add version\r | |
320 | //\r | |
321 | fpfItem.setVersion(platformId.getVersion());\r | |
322 | \r | |
323 | fPlfList.add(fpfItem);\r | |
324 | }\r | |
325 | \r | |
326 | /**\r | |
327 | * \r | |
328 | * @param\r | |
329 | * @return Set<PackageIdentification> list of PackageIdentification.\r | |
330 | */\r | |
331 | public List<PackageIdentification> getPackageList() throws Exception {\r | |
332 | //\r | |
333 | // PackageIdentification set.\r | |
334 | //\r | |
335 | List<PackageIdentification> pkgList = new ArrayList<PackageIdentification>();\r | |
336 | //\r | |
337 | // \r | |
338 | //\r | |
339 | Iterator pkgItem = this.fPkgList.iterator();\r | |
340 | while (pkgItem.hasNext()) {\r | |
341 | FarPackage fPkg = (FarPackage) pkgItem.next();\r | |
342 | //\r | |
343 | // Get package information from SPD file and create a package\r | |
344 | // identification.\r | |
345 | //\r | |
346 | \r | |
347 | PackageIdentification pkgId = new PackageIdentification(fPkg.getFarFile().getRelativeFilename(),\r | |
348 | fPkg.getGuidValue(), fPkg.getVersion());\r | |
349 | pkgId.setPath(Workspace.getCurrentWorkspace() + File.separatorChar + fPkg.getDefaultPath()\r | |
350 | + File.separatorChar + fPkg.getFarFile().getRelativeFilename());\r | |
351 | // wsTool.getId(\r | |
352 | // Workspace.getCurrentWorkspace() + File.separatorChar\r | |
353 | // + fPkg.getDefaultPath(), OpenFile\r | |
354 | // .openFpdFile(Workspace.getCurrentWorkspace()\r | |
355 | // + File.separatorChar\r | |
356 | // + fPkg.getDefaultPath()\r | |
357 | // + File.separatorChar\r | |
358 | // + fPkg.getFarFile().getRelativeFilename()));\r | |
359 | pkgList.add(pkgId);\r | |
360 | }\r | |
361 | return pkgList;\r | |
362 | }\r | |
363 | \r | |
364 | /**\r | |
365 | * \r | |
366 | */\r | |
367 | public List<PlatformIdentification> getPlatformList() throws Exception, IOException, XmlException {\r | |
368 | //\r | |
369 | // PlatformIdentification set.\r | |
370 | //\r | |
371 | List<PlatformIdentification> plfList = new ArrayList<PlatformIdentification>();\r | |
372 | Iterator plfItem = this.fPlfList.iterator();\r | |
373 | while (plfItem.hasNext()) {\r | |
374 | FarPlatformItem fpfItem = (FarPlatformItem) plfItem.next();\r | |
375 | File file = new File(Workspace.getCurrentWorkspace() + File.separatorChar\r | |
376 | + fpfItem.getFarFile().getRelativeFilename());\r | |
377 | //\r | |
378 | // Set platformIdentificaiton's path as absolutly path (include\r | |
379 | // workspace and FPD relatively path)\r | |
380 | //\r | |
381 | PlatformIdentification plfId = new PlatformIdentification(fpfItem.getFarFile().getRelativeFilename(),\r | |
382 | fpfItem.getGuidValue(), fpfItem.getVersion(),\r | |
383 | file.getPath());\r | |
384 | \r | |
385 | // (PlatformIdentification) wsTool\r | |
386 | // .getId(file.getParent(), OpenFile.openFpdFile(Workspace\r | |
387 | // .getCurrentWorkspace()\r | |
388 | // + File.separatorChar\r | |
389 | // + fpfItem.getFarFile().getRelativeFilename()));\r | |
390 | plfList.add(plfId);\r | |
391 | }\r | |
392 | return plfList;\r | |
393 | }\r | |
394 | \r | |
395 | public List<FarFileItem> getPlatformContents(PlatformIdentification platformId) {\r | |
396 | List<FarFileItem> result = new ArrayList<FarFileItem>();\r | |
397 | Iterator<FarPlatformItem> iter = this.fPlfList.iterator();\r | |
398 | \r | |
399 | while (iter.hasNext()) {\r | |
400 | FarPlatformItem item = iter.next();\r | |
401 | if (item.isIdentityPlf(platformId)) {\r | |
402 | FarFileItem farFileItem = item.getFarFile();\r | |
403 | farFileItem.setDefaultPath(farFileItem.getRelativeFilename());\r | |
404 | result.add(farFileItem);\r | |
405 | break;\r | |
406 | }\r | |
407 | }\r | |
408 | return result;\r | |
409 | }\r | |
410 | \r | |
411 | public List<FarFileItem> getPackageContents(PackageIdentification packageId) {\r | |
412 | List<FarFileItem> farFileList = new ArrayList<FarFileItem>();\r | |
413 | Iterator pkgItem = this.fPkgList.iterator();\r | |
414 | while (pkgItem.hasNext()) {\r | |
415 | FarPackage pkg = (FarPackage) pkgItem.next();\r | |
416 | if (pkg.isIdentityPkg(packageId)) {\r | |
417 | //\r | |
418 | // Add spd far file to list.\r | |
419 | //\r | |
420 | farFileList.add(pkg.getFarFile());\r | |
421 | //\r | |
422 | // Add all files in contents to list.\r | |
423 | //\r | |
424 | farFileList.addAll(pkg.getContentList());\r | |
425 | //\r | |
426 | // Add all farfiles in <FarPlatformList> to list.\r | |
427 | //\r | |
428 | // List<FarPlatformItem> plfList = pkg.getFarPlatformList();\r | |
429 | // Iterator plfItem = plfList.iterator();\r | |
430 | // while (plfItem.hasNext()) {\r | |
431 | // farFileList.add(((FarPlatformItem) plfItem.next())\r | |
432 | // .getFarFile());\r | |
433 | // }\r | |
434 | \r | |
435 | Iterator<FarFileItem> ffIter = farFileList.iterator();\r | |
436 | while (ffIter.hasNext()) {\r | |
437 | FarFileItem ffItem = ffIter.next();\r | |
438 | ffItem.setDefaultPath(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename());\r | |
439 | }\r | |
440 | break;\r | |
441 | }\r | |
442 | }\r | |
443 | \r | |
444 | return farFileList;\r | |
445 | }\r | |
446 | \r | |
447 | /**\r | |
448 | * \r | |
449 | * @param pkgId\r | |
450 | * @return String: return string represent jar file entry; \r | |
451 | */\r | |
452 | public String[] getPackgeSpd(PackageIdentification pkgId) {\r | |
453 | Iterator pkgItem = this.fPkgList.iterator();\r | |
454 | String[] entryStr = new String[2];\r | |
455 | while (pkgItem.hasNext()) {\r | |
456 | FarPackage pkg = (FarPackage) pkgItem.next();\r | |
457 | if (pkg.isIdentityPkg(pkgId)) {\r | |
458 | entryStr[0] = pkg.getFarFile().getRelativeFilename();\r | |
459 | entryStr[1] = pkg.getDefaultPath();\r | |
460 | return entryStr;\r | |
461 | }\r | |
462 | }\r | |
463 | return null;\r | |
464 | }\r | |
465 | \r | |
466 | public List<FarFileItem> getPackageContents() {\r | |
467 | //\r | |
468 | // In this farFilelist,all FarFileItem's relativeFileName should be\r | |
469 | // set as absolutely path.\r | |
470 | //\r | |
471 | List<FarFileItem> farFileList = new ArrayList<FarFileItem>();\r | |
472 | Iterator pkgItem = this.fPkgList.iterator();\r | |
473 | FarFileItem ffItem = null;\r | |
474 | \r | |
475 | while (pkgItem.hasNext()) {\r | |
476 | FarPackage pkg = (FarPackage) pkgItem.next();\r | |
477 | \r | |
478 | //\r | |
479 | // Add spd far file to list.\r | |
480 | //\r | |
481 | ffItem = pkg.getFarFile();\r | |
482 | //\r | |
483 | // Set farFileItem relativeFileName = absolutePath + file Name.\r | |
484 | //\r | |
485 | farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename(),\r | |
486 | ffItem.getMd5Value()));\r | |
487 | //\r | |
488 | // Add all files in contents to list.\r | |
489 | //\r | |
490 | Iterator contentsItem = pkg.getContentList().iterator();\r | |
491 | while (contentsItem.hasNext()) {\r | |
492 | ffItem = (FarFileItem) contentsItem.next();\r | |
493 | farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),\r | |
494 | ffItem.getMd5Value()));\r | |
495 | }\r | |
496 | //\r | |
497 | // Add all farfiles in <FarPlatformList> to list.\r | |
498 | //\r | |
499 | List<FarPlatformItem> plfList = pkg.getFarPlatformList();\r | |
500 | Iterator plfItem = plfList.iterator();\r | |
501 | while (plfItem.hasNext()) {\r | |
502 | ffItem = ((FarPlatformItem) plfItem.next()).getFarFile();\r | |
503 | farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),\r | |
504 | ffItem.getMd5Value()));\r | |
505 | }\r | |
506 | }\r | |
507 | return farFileList;\r | |
508 | }\r | |
509 | \r | |
510 | public String getPackageDefaultPath(PackageIdentification packageId) {\r | |
511 | Iterator pkgItr = this.fPkgList.iterator();\r | |
512 | while (pkgItr.hasNext()) {\r | |
513 | FarPackage farPackage = (FarPackage) pkgItr.next();\r | |
514 | if (farPackage.isIdentityPkg(packageId)) {\r | |
515 | return farPackage.getDefaultPath();\r | |
516 | }\r | |
517 | }\r | |
518 | return null;\r | |
519 | }\r | |
520 | \r | |
521 | // public void setPackageInstallPath(PackageIdentification packageId, String path) {\r | |
522 | // Iterator<FarPackage> pkgItr = this.fPkgList.iterator();\r | |
523 | // while (pkgItr.hasNext()) {\r | |
524 | // FarPackage farPackage = pkgItr.next();\r | |
525 | // if (farPackage.isIdentityPkg(packageId)) {\r | |
526 | // farPackage.setDefaultPath(path);\r | |
527 | // return ;\r | |
528 | // }\r | |
529 | // }\r | |
530 | // }\r | |
531 | //\r | |
532 | // public void setPlatformInstallPath(PlatformIdentification platformId, String path) {\r | |
533 | // Iterator<FarPlatformItem> plfItr = this.fPlfList.iterator();\r | |
534 | // while (plfItr.hasNext()) {\r | |
535 | // FarPlatformItem farPlatform = plfItr.next();\r | |
536 | // if (farPlatform.i.isIdentity(platformId)) {\r | |
537 | // farPackage.setDefaultPath(path);\r | |
538 | // return ;\r | |
539 | // }\r | |
540 | // }\r | |
541 | // }\r | |
542 | \r | |
543 | public List<FarFileItem> getAllFileItem() {\r | |
544 | //\r | |
545 | // The farFileName in this list are all abosulte path.\r | |
546 | //\r | |
547 | List<FarFileItem> ffiList = new ArrayList<FarFileItem>();\r | |
548 | //\r | |
549 | // Add far files in <FarPackageList> to list.\r | |
550 | //\r | |
551 | ffiList = this.getPackageContents();\r | |
552 | \r | |
553 | //\r | |
554 | // Add far files in <FarPlatformList> to list\r | |
555 | //\r | |
556 | NodeList elementList = this.mainfestDoc.getElementsByTagName(farPlatformList);\r | |
557 | for (int i = 0; i < elementList.getLength(); i++) {\r | |
558 | //\r | |
559 | // Get <farPlatform> node list.\r | |
560 | //\r | |
561 | Node item = elementList.item(i);\r | |
562 | NodeList plfElements = item.getChildNodes();\r | |
563 | for (int j = 0; j < plfElements.getLength(); j++) {\r | |
564 | //\r | |
565 | // Get each <FarPlatform> content.\r | |
566 | //\r | |
567 | NodeList plfChildNode = plfElements.item(i).getChildNodes();\r | |
568 | Node tempNode = null;\r | |
569 | for (int t = 0; t < plfChildNode.getLength(); t++) {\r | |
570 | tempNode = plfChildNode.item(t);\r | |
571 | //\r | |
572 | // Get child node value and set to platformIdentification.\r | |
573 | //\r | |
574 | if (tempNode.getNodeName().equalsIgnoreCase(farPackage_FarfileName)) {\r | |
575 | NamedNodeMap farAttr = tempNode.getAttributes();\r | |
576 | //\r | |
577 | // Change relative path to absolute one\r | |
578 | //\r | |
579 | FarFileItem farFile = new FarFileItem(tempNode.getTextContent(),\r | |
580 | farAttr.getNamedItem(farFileName_Md5sum).getTextContent());\r | |
581 | ffiList.add(farFile);\r | |
582 | }\r | |
583 | }\r | |
584 | }\r | |
585 | }\r | |
586 | return ffiList;\r | |
587 | }\r | |
588 | \r | |
589 | public void hibernateToFile() throws Exception {\r | |
590 | //\r | |
591 | // create mainfest root node\r | |
592 | //\r | |
593 | Element rootNode = this.mainfestDoc.createElement("FrameworkArchiveManifest");\r | |
594 | this.mainfestDoc.appendChild(rootNode);\r | |
595 | \r | |
596 | //\r | |
597 | // create mainfest header node\r | |
598 | //\r | |
599 | Element headerNode = this.mainfestDoc.createElement(farHeader);\r | |
600 | rootNode.appendChild(headerNode);\r | |
601 | //\r | |
602 | // Add FarHeader to headerNode.\r | |
603 | //\r | |
604 | Element farName = this.mainfestDoc.createElement(farHeader_FarName);\r | |
605 | farName.setTextContent(this.fhInfo.getFarName());\r | |
606 | headerNode.appendChild(farName);\r | |
607 | \r | |
608 | Element gv = this.mainfestDoc.createElement(guidValue);\r | |
609 | gv.setTextContent(this.fhInfo.getGuidValue());\r | |
610 | headerNode.appendChild(gv);\r | |
611 | \r | |
612 | Element ver = this.mainfestDoc.createElement(version);\r | |
613 | ver.setTextContent(this.fhInfo.getVersion());\r | |
614 | headerNode.appendChild(ver);\r | |
615 | \r | |
616 | Element abstra = this.mainfestDoc.createElement(farHeader_Abstract);\r | |
617 | abstra.setTextContent(this.fhInfo.getAbstractStr());\r | |
618 | headerNode.appendChild(abstra);\r | |
619 | \r | |
620 | Element descr = this.mainfestDoc.createElement(farHeader_Description);\r | |
621 | descr.setTextContent(this.fhInfo.getDescription());\r | |
622 | headerNode.appendChild(descr);\r | |
623 | \r | |
624 | Element copyright = this.mainfestDoc.createElement(farHeader_CopyRight);\r | |
625 | copyright.setTextContent(this.fhInfo.getCopyright());\r | |
626 | headerNode.appendChild(copyright);\r | |
627 | \r | |
628 | Element license = this.mainfestDoc.createElement(farHeader_License);\r | |
629 | license.setTextContent(this.fhInfo.getLicense());\r | |
630 | headerNode.appendChild(license);\r | |
631 | \r | |
632 | Element spec = this.mainfestDoc.createElement(farHeader_Specification);\r | |
633 | spec.setTextContent(this.fhInfo.getSpecification());\r | |
634 | System.out.println(this.fhInfo.getSpecification());\r | |
635 | headerNode.appendChild(spec);\r | |
636 | \r | |
637 | //\r | |
638 | // create mainfest FarPackageList node\r | |
639 | //\r | |
640 | Element pkgListNode = this.mainfestDoc.createElement(farPackageList);\r | |
641 | rootNode.appendChild(pkgListNode);\r | |
642 | \r | |
643 | //\r | |
644 | // Save each item in farPackage list to <FarPackage>.\r | |
645 | //\r | |
646 | Iterator pkgItem = this.fPkgList.iterator();\r | |
647 | while (pkgItem.hasNext()) {\r | |
648 | pkgToFarPkgNode(pkgListNode, (FarPackage) pkgItem.next());\r | |
649 | \r | |
650 | }\r | |
651 | \r | |
652 | //\r | |
653 | // create mainfest FarPlatformList node\r | |
654 | //\r | |
655 | Element plfListNode = this.mainfestDoc.createElement(farPlatformList);\r | |
656 | rootNode.appendChild(plfListNode);\r | |
657 | \r | |
658 | //\r | |
659 | // Save farPakcage list info to <FarPackageList> node\r | |
660 | //\r | |
661 | Iterator plfItem = this.fPlfList.iterator();\r | |
662 | while (plfItem.hasNext()) {\r | |
663 | FarPlatformItem plfIterator = (FarPlatformItem) plfItem.next();\r | |
664 | PlfToPlatformNode(plfListNode, plfIterator);\r | |
665 | }\r | |
666 | \r | |
667 | //\r | |
668 | // Write the DOM document to the file\r | |
669 | //\r | |
670 | Transformer xformer = TransformerFactory.newInstance().newTransformer();\r | |
671 | xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");\r | |
672 | xformer.setOutputProperty(OutputKeys.INDENT, "yes");\r | |
673 | \r | |
674 | //\r | |
675 | // Prepare the DOM document for writing\r | |
676 | //\r | |
677 | Source source = new DOMSource(this.mainfestDoc);\r | |
678 | //\r | |
679 | // Prepare the output file, get the Mainifest file name from <FarHeader>\r | |
680 | // /<FarName>.\r | |
681 | //\r | |
682 | this.mfFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar + mfFileName);\r | |
683 | //\r | |
684 | // generate all directory path\r | |
685 | //\r | |
686 | Result result = new StreamResult(this.mfFile);\r | |
687 | xformer.transform(source, result);\r | |
688 | }\r | |
689 | \r | |
690 | public void pkgToFarPkgNode(Element parentNode, FarPackage pkgItem) {\r | |
691 | Element pkgNode = this.mainfestDoc.createElement(farPackageList_FarPackage);\r | |
692 | //\r | |
693 | // Add <FarFileName>\r | |
694 | //\r | |
695 | ffiToFfNode(pkgNode, pkgItem.getFarFile());\r | |
696 | //\r | |
697 | // Add <GuidValue>\r | |
698 | //\r | |
699 | setStrItemToNode(pkgNode, pkgItem.getGuidValue(), guidValue);\r | |
700 | //\r | |
701 | // Add <Version>\r | |
702 | //\r | |
703 | setStrItemToNode(pkgNode, pkgItem.getVersion(), version);\r | |
704 | //\r | |
705 | // Add <DefaultPath>\r | |
706 | //\r | |
707 | setStrItemToNode(pkgNode, pkgItem.getDefaultPath(), farPackage_DefaultPath);\r | |
708 | \r | |
709 | //\r | |
710 | // Add <Contents>\r | |
711 | //\r | |
712 | Element contentNode = this.mainfestDoc.createElement(contents);\r | |
713 | Iterator iterator = pkgItem.getContentList().iterator();\r | |
714 | while (iterator.hasNext()) {\r | |
715 | ffiToFfNode(contentNode, (FarFileItem) iterator.next());\r | |
716 | }\r | |
717 | pkgNode.appendChild(contentNode);\r | |
718 | parentNode.appendChild(pkgNode);\r | |
719 | }\r | |
720 | \r | |
721 | public void PlfToPlatformNode(Element parentNode, FarPlatformItem fplItem) {\r | |
722 | Element fplNode = this.mainfestDoc.createElement(farPlatformList_FarPlatform);\r | |
723 | //\r | |
724 | // Add <FarFileName>\r | |
725 | //\r | |
726 | ffiToFfNode(fplNode, fplItem.getFarFile());\r | |
727 | //\r | |
728 | // Add <GuidValue>\r | |
729 | //\r | |
730 | setStrItemToNode(fplNode, fplItem.getGuidValue(), guidValue);\r | |
731 | //\r | |
732 | // Add <Version>\r | |
733 | //\r | |
734 | setStrItemToNode(fplNode, fplItem.getVersion(), version);\r | |
735 | //\r | |
736 | // Add to <PlatformList>\r | |
737 | //\r | |
738 | parentNode.appendChild(fplNode);\r | |
739 | \r | |
740 | }\r | |
741 | \r | |
742 | public void ffiToFfNode(Element parentNode, FarFileItem ffi) {\r | |
743 | Element farFileName = this.mainfestDoc.createElement(farPackage_FarfileName);\r | |
744 | farFileName.setTextContent(ffi.getRelativeFilename());\r | |
745 | System.out.println(farFileName.getTextContent());\r | |
746 | System.out.println(ffi.getRelativeFilename());\r | |
747 | farFileName.setAttribute(farFileName_Md5sum, ffi.getMd5Value());\r | |
748 | parentNode.appendChild(farFileName);\r | |
749 | }\r | |
750 | \r | |
751 | public void setStrItemToNode(Element parentNode, String strValue, String strName) {\r | |
752 | Element node = this.mainfestDoc.createElement(strName);\r | |
753 | node.setTextContent(strValue);\r | |
754 | parentNode.appendChild(node);\r | |
755 | }\r | |
756 | \r | |
757 | private void parseMainfest() {\r | |
758 | \r | |
759 | //\r | |
760 | // Parse header\r | |
761 | //\r | |
762 | parseMfHeader();\r | |
763 | //\r | |
764 | // parse <farPackageList>\r | |
765 | //\r | |
766 | parseHeaderFarPackageList();\r | |
767 | \r | |
768 | //\r | |
769 | // parse <farPlatformList>\r | |
770 | //\r | |
771 | NodeList ele = this.mainfestDoc.getElementsByTagName(farPlatformList);\r | |
772 | Node plfNode;\r | |
773 | if (ele.getLength() > 0) {\r | |
774 | //\r | |
775 | // Only have one <FarPlatformList> node under mainfest root node.\r | |
776 | //\r | |
777 | plfNode = ele.item(0);\r | |
778 | parseFarPlatformList(plfNode, this.fPlfList);\r | |
779 | }\r | |
780 | }\r | |
781 | \r | |
782 | private void parseMfHeader() {\r | |
783 | Node headerNode;\r | |
784 | NodeList ele = this.mainfestDoc.getElementsByTagName(farHeader);\r | |
785 | if (ele.getLength() > 0) {\r | |
786 | //\r | |
787 | // For mainfest file only have one <FarHeader>\r | |
788 | //\r | |
789 | headerNode = ele.item(0);\r | |
790 | } else {\r | |
791 | return;\r | |
792 | }\r | |
793 | NodeList childList = headerNode.getChildNodes();\r | |
794 | Node node = null;\r | |
795 | String nodeName = null;\r | |
796 | for (int i = 0; i < childList.getLength(); i++) {\r | |
797 | node = childList.item(i);\r | |
798 | nodeName = node.getNodeName();\r | |
799 | if (nodeName.equalsIgnoreCase(farHeader_FarName)) {\r | |
800 | String nodeValue = node.getTextContent();\r | |
801 | this.fhInfo.setFarName(nodeValue);\r | |
802 | } else if (nodeName.equalsIgnoreCase(guidValue)) {\r | |
803 | this.fhInfo.setGuidValue(node.getTextContent());\r | |
804 | } else if (nodeName.equalsIgnoreCase(version)) {\r | |
805 | this.fhInfo.setVersion(node.getTextContent());\r | |
806 | } else if (nodeName.equalsIgnoreCase(farHeader_Abstract)) {\r | |
807 | this.fhInfo.setAbstractStr(node.getTextContent());\r | |
808 | } else if (nodeName.equalsIgnoreCase(farHeader_Description)) {\r | |
809 | this.fhInfo.setDescription(node.getTextContent());\r | |
810 | } else if (nodeName.equalsIgnoreCase(farHeader_CopyRight)) {\r | |
811 | this.fhInfo.setCopyright(node.getTextContent());\r | |
812 | } else if (nodeName.equalsIgnoreCase(farHeader_License)) {\r | |
813 | this.fhInfo.setLicense(node.getTextContent());\r | |
814 | } else if (nodeName.equalsIgnoreCase(farHeader_Specification)) {\r | |
815 | this.fhInfo.setSpecification(node.getTextContent());\r | |
816 | }\r | |
817 | }\r | |
818 | }\r | |
819 | \r | |
820 | public void parseHeaderFarPackageList() {\r | |
821 | Node farPkgNode;\r | |
822 | NodeList ele = this.mainfestDoc.getElementsByTagName(farPackageList);\r | |
823 | if (ele.getLength() > 0) {\r | |
824 | //\r | |
825 | // For mainfest file only have one <FarHeader>\r | |
826 | //\r | |
827 | farPkgNode = ele.item(0);\r | |
828 | } else {\r | |
829 | return;\r | |
830 | }\r | |
831 | NodeList fpnList = farPkgNode.getChildNodes();\r | |
832 | for (int i = 0; i < fpnList.getLength(); i++) {\r | |
833 | if (fpnList.item(i).getNodeType() == Node.TEXT_NODE) {\r | |
834 | continue;\r | |
835 | }\r | |
836 | FarPackage fpItem = new FarPackage();\r | |
837 | parseFarPackage(fpnList.item(i), fpItem);\r | |
838 | this.fPkgList.add(fpItem);\r | |
839 | }\r | |
840 | }\r | |
841 | \r | |
842 | public void parseFarPackage(Node farPkgNode, FarPackage fpItem) {\r | |
843 | NodeList childList = farPkgNode.getChildNodes();\r | |
844 | Node childNode;\r | |
845 | String childName;\r | |
846 | for (int i = 0; i < childList.getLength(); i++) {\r | |
847 | childNode = childList.item(i);\r | |
848 | childName = childNode.getNodeName();\r | |
849 | if (childName.equalsIgnoreCase(farPackage_FarfileName)) {\r | |
850 | fpItem.setFarFile(parseFarFile(childNode));\r | |
851 | } else if (childName.equalsIgnoreCase(guidValue)) {\r | |
852 | fpItem.setGuidValue(childNode.getTextContent());\r | |
853 | } else if (childName.equalsIgnoreCase(version)) {\r | |
854 | fpItem.setVersion(childNode.getTextContent());\r | |
855 | } else if (childName.equalsIgnoreCase(farPackage_DefaultPath)) {\r | |
856 | fpItem.setDefaultPath(childNode.getTextContent());\r | |
857 | } else if (childName.equalsIgnoreCase(farPlatformList)) {\r | |
858 | List<FarPlatformItem> plfList = new ArrayList<FarPlatformItem>();\r | |
859 | parseFarPlatformList(childNode, plfList);\r | |
860 | fpItem.setFarPlatformList(plfList);\r | |
861 | } else if (childName.equalsIgnoreCase(contents)) {\r | |
862 | List<FarFileItem> ffList = new ArrayList<FarFileItem>();\r | |
863 | parseContents(childNode, ffList);\r | |
864 | fpItem.setContentList(ffList);\r | |
865 | }\r | |
866 | }\r | |
867 | }\r | |
868 | \r | |
869 | /**\r | |
870 | * \r | |
871 | * @param fpfListNode\r | |
872 | * @param plfList\r | |
873 | */\r | |
874 | public void parseFarPlatformList(Node fpfListNode, List<FarPlatformItem> plfList) {\r | |
875 | //\r | |
876 | // Get <FarPlatform> list.\r | |
877 | //\r | |
878 | NodeList child = fpfListNode.getChildNodes();\r | |
879 | Node farPlfNode;\r | |
880 | for (int i = 0; i < child.getLength(); i++) {\r | |
881 | if (child.item(i).getNodeType() == Node.TEXT_NODE) {\r | |
882 | continue;\r | |
883 | }\r | |
884 | farPlfNode = child.item(i);\r | |
885 | plfList.add(parseFarPlatform(farPlfNode));\r | |
886 | }\r | |
887 | }\r | |
888 | \r | |
889 | /**\r | |
890 | * \r | |
891 | * @param fpfNode\r | |
892 | * @return\r | |
893 | */\r | |
894 | public FarPlatformItem parseFarPlatform(Node fpfNode) {\r | |
895 | //\r | |
896 | // New FarPlatformItem.\r | |
897 | //\r | |
898 | FarPlatformItem fplItem = new FarPlatformItem();\r | |
899 | //\r | |
900 | // Get <FarPlatform> elements;\r | |
901 | //\r | |
902 | NodeList childList = fpfNode.getChildNodes();\r | |
903 | Node child;\r | |
904 | String nodeName;\r | |
905 | for (int i = 0; i < childList.getLength(); i++) {\r | |
906 | child = childList.item(i);\r | |
907 | nodeName = child.getNodeName();\r | |
908 | if (nodeName.equalsIgnoreCase(farPackage_FarfileName)) {\r | |
909 | fplItem.setFarFile(parseFarFile(child));\r | |
910 | } else if (nodeName.equalsIgnoreCase(guidValue)) {\r | |
911 | fplItem.setGuidValue(child.getTextContent());\r | |
912 | } else if (nodeName.equalsIgnoreCase(version)) {\r | |
913 | fplItem.setVersion(child.getTextContent());\r | |
914 | }\r | |
915 | }\r | |
916 | \r | |
917 | return fplItem;\r | |
918 | }\r | |
919 | \r | |
920 | public void parseContents(Node contentsNode, List<FarFileItem> ffList) {\r | |
921 | NodeList contentList = contentsNode.getChildNodes();\r | |
922 | Node contentNode;\r | |
923 | for (int i = 0; i < contentList.getLength(); i++) {\r | |
924 | if (contentList.item(i).getNodeType() == Node.TEXT_NODE) {\r | |
925 | continue;\r | |
926 | }\r | |
927 | contentNode = contentList.item(i);\r | |
928 | //\r | |
929 | // Parse each <FarFileName>.\r | |
930 | //\r | |
931 | ffList.add(parseFarFile(contentNode));\r | |
932 | }\r | |
933 | }\r | |
934 | \r | |
935 | public FarFileItem parseFarFile(Node farFileNode) {\r | |
936 | String ffName = farFileNode.getTextContent();\r | |
937 | NamedNodeMap attr = farFileNode.getAttributes();\r | |
938 | FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem(farFileName_Md5sum).getTextContent());\r | |
939 | return ffItem;\r | |
940 | }\r | |
941 | \r | |
942 | public boolean isFilter(File file, Set<String> fileter) {\r | |
943 | Iterator<String> iter = fileter.iterator();\r | |
944 | while (iter.hasNext()) {\r | |
945 | Pattern pattern = Pattern.compile(iter.next());\r | |
946 | Matcher matcher = pattern.matcher(file.getName());\r | |
947 | \r | |
948 | if (matcher.find()) {\r | |
949 | return true;\r | |
950 | }\r | |
951 | }\r | |
952 | return false;\r | |
953 | }\r | |
954 | \r | |
955 | }\r |