mirror of https://github.com/acidanthera/audk.git
1. Update release note to use jdk1.5.0_06 to take place of jdk1.5.0_04
2. Support "Update Far" function 3. Fix bugs in Far operations git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@985 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
06a9243705
commit
ef6e2efe66
|
@ -64,7 +64,7 @@ Assembler Tool Chain
|
||||||
GNU binutils 2.16.1 or later
|
GNU binutils 2.16.1 or later
|
||||||
|
|
||||||
Java Development Kit ( Java 5.0 or later)
|
Java Development Kit ( Java 5.0 or later)
|
||||||
Sun* jdk-1.5.0_04 or later (http://java.sun.com)
|
Sun* jdk-1.5.0_06 or later (http://java.sun.com)
|
||||||
or
|
or
|
||||||
Bea Systems* jrockit-25.2.0-jdk1.5.0_03 or later (http://www.bea.com)
|
Bea Systems* jrockit-25.2.0-jdk1.5.0_03 or later (http://www.bea.com)
|
||||||
|
|
||||||
|
|
|
@ -1637,7 +1637,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
|
||||||
jMenuItemProjectUpdateFar.setMnemonic('U');
|
jMenuItemProjectUpdateFar.setMnemonic('U');
|
||||||
jMenuItemProjectUpdateFar.setEnabled(true);
|
jMenuItemProjectUpdateFar.setEnabled(true);
|
||||||
jMenuItemProjectUpdateFar.addActionListener(this);
|
jMenuItemProjectUpdateFar.addActionListener(this);
|
||||||
jMenuItemProjectUpdateFar.setVisible(false);
|
jMenuItemProjectUpdateFar.setVisible(true);
|
||||||
}
|
}
|
||||||
return jMenuItemProjectUpdateFar;
|
return jMenuItemProjectUpdateFar;
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,5 +86,4 @@ public class DistributeRule {
|
||||||
}
|
}
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,9 +63,8 @@ public class Far {
|
||||||
this.mainfest = new Mainfest(getMainfestFile());
|
this.mainfest = new Mainfest(getMainfestFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void creatFar (List<PackageIdentification> pkgList,
|
public void creatFar(List<PackageIdentification> pkgList, List<PlatformIdentification> plfList,
|
||||||
List<PlatformIdentification> plfList, Set<String> fileFilter,
|
Set<String> fileFilter, FarHeader fHeader) throws Exception {
|
||||||
FarHeader fHeader) throws Exception{
|
|
||||||
jos = new JarOutputStream(new FileOutputStream(jarFile));
|
jos = new JarOutputStream(new FileOutputStream(jarFile));
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -95,14 +94,18 @@ public class Far {
|
||||||
jos.close();
|
jos.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeToJar(File file, JarOutputStream jos) throws Exception{
|
private void writeToJar(File file, JarOutputStream jos) throws Exception {
|
||||||
byte[] buffer = new byte[(int)file.length()];
|
byte[] buffer = new byte[(int) file.length()];
|
||||||
FileInputStream fInput = new FileInputStream(file);
|
FileInputStream fInput = new FileInputStream(file);
|
||||||
JarEntry entry = new JarEntry(Tools.convertPathToUnixType(Tools.getRelativePath(file.getPath(),Workspace.getCurrentWorkspace())));
|
JarEntry entry = new JarEntry(
|
||||||
jos.putNextEntry(entry);
|
Tools
|
||||||
fInput.read(buffer);
|
.convertPathToUnixType(Tools
|
||||||
jos.write(buffer);
|
.getRelativePath(file.getPath(),
|
||||||
fInput.close();
|
Workspace.getCurrentWorkspace())));
|
||||||
|
jos.putNextEntry(entry);
|
||||||
|
fInput.read(buffer);
|
||||||
|
jos.write(buffer);
|
||||||
|
fInput.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InstallFar(String dir) throws Exception {
|
public void InstallFar(String dir) throws Exception {
|
||||||
|
@ -110,7 +113,8 @@ public class Far {
|
||||||
extract(allFile, dir);
|
extract(allFile, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InstallFar (Map<PlatformIdentification, File> plfMap, Map<PackageIdentification, File> pkgMap) throws Exception{
|
public void InstallFar(Map<PlatformIdentification, File> plfMap, Map<PackageIdentification, File> pkgMap)
|
||||||
|
throws Exception {
|
||||||
Set<PlatformIdentification> plfKeys = plfMap.keySet();
|
Set<PlatformIdentification> plfKeys = plfMap.keySet();
|
||||||
Iterator<PlatformIdentification> plfIter = plfKeys.iterator();
|
Iterator<PlatformIdentification> plfIter = plfKeys.iterator();
|
||||||
while (plfIter.hasNext()) {
|
while (plfIter.hasNext()) {
|
||||||
|
@ -149,38 +153,39 @@ public class Far {
|
||||||
public boolean hibernateToFile() {
|
public boolean hibernateToFile() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// public static void main(String[] args){
|
|
||||||
// try {
|
// public static void main(String[] args){
|
||||||
// JarFile jarFile = new JarFile(new File("C:\\cvswork\\newEdk\\jar.jar.far"));
|
// try {
|
||||||
// JarEntry je= jarFile.getJarEntry("MdePkg/MdePkg.spd");
|
// JarFile jarFile = new JarFile(new File("C:\\cvswork\\newEdk\\jar.jar.far"));
|
||||||
// InputStream is = jarFile.getInputStream(je);
|
// JarEntry je= jarFile.getJarEntry("MdePkg/MdePkg.spd");
|
||||||
// byte[] buffer = new byte[1];
|
// InputStream is = jarFile.getInputStream(je);
|
||||||
// File tempFile = new File("C:\\cvswork\\newEdk\\tempFile");
|
// byte[] buffer = new byte[1];
|
||||||
// File tfile2 = new File("C:\\cvswork\\newEdk\\tempFile1");
|
// File tempFile = new File("C:\\cvswork\\newEdk\\tempFile");
|
||||||
// FileOutputStream fos1 = new FileOutputStream(tfile2);
|
// File tfile2 = new File("C:\\cvswork\\newEdk\\tempFile1");
|
||||||
// FileOutputStream fos = new FileOutputStream(tempFile);
|
// FileOutputStream fos1 = new FileOutputStream(tfile2);
|
||||||
// int size = is.read(buffer);
|
// FileOutputStream fos = new FileOutputStream(tempFile);
|
||||||
// int totoalSize = size;
|
// int size = is.read(buffer);
|
||||||
// while ( size >= 0) {
|
// int totoalSize = size;
|
||||||
// fos.write(buffer);
|
// while ( size >= 0) {
|
||||||
// size = is.read(buffer);
|
// fos.write(buffer);
|
||||||
// totoalSize = totoalSize + size;
|
// size = is.read(buffer);
|
||||||
// }
|
// totoalSize = totoalSize + size;
|
||||||
//
|
// }
|
||||||
//
|
//
|
||||||
//// is = jarFile.getInputStream(je);
|
//
|
||||||
//// is.read(totalbuffer);
|
//// is = jarFile.getInputStream(je);
|
||||||
//// fos.write(totalbuffer);
|
//// is.read(totalbuffer);
|
||||||
// fos.close();
|
//// fos.write(totalbuffer);
|
||||||
// byte[] totalbuffer = new byte[(int)tempFile.length()];
|
// fos.close();
|
||||||
// FileInputStream fis = new FileInputStream(tempFile);
|
// byte[] totalbuffer = new byte[(int)tempFile.length()];
|
||||||
// fis.read(totalbuffer);
|
// FileInputStream fis = new FileInputStream(tempFile);
|
||||||
// fos1.write(totalbuffer);
|
// fis.read(totalbuffer);
|
||||||
// fos1.close();
|
// fos1.write(totalbuffer);
|
||||||
// }catch(Exception e){
|
// fos1.close();
|
||||||
//
|
// }catch(Exception e){
|
||||||
// }
|
//
|
||||||
// }
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
public void extract(List<FarFileItem> allFile, String dir) throws Exception {
|
public void extract(List<FarFileItem> allFile, String dir) throws Exception {
|
||||||
|
|
||||||
|
@ -191,7 +196,7 @@ public class Far {
|
||||||
dir += File.separatorChar;
|
dir += File.separatorChar;
|
||||||
while (filesItem.hasNext()) {
|
while (filesItem.hasNext()) {
|
||||||
try {
|
try {
|
||||||
ffItem = (FarFileItem)filesItem.next();
|
ffItem = (FarFileItem) filesItem.next();
|
||||||
je = jf.getJarEntry(Tools.convertPathToUnixType(ffItem.getDefaultPath()));
|
je = jf.getJarEntry(Tools.convertPathToUnixType(ffItem.getDefaultPath()));
|
||||||
InputStream entryStream = jf.getInputStream(je);
|
InputStream entryStream = jf.getInputStream(je);
|
||||||
File file = new File(dir + ffItem.getRelativeFilename());
|
File file = new File(dir + ffItem.getRelativeFilename());
|
||||||
|
@ -203,7 +208,6 @@ public class Far {
|
||||||
//
|
//
|
||||||
FileOutputStream outputStream = new FileOutputStream(file);
|
FileOutputStream outputStream = new FileOutputStream(file);
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//
|
//
|
||||||
// Read the entry data and write it to the output
|
// Read the entry data and write it to the output
|
||||||
|
@ -213,13 +217,13 @@ public class Far {
|
||||||
File tempFile = new File("tempFile");
|
File tempFile = new File("tempFile");
|
||||||
FileOutputStream fos = new FileOutputStream(tempFile);
|
FileOutputStream fos = new FileOutputStream(tempFile);
|
||||||
int size = entryStream.read(buffer);
|
int size = entryStream.read(buffer);
|
||||||
while ( size >= 0) {
|
while (size >= 0) {
|
||||||
fos.write(buffer);
|
fos.write(buffer);
|
||||||
size = entryStream.read(buffer);
|
size = entryStream.read(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
fos.close();
|
fos.close();
|
||||||
byte[] totalBuffer = new byte[(int)tempFile.length()];
|
byte[] totalBuffer = new byte[(int) tempFile.length()];
|
||||||
FileInputStream fis = new FileInputStream(tempFile);
|
FileInputStream fis = new FileInputStream(tempFile);
|
||||||
fis.read(totalBuffer);
|
fis.read(totalBuffer);
|
||||||
outputStream.write(totalBuffer);
|
outputStream.write(totalBuffer);
|
||||||
|
@ -236,10 +240,9 @@ public class Far {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addFileToFar(File file, JarOutputStream farOuputStream, String workDir) {
|
||||||
public void addFileToFar (File file, JarOutputStream farOuputStream, String workDir){
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,6 +257,9 @@ public class Far {
|
||||||
List<PackageIdentification> result = new ArrayList<PackageIdentification>();
|
List<PackageIdentification> result = new ArrayList<PackageIdentification>();
|
||||||
|
|
||||||
entry = this.mainfest.getPackgeSpd(pkgId);
|
entry = this.mainfest.getPackgeSpd(pkgId);
|
||||||
|
if (entry == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
if (entry[0] != null) {
|
if (entry[0] != null) {
|
||||||
try {
|
try {
|
||||||
JarEntry je;
|
JarEntry je;
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
**/
|
**/
|
||||||
package org.tianocore.frameworkwizard.far;
|
package org.tianocore.frameworkwizard.far;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.tianocore.frameworkwizard.packaging.PackageIdentification;
|
import org.tianocore.frameworkwizard.packaging.PackageIdentification;
|
||||||
|
@ -84,8 +83,8 @@ public class FarPackage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isIdentityPkg(PackageIdentification pkgId) {
|
public boolean isIdentityPkg(PackageIdentification pkgId) {
|
||||||
File file = new File(farFile.getRelativeFilename());
|
//File file = new File(farFile.getRelativeFilename());
|
||||||
if (pkgId.getName() == file.getName() && pkgId.getGuid() == guidValue && pkgId.getVersion() == version) {
|
if (pkgId.getGuid().equalsIgnoreCase(guidValue) && pkgId.getVersion().equalsIgnoreCase(version)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -57,6 +57,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
// / Mainfest file element name
|
// / Mainfest file element name
|
||||||
// /
|
// /
|
||||||
final static String mfFileName = "FarMainfest.MF";
|
final static String mfFileName = "FarMainfest.MF";
|
||||||
|
|
||||||
//
|
//
|
||||||
// Header
|
// Header
|
||||||
//
|
//
|
||||||
|
@ -131,7 +132,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
File mfFile = null;
|
File mfFile = null;
|
||||||
|
|
||||||
public FarHeader getHeader() {
|
public FarHeader getHeader() {
|
||||||
return fhInfo;
|
return fhInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mainfest() throws Exception {
|
public Mainfest() throws Exception {
|
||||||
|
@ -163,8 +164,8 @@ public class Mainfest implements ManifestInterface {
|
||||||
this.fhInfo = fHeader;
|
this.fhInfo = fHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createManifest(List<PackageIdentification> pkgList,
|
public void createManifest(List<PackageIdentification> pkgList, List<PlatformIdentification> plfList,
|
||||||
List<PlatformIdentification> plfList, Set<String> fileFilter) throws Exception {
|
Set<String> fileFilter) throws Exception {
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add Package and it's contents to FarPackageList.
|
// Add Package and it's contents to FarPackageList.
|
||||||
|
@ -259,23 +260,22 @@ public class Mainfest implements ManifestInterface {
|
||||||
|
|
||||||
farPackage.setContentList(contents);
|
farPackage.setContentList(contents);
|
||||||
|
|
||||||
// List<FarPlatformItem> fpfList = new ArrayList<FarPlatformItem>();
|
// List<FarPlatformItem> fpfList = new ArrayList<FarPlatformItem>();
|
||||||
//
|
//
|
||||||
// iter = fpdFileSet.iterator();
|
// iter = fpdFileSet.iterator();
|
||||||
//
|
//
|
||||||
// while (iter.hasNext()) {
|
// while (iter.hasNext()) {
|
||||||
// File fpdFile = iter.next();
|
// File fpdFile = iter.next();
|
||||||
// PlatformIdentification platformId = new PlatformIdentification(wsTool
|
// PlatformIdentification platformId = new PlatformIdentification(wsTool
|
||||||
// .getId(fpdFile.getPath(), OpenFile.openFpdFile(fpdFile
|
// .getId(fpdFile.getPath(), OpenFile.openFpdFile(fpdFile
|
||||||
// .getPath())));
|
// .getPath())));
|
||||||
// addPlatformIdToFarPlatformItemList(fpfList, platformId);
|
// addPlatformIdToFarPlatformItemList(fpfList, platformId);
|
||||||
// }
|
// }
|
||||||
// farPackage.setFarPlatformList(fpfList);
|
// farPackage.setFarPlatformList(fpfList);
|
||||||
fPkgList.add(farPackage);
|
fPkgList.add(farPackage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recursiveDirectory(Set<File> files, Set<File> fpds, File dir,
|
private void recursiveDirectory(Set<File> files, Set<File> fpds, File dir, Set<String> fileFilter) {
|
||||||
Set<String> fileFilter) {
|
|
||||||
if (isFilter(dir, fileFilter)) {
|
if (isFilter(dir, fileFilter)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -285,11 +285,11 @@ public class Mainfest implements ManifestInterface {
|
||||||
if (isFilter(allFilesInDir[i], fileFilter)) {
|
if (isFilter(allFilesInDir[i], fileFilter)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// if (allFilesInDir[i].getPath().toLowerCase().endsWith(".fpd")) {
|
// if (allFilesInDir[i].getPath().toLowerCase().endsWith(".fpd")) {
|
||||||
// fpds.add(allFilesInDir[i]);
|
// fpds.add(allFilesInDir[i]);
|
||||||
// } else {
|
// } else {
|
||||||
files.add(allFilesInDir[i]);
|
files.add(allFilesInDir[i]);
|
||||||
// }
|
// }
|
||||||
} else {
|
} else {
|
||||||
recursiveDirectory(files, fpds, allFilesInDir[i], fileFilter);
|
recursiveDirectory(files, fpds, allFilesInDir[i], fileFilter);
|
||||||
}
|
}
|
||||||
|
@ -306,7 +306,8 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Add farFileName
|
// 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);
|
fpfItem.setFarFile(ffItem);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -343,16 +344,18 @@ public class Mainfest implements ManifestInterface {
|
||||||
// identification.
|
// identification.
|
||||||
//
|
//
|
||||||
|
|
||||||
PackageIdentification pkgId = new PackageIdentification(fPkg.getFarFile().getRelativeFilename(), fPkg.getGuidValue(), fPkg.getVersion());
|
PackageIdentification pkgId = new PackageIdentification(fPkg.getFarFile().getRelativeFilename(),
|
||||||
pkgId.setPath(Workspace.getCurrentWorkspace() + File.separatorChar + fPkg.getDefaultPath() + File.separatorChar + fPkg.getFarFile().getRelativeFilename());
|
fPkg.getGuidValue(), fPkg.getVersion());
|
||||||
// wsTool.getId(
|
pkgId.setPath(Workspace.getCurrentWorkspace() + File.separatorChar + fPkg.getDefaultPath()
|
||||||
// Workspace.getCurrentWorkspace() + File.separatorChar
|
+ File.separatorChar + fPkg.getFarFile().getRelativeFilename());
|
||||||
// + fPkg.getDefaultPath(), OpenFile
|
// wsTool.getId(
|
||||||
// .openFpdFile(Workspace.getCurrentWorkspace()
|
// Workspace.getCurrentWorkspace() + File.separatorChar
|
||||||
// + File.separatorChar
|
// + fPkg.getDefaultPath(), OpenFile
|
||||||
// + fPkg.getDefaultPath()
|
// .openFpdFile(Workspace.getCurrentWorkspace()
|
||||||
// + File.separatorChar
|
// + File.separatorChar
|
||||||
// + fPkg.getFarFile().getRelativeFilename()));
|
// + fPkg.getDefaultPath()
|
||||||
|
// + File.separatorChar
|
||||||
|
// + fPkg.getFarFile().getRelativeFilename()));
|
||||||
pkgList.add(pkgId);
|
pkgList.add(pkgId);
|
||||||
}
|
}
|
||||||
return pkgList;
|
return pkgList;
|
||||||
|
@ -361,8 +364,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public List<PlatformIdentification> getPlatformList() throws Exception,
|
public List<PlatformIdentification> getPlatformList() throws Exception, IOException, XmlException {
|
||||||
IOException, XmlException {
|
|
||||||
//
|
//
|
||||||
// PlatformIdentification set.
|
// PlatformIdentification set.
|
||||||
//
|
//
|
||||||
|
@ -370,21 +372,21 @@ public class Mainfest implements ManifestInterface {
|
||||||
Iterator plfItem = this.fPlfList.iterator();
|
Iterator plfItem = this.fPlfList.iterator();
|
||||||
while (plfItem.hasNext()) {
|
while (plfItem.hasNext()) {
|
||||||
FarPlatformItem fpfItem = (FarPlatformItem) plfItem.next();
|
FarPlatformItem fpfItem = (FarPlatformItem) plfItem.next();
|
||||||
File file = new File(Workspace.getCurrentWorkspace()
|
File file = new File(Workspace.getCurrentWorkspace() + File.separatorChar
|
||||||
+ File.separatorChar
|
+ fpfItem.getFarFile().getRelativeFilename());
|
||||||
+ fpfItem.getFarFile().getRelativeFilename());
|
|
||||||
//
|
//
|
||||||
// Set platformIdentificaiton's path as absolutly path (include
|
// Set platformIdentificaiton's path as absolutly path (include
|
||||||
// workspace and FPD relatively path)
|
// workspace and FPD relatively path)
|
||||||
//
|
//
|
||||||
PlatformIdentification plfId = new PlatformIdentification (fpfItem.getFarFile().getRelativeFilename(), fpfItem.getGuidValue(),fpfItem.getVersion(),
|
PlatformIdentification plfId = new PlatformIdentification(fpfItem.getFarFile().getRelativeFilename(),
|
||||||
file.getPath());
|
fpfItem.getGuidValue(), fpfItem.getVersion(),
|
||||||
|
file.getPath());
|
||||||
|
|
||||||
// (PlatformIdentification) wsTool
|
// (PlatformIdentification) wsTool
|
||||||
// .getId(file.getParent(), OpenFile.openFpdFile(Workspace
|
// .getId(file.getParent(), OpenFile.openFpdFile(Workspace
|
||||||
// .getCurrentWorkspace()
|
// .getCurrentWorkspace()
|
||||||
// + File.separatorChar
|
// + File.separatorChar
|
||||||
// + fpfItem.getFarFile().getRelativeFilename()));
|
// + fpfItem.getFarFile().getRelativeFilename()));
|
||||||
plfList.add(plfId);
|
plfList.add(plfId);
|
||||||
}
|
}
|
||||||
return plfList;
|
return plfList;
|
||||||
|
@ -401,7 +403,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
farFileItem.setDefaultPath(farFileItem.getRelativeFilename());
|
farFileItem.setDefaultPath(farFileItem.getRelativeFilename());
|
||||||
farFileItem.setRelativeFilename(Tools.getFileNameOnly(farFileItem.getRelativeFilename()));
|
farFileItem.setRelativeFilename(Tools.getFileNameOnly(farFileItem.getRelativeFilename()));
|
||||||
result.add(farFileItem);
|
result.add(farFileItem);
|
||||||
break ;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -424,23 +426,22 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Add all farfiles in <FarPlatformList> to list.
|
// Add all farfiles in <FarPlatformList> to list.
|
||||||
//
|
//
|
||||||
// List<FarPlatformItem> plfList = pkg.getFarPlatformList();
|
// List<FarPlatformItem> plfList = pkg.getFarPlatformList();
|
||||||
// Iterator plfItem = plfList.iterator();
|
// Iterator plfItem = plfList.iterator();
|
||||||
// while (plfItem.hasNext()) {
|
// while (plfItem.hasNext()) {
|
||||||
// farFileList.add(((FarPlatformItem) plfItem.next())
|
// farFileList.add(((FarPlatformItem) plfItem.next())
|
||||||
// .getFarFile());
|
// .getFarFile());
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Iterator<FarFileItem> ffIter = farFileList.iterator();
|
Iterator<FarFileItem> ffIter = farFileList.iterator();
|
||||||
while(ffIter.hasNext()){
|
while (ffIter.hasNext()) {
|
||||||
FarFileItem ffItem = ffIter.next();
|
FarFileItem ffItem = ffIter.next();
|
||||||
ffItem.setDefaultPath(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename());
|
ffItem.setDefaultPath(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return farFileList;
|
return farFileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,14 +450,14 @@ public class Mainfest implements ManifestInterface {
|
||||||
* @param pkgId
|
* @param pkgId
|
||||||
* @return String: return string represent jar file entry;
|
* @return String: return string represent jar file entry;
|
||||||
*/
|
*/
|
||||||
public String[] getPackgeSpd(PackageIdentification pkgId){
|
public String[] getPackgeSpd(PackageIdentification pkgId) {
|
||||||
Iterator pkgItem = this.fPkgList.iterator();
|
Iterator pkgItem = this.fPkgList.iterator();
|
||||||
String[] entryStr = new String[2];
|
String[] entryStr = new String[2];
|
||||||
while (pkgItem.hasNext()) {
|
while (pkgItem.hasNext()) {
|
||||||
FarPackage pkg = (FarPackage) pkgItem.next();
|
FarPackage pkg = (FarPackage) pkgItem.next();
|
||||||
if (pkg.isIdentityPkg(pkgId)) {
|
if (pkg.isIdentityPkg(pkgId)) {
|
||||||
entryStr[0] = pkg.getFarFile().getRelativeFilename();
|
entryStr[0] = pkg.getFarFile().getRelativeFilename();
|
||||||
entryStr[1] = pkg.getDefaultPath() ;
|
entryStr[1] = pkg.getDefaultPath();
|
||||||
return entryStr;
|
return entryStr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -482,18 +483,16 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Set farFileItem relativeFileName = absolutePath + file Name.
|
// Set farFileItem relativeFileName = absolutePath + file Name.
|
||||||
//
|
//
|
||||||
farFileList.add(new FarFileItem(pkg.getDefaultPath()
|
farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separatorChar + ffItem.getRelativeFilename(),
|
||||||
+ File.separatorChar + ffItem.getRelativeFilename(), ffItem
|
ffItem.getMd5Value()));
|
||||||
.getMd5Value()));
|
|
||||||
//
|
//
|
||||||
// Add all files in contents to list.
|
// Add all files in contents to list.
|
||||||
//
|
//
|
||||||
Iterator contentsItem = pkg.getContentList().iterator();
|
Iterator contentsItem = pkg.getContentList().iterator();
|
||||||
while (contentsItem.hasNext()) {
|
while (contentsItem.hasNext()) {
|
||||||
ffItem = (FarFileItem) contentsItem.next();
|
ffItem = (FarFileItem) contentsItem.next();
|
||||||
farFileList.add(new FarFileItem(pkg.getDefaultPath()
|
farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),
|
||||||
+ File.separator + ffItem.getRelativeFilename(), ffItem
|
ffItem.getMd5Value()));
|
||||||
.getMd5Value()));
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Add all farfiles in <FarPlatformList> to list.
|
// Add all farfiles in <FarPlatformList> to list.
|
||||||
|
@ -502,9 +501,8 @@ public class Mainfest implements ManifestInterface {
|
||||||
Iterator plfItem = plfList.iterator();
|
Iterator plfItem = plfList.iterator();
|
||||||
while (plfItem.hasNext()) {
|
while (plfItem.hasNext()) {
|
||||||
ffItem = ((FarPlatformItem) plfItem.next()).getFarFile();
|
ffItem = ((FarPlatformItem) plfItem.next()).getFarFile();
|
||||||
farFileList.add(new FarFileItem(pkg.getDefaultPath()
|
farFileList.add(new FarFileItem(pkg.getDefaultPath() + File.separator + ffItem.getRelativeFilename(),
|
||||||
+ File.separator + ffItem.getRelativeFilename(), ffItem
|
ffItem.getMd5Value()));
|
||||||
.getMd5Value()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return farFileList;
|
return farFileList;
|
||||||
|
@ -521,27 +519,27 @@ public class Mainfest implements ManifestInterface {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void setPackageInstallPath(PackageIdentification packageId, String path) {
|
// public void setPackageInstallPath(PackageIdentification packageId, String path) {
|
||||||
// Iterator<FarPackage> pkgItr = this.fPkgList.iterator();
|
// Iterator<FarPackage> pkgItr = this.fPkgList.iterator();
|
||||||
// while (pkgItr.hasNext()) {
|
// while (pkgItr.hasNext()) {
|
||||||
// FarPackage farPackage = pkgItr.next();
|
// FarPackage farPackage = pkgItr.next();
|
||||||
// if (farPackage.isIdentityPkg(packageId)) {
|
// if (farPackage.isIdentityPkg(packageId)) {
|
||||||
// farPackage.setDefaultPath(path);
|
// farPackage.setDefaultPath(path);
|
||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// public void setPlatformInstallPath(PlatformIdentification platformId, String path) {
|
// public void setPlatformInstallPath(PlatformIdentification platformId, String path) {
|
||||||
// Iterator<FarPlatformItem> plfItr = this.fPlfList.iterator();
|
// Iterator<FarPlatformItem> plfItr = this.fPlfList.iterator();
|
||||||
// while (plfItr.hasNext()) {
|
// while (plfItr.hasNext()) {
|
||||||
// FarPlatformItem farPlatform = plfItr.next();
|
// FarPlatformItem farPlatform = plfItr.next();
|
||||||
// if (farPlatform.i.isIdentity(platformId)) {
|
// if (farPlatform.i.isIdentity(platformId)) {
|
||||||
// farPackage.setDefaultPath(path);
|
// farPackage.setDefaultPath(path);
|
||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public List<FarFileItem> getAllFileItem() {
|
public List<FarFileItem> getAllFileItem() {
|
||||||
//
|
//
|
||||||
|
@ -556,8 +554,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Add far files in <FarPlatformList> to list
|
// Add far files in <FarPlatformList> to list
|
||||||
//
|
//
|
||||||
NodeList elementList = this.mainfestDoc
|
NodeList elementList = this.mainfestDoc.getElementsByTagName(farPlatformList);
|
||||||
.getElementsByTagName(farPlatformList);
|
|
||||||
for (int i = 0; i < elementList.getLength(); i++) {
|
for (int i = 0; i < elementList.getLength(); i++) {
|
||||||
//
|
//
|
||||||
// Get <farPlatform> node list.
|
// Get <farPlatform> node list.
|
||||||
|
@ -575,15 +572,13 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Get child node value and set to platformIdentification.
|
// Get child node value and set to platformIdentification.
|
||||||
//
|
//
|
||||||
if (tempNode.getNodeName().equalsIgnoreCase(
|
if (tempNode.getNodeName().equalsIgnoreCase(farPackage_FarfileName)) {
|
||||||
farPackage_FarfileName)) {
|
|
||||||
NamedNodeMap farAttr = tempNode.getAttributes();
|
NamedNodeMap farAttr = tempNode.getAttributes();
|
||||||
//
|
//
|
||||||
// Change relative path to absolute one
|
// Change relative path to absolute one
|
||||||
//
|
//
|
||||||
FarFileItem farFile = new FarFileItem(tempNode
|
FarFileItem farFile = new FarFileItem(tempNode.getTextContent(),
|
||||||
.getTextContent(), farAttr.getNamedItem(
|
farAttr.getNamedItem(farFileName_Md5sum).getTextContent());
|
||||||
farFileName_Md5sum).getTextContent());
|
|
||||||
ffiList.add(farFile);
|
ffiList.add(farFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -596,8 +591,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// create mainfest root node
|
// create mainfest root node
|
||||||
//
|
//
|
||||||
Element rootNode = this.mainfestDoc
|
Element rootNode = this.mainfestDoc.createElement("FrameworkArchiveManifest");
|
||||||
.createElement("FrameworkArchiveManifest");
|
|
||||||
this.mainfestDoc.appendChild(rootNode);
|
this.mainfestDoc.appendChild(rootNode);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -675,8 +669,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
// Write the DOM document to the file
|
// Write the DOM document to the file
|
||||||
//
|
//
|
||||||
Transformer xformer = TransformerFactory.newInstance().newTransformer();
|
Transformer xformer = TransformerFactory.newInstance().newTransformer();
|
||||||
xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount",
|
xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
|
||||||
"2");
|
|
||||||
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -687,8 +680,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
// Prepare the output file, get the Mainifest file name from <FarHeader>
|
// Prepare the output file, get the Mainifest file name from <FarHeader>
|
||||||
// /<FarName>.
|
// /<FarName>.
|
||||||
//
|
//
|
||||||
this.mfFile = new File(Workspace.getCurrentWorkspace()
|
this.mfFile = new File(Workspace.getCurrentWorkspace() + File.separatorChar + mfFileName);
|
||||||
+ File.separatorChar + mfFileName);
|
|
||||||
//
|
//
|
||||||
// generate all directory path
|
// generate all directory path
|
||||||
//
|
//
|
||||||
|
@ -697,8 +689,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pkgToFarPkgNode(Element parentNode, FarPackage pkgItem) {
|
public void pkgToFarPkgNode(Element parentNode, FarPackage pkgItem) {
|
||||||
Element pkgNode = this.mainfestDoc
|
Element pkgNode = this.mainfestDoc.createElement(farPackageList_FarPackage);
|
||||||
.createElement(farPackageList_FarPackage);
|
|
||||||
//
|
//
|
||||||
// Add <FarFileName>
|
// Add <FarFileName>
|
||||||
//
|
//
|
||||||
|
@ -714,8 +705,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
//
|
//
|
||||||
// Add <DefaultPath>
|
// Add <DefaultPath>
|
||||||
//
|
//
|
||||||
setStrItemToNode(pkgNode, pkgItem.getDefaultPath(),
|
setStrItemToNode(pkgNode, pkgItem.getDefaultPath(), farPackage_DefaultPath);
|
||||||
farPackage_DefaultPath);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add <Contents>
|
// Add <Contents>
|
||||||
|
@ -730,8 +720,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlfToPlatformNode(Element parentNode, FarPlatformItem fplItem) {
|
public void PlfToPlatformNode(Element parentNode, FarPlatformItem fplItem) {
|
||||||
Element fplNode = this.mainfestDoc
|
Element fplNode = this.mainfestDoc.createElement(farPlatformList_FarPlatform);
|
||||||
.createElement(farPlatformList_FarPlatform);
|
|
||||||
//
|
//
|
||||||
// Add <FarFileName>
|
// Add <FarFileName>
|
||||||
//
|
//
|
||||||
|
@ -752,8 +741,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ffiToFfNode(Element parentNode, FarFileItem ffi) {
|
public void ffiToFfNode(Element parentNode, FarFileItem ffi) {
|
||||||
Element farFileName = this.mainfestDoc
|
Element farFileName = this.mainfestDoc.createElement(farPackage_FarfileName);
|
||||||
.createElement(farPackage_FarfileName);
|
|
||||||
farFileName.setTextContent(ffi.getRelativeFilename());
|
farFileName.setTextContent(ffi.getRelativeFilename());
|
||||||
System.out.println(farFileName.getTextContent());
|
System.out.println(farFileName.getTextContent());
|
||||||
System.out.println(ffi.getRelativeFilename());
|
System.out.println(ffi.getRelativeFilename());
|
||||||
|
@ -761,8 +749,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
parentNode.appendChild(farFileName);
|
parentNode.appendChild(farFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStrItemToNode(Element parentNode, String strValue,
|
public void setStrItemToNode(Element parentNode, String strValue, String strName) {
|
||||||
String strName) {
|
|
||||||
Element node = this.mainfestDoc.createElement(strName);
|
Element node = this.mainfestDoc.createElement(strName);
|
||||||
node.setTextContent(strValue);
|
node.setTextContent(strValue);
|
||||||
parentNode.appendChild(node);
|
parentNode.appendChild(node);
|
||||||
|
@ -804,13 +791,13 @@ public class Mainfest implements ManifestInterface {
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NodeList childList = headerNode.getChildNodes();
|
NodeList childList = headerNode.getChildNodes();
|
||||||
Node node = null;
|
Node node = null;
|
||||||
String nodeName = null;
|
String nodeName = null;
|
||||||
for (int i = 0; i < childList.getLength(); i++) {
|
for (int i = 0; i < childList.getLength(); i++) {
|
||||||
node = childList.item(i);
|
node = childList.item(i);
|
||||||
nodeName = node.getNodeName();
|
nodeName = node.getNodeName();
|
||||||
if (nodeName.equalsIgnoreCase(farHeader_FarName)) {
|
if (nodeName.equalsIgnoreCase(farHeader_FarName)) {
|
||||||
String nodeValue = node.getTextContent();
|
String nodeValue = node.getTextContent();
|
||||||
this.fhInfo.setFarName(nodeValue);
|
this.fhInfo.setFarName(nodeValue);
|
||||||
} else if (nodeName.equalsIgnoreCase(guidValue)) {
|
} else if (nodeName.equalsIgnoreCase(guidValue)) {
|
||||||
|
@ -844,7 +831,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
}
|
}
|
||||||
NodeList fpnList = farPkgNode.getChildNodes();
|
NodeList fpnList = farPkgNode.getChildNodes();
|
||||||
for (int i = 0; i < fpnList.getLength(); i++) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
FarPackage fpItem = new FarPackage();
|
FarPackage fpItem = new FarPackage();
|
||||||
|
@ -885,15 +872,14 @@ public class Mainfest implements ManifestInterface {
|
||||||
* @param fpfListNode
|
* @param fpfListNode
|
||||||
* @param plfList
|
* @param plfList
|
||||||
*/
|
*/
|
||||||
public void parseFarPlatformList(Node fpfListNode,
|
public void parseFarPlatformList(Node fpfListNode, List<FarPlatformItem> plfList) {
|
||||||
List<FarPlatformItem> plfList) {
|
|
||||||
//
|
//
|
||||||
// Get <FarPlatform> list.
|
// Get <FarPlatform> list.
|
||||||
//
|
//
|
||||||
NodeList child = fpfListNode.getChildNodes();
|
NodeList child = fpfListNode.getChildNodes();
|
||||||
Node farPlfNode;
|
Node farPlfNode;
|
||||||
for (int i = 0; i < child.getLength(); i++) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
farPlfNode = child.item(i);
|
farPlfNode = child.item(i);
|
||||||
|
@ -936,7 +922,7 @@ public class Mainfest implements ManifestInterface {
|
||||||
NodeList contentList = contentsNode.getChildNodes();
|
NodeList contentList = contentsNode.getChildNodes();
|
||||||
Node contentNode;
|
Node contentNode;
|
||||||
for (int i = 0; i < contentList.getLength(); i++) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
contentNode = contentList.item(i);
|
contentNode = contentList.item(i);
|
||||||
|
@ -950,21 +936,20 @@ public class Mainfest implements ManifestInterface {
|
||||||
public FarFileItem parseFarFile(Node farFileNode) {
|
public FarFileItem parseFarFile(Node farFileNode) {
|
||||||
String ffName = farFileNode.getTextContent();
|
String ffName = farFileNode.getTextContent();
|
||||||
NamedNodeMap attr = farFileNode.getAttributes();
|
NamedNodeMap attr = farFileNode.getAttributes();
|
||||||
FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem(
|
FarFileItem ffItem = new FarFileItem(ffName, attr.getNamedItem(farFileName_Md5sum).getTextContent());
|
||||||
farFileName_Md5sum).getTextContent());
|
|
||||||
return ffItem;
|
return ffItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFilter(File file, Set<String> fileter) {
|
public boolean isFilter(File file, Set<String> fileter) {
|
||||||
Iterator<String> iter = fileter.iterator();
|
Iterator<String> iter = fileter.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
Pattern pattern = Pattern.compile(iter.next());
|
Pattern pattern = Pattern.compile(iter.next());
|
||||||
Matcher matcher = pattern.matcher(file.getName());
|
Matcher matcher = pattern.matcher(file.getName());
|
||||||
|
|
||||||
if(matcher.find()) {
|
if (matcher.find()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,15 @@ public class InstallStepTwo extends IDialog implements MouseListener {
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
} else if (e.getSource() == jButtonFinish) {
|
} else if (e.getSource() == jButtonFinish) {
|
||||||
|
|
||||||
|
if (jTablePackage.isEditing()) {
|
||||||
|
jTablePackage.getCellEditor().stopCellEditing();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jTablePlatform.isEditing()) {
|
||||||
|
jTablePlatform.getCellEditor().stopCellEditing();
|
||||||
|
}
|
||||||
|
|
||||||
List<String> packageList = new ArrayList<String>();
|
List<String> packageList = new ArrayList<String>();
|
||||||
List<String> platformList = new ArrayList<String>();
|
List<String> platformList = new ArrayList<String>();
|
||||||
//
|
//
|
||||||
|
@ -419,11 +428,17 @@ public class InstallStepTwo extends IDialog implements MouseListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPathContainMutual(File path1, File path2) {
|
private boolean isPathContainMutual(File path1, File path2) {
|
||||||
if (path1.getPath().startsWith(path2.getParent())) {
|
String s1 = Tools.addFileSeparator(path1.getPath());
|
||||||
return true;
|
String s2 = Tools.addFileSeparator(path2.getParent());
|
||||||
}
|
|
||||||
if (path2.getPath().startsWith(path1.getPath())) {
|
if (s1.length() > s2.length()) {
|
||||||
return true;
|
if (s1.substring(0, s2.length()).equalsIgnoreCase(s2)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (s2.substring(0, s1.length()).equalsIgnoreCase(s1)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ public class UpdateStepOne extends IDialog implements MouseListener {
|
||||||
private JTextField getJTextFieldFarFile() {
|
private JTextField getJTextFieldFarFile() {
|
||||||
if (jTextFieldFarFile == null) {
|
if (jTextFieldFarFile == null) {
|
||||||
jTextFieldFarFile = new JTextField();
|
jTextFieldFarFile = new JTextField();
|
||||||
jTextFieldFarFile.setBounds(new java.awt.Rectangle(130,80,436,20));
|
jTextFieldFarFile.setBounds(new java.awt.Rectangle(130, 80, 436, 20));
|
||||||
}
|
}
|
||||||
return jTextFieldFarFile;
|
return jTextFieldFarFile;
|
||||||
}
|
}
|
||||||
|
@ -179,6 +179,7 @@ public class UpdateStepOne extends IDialog implements MouseListener {
|
||||||
WorkspaceTools wt = new WorkspaceTools();
|
WorkspaceTools wt = new WorkspaceTools();
|
||||||
farVector = wt.getAllFars();
|
farVector = wt.getAllFars();
|
||||||
jListFarFromDb.setListData(farVector);
|
jListFarFromDb.setListData(farVector);
|
||||||
|
jListFarFromDb.setSelectionMode(0);
|
||||||
}
|
}
|
||||||
return jListFarFromDb;
|
return jListFarFromDb;
|
||||||
}
|
}
|
||||||
|
@ -215,7 +216,7 @@ public class UpdateStepOne extends IDialog implements MouseListener {
|
||||||
jLabel1.setBounds(new java.awt.Rectangle(30, 110, 355, 18));
|
jLabel1.setBounds(new java.awt.Rectangle(30, 110, 355, 18));
|
||||||
jLabel1.setText("Choose FAR from current framework database");
|
jLabel1.setText("Choose FAR from current framework database");
|
||||||
jLabel = new JLabel();
|
jLabel = new JLabel();
|
||||||
jLabel.setBounds(new java.awt.Rectangle(30,80,97,20));
|
jLabel.setBounds(new java.awt.Rectangle(30, 80, 97, 20));
|
||||||
jLabel.setText("Choose FAR file: ");
|
jLabel.setText("Choose FAR file: ");
|
||||||
jContentPane = new JPanel();
|
jContentPane = new JPanel();
|
||||||
jContentPane.setLayout(null);
|
jContentPane.setLayout(null);
|
||||||
|
@ -231,51 +232,48 @@ public class UpdateStepOne extends IDialog implements MouseListener {
|
||||||
return jContentPane;
|
return jContentPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
if (e.getSource() == jButtonCancel) {
|
if (e.getSource() == jButtonCancel) {
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
}
|
} else if (e.getSource() == jButtonNext) {
|
||||||
else if (e.getSource() == jButtonNext) {
|
//
|
||||||
//
|
// Judge if FAR file is existed
|
||||||
// Judge if FAR file is existed
|
//
|
||||||
//
|
farFile = new File(jTextFieldFarFile.getText());
|
||||||
farFile = new File(jTextFieldFarFile.getText());
|
if (!farFile.exists() || !farFile.isFile()) {
|
||||||
if ( ! farFile.exists() || ! farFile.isFile()) {
|
Log.err("Please choose a FAR file already exists. ");
|
||||||
Log.err("Please choose a FAR file already exists. ");
|
return;
|
||||||
return ;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Judge FAR is valid
|
// Judge FAR is valid
|
||||||
//
|
//
|
||||||
try{
|
try {
|
||||||
JarFile file = new JarFile(farFile);
|
JarFile file = new JarFile(farFile);
|
||||||
this.far = new Far(file);
|
this.far = new Far(file);
|
||||||
} catch (Exception ex){
|
} catch (Exception ex) {
|
||||||
Log.err(ex.getMessage());
|
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) {
|
||||||
// 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);
|
stepTwo = new UpdateStepTwo(this, true, this);
|
||||||
}
|
}
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
stepTwo.prepareTable();
|
stepTwo.prepareTable();
|
||||||
stepTwo.setVisible(true);
|
stepTwo.setVisible(true);
|
||||||
}
|
} else if (e.getSource() == jButtonBrowser) {
|
||||||
else if (e.getSource() == jButtonBrowser) {
|
JFileChooser fc = new JFileChooser();
|
||||||
JFileChooser fc = new JFileChooser();
|
fc.setAcceptAllFileFilterUsed(false);
|
||||||
fc.setAcceptAllFileFilterUsed(false);
|
fc.addChoosableFileFilter(new IFileFilter(DataType.FAR_SURFACE_AREA_EXT));
|
||||||
fc.addChoosableFileFilter(new IFileFilter(DataType.FAR_SURFACE_AREA_EXT));
|
fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace()));
|
||||||
fc.setCurrentDirectory(new File(Workspace.getCurrentWorkspace()));
|
|
||||||
|
|
||||||
int result = fc.showSaveDialog(new JPanel());
|
int result = fc.showSaveDialog(new JPanel());
|
||||||
if (result == JFileChooser.APPROVE_OPTION) {
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
|
|
@ -34,6 +34,7 @@ import javax.swing.JTable;
|
||||||
import javax.swing.ListSelectionModel;
|
import javax.swing.ListSelectionModel;
|
||||||
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.DefaultTableModel;
|
||||||
|
|
||||||
|
import org.tianocore.frameworkwizard.common.DataType;
|
||||||
import org.tianocore.frameworkwizard.common.Log;
|
import org.tianocore.frameworkwizard.common.Log;
|
||||||
import org.tianocore.frameworkwizard.common.Tools;
|
import org.tianocore.frameworkwizard.common.Tools;
|
||||||
import org.tianocore.frameworkwizard.common.ui.IDialog;
|
import org.tianocore.frameworkwizard.common.ui.IDialog;
|
||||||
|
@ -71,7 +72,8 @@ public class UpdateStepTwo extends IDialog implements MouseListener {
|
||||||
private JTable jTablePackage = null;
|
private JTable jTablePackage = null;
|
||||||
|
|
||||||
private PartialTableModel model = null;
|
private PartialTableModel model = null;
|
||||||
List<PackageIdentification> updatPkgList = new ArrayList<PackageIdentification>();
|
|
||||||
|
List<PackageIdentification> updatPkgList = new ArrayList<PackageIdentification>();
|
||||||
|
|
||||||
public UpdateStepTwo(IDialog iDialog, boolean modal, UpdateStepOne stepOne) {
|
public UpdateStepTwo(IDialog iDialog, boolean modal, UpdateStepOne stepOne) {
|
||||||
this(iDialog, modal);
|
this(iDialog, modal);
|
||||||
|
@ -183,25 +185,24 @@ public class UpdateStepTwo extends IDialog implements MouseListener {
|
||||||
WorkspaceTools wt = new WorkspaceTools();
|
WorkspaceTools wt = new WorkspaceTools();
|
||||||
List<PackageIdentification> packagesInDb = wt.getAllPackages();
|
List<PackageIdentification> packagesInDb = wt.getAllPackages();
|
||||||
|
|
||||||
updatPkgList = AggregationOperation.intersection(packagesInDb, packagesInFar);
|
updatPkgList = AggregationOperation.intersection(packagesInDb, packagesInFar);
|
||||||
//
|
//
|
||||||
// Change here to get packages and platforms from FAR
|
// Change here to get packages and platforms from FAR
|
||||||
//
|
//
|
||||||
Iterator<PackageIdentification> iter = updatPkgList.iterator() ;//packageList.iterator();
|
Iterator<PackageIdentification> iter = updatPkgList.iterator();//packageList.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
String[] str = new String[4];
|
String[] str = new String[4];
|
||||||
PackageIdentification item = iter.next();
|
PackageIdentification item = iter.next();
|
||||||
str[0] = item.getName();
|
str[0] = item.getName();
|
||||||
str[1] = item.getVersion();
|
str[1] = item.getVersion();
|
||||||
str[2] = item.getGuid();
|
str[2] = item.getGuid();
|
||||||
str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));
|
str[3] = Tools.getFilePathOnly(Tools.getRelativePath(item.getPath(), Workspace.getCurrentWorkspace()));
|
||||||
model.addRow(str);
|
model.addRow(str);
|
||||||
}
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the default constructor
|
* This is the default constructor
|
||||||
|
@ -224,184 +225,191 @@ public class UpdateStepTwo extends IDialog implements MouseListener {
|
||||||
this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);
|
this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jContentPane
|
* This method initializes jContentPane
|
||||||
*
|
*
|
||||||
* @return javax.swing.JPanel
|
* @return javax.swing.JPanel
|
||||||
*/
|
*/
|
||||||
private JPanel getJContentPane() {
|
private JPanel getJContentPane() {
|
||||||
if (jContentPane == null) {
|
if (jContentPane == null) {
|
||||||
jLabel = new JLabel();
|
jLabel = new JLabel();
|
||||||
jLabel.setBounds(new java.awt.Rectangle(30,70,281,20));
|
jLabel.setBounds(new java.awt.Rectangle(30, 70, 281, 20));
|
||||||
jLabel.setText("Following packages will be updated: ");
|
jLabel.setText("Following packages will be updated: ");
|
||||||
jContentPane = new JPanel();
|
jContentPane = new JPanel();
|
||||||
jContentPane.setLayout(null);
|
jContentPane.setLayout(null);
|
||||||
jContentPane.add(getJTextArea(), null);
|
jContentPane.add(getJTextArea(), null);
|
||||||
jContentPane.add(getJButtonCancel(), null);
|
jContentPane.add(getJButtonCancel(), null);
|
||||||
jContentPane.add(getJButtonFinish(), null);
|
jContentPane.add(getJButtonFinish(), null);
|
||||||
jContentPane.add(getJButtonPrevious(), null);
|
jContentPane.add(getJButtonPrevious(), null);
|
||||||
jContentPane.add(getJScrollPane(), null);
|
jContentPane.add(getJScrollPane(), null);
|
||||||
jContentPane.add(jLabel, null);
|
jContentPane.add(jLabel, null);
|
||||||
}
|
|
||||||
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<PackageIdentification> iter = updatPkgList.iterator();
|
|
||||||
List<PackageIdentification> depResultList = new ArrayList<PackageIdentification>();
|
|
||||||
while (iter.hasNext()){
|
|
||||||
List<PackageIdentification> depPkgList = stepOne.getFar().getPackageDependencies(iter.next());
|
|
||||||
depResultList = AggregationOperation.union(depResultList, depPkgList);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<PackageIdentification> dbPkgList = DistributeRule.vectorToList(wsTools.getAllPackages());
|
|
||||||
List<PackageIdentification> 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<PlatformIdentification> allPlatforms = wsTools.getAllPlatforms();
|
|
||||||
Set<File> allPlatformFiles = new LinkedHashSet<File>();
|
|
||||||
|
|
||||||
Iterator<PlatformIdentification> allPlfIter = allPlatforms.iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
allPlatformFiles.add(allPlfIter.next().getFpdFile());
|
|
||||||
}
|
|
||||||
|
|
||||||
Iterator<PackageIdentification> packageIter = this.updatPkgList.iterator();
|
|
||||||
while (packageIter.hasNext()) {
|
|
||||||
PackageIdentification item = packageIter.next();
|
|
||||||
Set<File> deleteFiles = new LinkedHashSet<File>();
|
|
||||||
recursiveDir(deleteFiles, item.getSpdFile().getParentFile(), allPlatformFiles);
|
|
||||||
Iterator<File> iterDeleteFile = deleteFiles.iterator();
|
|
||||||
while (iterDeleteFile.hasNext()){
|
|
||||||
deleteFiles(iterDeleteFile.next());
|
|
||||||
}
|
}
|
||||||
//
|
return jContentPane;
|
||||||
// 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<PackageIdentification> 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);
|
|
||||||
}
|
}
|
||||||
else if (e.getSource() == jButtonPrevious) {
|
|
||||||
this.setVisible(false);
|
public void mouseClicked(MouseEvent e) {
|
||||||
stepOne.setVisible(true);
|
if (e.getSource() == jButtonCancel) {
|
||||||
|
this.setVisible(false);
|
||||||
|
} else if (e.getSource() == jButtonFinish) {
|
||||||
|
//
|
||||||
|
// Check depedency ?
|
||||||
|
//
|
||||||
|
WorkspaceTools wsTools = new WorkspaceTools();
|
||||||
|
|
||||||
|
Iterator<PackageIdentification> iter = updatPkgList.iterator();
|
||||||
|
List<PackageIdentification> depResultList = new ArrayList<PackageIdentification>();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
List<PackageIdentification> depPkgList = stepOne.getFar().getPackageDependencies(iter.next());
|
||||||
|
depResultList = AggregationOperation.union(depResultList, depPkgList);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PackageIdentification> dbPkgList = DistributeRule.vectorToList(wsTools.getAllPackages());
|
||||||
|
List<PackageIdentification> 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<PlatformIdentification> allPlatforms = wsTools.getAllPlatforms();
|
||||||
|
Set<File> allPlatformFiles = new LinkedHashSet<File>();
|
||||||
|
|
||||||
|
Iterator<PlatformIdentification> allPlfIter = allPlatforms.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
allPlatformFiles.add(allPlfIter.next().getFpdFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterator<PackageIdentification> packageIter = this.updatPkgList.iterator();
|
||||||
|
while (packageIter.hasNext()) {
|
||||||
|
PackageIdentification item = packageIter.next();
|
||||||
|
Set<File> deleteFiles = new LinkedHashSet<File>();
|
||||||
|
recursiveDir(deleteFiles, item.getSpdFile().getParentFile(), allPlatformFiles);
|
||||||
|
Iterator<File> 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<PackageIdentification> updataIter = this.updatPkgList.iterator();
|
||||||
|
while (updataIter.hasNext()) {
|
||||||
|
PackageIdentification pkgId = updataIter.next();
|
||||||
|
try {
|
||||||
|
stepOne.getFar().installPackage(pkgId, new File(pkgId.getSpdFile().getParent()));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.err("Can install " + pkgId.toString() + " pakcage, please check it!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
this.stepOne.returnType = DataType.RETURN_TYPE_OK;
|
||||||
|
|
||||||
|
this.setVisible(false);
|
||||||
|
this.dispose();
|
||||||
|
} else if (e.getSource() == jButtonPrevious) {
|
||||||
|
this.setVisible(false);
|
||||||
|
stepOne.setVisible(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
public void mousePressed(MouseEvent e) {
|
||||||
public void mouseReleased(MouseEvent e) {
|
// TODO Auto-generated method stub
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public void mouseEntered(MouseEvent e) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
public void mouseReleased(MouseEvent e) {
|
||||||
public void mouseExited(MouseEvent e) {
|
// TODO Auto-generated method stub
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recursiveDir(Set<File> files, File dir, Set<File> platformFiles) {
|
public void mouseEntered(MouseEvent e) {
|
||||||
File[] fileList = dir.listFiles();
|
// TODO Auto-generated method stub
|
||||||
for (int i = 0; i < fileList.length; i ++) {
|
|
||||||
if (fileList[i].isFile()) {
|
}
|
||||||
if( ! platformFiles.contains(fileList[i])) {
|
|
||||||
files.add(fileList[i]);
|
public void mouseExited(MouseEvent e) {
|
||||||
}
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recursiveDir(Set<File> files, File dir, Set<File> 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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (isContain(fileList[i], platformFiles)) {
|
|
||||||
recursiveDir(files, fileList[i], platformFiles);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
files.add(fileList[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteFiles(File file) {
|
private void deleteFiles(File file) {
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
File[] files = file.listFiles();
|
File[] files = file.listFiles();
|
||||||
for (int i = 0; i < files.length; i ++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
deleteFiles(files[i]);
|
deleteFiles(files[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
file.delete();
|
||||||
file.delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isContain(File dir, Set<File> platformFiles) {
|
private boolean isContain(File dir, Set<File> platformFiles) {
|
||||||
Iterator<File> iter = platformFiles.iterator();
|
Iterator<File> iter = platformFiles.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
File file = iter.next();
|
File file = iter.next();
|
||||||
if (file.getPath().startsWith(dir.getPath())) {
|
if (file.getPath().startsWith(dir.getPath())) {
|
||||||
//
|
//
|
||||||
// continue this FPD file
|
// continue this FPD file
|
||||||
//
|
//
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
return false;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class PartialTableModel extends DefaultTableModel {
|
class PartialTableModel extends DefaultTableModel {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public boolean isCellEditable(int row, int col) {
|
public boolean isCellEditable(int row, int col) {
|
||||||
switch (col){
|
switch (col) {
|
||||||
case 3:
|
case 3:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue