]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Mainfest.java
1. Update release note to use jdk1.5.0_06 to take place of jdk1.5.0_04
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / far / Mainfest.java
CommitLineData
5a24e806 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
15package org.tianocore.frameworkwizard.far;\r
16\r
17import java.io.File;\r
18import java.io.FileInputStream;\r
19import java.io.IOException;\r
20import java.io.InputStream;\r
21import java.util.ArrayList;\r
22import java.util.Iterator;\r
23import java.util.LinkedHashSet;\r
24import java.util.List;\r
25import java.util.Set;\r
26import java.util.regex.Matcher;\r
27import java.util.regex.Pattern;\r
28\r
29import javax.xml.parsers.DocumentBuilder;\r
30import javax.xml.parsers.DocumentBuilderFactory;\r
31import javax.xml.transform.OutputKeys;\r
32import javax.xml.transform.Result;\r
33import javax.xml.transform.Source;\r
34import javax.xml.transform.Transformer;\r
35import javax.xml.transform.TransformerFactory;\r
36import javax.xml.transform.dom.DOMSource;\r
37import javax.xml.transform.stream.StreamResult;\r
38\r
39import org.apache.xmlbeans.XmlException;\r
40import org.tianocore.frameworkwizard.common.Tools;\r
41import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
42import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
43import org.tianocore.frameworkwizard.workspace.Workspace;\r
44import org.w3c.dom.Document;\r
45import org.w3c.dom.Element;\r
46import org.w3c.dom.NamedNodeMap;\r
47import org.w3c.dom.Node;\r
48import org.w3c.dom.NodeList;\r
49\r
50public 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
ef6e2efe 60\r
5a24e806 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
ef6e2efe 135 return fhInfo;\r
5a24e806 136 }\r
ef6e2efe 137\r
5a24e806 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
ef6e2efe 167 public void createManifest(List<PackageIdentification> pkgList, List<PlatformIdentification> plfList,\r
168 Set<String> fileFilter) throws Exception {\r
5a24e806 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
ef6e2efe 206\r
5a24e806 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
ef6e2efe 215\r
5a24e806 216 //\r
217 // Add package guid value.\r
218 //\r
219 farPackage.setGuidValue(packageId.getGuid());\r
ef6e2efe 220\r
5a24e806 221 //\r
222 // Add package version\r
223 //\r
224 farPackage.setVersion(packageId.getVersion());\r
ef6e2efe 225\r
5a24e806 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
ef6e2efe 249\r
5a24e806 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
ef6e2efe 260\r
5a24e806 261 farPackage.setContentList(contents);\r
ef6e2efe 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
5a24e806 275 fPkgList.add(farPackage);\r
276 }\r
277\r
ef6e2efe 278 private void recursiveDirectory(Set<File> files, Set<File> fpds, File dir, Set<String> fileFilter) {\r
5a24e806 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
ef6e2efe 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
5a24e806 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
ef6e2efe 301\r
5a24e806 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
ef6e2efe 309 ffItem = new FarFileItem(Tools.getRelativePath(fpfFile.getPath(), Workspace.getCurrentWorkspace()),\r
310 FarMd5.md5(fpfFile));\r
5a24e806 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
ef6e2efe 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
5a24e806 359 pkgList.add(pkgId);\r
360 }\r
361 return pkgList;\r
362 }\r
363\r
364 /**\r
365 * \r
366 */\r
ef6e2efe 367 public List<PlatformIdentification> getPlatformList() throws Exception, IOException, XmlException {\r
5a24e806 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
ef6e2efe 375 File file = new File(Workspace.getCurrentWorkspace() + File.separatorChar\r
376 + fpfItem.getFarFile().getRelativeFilename());\r
5a24e806 377 //\r
378 // Set platformIdentificaiton's path as absolutly path (include\r
379 // workspace and FPD relatively path)\r
380 //\r
ef6e2efe 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
5a24e806 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
ef6e2efe 398\r
5a24e806 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
1898a0c3 404 farFileItem.setRelativeFilename(Tools.getFileNameOnly(farFileItem.getRelativeFilename()));\r
5a24e806 405 result.add(farFileItem);\r
ef6e2efe 406 break;\r
5a24e806 407 }\r
408 }\r
409 return result;\r
410 }\r
ef6e2efe 411\r
5a24e806 412 public List<FarFileItem> getPackageContents(PackageIdentification packageId) {\r
413 List<FarFileItem> farFileList = new ArrayList<FarFileItem>();\r
414 Iterator pkgItem = this.fPkgList.iterator();\r
415 while (pkgItem.hasNext()) {\r
416 FarPackage pkg = (FarPackage) pkgItem.next();\r
417 if (pkg.isIdentityPkg(packageId)) {\r
418 //\r
419 // Add spd far file to list.\r
420 //\r
421 farFileList.add(pkg.getFarFile());\r
422 //\r
423 // Add all files in contents to list.\r
424 //\r
425 farFileList.addAll(pkg.getContentList());\r
426 //\r
427 // Add all farfiles in <FarPlatformList> to list.\r
428 //\r
ef6e2efe 429 // List<FarPlatformItem> plfList = pkg.getFarPlatformList();\r
430 // Iterator plfItem = plfList.iterator();\r
431 // while (plfItem.hasNext()) {\r
432 // farFileList.add(((FarPlatformItem) plfItem.next())\r
433 // .getFarFile());\r
434 // }\r
435\r
5a24e806 436 Iterator<FarFileItem> ffIter = farFileList.iterator();\r
ef6e2efe 437 while (ffIter.hasNext()) {\r
438 FarFileItem ffItem = ffIter.next();\r
5a24e806 439 ffItem.setDefaultPath(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename());\r
440 }\r
441 break;\r
442 }\r
443 }\r
444\r
445 return farFileList;\r
446 }\r
447\r
448 /**\r
449 * \r
450 * @param pkgId\r
451 * @return String: return string represent jar file entry; \r
452 */\r
ef6e2efe 453 public String[] getPackgeSpd(PackageIdentification pkgId) {\r
5a24e806 454 Iterator pkgItem = this.fPkgList.iterator();\r
455 String[] entryStr = new String[2];\r
456 while (pkgItem.hasNext()) {\r
457 FarPackage pkg = (FarPackage) pkgItem.next();\r
458 if (pkg.isIdentityPkg(pkgId)) {\r
ef6e2efe 459 entryStr[0] = pkg.getFarFile().getRelativeFilename();\r
460 entryStr[1] = pkg.getDefaultPath();\r
5a24e806 461 return entryStr;\r
462 }\r
463 }\r
464 return null;\r
ef6e2efe 465 }\r
466\r
5a24e806 467 public List<FarFileItem> getPackageContents() {\r
468 //\r
469 // In this farFilelist,all FarFileItem's relativeFileName should be\r
470 // set as absolutely path.\r
471 //\r
472 List<FarFileItem> farFileList = new ArrayList<FarFileItem>();\r
473 Iterator pkgItem = this.fPkgList.iterator();\r
474 FarFileItem ffItem = null;\r
475\r
476 while (pkgItem.hasNext()) {\r
477 FarPackage pkg = (FarPackage) pkgItem.next();\r
478\r
479 //\r
480 // Add spd far file to list.\r
481 //\r
482 ffItem = pkg.getFarFile();\r
483 //\r
484 // Set farFileItem relativeFileName = absolutePath + file Name.\r
485 //\r
ef6e2efe 486 farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename(),\r
487 ffItem.getMd5Value()));\r
5a24e806 488 //\r
489 // Add all files in contents to list.\r
490 //\r
491 Iterator contentsItem = pkg.getContentList().iterator();\r
492 while (contentsItem.hasNext()) {\r
493 ffItem = (FarFileItem) contentsItem.next();\r
ef6e2efe 494 farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),\r
495 ffItem.getMd5Value()));\r
5a24e806 496 }\r
497 //\r
498 // Add all farfiles in <FarPlatformList> to list.\r
499 //\r
500 List<FarPlatformItem> plfList = pkg.getFarPlatformList();\r
501 Iterator plfItem = plfList.iterator();\r
502 while (plfItem.hasNext()) {\r
503 ffItem = ((FarPlatformItem) plfItem.next()).getFarFile();\r
ef6e2efe 504 farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),\r
505 ffItem.getMd5Value()));\r
5a24e806 506 }\r
507 }\r
508 return farFileList;\r
509 }\r
510\r
511 public String getPackageDefaultPath(PackageIdentification packageId) {\r
512 Iterator pkgItr = this.fPkgList.iterator();\r
513 while (pkgItr.hasNext()) {\r
514 FarPackage farPackage = (FarPackage) pkgItr.next();\r
515 if (farPackage.isIdentityPkg(packageId)) {\r
516 return farPackage.getDefaultPath();\r
517 }\r
518 }\r
519 return null;\r
520 }\r
ef6e2efe 521\r
522 // public void setPackageInstallPath(PackageIdentification packageId, String path) {\r
523 // Iterator<FarPackage> pkgItr = this.fPkgList.iterator();\r
524 // while (pkgItr.hasNext()) {\r
525 // FarPackage farPackage = pkgItr.next();\r
526 // if (farPackage.isIdentityPkg(packageId)) {\r
527 // farPackage.setDefaultPath(path);\r
528 // return ;\r
529 // }\r
530 // }\r
531 // }\r
532 //\r
533 // public void setPlatformInstallPath(PlatformIdentification platformId, String path) {\r
534 // Iterator<FarPlatformItem> plfItr = this.fPlfList.iterator();\r
535 // while (plfItr.hasNext()) {\r
536 // FarPlatformItem farPlatform = plfItr.next();\r
537 // if (farPlatform.i.isIdentity(platformId)) {\r
538 // farPackage.setDefaultPath(path);\r
539 // return ;\r
540 // }\r
541 // }\r
542 // }\r
543\r
5a24e806 544 public List<FarFileItem> getAllFileItem() {\r
545 //\r
546 // The farFileName in this list are all abosulte path.\r
547 //\r
548 List<FarFileItem> ffiList = new ArrayList<FarFileItem>();\r
549 //\r
550 // Add far files in <FarPackageList> to list.\r
551 //\r
552 ffiList = this.getPackageContents();\r
553\r
554 //\r
555 // Add far files in <FarPlatformList> to list\r
556 //\r
ef6e2efe 557 NodeList elementList = this.mainfestDoc.getElementsByTagName(farPlatformList);\r
5a24e806 558 for (int i = 0; i < elementList.getLength(); i++) {\r
559 //\r
560 // Get <farPlatform> node list.\r
561 //\r
562 Node item = elementList.item(i);\r
563 NodeList plfElements = item.getChildNodes();\r
564 for (int j = 0; j < plfElements.getLength(); j++) {\r
565 //\r
566 // Get each <FarPlatform> content.\r
567 //\r
568 NodeList plfChildNode = plfElements.item(i).getChildNodes();\r
569 Node tempNode = null;\r
570 for (int t = 0; t < plfChildNode.getLength(); t++) {\r
571 tempNode = plfChildNode.item(t);\r
572 //\r
573 // Get child node value and set to platformIdentification.\r
574 //\r
ef6e2efe 575 if (tempNode.getNodeName().equalsIgnoreCase(farPackage_FarfileName)) {\r
5a24e806 576 NamedNodeMap farAttr = tempNode.getAttributes();\r
577 //\r
578 // Change relative path to absolute one\r
579 //\r
ef6e2efe 580 FarFileItem farFile = new FarFileItem(tempNode.getTextContent(),\r
581 farAttr.getNamedItem(farFileName_Md5sum).getTextContent());\r
5a24e806 582 ffiList.add(farFile);\r
583 }\r
584 }\r
585 }\r
586 }\r
587 return ffiList;\r
588 }\r
589\r
590 public void hibernateToFile() throws Exception {\r
591 //\r
592 // create mainfest root node\r
593 //\r
ef6e2efe 594 Element rootNode = this.mainfestDoc.createElement("FrameworkArchiveManifest");\r
5a24e806 595 this.mainfestDoc.appendChild(rootNode);\r
596\r
597 //\r
598 // create mainfest header node\r
599 //\r
600 Element headerNode = this.mainfestDoc.createElement(farHeader);\r
601 rootNode.appendChild(headerNode);\r
602 //\r
603 // Add FarHeader to headerNode.\r
604 //\r
605 Element farName = this.mainfestDoc.createElement(farHeader_FarName);\r
606 farName.setTextContent(this.fhInfo.getFarName());\r
607 headerNode.appendChild(farName);\r
608\r
609 Element gv = this.mainfestDoc.createElement(guidValue);\r
610 gv.setTextContent(this.fhInfo.getGuidValue());\r
611 headerNode.appendChild(gv);\r
612\r
613 Element ver = this.mainfestDoc.createElement(version);\r
614 ver.setTextContent(this.fhInfo.getVersion());\r
615 headerNode.appendChild(ver);\r
616\r
617 Element abstra = this.mainfestDoc.createElement(farHeader_Abstract);\r
618 abstra.setTextContent(this.fhInfo.getAbstractStr());\r
619 headerNode.appendChild(abstra);\r
620\r
621 Element descr = this.mainfestDoc.createElement(farHeader_Description);\r
622 descr.setTextContent(this.fhInfo.getDescription());\r
623 headerNode.appendChild(descr);\r
624\r
625 Element copyright = this.mainfestDoc.createElement(farHeader_CopyRight);\r
626 copyright.setTextContent(this.fhInfo.getCopyright());\r
627 headerNode.appendChild(copyright);\r
628\r
629 Element license = this.mainfestDoc.createElement(farHeader_License);\r
630 license.setTextContent(this.fhInfo.getLicense());\r
631 headerNode.appendChild(license);\r
632\r
633 Element spec = this.mainfestDoc.createElement(farHeader_Specification);\r
634 spec.setTextContent(this.fhInfo.getSpecification());\r
635 System.out.println(this.fhInfo.getSpecification());\r
636 headerNode.appendChild(spec);\r
637\r
638 //\r
639 // create mainfest FarPackageList node\r
640 //\r
641 Element pkgListNode = this.mainfestDoc.createElement(farPackageList);\r
642 rootNode.appendChild(pkgListNode);\r
643\r
644 //\r
645 // Save each item in farPackage list to <FarPackage>.\r
646 //\r
647 Iterator pkgItem = this.fPkgList.iterator();\r
648 while (pkgItem.hasNext()) {\r
649 pkgToFarPkgNode(pkgListNode, (FarPackage) pkgItem.next());\r
650\r
651 }\r
652\r
653 //\r
654 // create mainfest FarPlatformList node\r
655 //\r
656 Element plfListNode = this.mainfestDoc.createElement(farPlatformList);\r
657 rootNode.appendChild(plfListNode);\r
658\r
659 //\r
660 // Save farPakcage list info to <FarPackageList> node\r
661 //\r
662 Iterator plfItem = this.fPlfList.iterator();\r
663 while (plfItem.hasNext()) {\r
664 FarPlatformItem plfIterator = (FarPlatformItem) plfItem.next();\r
665 PlfToPlatformNode(plfListNode, plfIterator);\r
666 }\r
667\r
668 //\r
669 // Write the DOM document to the file\r
670 //\r
671 Transformer xformer = TransformerFactory.newInstance().newTransformer();\r
ef6e2efe 672 xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");\r
5a24e806 673 xformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
674\r
675 //\r
676 // Prepare the DOM document for writing\r
677 //\r
678 Source source = new DOMSource(this.mainfestDoc);\r
679 //\r
680 // Prepare the output file, get the Mainifest file name from <FarHeader>\r
681 // /<FarName>.\r
682 //\r
ef6e2efe 683 this.mfFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar + mfFileName);\r
5a24e806 684 //\r
685 // generate all directory path\r
686 //\r
687 Result result = new StreamResult(this.mfFile);\r
688 xformer.transform(source, result);\r
689 }\r
690\r
691 public void pkgToFarPkgNode(Element parentNode, FarPackage pkgItem) {\r
ef6e2efe 692 Element pkgNode = this.mainfestDoc.createElement(farPackageList_FarPackage);\r
5a24e806 693 //\r
694 // Add <FarFileName>\r
695 //\r
696 ffiToFfNode(pkgNode, pkgItem.getFarFile());\r
697 //\r
698 // Add <GuidValue>\r
699 //\r
700 setStrItemToNode(pkgNode, pkgItem.getGuidValue(), guidValue);\r
701 //\r
702 // Add <Version>\r
703 //\r
704 setStrItemToNode(pkgNode, pkgItem.getVersion(), version);\r
705 //\r
706 // Add <DefaultPath>\r
707 //\r
ef6e2efe 708 setStrItemToNode(pkgNode, pkgItem.getDefaultPath(), farPackage_DefaultPath);\r
5a24e806 709\r
710 //\r
711 // Add <Contents>\r
712 //\r
713 Element contentNode = this.mainfestDoc.createElement(contents);\r
714 Iterator iterator = pkgItem.getContentList().iterator();\r
715 while (iterator.hasNext()) {\r
716 ffiToFfNode(contentNode, (FarFileItem) iterator.next());\r
717 }\r
718 pkgNode.appendChild(contentNode);\r
719 parentNode.appendChild(pkgNode);\r
720 }\r
721\r
722 public void PlfToPlatformNode(Element parentNode, FarPlatformItem fplItem) {\r
ef6e2efe 723 Element fplNode = this.mainfestDoc.createElement(farPlatformList_FarPlatform);\r
5a24e806 724 //\r
725 // Add <FarFileName>\r
726 //\r
727 ffiToFfNode(fplNode, fplItem.getFarFile());\r
728 //\r
729 // Add <GuidValue>\r
730 //\r
731 setStrItemToNode(fplNode, fplItem.getGuidValue(), guidValue);\r
732 //\r
733 // Add <Version>\r
734 //\r
735 setStrItemToNode(fplNode, fplItem.getVersion(), version);\r
736 //\r
737 // Add to <PlatformList>\r
738 //\r
739 parentNode.appendChild(fplNode);\r
740\r
741 }\r
742\r
743 public void ffiToFfNode(Element parentNode, FarFileItem ffi) {\r
ef6e2efe 744 Element farFileName = this.mainfestDoc.createElement(farPackage_FarfileName);\r
5a24e806 745 farFileName.setTextContent(ffi.getRelativeFilename());\r
746 System.out.println(farFileName.getTextContent());\r
ef6e2efe 747 System.out.println(ffi.getRelativeFilename());\r
5a24e806 748 farFileName.setAttribute(farFileName_Md5sum, ffi.getMd5Value());\r
749 parentNode.appendChild(farFileName);\r
750 }\r
751\r
ef6e2efe 752 public void setStrItemToNode(Element parentNode, String strValue, String strName) {\r
5a24e806 753 Element node = this.mainfestDoc.createElement(strName);\r
754 node.setTextContent(strValue);\r
755 parentNode.appendChild(node);\r
756 }\r
757\r
758 private void parseMainfest() {\r
759\r
760 //\r
761 // Parse header\r
762 //\r
763 parseMfHeader();\r
764 //\r
765 // parse <farPackageList>\r
766 //\r
767 parseHeaderFarPackageList();\r
768\r
769 //\r
770 // parse <farPlatformList>\r
771 //\r
772 NodeList ele = this.mainfestDoc.getElementsByTagName(farPlatformList);\r
773 Node plfNode;\r
774 if (ele.getLength() > 0) {\r
775 //\r
776 // Only have one <FarPlatformList> node under mainfest root node.\r
777 //\r
778 plfNode = ele.item(0);\r
779 parseFarPlatformList(plfNode, this.fPlfList);\r
780 }\r
781 }\r
782\r
783 private void parseMfHeader() {\r
784 Node headerNode;\r
785 NodeList ele = this.mainfestDoc.getElementsByTagName(farHeader);\r
786 if (ele.getLength() > 0) {\r
787 //\r
788 // For mainfest file only have one <FarHeader>\r
789 //\r
790 headerNode = ele.item(0);\r
791 } else {\r
792 return;\r
793 }\r
ef6e2efe 794 NodeList childList = headerNode.getChildNodes();\r
5a24e806 795 Node node = null;\r
796 String nodeName = null;\r
797 for (int i = 0; i < childList.getLength(); i++) {\r
798 node = childList.item(i);\r
799 nodeName = node.getNodeName();\r
ef6e2efe 800 if (nodeName.equalsIgnoreCase(farHeader_FarName)) {\r
5a24e806 801 String nodeValue = node.getTextContent();\r
802 this.fhInfo.setFarName(nodeValue);\r
803 } else if (nodeName.equalsIgnoreCase(guidValue)) {\r
804 this.fhInfo.setGuidValue(node.getTextContent());\r
805 } else if (nodeName.equalsIgnoreCase(version)) {\r
806 this.fhInfo.setVersion(node.getTextContent());\r
807 } else if (nodeName.equalsIgnoreCase(farHeader_Abstract)) {\r
808 this.fhInfo.setAbstractStr(node.getTextContent());\r
809 } else if (nodeName.equalsIgnoreCase(farHeader_Description)) {\r
810 this.fhInfo.setDescription(node.getTextContent());\r
811 } else if (nodeName.equalsIgnoreCase(farHeader_CopyRight)) {\r
812 this.fhInfo.setCopyright(node.getTextContent());\r
813 } else if (nodeName.equalsIgnoreCase(farHeader_License)) {\r
814 this.fhInfo.setLicense(node.getTextContent());\r
815 } else if (nodeName.equalsIgnoreCase(farHeader_Specification)) {\r
816 this.fhInfo.setSpecification(node.getTextContent());\r
817 }\r
818 }\r
819 }\r
820\r
821 public void parseHeaderFarPackageList() {\r
822 Node farPkgNode;\r
823 NodeList ele = this.mainfestDoc.getElementsByTagName(farPackageList);\r
824 if (ele.getLength() > 0) {\r
825 //\r
826 // For mainfest file only have one <FarHeader>\r
827 //\r
828 farPkgNode = ele.item(0);\r
829 } else {\r
830 return;\r
831 }\r
832 NodeList fpnList = farPkgNode.getChildNodes();\r
833 for (int i = 0; i < fpnList.getLength(); i++) {\r
ef6e2efe 834 if (fpnList.item(i).getNodeType() == Node.TEXT_NODE) {\r
5a24e806 835 continue;\r
836 }\r
837 FarPackage fpItem = new FarPackage();\r
838 parseFarPackage(fpnList.item(i), fpItem);\r
839 this.fPkgList.add(fpItem);\r
840 }\r
841 }\r
842\r
843 public void parseFarPackage(Node farPkgNode, FarPackage fpItem) {\r
844 NodeList childList = farPkgNode.getChildNodes();\r
845 Node childNode;\r
846 String childName;\r
847 for (int i = 0; i < childList.getLength(); i++) {\r
848 childNode = childList.item(i);\r
849 childName = childNode.getNodeName();\r
850 if (childName.equalsIgnoreCase(farPackage_FarfileName)) {\r
851 fpItem.setFarFile(parseFarFile(childNode));\r
852 } else if (childName.equalsIgnoreCase(guidValue)) {\r
853 fpItem.setGuidValue(childNode.getTextContent());\r
854 } else if (childName.equalsIgnoreCase(version)) {\r
855 fpItem.setVersion(childNode.getTextContent());\r
856 } else if (childName.equalsIgnoreCase(farPackage_DefaultPath)) {\r
857 fpItem.setDefaultPath(childNode.getTextContent());\r
858 } else if (childName.equalsIgnoreCase(farPlatformList)) {\r
859 List<FarPlatformItem> plfList = new ArrayList<FarPlatformItem>();\r
860 parseFarPlatformList(childNode, plfList);\r
861 fpItem.setFarPlatformList(plfList);\r
862 } else if (childName.equalsIgnoreCase(contents)) {\r
863 List<FarFileItem> ffList = new ArrayList<FarFileItem>();\r
864 parseContents(childNode, ffList);\r
865 fpItem.setContentList(ffList);\r
866 }\r
867 }\r
868 }\r
869\r
870 /**\r
871 * \r
872 * @param fpfListNode\r
873 * @param plfList\r
874 */\r
ef6e2efe 875 public void parseFarPlatformList(Node fpfListNode, List<FarPlatformItem> plfList) {\r
5a24e806 876 //\r
877 // Get <FarPlatform> list.\r
878 //\r
879 NodeList child = fpfListNode.getChildNodes();\r
880 Node farPlfNode;\r
881 for (int i = 0; i < child.getLength(); i++) {\r
ef6e2efe 882 if (child.item(i).getNodeType() == Node.TEXT_NODE) {\r
5a24e806 883 continue;\r
884 }\r
885 farPlfNode = child.item(i);\r
886 plfList.add(parseFarPlatform(farPlfNode));\r
887 }\r
888 }\r
889\r
890 /**\r
891 * \r
892 * @param fpfNode\r
893 * @return\r
894 */\r
895 public FarPlatformItem parseFarPlatform(Node fpfNode) {\r
896 //\r
897 // New FarPlatformItem.\r
898 //\r
899 FarPlatformItem fplItem = new FarPlatformItem();\r
900 //\r
901 // Get <FarPlatform> elements;\r
902 //\r
903 NodeList childList = fpfNode.getChildNodes();\r
904 Node child;\r
905 String nodeName;\r
906 for (int i = 0; i < childList.getLength(); i++) {\r
907 child = childList.item(i);\r
908 nodeName = child.getNodeName();\r
909 if (nodeName.equalsIgnoreCase(farPackage_FarfileName)) {\r
910 fplItem.setFarFile(parseFarFile(child));\r
911 } else if (nodeName.equalsIgnoreCase(guidValue)) {\r
912 fplItem.setGuidValue(child.getTextContent());\r
913 } else if (nodeName.equalsIgnoreCase(version)) {\r
914 fplItem.setVersion(child.getTextContent());\r
915 }\r
916 }\r
917\r
918 return fplItem;\r
919 }\r
920\r
921 public void parseContents(Node contentsNode, List<FarFileItem> ffList) {\r
922 NodeList contentList = contentsNode.getChildNodes();\r
923 Node contentNode;\r
924 for (int i = 0; i < contentList.getLength(); i++) {\r
ef6e2efe 925 if (contentList.item(i).getNodeType() == Node.TEXT_NODE) {\r
5a24e806 926 continue;\r
927 }\r
928 contentNode = contentList.item(i);\r
929 //\r
930 // Parse each <FarFileName>.\r
931 //\r
932 ffList.add(parseFarFile(contentNode));\r
933 }\r
934 }\r
935\r
936 public FarFileItem parseFarFile(Node farFileNode) {\r
937 String ffName = farFileNode.getTextContent();\r
938 NamedNodeMap attr = farFileNode.getAttributes();\r
ef6e2efe 939 FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem(farFileName_Md5sum).getTextContent());\r
5a24e806 940 return ffItem;\r
941 }\r
942\r
943 public boolean isFilter(File file, Set<String> fileter) {\r
ef6e2efe 944 Iterator<String> iter = fileter.iterator();\r
945 while (iter.hasNext()) {\r
946 Pattern pattern = Pattern.compile(iter.next());\r
947 Matcher matcher = pattern.matcher(file.getName());\r
948\r
949 if (matcher.find()) {\r
950 return true;\r
5a24e806 951 }\r
ef6e2efe 952 }\r
5a24e806 953 return false;\r
954 }\r
955\r
956}\r