From 1898a0c348278a7af7a9e3576f2e45ab7292dbdd Mon Sep 17 00:00:00 2001 From: qouyang Date: Thu, 13 Jul 2006 08:06:16 +0000 Subject: [PATCH] Enhance Installation, removing and creating FAR functionality. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@964 6f19259b-4bc3-4df7-8a09-765794883524 --- .../frameworkwizard/far/DistributeRule.java | 13 +- .../tianocore/frameworkwizard/far/Far.java | 123 ++++---- .../far/FarIdentification.java | 14 + .../frameworkwizard/far/Mainfest.java | 278 +++++++++-------- .../far/updateui/UpdateStepOne.java | 80 ++--- .../far/updateui/UpdateStepTwo.java | 279 ++++++++++++------ 6 files changed, 474 insertions(+), 313 deletions(-) diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/DistributeRule.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/DistributeRule.java index e6b19b3be1..801cea6b3f 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/DistributeRule.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/DistributeRule.java @@ -59,17 +59,8 @@ public class DistributeRule { AggregationOperation.union(farPkgList, dbPkgList)); - // - // If dependencies don't meet, print the error message and return. - // - // if (resultList != null || resultList.size()> 0){ - // Iterator resItem = resultList.iterator(); - // while (resItem.hasNext()){ - // System.out.println("Missing package:" + resItem.next().toString() + " !"); - // } - // } - return resultList; - + return resultList; + } // public void installPackgCheck (PackageIdentification pkgId, String pkgPath){ diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Far.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Far.java index 21a86f5789..d550d220ac 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Far.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Far.java @@ -62,9 +62,10 @@ public class Far { jf = farFile; this.mainfest = new Mainfest(getMainfestFile()); } - - public void creatFar(List pkgList, List plfList, - Set fileFilter, FarHeader fHeader) throws Exception { + + public void creatFar (List pkgList, + List plfList, Set fileFilter, + FarHeader fHeader) throws Exception{ jos = new JarOutputStream(new FileOutputStream(jarFile)); // @@ -93,28 +94,23 @@ public class Far { } jos.close(); } - - private void writeToJar(File file, JarOutputStream jos) throws Exception { - byte[] buffer = new byte[(int) file.length()]; - FileInputStream fInput = new FileInputStream(file); - JarEntry entry = new JarEntry( - Tools - .convertPathToUnixType(Tools - .getRelativePath(file.getPath(), - Workspace.getCurrentWorkspace()))); - jos.putNextEntry(entry); - fInput.read(buffer); - jos.write(buffer); - fInput.close(); + + private void writeToJar(File file, JarOutputStream jos) throws Exception{ + byte[] buffer = new byte[(int)file.length()]; + FileInputStream fInput = new FileInputStream(file); + JarEntry entry = new JarEntry(Tools.convertPathToUnixType(Tools.getRelativePath(file.getPath(),Workspace.getCurrentWorkspace()))); + jos.putNextEntry(entry); + fInput.read(buffer); + jos.write(buffer); + fInput.close(); } public void InstallFar(String dir) throws Exception { List allFile = mainfest.getAllFileItem(); extract(allFile, dir); } - - public void InstallFar(Map plfMap, Map pkgMap) - throws Exception { + + public void InstallFar (Map plfMap, Map pkgMap) throws Exception{ Set plfKeys = plfMap.keySet(); Iterator plfIter = plfKeys.iterator(); while (plfIter.hasNext()) { @@ -153,7 +149,39 @@ public class Far { public boolean hibernateToFile() { return true; } - +// public static void main(String[] args){ +// try { +// JarFile jarFile = new JarFile(new File("C:\\cvswork\\newEdk\\jar.jar.far")); +// JarEntry je= jarFile.getJarEntry("MdePkg/MdePkg.spd"); +// InputStream is = jarFile.getInputStream(je); +// byte[] buffer = new byte[1]; +// File tempFile = new File("C:\\cvswork\\newEdk\\tempFile"); +// File tfile2 = new File("C:\\cvswork\\newEdk\\tempFile1"); +// FileOutputStream fos1 = new FileOutputStream(tfile2); +// FileOutputStream fos = new FileOutputStream(tempFile); +// int size = is.read(buffer); +// int totoalSize = size; +// while ( size >= 0) { +// fos.write(buffer); +// size = is.read(buffer); +// totoalSize = totoalSize + size; +// } +// +// +//// is = jarFile.getInputStream(je); +//// is.read(totalbuffer); +//// fos.write(totalbuffer); +// fos.close(); +// byte[] totalbuffer = new byte[(int)tempFile.length()]; +// FileInputStream fis = new FileInputStream(tempFile); +// fis.read(totalbuffer); +// fos1.write(totalbuffer); +// fos1.close(); +// }catch(Exception e){ +// +// } +// } + public void extract(List allFile, String dir) throws Exception { Iterator filesItem = allFile.iterator(); @@ -163,11 +191,7 @@ public class Far { dir += File.separatorChar; while (filesItem.hasNext()) { try { - ffItem = (FarFileItem) filesItem.next(); - // Enumeration a = jf.entries(); - // while (a.hasMoreElements()) { - // System.out.println("##" + a.nextElement().getName()); - // } + ffItem = (FarFileItem)filesItem.next(); je = jf.getJarEntry(Tools.convertPathToUnixType(ffItem.getDefaultPath())); InputStream entryStream = jf.getInputStream(je); File file = new File(dir + ffItem.getRelativeFilename()); @@ -178,20 +202,29 @@ public class Far { // exists). // FileOutputStream outputStream = new FileOutputStream(file); + try { // // Read the entry data and write it to the output // file. // - int size = entryStream.available(); - byte[] buffer = new byte[size]; - outputStream.write(buffer); - // if (!(FarMd5.md5(buffer)).equalsIgnoreCase(ffItem.getMd5Value())){ - // throw new Exception (je.getName() + " Md5 is invalided!"); - // } - - // System.out.println(je.getName() + " extracted."); + byte[] buffer = new byte[1]; + File tempFile = new File("tempFile"); + FileOutputStream fos = new FileOutputStream(tempFile); + int size = entryStream.read(buffer); + while ( size >= 0) { + fos.write(buffer); + size = entryStream.read(buffer); + } + + fos.close(); + byte[] totalBuffer = new byte[(int)tempFile.length()]; + FileInputStream fis = new FileInputStream(tempFile); + fis.read(totalBuffer); + outputStream.write(totalBuffer); + fis.close(); + tempFile.delete(); } finally { outputStream.close(); } @@ -200,26 +233,14 @@ public class Far { } } finally { - //jf.close(); } } - - } - - // public void installFarPackage (PackageIdentification pkgId, String dir) throws Exception{ - // String pkgDir = null; - // List farFileList = new ArrayList(); - // farFileList = this.mainfest.getPackageContents(pkgId); - // if (dir == null){ - // pkgDir = this.mainfest.getPackageDefaultPath(pkgId); - // }else { - // pkgDir = dir; - // } - // extract(farFileList,pkgDir); - // } - - public void addFileToFar(File file, JarOutputStream farOuputStream, String workDir) { - + + } + + + public void addFileToFar (File file, JarOutputStream farOuputStream, String workDir){ + } /** diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/FarIdentification.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/FarIdentification.java index bd9d362f52..babc9e3d92 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/FarIdentification.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/FarIdentification.java @@ -1,3 +1,17 @@ +/** @file + + The file is used to save information of Far item. + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + **/ package org.tianocore.frameworkwizard.far; public class FarIdentification { diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Mainfest.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Mainfest.java index 430cb36652..04dbf40719 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Mainfest.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/Mainfest.java @@ -57,7 +57,6 @@ public class Mainfest implements ManifestInterface { // / Mainfest file element name // / final static String mfFileName = "FarMainfest.MF"; - // // Header // @@ -132,9 +131,9 @@ public class Mainfest implements ManifestInterface { File mfFile = null; public FarHeader getHeader() { - return fhInfo; + return fhInfo; } - + public Mainfest() throws Exception { DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance(); DocumentBuilder dombuilder = domfac.newDocumentBuilder(); @@ -164,8 +163,8 @@ public class Mainfest implements ManifestInterface { this.fhInfo = fHeader; } - public void createManifest(List pkgList, List plfList, - Set fileFilter) throws Exception { + public void createManifest(List pkgList, + List plfList, Set fileFilter) throws Exception { // // Add Package and it's contents to FarPackageList. @@ -203,7 +202,7 @@ public class Mainfest implements ManifestInterface { public void addPkgToPkgList(PackageIdentification packageId, Set fileFilter) throws Exception { files.add(packageId.getSpdFile()); - + FarPackage farPackage = new FarPackage(); // // Add SPD file to FarPackage @@ -212,17 +211,17 @@ public class Mainfest implements ManifestInterface { FarFileItem ffItem = new FarFileItem(spdFile.getName(), FarMd5.md5(spdFile)); farPackage.setFarFile(ffItem); - + // // Add package guid value. // farPackage.setGuidValue(packageId.getGuid()); - + // // Add package version // farPackage.setVersion(packageId.getVersion()); - + // // Add DefaultPat: Package absoulte path - Workspace absolut // path. @@ -246,7 +245,7 @@ public class Mainfest implements ManifestInterface { // Remove current package's SPD file // fileSet.remove(packageId.getSpdFile()); - + files.addAll(fileSet); Iterator iter = fileSet.iterator(); @@ -257,25 +256,26 @@ public class Mainfest implements ManifestInterface { ffItem = new FarFileItem(fileRelativePath, FarMd5.md5(normalFile)); contents.add(ffItem); } - + farPackage.setContentList(contents); - - // List fpfList = new ArrayList(); - // - // iter = fpdFileSet.iterator(); - // - // while (iter.hasNext()) { - // File fpdFile = iter.next(); - // PlatformIdentification platformId = new PlatformIdentification(wsTool - // .getId(fpdFile.getPath(), OpenFile.openFpdFile(fpdFile - // .getPath()))); - // addPlatformIdToFarPlatformItemList(fpfList, platformId); - // } - // farPackage.setFarPlatformList(fpfList); + +// List fpfList = new ArrayList(); +// +// iter = fpdFileSet.iterator(); +// +// while (iter.hasNext()) { +// File fpdFile = iter.next(); +// PlatformIdentification platformId = new PlatformIdentification(wsTool +// .getId(fpdFile.getPath(), OpenFile.openFpdFile(fpdFile +// .getPath()))); +// addPlatformIdToFarPlatformItemList(fpfList, platformId); +// } +// farPackage.setFarPlatformList(fpfList); fPkgList.add(farPackage); } - private void recursiveDirectory(Set files, Set fpds, File dir, Set fileFilter) { + private void recursiveDirectory(Set files, Set fpds, File dir, + Set fileFilter) { if (isFilter(dir, fileFilter)) { return; } @@ -285,11 +285,11 @@ public class Mainfest implements ManifestInterface { if (isFilter(allFilesInDir[i], fileFilter)) { continue; } - // if (allFilesInDir[i].getPath().toLowerCase().endsWith(".fpd")) { - // fpds.add(allFilesInDir[i]); - // } else { - files.add(allFilesInDir[i]); - // } +// if (allFilesInDir[i].getPath().toLowerCase().endsWith(".fpd")) { +// fpds.add(allFilesInDir[i]); +// } else { + files.add(allFilesInDir[i]); +// } } else { recursiveDirectory(files, fpds, allFilesInDir[i], fileFilter); } @@ -298,7 +298,7 @@ public class Mainfest implements ManifestInterface { public void addPlatformIdToFarPlatformItemList(PlatformIdentification platformId) throws Exception { files.add(platformId.getFpdFile()); - + FarPlatformItem fpfItem = new FarPlatformItem(); FarFileItem ffItem; String fpfPath = platformId.getPath(); @@ -306,8 +306,7 @@ public class Mainfest implements ManifestInterface { // // Add farFileName // - ffItem = new FarFileItem(Tools.getRelativePath(fpfFile.getPath(), Workspace.getCurrentWorkspace()), - FarMd5.md5(fpfFile)); + ffItem = new FarFileItem(Tools.getRelativePath(fpfFile.getPath(),Workspace.getCurrentWorkspace()), FarMd5.md5(fpfFile)); fpfItem.setFarFile(ffItem); // @@ -344,18 +343,16 @@ public class Mainfest implements ManifestInterface { // identification. // - PackageIdentification pkgId = new PackageIdentification(fPkg.getFarFile().getRelativeFilename(), - fPkg.getGuidValue(), fPkg.getVersion()); - pkgId.setPath(Workspace.getCurrentWorkspace() + File.separatorChar + fPkg.getDefaultPath() - + File.separatorChar + fPkg.getFarFile().getRelativeFilename()); - // wsTool.getId( - // Workspace.getCurrentWorkspace() + File.separatorChar - // + fPkg.getDefaultPath(), OpenFile - // .openFpdFile(Workspace.getCurrentWorkspace() - // + File.separatorChar - // + fPkg.getDefaultPath() - // + File.separatorChar - // + fPkg.getFarFile().getRelativeFilename())); + PackageIdentification pkgId = new PackageIdentification(fPkg.getFarFile().getRelativeFilename(), fPkg.getGuidValue(), fPkg.getVersion()); + pkgId.setPath(Workspace.getCurrentWorkspace() + File.separatorChar + fPkg.getDefaultPath() + File.separatorChar + fPkg.getFarFile().getRelativeFilename()); +// wsTool.getId( +// Workspace.getCurrentWorkspace() + File.separatorChar +// + fPkg.getDefaultPath(), OpenFile +// .openFpdFile(Workspace.getCurrentWorkspace() +// + File.separatorChar +// + fPkg.getDefaultPath() +// + File.separatorChar +// + fPkg.getFarFile().getRelativeFilename())); pkgList.add(pkgId); } return pkgList; @@ -364,7 +361,8 @@ public class Mainfest implements ManifestInterface { /** * */ - public List getPlatformList() throws Exception, IOException, XmlException { + public List getPlatformList() throws Exception, + IOException, XmlException { // // PlatformIdentification set. // @@ -372,21 +370,21 @@ public class Mainfest implements ManifestInterface { Iterator plfItem = this.fPlfList.iterator(); while (plfItem.hasNext()) { FarPlatformItem fpfItem = (FarPlatformItem) plfItem.next(); - File file = new File(Workspace.getCurrentWorkspace() + File.separatorChar - + fpfItem.getFarFile().getRelativeFilename()); + File file = new File(Workspace.getCurrentWorkspace() + + File.separatorChar + + fpfItem.getFarFile().getRelativeFilename()); // // Set platformIdentificaiton's path as absolutly path (include // workspace and FPD relatively path) // - PlatformIdentification plfId = new PlatformIdentification(fpfItem.getFarFile().getRelativeFilename(), - fpfItem.getGuidValue(), fpfItem.getVersion(), - file.getPath()); - - // (PlatformIdentification) wsTool - // .getId(file.getParent(), OpenFile.openFpdFile(Workspace - // .getCurrentWorkspace() - // + File.separatorChar - // + fpfItem.getFarFile().getRelativeFilename())); + PlatformIdentification plfId = new PlatformIdentification (fpfItem.getFarFile().getRelativeFilename(), fpfItem.getGuidValue(),fpfItem.getVersion(), + file.getPath()); + +// (PlatformIdentification) wsTool +// .getId(file.getParent(), OpenFile.openFpdFile(Workspace +// .getCurrentWorkspace() +// + File.separatorChar +// + fpfItem.getFarFile().getRelativeFilename())); plfList.add(plfId); } return plfList; @@ -395,19 +393,20 @@ public class Mainfest implements ManifestInterface { public List getPlatformContents(PlatformIdentification platformId) { List result = new ArrayList(); Iterator iter = this.fPlfList.iterator(); - + while (iter.hasNext()) { FarPlatformItem item = iter.next(); if (item.isIdentityPlf(platformId)) { FarFileItem farFileItem = item.getFarFile(); farFileItem.setDefaultPath(farFileItem.getRelativeFilename()); + farFileItem.setRelativeFilename(Tools.getFileNameOnly(farFileItem.getRelativeFilename())); result.add(farFileItem); - break; + break ; } } return result; } - + public List getPackageContents(PackageIdentification packageId) { List farFileList = new ArrayList(); Iterator pkgItem = this.fPkgList.iterator(); @@ -425,22 +424,23 @@ public class Mainfest implements ManifestInterface { // // Add all farfiles in to list. // - // List plfList = pkg.getFarPlatformList(); - // Iterator plfItem = plfList.iterator(); - // while (plfItem.hasNext()) { - // farFileList.add(((FarPlatformItem) plfItem.next()) - // .getFarFile()); - // } - +// List plfList = pkg.getFarPlatformList(); +// Iterator plfItem = plfList.iterator(); +// while (plfItem.hasNext()) { +// farFileList.add(((FarPlatformItem) plfItem.next()) +// .getFarFile()); +// } + Iterator ffIter = farFileList.iterator(); - while (ffIter.hasNext()) { - FarFileItem ffItem = ffIter.next(); + while(ffIter.hasNext()){ + FarFileItem ffItem = ffIter.next(); ffItem.setDefaultPath(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename()); } break; } } + return farFileList; } @@ -449,20 +449,20 @@ public class Mainfest implements ManifestInterface { * @param pkgId * @return String: return string represent jar file entry; */ - public String[] getPackgeSpd(PackageIdentification pkgId) { + public String[] getPackgeSpd(PackageIdentification pkgId){ Iterator pkgItem = this.fPkgList.iterator(); String[] entryStr = new String[2]; while (pkgItem.hasNext()) { FarPackage pkg = (FarPackage) pkgItem.next(); if (pkg.isIdentityPkg(pkgId)) { - entryStr[0] = pkg.getFarFile().getRelativeFilename(); - entryStr[1] = pkg.getDefaultPath(); + entryStr[0] = pkg.getFarFile().getRelativeFilename(); + entryStr[1] = pkg.getDefaultPath() ; return entryStr; } } return null; - } - + } + public List getPackageContents() { // // In this farFilelist,all FarFileItem's relativeFileName should be @@ -482,16 +482,18 @@ public class Mainfest implements ManifestInterface { // // Set farFileItem relativeFileName = absolutePath + file Name. // - farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename(), - ffItem.getMd5Value())); + farFileList.add(new FarFileItem(pkg.getDefaultPath() + + File.separatorChar + ffItem.getRelativeFilename(), ffItem + .getMd5Value())); // // Add all files in contents to list. // Iterator contentsItem = pkg.getContentList().iterator(); while (contentsItem.hasNext()) { ffItem = (FarFileItem) contentsItem.next(); - farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(), - ffItem.getMd5Value())); + farFileList.add(new FarFileItem(pkg.getDefaultPath() + + File.separator + ffItem.getRelativeFilename(), ffItem + .getMd5Value())); } // // Add all farfiles in to list. @@ -500,8 +502,9 @@ public class Mainfest implements ManifestInterface { Iterator plfItem = plfList.iterator(); while (plfItem.hasNext()) { ffItem = ((FarPlatformItem) plfItem.next()).getFarFile(); - farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(), - ffItem.getMd5Value())); + farFileList.add(new FarFileItem(pkg.getDefaultPath() + + File.separator + ffItem.getRelativeFilename(), ffItem + .getMd5Value())); } } return farFileList; @@ -517,29 +520,29 @@ public class Mainfest implements ManifestInterface { } return null; } - - // public void setPackageInstallPath(PackageIdentification packageId, String path) { - // Iterator pkgItr = this.fPkgList.iterator(); - // while (pkgItr.hasNext()) { - // FarPackage farPackage = pkgItr.next(); - // if (farPackage.isIdentityPkg(packageId)) { - // farPackage.setDefaultPath(path); - // return ; - // } - // } - // } - // - // public void setPlatformInstallPath(PlatformIdentification platformId, String path) { - // Iterator plfItr = this.fPlfList.iterator(); - // while (plfItr.hasNext()) { - // FarPlatformItem farPlatform = plfItr.next(); - // if (farPlatform.i.isIdentity(platformId)) { - // farPackage.setDefaultPath(path); - // return ; - // } - // } - // } - + +// public void setPackageInstallPath(PackageIdentification packageId, String path) { +// Iterator pkgItr = this.fPkgList.iterator(); +// while (pkgItr.hasNext()) { +// FarPackage farPackage = pkgItr.next(); +// if (farPackage.isIdentityPkg(packageId)) { +// farPackage.setDefaultPath(path); +// return ; +// } +// } +// } +// +// public void setPlatformInstallPath(PlatformIdentification platformId, String path) { +// Iterator plfItr = this.fPlfList.iterator(); +// while (plfItr.hasNext()) { +// FarPlatformItem farPlatform = plfItr.next(); +// if (farPlatform.i.isIdentity(platformId)) { +// farPackage.setDefaultPath(path); +// return ; +// } +// } +// } + public List getAllFileItem() { // // The farFileName in this list are all abosulte path. @@ -553,7 +556,8 @@ public class Mainfest implements ManifestInterface { // // Add far files in to list // - NodeList elementList = this.mainfestDoc.getElementsByTagName(farPlatformList); + NodeList elementList = this.mainfestDoc + .getElementsByTagName(farPlatformList); for (int i = 0; i < elementList.getLength(); i++) { // // Get node list. @@ -571,13 +575,15 @@ public class Mainfest implements ManifestInterface { // // Get child node value and set to platformIdentification. // - if (tempNode.getNodeName().equalsIgnoreCase(farPackage_FarfileName)) { + if (tempNode.getNodeName().equalsIgnoreCase( + farPackage_FarfileName)) { NamedNodeMap farAttr = tempNode.getAttributes(); // // Change relative path to absolute one // - FarFileItem farFile = new FarFileItem(tempNode.getTextContent(), - farAttr.getNamedItem(farFileName_Md5sum).getTextContent()); + FarFileItem farFile = new FarFileItem(tempNode + .getTextContent(), farAttr.getNamedItem( + farFileName_Md5sum).getTextContent()); ffiList.add(farFile); } } @@ -590,7 +596,8 @@ public class Mainfest implements ManifestInterface { // // create mainfest root node // - Element rootNode = this.mainfestDoc.createElement("FrameworkArchiveManifest"); + Element rootNode = this.mainfestDoc + .createElement("FrameworkArchiveManifest"); this.mainfestDoc.appendChild(rootNode); // @@ -668,7 +675,8 @@ public class Mainfest implements ManifestInterface { // Write the DOM document to the file // Transformer xformer = TransformerFactory.newInstance().newTransformer(); - xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", + "2"); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); // @@ -679,7 +687,8 @@ public class Mainfest implements ManifestInterface { // Prepare the output file, get the Mainifest file name from // /. // - this.mfFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar + mfFileName); + this.mfFile = new File(Workspace.getCurrentWorkspace() + + File.separatorChar + mfFileName); // // generate all directory path // @@ -688,7 +697,8 @@ public class Mainfest implements ManifestInterface { } public void pkgToFarPkgNode(Element parentNode, FarPackage pkgItem) { - Element pkgNode = this.mainfestDoc.createElement(farPackageList_FarPackage); + Element pkgNode = this.mainfestDoc + .createElement(farPackageList_FarPackage); // // Add // @@ -704,7 +714,8 @@ public class Mainfest implements ManifestInterface { // // Add // - setStrItemToNode(pkgNode, pkgItem.getDefaultPath(), farPackage_DefaultPath); + setStrItemToNode(pkgNode, pkgItem.getDefaultPath(), + farPackage_DefaultPath); // // Add @@ -719,7 +730,8 @@ public class Mainfest implements ManifestInterface { } public void PlfToPlatformNode(Element parentNode, FarPlatformItem fplItem) { - Element fplNode = this.mainfestDoc.createElement(farPlatformList_FarPlatform); + Element fplNode = this.mainfestDoc + .createElement(farPlatformList_FarPlatform); // // Add // @@ -740,15 +752,17 @@ public class Mainfest implements ManifestInterface { } public void ffiToFfNode(Element parentNode, FarFileItem ffi) { - Element farFileName = this.mainfestDoc.createElement(farPackage_FarfileName); + Element farFileName = this.mainfestDoc + .createElement(farPackage_FarfileName); farFileName.setTextContent(ffi.getRelativeFilename()); System.out.println(farFileName.getTextContent()); - System.out.println(ffi.getRelativeFilename()); + System.out.println(ffi.getRelativeFilename()); farFileName.setAttribute(farFileName_Md5sum, ffi.getMd5Value()); parentNode.appendChild(farFileName); } - public void setStrItemToNode(Element parentNode, String strValue, String strName) { + public void setStrItemToNode(Element parentNode, String strValue, + String strName) { Element node = this.mainfestDoc.createElement(strName); node.setTextContent(strValue); parentNode.appendChild(node); @@ -790,13 +804,13 @@ public class Mainfest implements ManifestInterface { } else { return; } - NodeList childList = headerNode.getChildNodes(); + NodeList childList = headerNode.getChildNodes(); Node node = null; String nodeName = null; for (int i = 0; i < childList.getLength(); i++) { node = childList.item(i); nodeName = node.getNodeName(); - if (nodeName.equalsIgnoreCase(farHeader_FarName)) { + if (nodeName.equalsIgnoreCase(farHeader_FarName)) { String nodeValue = node.getTextContent(); this.fhInfo.setFarName(nodeValue); } else if (nodeName.equalsIgnoreCase(guidValue)) { @@ -830,7 +844,7 @@ public class Mainfest implements ManifestInterface { } NodeList fpnList = farPkgNode.getChildNodes(); for (int i = 0; i < fpnList.getLength(); i++) { - if (fpnList.item(i).getNodeType() == Node.TEXT_NODE) { + if (fpnList.item(i).getNodeType()== Node.TEXT_NODE){ continue; } FarPackage fpItem = new FarPackage(); @@ -871,14 +885,15 @@ public class Mainfest implements ManifestInterface { * @param fpfListNode * @param plfList */ - public void parseFarPlatformList(Node fpfListNode, List plfList) { + public void parseFarPlatformList(Node fpfListNode, + List plfList) { // // Get list. // NodeList child = fpfListNode.getChildNodes(); Node farPlfNode; for (int i = 0; i < child.getLength(); i++) { - if (child.item(i).getNodeType() == Node.TEXT_NODE) { + if (child.item(i).getNodeType()== Node.TEXT_NODE){ continue; } farPlfNode = child.item(i); @@ -921,7 +936,7 @@ public class Mainfest implements ManifestInterface { NodeList contentList = contentsNode.getChildNodes(); Node contentNode; for (int i = 0; i < contentList.getLength(); i++) { - if (contentList.item(i).getNodeType() == Node.TEXT_NODE) { + if (contentList.item(i).getNodeType()== Node.TEXT_NODE){ continue; } contentNode = contentList.item(i); @@ -935,20 +950,21 @@ public class Mainfest implements ManifestInterface { public FarFileItem parseFarFile(Node farFileNode) { String ffName = farFileNode.getTextContent(); NamedNodeMap attr = farFileNode.getAttributes(); - FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem(farFileName_Md5sum).getTextContent()); + FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem( + farFileName_Md5sum).getTextContent()); return ffItem; } public boolean isFilter(File file, Set fileter) { - Iterator iter = fileter.iterator(); - while (iter.hasNext()) { - Pattern pattern = Pattern.compile(iter.next()); - Matcher matcher = pattern.matcher(file.getName()); - - if (matcher.find()) { - return true; + Iterator iter = fileter.iterator(); + while (iter.hasNext()) { + Pattern pattern = Pattern.compile(iter.next()); + Matcher matcher = pattern.matcher(file.getName()); + + if(matcher.find()) { + return true; + } } - } return false; } diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepOne.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepOne.java index 755dbf3369..f6864cb891 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepOne.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepOne.java @@ -19,6 +19,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.util.Vector; +import java.util.jar.JarFile; import javax.swing.JFileChooser; import javax.swing.JPanel; @@ -230,42 +231,51 @@ public class UpdateStepOne extends IDialog implements MouseListener { return jContentPane; } - public void mouseClicked(MouseEvent e) { - if (e.getSource() == jButtonCancel) { - this.setVisible(false); - } else if (e.getSource() == jButtonNext) { - // - // Judge if FAR file is existed - // - farFile = new File(jTextFieldFarFile.getText()); - if (!farFile.exists() || !farFile.isFile()) { - Log.err("Please choose a FAR file already exists. "); - return; - } - - // - // Judge FAR is valid - // - - // - // Add more logic process here - // - if (jListFarFromDb.getSelectedValue() == null) { - Log.err("Please choose a FAR from framework database. "); - return; - } - - if (stepTwo == null) { + public void mouseClicked(MouseEvent e) { + if (e.getSource() == jButtonCancel) { + this.setVisible(false); + } + else if (e.getSource() == jButtonNext) { + // + // Judge if FAR file is existed + // + farFile = new File(jTextFieldFarFile.getText()); + if ( ! farFile.exists() || ! farFile.isFile()) { + Log.err("Please choose a FAR file already exists. "); + return ; + } + + // + // Judge FAR is valid + // + try{ + JarFile file = new JarFile(farFile); + this.far = new Far(file); + } catch (Exception ex){ + Log.err(ex.getMessage()); + } + + + // + // Add more logic process here + // + if (jListFarFromDb.getSelectedValue() == null) { + Log.err("Please choose a FAR from framework database. "); + return ; + } + + if (stepTwo == null) { stepTwo = new UpdateStepTwo(this, true, this); - } - this.setVisible(false); - stepTwo.prepareTable(); - stepTwo.setVisible(true); - } else if (e.getSource() == jButtonBrowser) { - JFileChooser fc = new JFileChooser(); - fc.setAcceptAllFileFilterUsed(false); - fc.addChoosableFileFilter(new IFileFilter(DataType.FAR_SURFACE_AREA_EXT)); - fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace())); + } + this.setVisible(false); + stepTwo.prepareTable(); + stepTwo.setVisible(true); + } + else if (e.getSource() == jButtonBrowser) { + JFileChooser fc = new JFileChooser(); + fc.setAcceptAllFileFilterUsed(false); + fc.addChoosableFileFilter(new IFileFilter(DataType.FAR_SURFACE_AREA_EXT)); + fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace())); int result = fc.showSaveDialog(new JPanel()); if (result == JFileChooser.APPROVE_OPTION) { diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepTwo.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepTwo.java index 1dd4c4877f..f455604f62 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepTwo.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/far/updateui/UpdateStepTwo.java @@ -17,8 +17,13 @@ import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.io.File; +import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; +import java.util.Vector; import javax.swing.JPanel; import javax.swing.JTextArea; @@ -29,11 +34,14 @@ import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableModel; +import org.tianocore.frameworkwizard.common.Log; import org.tianocore.frameworkwizard.common.Tools; import org.tianocore.frameworkwizard.common.ui.IDialog; import org.tianocore.frameworkwizard.far.AggregationOperation; +import org.tianocore.frameworkwizard.far.DistributeRule; import org.tianocore.frameworkwizard.far.Far; import org.tianocore.frameworkwizard.packaging.PackageIdentification; +import org.tianocore.frameworkwizard.platform.PlatformIdentification; import org.tianocore.frameworkwizard.workspace.Workspace; import org.tianocore.frameworkwizard.workspace.WorkspaceTools; @@ -63,6 +71,7 @@ public class UpdateStepTwo extends IDialog implements MouseListener { private JTable jTablePackage = null; private PartialTableModel model = null; + List updatPkgList = new ArrayList(); public UpdateStepTwo(IDialog iDialog, boolean modal, UpdateStepOne stepOne) { this(iDialog, modal); @@ -174,24 +183,25 @@ public class UpdateStepTwo extends IDialog implements MouseListener { WorkspaceTools wt = new WorkspaceTools(); List packagesInDb = wt.getAllPackages(); - List result = AggregationOperation.intersection(packagesInDb, packagesInFar); + updatPkgList = AggregationOperation.intersection(packagesInDb, packagesInFar); // // Change here to get packages and platforms from FAR // - Iterator iter = result.iterator();//packageList.iterator(); - while (iter.hasNext()) { - String[] str = new String[4]; - PackageIdentification item = iter.next(); - str[0] = item.getName(); - str[1] = item.getVersion(); - str[2] = item.getGuid(); - str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace())); - model.addRow(str); - } - } catch (Exception ex) { - ex.printStackTrace(); - } + Iterator iter = updatPkgList.iterator() ;//packageList.iterator(); + while (iter.hasNext()) { + String[] str = new String[4]; + PackageIdentification item = iter.next(); + str[0] = item.getName(); + str[1] = item.getVersion(); + str[2] = item.getGuid(); + str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace())); + model.addRow(str); + } + } + catch (Exception ex) { + ex.printStackTrace(); } + } /** * This is the default constructor @@ -214,85 +224,184 @@ public class UpdateStepTwo extends IDialog implements MouseListener { this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2); } - /** - * This method initializes jContentPane - * - * @return javax.swing.JPanel - */ - private JPanel getJContentPane() { - if (jContentPane == null) { - jLabel = new JLabel(); - jLabel.setBounds(new java.awt.Rectangle(30, 70, 281, 20)); - jLabel.setText("Following packages will be updated: "); - jContentPane = new JPanel(); - jContentPane.setLayout(null); - jContentPane.add(getJTextArea(), null); - jContentPane.add(getJButtonCancel(), null); - jContentPane.add(getJButtonFinish(), null); - jContentPane.add(getJButtonPrevious(), null); - jContentPane.add(getJScrollPane(), null); - jContentPane.add(jLabel, null); - } - return jContentPane; + /** + * This method initializes jContentPane + * + * @return javax.swing.JPanel + */ + private JPanel getJContentPane() { + if (jContentPane == null) { + jLabel = new JLabel(); + jLabel.setBounds(new java.awt.Rectangle(30,70,281,20)); + jLabel.setText("Following packages will be updated: "); + jContentPane = new JPanel(); + jContentPane.setLayout(null); + jContentPane.add(getJTextArea(), null); + jContentPane.add(getJButtonCancel(), null); + jContentPane.add(getJButtonFinish(), null); + jContentPane.add(getJButtonPrevious(), null); + jContentPane.add(getJScrollPane(), null); + jContentPane.add(jLabel, null); } - - public void mouseClicked(MouseEvent e) { - if (e.getSource() == jButtonCancel) { - this.setVisible(false); - } else if (e.getSource() == jButtonFinish) { - // - // Check depedency ? - // - - // - // Remove all update packages - // - - // - // Install all update packages - // - - this.setVisible(false); - } else if (e.getSource() == jButtonPrevious) { - this.setVisible(false); - stepOne.setVisible(true); + return jContentPane; + } + public void mouseClicked(MouseEvent e) { + if (e.getSource() == jButtonCancel) { + this.setVisible(false); + } + else if (e.getSource() == jButtonFinish) { + // + // Check depedency ? + // + WorkspaceTools wsTools = new WorkspaceTools(); + + Iterator iter = updatPkgList.iterator(); + List depResultList = new ArrayList(); + while (iter.hasNext()){ + List depPkgList = stepOne.getFar().getPackageDependencies(iter.next()); + depResultList = AggregationOperation.union(depResultList, depPkgList); + } + + List dbPkgList = DistributeRule.vectorToList(wsTools.getAllPackages()); + List resultList = AggregationOperation.minus(depResultList, AggregationOperation.union( + this.updatPkgList, dbPkgList)); + Iterator resultIter = resultList.iterator(); + while (resultIter.hasNext()){ + Log.err("Missing dependency package " + ((PackageIdentification)resultIter.next()).toString() + "in workspace!"); + return; + } + + // + // Remove all update packages + // + // + // For all packages, remove all files. + // Exception FPD file still in DB + // + Vector allPlatforms = wsTools.getAllPlatforms(); + Set allPlatformFiles = new LinkedHashSet(); + + Iterator allPlfIter = allPlatforms.iterator(); + while (iter.hasNext()) { + allPlatformFiles.add(allPlfIter.next().getFpdFile()); + } + + Iterator packageIter = this.updatPkgList.iterator(); + while (packageIter.hasNext()) { + PackageIdentification item = packageIter.next(); + Set deleteFiles = new LinkedHashSet(); + recursiveDir(deleteFiles, item.getSpdFile().getParentFile(), allPlatformFiles); + Iterator iterDeleteFile = deleteFiles.iterator(); + while (iterDeleteFile.hasNext()){ + deleteFiles(iterDeleteFile.next()); + } + // + // Remove all empty parent dir + // + File parentDir = item.getSpdFile().getParentFile(); + while (parentDir.listFiles().length == 0) { + File tempFile = parentDir; + parentDir = parentDir.getParentFile(); + tempFile.delete(); } + } + + // + // Install all update packages + // + Iterator updataIter = this.updatPkgList.iterator(); + while (updataIter.hasNext()){ + PackageIdentification pkgId = updataIter.next(); + try{ + stepOne.getFar().installPackage(pkgId, pkgId.getSpdFile()); + }catch (Exception ex){ + Log.err("Can install " + pkgId.toString() + " pakcage, please check it!"); + } + + } + + + this.setVisible(false); } - - public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - + else if (e.getSource() == jButtonPrevious) { + this.setVisible(false); + stepOne.setVisible(true); } - - public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - + } + public void mousePressed(MouseEvent e) { + // TODO Auto-generated method stub + + } + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + + } + public void mouseEntered(MouseEvent e) { + // TODO Auto-generated method stub + + } + public void mouseExited(MouseEvent e) { + // TODO Auto-generated method stub + + } + + private void recursiveDir(Set files, File dir, Set platformFiles) { + File[] fileList = dir.listFiles(); + for (int i = 0; i < fileList.length; i ++) { + if (fileList[i].isFile()) { + if( ! platformFiles.contains(fileList[i])) { + files.add(fileList[i]); + } + } + else { + if (isContain(fileList[i], platformFiles)) { + recursiveDir(files, fileList[i], platformFiles); + } + else { + files.add(fileList[i]); + } + } + } } - - public void mouseEntered(MouseEvent e) { - // TODO Auto-generated method stub - + + private void deleteFiles(File file) { + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i ++) { + deleteFiles(files[i]); + } + } + file.delete(); } - - public void mouseExited(MouseEvent e) { - // TODO Auto-generated method stub - + + private boolean isContain(File dir, Set platformFiles) { + Iterator iter = platformFiles.iterator(); + while (iter.hasNext()) { + File file = iter.next(); + if (file.getPath().startsWith(dir.getPath())) { + // + // continue this FPD file + // + return true; + } + } + return false; } + } -} class PartialTableModel extends DefaultTableModel { - /** - * - */ - private static final long serialVersionUID = 1L; - - public boolean isCellEditable(int row, int col) { - switch (col) { - case 3: - return false; - default: - return false; - } - } + /** + * + */ + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int row, int col) { + switch (col){ + case 3: + return false; + default: + return false; + } + } } -- 2.39.2