]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/MigrationTools/org/tianocore/migration/Database.java
Coding Style
[mirror_edk2.git] / Tools / Java / Source / MigrationTools / org / tianocore / migration / Database.java
index 68ddf40b3060a77380445cc722bddfa8854ce321..5daae526f339b4bf3db8f02ac524ac288f141272 100644 (file)
  **/\r
 package org.tianocore.migration;\r
 \r
-import java.io.*;\r
-import java.util.*;\r
-import java.util.regex.*;\r
+import java.io.BufferedReader;\r
+import java.io.File;\r
+import java.io.FileReader;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+import java.util.Set;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+\r
+import org.apache.xmlbeans.XmlObject;\r
+import org.tianocore.DbPathAndFilename;\r
+import org.tianocore.FrameworkDatabaseDocument;\r
+import org.tianocore.PackageSurfaceAreaDocument;\r
+import org.tianocore.FrameworkDatabaseDocument.FrameworkDatabase;\r
+import org.tianocore.GuidDeclarationsDocument.GuidDeclarations;\r
+import org.tianocore.LibraryClassDeclarationsDocument.LibraryClassDeclarations;\r
+import org.tianocore.LibraryClassDeclarationsDocument.LibraryClassDeclarations.LibraryClass;\r
+import org.tianocore.PackageSurfaceAreaDocument.PackageSurfaceArea;\r
+import org.tianocore.PpiDeclarationsDocument.PpiDeclarations;\r
+import org.tianocore.ProtocolDeclarationsDocument.ProtocolDeclarations;\r
 \r
 public final class Database {\r
-    private static final Database INSTANCE = Database.init();\r
-    \r
-    Database(String path) {\r
-        DatabasePath = path;\r
-\r
-        try {\r
-            importDBLib("Library.csv");\r
-            importDBGuid("Guid.csv", "Guid");\r
-            importDBGuid("Ppi.csv", "Ppi");\r
-            importDBGuid("Protocol.csv", "Protocol");\r
-            importDBMacro("Macro.csv");\r
-            importListR8Only();\r
-        } catch (Exception e) {\r
-            System.out.println(e.getMessage());\r
-        }\r
-    }\r
-    \r
-    public String DatabasePath;\r
-    public Set<String> error = new HashSet<String>();\r
-    public Set<String> r8only = new HashSet<String>();\r
-    \r
-    private Map<String,Guid> hashguid = new HashMap<String,Guid>();\r
-    private Map<String,Func> hashfunc = new HashMap<String,Func>();\r
-    private Map<String,Macro> hashmacro = new HashMap<String,Macro>();\r
-    \r
-    //-------------------------------------import------------------------------------------//\r
-    \r
-    private void importDBLib(String filename) throws Exception {\r
-        BufferedReader rd = new BufferedReader(new FileReader(DatabasePath + File.separator + filename));\r
-        String line;\r
-        String[] linecontext;\r
-        Func lf;\r
-        \r
-        if (rd.ready()) {\r
-            System.out.println("Found " + filename + ", Importing Library Database.");\r
-            while ((line = rd.readLine()) != null) {\r
-                if (line.length() != 0) {\r
-                    linecontext = line.split(",");\r
-                    lf = new Func(linecontext);\r
-                    hashfunc.put(lf.r8funcname,lf);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    \r
-    private void importDBGuid(String filename, String type) throws Exception {\r
-        BufferedReader rd = new BufferedReader(new FileReader(DatabasePath + File.separator + filename));\r
-        String line;\r
-        String[] linecontext;\r
-        Guid gu;\r
-        \r
-        if (rd.ready()) {\r
-            System.out.println("Found " + filename + ", Importing " + type + " Database.");\r
-            while ((line = rd.readLine()) != null) {\r
-                if (line.length() != 0) {\r
-                    linecontext = line.split(",");\r
-                    gu = new Guid(linecontext, type);\r
-                    hashguid.put(gu.r8name,gu);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    \r
-    private void importDBMacro(String filename) throws Exception {\r
-        BufferedReader rd = new BufferedReader(new FileReader(DatabasePath + File.separator + filename));\r
-        String line;\r
-        String[] linecontext;\r
-        Macro mc;\r
-        \r
-        if (rd.ready()) {\r
-            System.out.println("Found " + filename + ", Importing Macro Database.");\r
-            while ((line = rd.readLine()) != null) {\r
-                if (line.length() != 0) {\r
-                    linecontext = line.split(",");\r
-                    mc = new Macro(linecontext);\r
-                    hashmacro.put(mc.r8name,mc);\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    private void importListR8Only() throws Exception {\r
-        Pattern ptnr8only = Pattern.compile("////#?(\\w*)?.*?R8_(.*?)\\s*\\(.*?////~", Pattern.DOTALL);\r
-        String wholeline = Common.file2string(DatabasePath + File.separator + "R8Lib.c");\r
-        System.out.println("Found " + "R8Lib.c" + ", Importing R8Lib Database.");\r
-        Matcher mtrr8only = ptnr8only.matcher(wholeline);\r
-        while (mtrr8only.find()) {\r
-            r8only.add(mtrr8only.group(2));\r
-        }\r
-    }\r
-    \r
-    //-------------------------------------import------------------------------------------//\r
-\r
-    //-------------------------------------get------------------------------------------//\r
-\r
-    public String getR9Lib(String r8funcname) {\r
-        String temp = null;\r
-        if (hashfunc.containsKey(r8funcname)) {\r
-            temp = hashfunc.get(r8funcname).r9libname;\r
-        }\r
-        return temp;\r
-    }\r
-    \r
-    public String getR9Func(String r8funcname) {\r
-        String temp = null;\r
-        if (hashfunc.containsKey(r8funcname)) {\r
-            temp = hashfunc.get(r8funcname).r9funcname;\r
-        }\r
-        return temp;\r
-    }\r
-    \r
-    public String getR9Macro(String r8macro) {\r
-        return hashmacro.get(r8macro).r9name;            // the verification job of if the macro exists in the database is done when registering it\r
-    }\r
-\r
-    public String getR9Guidname(String r8Guid) {\r
-        String temp = null;\r
-        try {\r
-            temp = hashguid.get(r8Guid).r9name;\r
-        } catch (NullPointerException e) {\r
-            error.add("getR9Guidname :" + r8Guid);\r
-        }\r
-        return temp;\r
-    }\r
-\r
-    public String getGuidType(String r8Guid) {\r
-        String temp = null;\r
-        try {\r
-            temp =  hashguid.get(r8Guid).type;\r
-        } catch (NullPointerException e) {\r
-            error.add("getR9Guidname :" + r8Guid);\r
-        }\r
-        return temp;\r
-    }\r
-\r
-    //-------------------------------------get------------------------------------------//\r
-\r
-    //-------------------------------------has------------------------------------------//\r
-\r
-    public boolean hasFunc(String r8lib) {\r
-        return hashfunc.containsKey(r8lib);\r
-    }\r
-\r
-    public boolean hasGuid(String r8guid) {\r
-        return hashguid.containsKey(r8guid);\r
-    }\r
-\r
-    public boolean hasMacro(String r8macro) {\r
-        return hashmacro.containsKey(r8macro);\r
-    }\r
-    \r
-    //-------------------------------------has------------------------------------------//\r
-    \r
-    //-------------------------------------init------------------------------------------//\r
-\r
-    private static final Database init() {\r
-        if (System.getenv("WORKSPACE") == null) {\r
-            return new Database("C:" + File.separator + "tianocore" + File.separator + "edk2" + File.separator + "Tools" + File.separator + "Conf" + File.separator + "Migration");\r
-        } else {\r
-            return new Database(System.getenv("WORKSPACE") + File.separator + "Tools" + File.separator + "Conf" + File.separator + "Migration");\r
-        }\r
-    }\r
-    \r
-    public static final Database getInstance() {\r
-        return INSTANCE;\r
-    }\r
+       private static final Database INSTANCE = Database.init();;\r
+\r
+       Database(String path) {\r
+               DatabasePath = path;\r
+\r
+               try {\r
+                       // collectWorkSpaceDatabase();\r
+                       importPkgGuid("PkgGuid.csv");\r
+                       importDBLib("Library.csv");\r
+                       importDBGuid("Guid.csv", "Guid");\r
+                       importDBGuid("Ppi.csv", "Ppi");\r
+                       importDBGuid("Protocol.csv", "Protocol");\r
+                       importDBMacro("Macro.csv");\r
+                       importListR8Only();\r
+               } catch (Exception e) {\r
+                       System.out.println(e.getMessage());\r
+               }\r
+       }\r
+\r
+       public String DatabasePath;\r
+\r
+       public Set<String> error = new HashSet<String>();\r
+\r
+       public Set<String> r8only = new HashSet<String>();\r
+\r
+       private Map<String, Guid> hashguid = new HashMap<String, Guid>();\r
+\r
+       private Map<String, Func> hashfunc = new HashMap<String, Func>();\r
+\r
+       private Map<String, Macro> hashmacro = new HashMap<String, Macro>();\r
+\r
+       private Map<String, String> hashPkgGuid = new HashMap<String, String>();\r
+\r
+       // -------------------------------------import------------------------------------------//\r
+       private void importPkgGuid(String filename) throws Exception {\r
+               BufferedReader rd = new BufferedReader(new FileReader(DatabasePath\r
+                               + File.separator + filename));\r
+               String line;\r
+               String[] linecontext;\r
+\r
+               if (rd.ready()) {\r
+                       System.out.println("Found " + filename\r
+                                       + ", Importing Package Guid Database.");\r
+                       //\r
+                       // Skip the title row.\r
+                       // \r
+                       line = rd.readLine();\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.length() != 0) {\r
+                                       linecontext = line.split(",");\r
+                                       hashPkgGuid.put(linecontext[0], linecontext[1]);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public Iterator<String> dumpAllPkgGuid() {\r
+               return hashPkgGuid.values().iterator();\r
+       }\r
+\r
+       private void importDBLib(String filename) throws Exception {\r
+               BufferedReader rd = new BufferedReader(new FileReader(DatabasePath\r
+                               + File.separator + filename));\r
+               String line;\r
+               String[] linecontext;\r
+               Func lf;\r
+\r
+               if (rd.ready()) {\r
+                       System.out.println("Found " + filename\r
+                                       + ", Importing Library Database.");\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.length() != 0) {\r
+                                       linecontext = line.split(",");\r
+                                       lf = new Func(linecontext);\r
+                                       hashfunc.put(lf.r8funcname, lf);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       private void importDBGuid(String filename, String type) throws Exception {\r
+               BufferedReader rd = new BufferedReader(new FileReader(DatabasePath\r
+                               + File.separator + filename));\r
+               String line;\r
+               String[] linecontext;\r
+               Guid gu;\r
+\r
+               if (rd.ready()) {\r
+                       System.out.println("Found " + filename + ", Importing " + type\r
+                                       + " Database.");\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.length() != 0) {\r
+                                       linecontext = line.split(",");\r
+                                       gu = new Guid(linecontext, type);\r
+                                       hashguid.put(gu.r8name, gu);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       private void importDBMacro(String filename) throws Exception {\r
+               BufferedReader rd = new BufferedReader(new FileReader(DatabasePath\r
+                               + File.separator + filename));\r
+               String line;\r
+               String[] linecontext;\r
+               Macro mc;\r
+\r
+               if (rd.ready()) {\r
+                       System.out.println("Found " + filename\r
+                                       + ", Importing Macro Database.");\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.length() != 0) {\r
+                                       linecontext = line.split(",");\r
+                                       mc = new Macro(linecontext);\r
+                                       hashmacro.put(mc.r8name, mc);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       private void importListR8Only() throws Exception {\r
+               Pattern ptnr8only = Pattern.compile(\r
+                               "////#?(\\w*)?.*?R8_(.*?)\\s*\\(.*?////~", Pattern.DOTALL);\r
+               String wholeline = Common.file2string(DatabasePath + File.separator\r
+                               + "R8Lib.c");\r
+               System.out\r
+                               .println("Found " + "R8Lib.c" + ", Importing R8Lib Database.");\r
+               Matcher mtrr8only = ptnr8only.matcher(wholeline);\r
+               while (mtrr8only.find()) {\r
+                       r8only.add(mtrr8only.group(2));\r
+               }\r
+       }\r
+\r
+       // -------------------------------------import------------------------------------------//\r
+\r
+       // -------------------------------------get------------------------------------------//\r
+\r
+       public String getR9Lib(String r8funcname) {\r
+               String temp = null;\r
+               if (hashfunc.containsKey(r8funcname)) {\r
+                       temp = hashfunc.get(r8funcname).r9libname;\r
+               }\r
+               return temp;\r
+       }\r
+\r
+       public String getR9Func(String r8funcname) {\r
+               String temp = null;\r
+               if (hashfunc.containsKey(r8funcname)) {\r
+                       temp = hashfunc.get(r8funcname).r9funcname;\r
+               }\r
+               return temp;\r
+       }\r
+\r
+       public String getR9Macro(String r8macro) {\r
+               return hashmacro.get(r8macro).r9name; // the verification job of if\r
+                                                                                               // the macro exists in the\r
+                                                                                               // database is done when\r
+                                                                                               // registering it\r
+       }\r
+\r
+       public String getR9Guidname(String r8Guid) {\r
+               String temp = null;\r
+               try {\r
+                       temp = hashguid.get(r8Guid).r9name;\r
+               } catch (NullPointerException e) {\r
+                       error.add("getR9Guidname :" + r8Guid);\r
+               }\r
+               return temp;\r
+       }\r
+\r
+       public String getGuidType(String r8Guid) {\r
+               String temp = null;\r
+               try {\r
+                       temp = hashguid.get(r8Guid).type;\r
+               } catch (NullPointerException e) {\r
+                       error.add("getR9Guidname :" + r8Guid);\r
+               }\r
+               return temp;\r
+       }\r
+\r
+       // -------------------------------------get------------------------------------------//\r
+\r
+       // -------------------------------------has------------------------------------------//\r
+\r
+       public boolean hasFunc(String r8lib) {\r
+               return hashfunc.containsKey(r8lib);\r
+       }\r
+\r
+       public boolean hasGuid(String r8guid) {\r
+               return hashguid.containsKey(r8guid);\r
+       }\r
+\r
+       public boolean hasMacro(String r8macro) {\r
+               return hashmacro.containsKey(r8macro);\r
+       }\r
+\r
+       // -------------------------------------has------------------------------------------//\r
+\r
+       // -------------------------------------init------------------------------------------//\r
+\r
+       private static final Database init() {\r
+               if (System.getenv("WORKSPACE") == null) {\r
+                       return new Database("C:" + File.separator + "tianocore"\r
+                                       + File.separator + "edk2" + File.separator + "Tools"\r
+                                       + File.separator + "Conf" + File.separator + "Migration");\r
+               } else {\r
+                       return new Database(System.getenv("WORKSPACE") + File.separator\r
+                                       + "Tools" + File.separator + "Conf" + File.separator\r
+                                       + "Migration");\r
+               }\r
+       }\r
+\r
+       public static final Database getInstance() {\r
+               return INSTANCE;\r
+       }\r
+\r
+       private String workspacePath;\r
+\r
+       private HashMap<String, String> hashDbGuids = new HashMap<String, String>();\r
+\r
+       private HashMap<String, String> hashDbPpis = new HashMap<String, String>();\r
+\r
+       private HashMap<String, String> hashDbProtocols = new HashMap<String, String>();\r
+\r
+       private HashMap<String, String> hashDbLibSymbols = new HashMap<String, String>();\r
+\r
+       private HashMap<String, String> hashDbLibFunctions = new HashMap<String, String>();\r
+\r
+       private HashMap<String, String> hashDbLibExterns = new HashMap<String, String>();\r
+\r
+       private final String regLibClassName = ".*\\W(\\w[\\w\\d]*)\\.h";\r
+\r
+       private final Pattern ptnLibClassName = Pattern.compile(regLibClassName);\r
+\r
+       private final String regLibSymbol = "#define\\s+(\\w[\\w\\d]*)";\r
+\r
+       private final Pattern ptnLibSymbol = Pattern.compile(regLibSymbol);\r
+\r
+       private final String regLibDataType = "[A-Z][A-Z0-9_]*\\s*\\**";\r
+\r
+       private final String regLibFunction = regLibDataType\r
+                       + "\\s*(?:EFIAPI)?\\s+" + "(\\w[\\w\\d]*)\\s*\\([^)]*\\)\\s*;";\r
+\r
+       private Pattern ptnLibFunction = Pattern.compile(regLibFunction);\r
+\r
+       private final String regLibExtern = "extern\\s+" + regLibDataType\r
+                       + "\\s*(\\w[\\w\\d]*)";\r
+\r
+       private final Pattern ptnLibExtern = Pattern.compile(regLibExtern);\r
+\r
+       private final String convertToOsFilePath(String filePath) {\r
+               return filePath.replace("/", File.separator).replace("\\",\r
+                               File.separator);\r
+       }\r
+\r
+       private final void collectLibHeaderFileInfo(String libHeaderFile,\r
+                       String pkgGuid) throws Exception {\r
+               String fileContents;\r
+               String libClassName;\r
+               String libContainer;\r
+               Matcher mtrLibClass;\r
+               Matcher mtrLibSymbol;\r
+               Matcher mtrLibFunction;\r
+               Matcher mtrLibExtern;\r
+\r
+               System.out.println("Parsing: " + libHeaderFile);\r
+               mtrLibClass = ptnLibClassName.matcher(libHeaderFile);\r
+               if (!mtrLibClass.matches()) {\r
+                       throw new Exception("Illegal libary header file");\r
+               }\r
+               libClassName = mtrLibClass.group(1);\r
+               libContainer = libClassName + "@" + pkgGuid;\r
+\r
+               fileContents = Common.file2string(libHeaderFile);\r
+               mtrLibSymbol = ptnLibSymbol.matcher(fileContents);\r
+               while (mtrLibSymbol.find()) {\r
+                       String libSymbol;\r
+                       String oldLibContainer;\r
+\r
+                       libSymbol = mtrLibSymbol.group(1);\r
+                       oldLibContainer = hashDbLibSymbols.put(libSymbol, libContainer);\r
+                       if (oldLibContainer != null) {\r
+                               String warnMessage;\r
+\r
+                               warnMessage = "Duplicated Lib Symbol:" + libSymbol + " Found. "\r
+                                               + "Later package will overide the previous one";\r
+                               System.out.println(warnMessage);\r
+                       }\r
+               }\r
+\r
+               mtrLibFunction = ptnLibFunction.matcher(fileContents);\r
+               while (mtrLibFunction.find()) {\r
+                       String libFunction;\r
+                       String oldLibContainer;\r
+\r
+                       libFunction = mtrLibFunction.group(1);\r
+                       oldLibContainer = hashDbLibFunctions.put(libFunction, libContainer);\r
+                       if (oldLibContainer != null) {\r
+                               String warnMessage;\r
+\r
+                               warnMessage = "Duplicated Lib Function:" + libFunction\r
+                                               + " Found. "\r
+                                               + "Later package will overide the previous one";\r
+                               System.out.println(warnMessage);\r
+                       }\r
+               }\r
+\r
+               mtrLibExtern = ptnLibExtern.matcher(fileContents);\r
+               while (mtrLibExtern.find()) {\r
+                       String libExtern;\r
+                       String oldLibContainer;\r
+\r
+                       libExtern = mtrLibExtern.group(1);\r
+                       oldLibContainer = hashDbLibExterns.put(libExtern, libContainer);\r
+                       if (oldLibContainer != null) {\r
+                               String warnMessage;\r
+\r
+                               warnMessage = "Duplicated Lib Extern:" + libExtern + " Found. "\r
+                                               + "Later package will overide the previous one";\r
+                               System.out.println(warnMessage);\r
+                       }\r
+               }\r
+       }\r
+\r
+       private final void collectLibDataBase(PackageSurfaceArea spdDatabase,\r
+                       String pkgDirectory) throws Exception {\r
+               String pkgGuid;\r
+               LibraryClassDeclarations libClassDeclarations;\r
+\r
+               pkgGuid = spdDatabase.getSpdHeader().getGuidValue();\r
+               libClassDeclarations = spdDatabase.getLibraryClassDeclarations();\r
+               if (libClassDeclarations != null) {\r
+                       Iterator<LibraryClass> itLibClass;\r
+\r
+                       itLibClass = libClassDeclarations.getLibraryClassList().iterator();\r
+                       while (itLibClass.hasNext()) {\r
+                               String libHeaderFile;\r
+\r
+                               libHeaderFile = pkgDirectory + File.separator\r
+                                               + itLibClass.next().getIncludeHeader();\r
+                               libHeaderFile = convertToOsFilePath(libHeaderFile);\r
+                               try {\r
+                                       collectLibHeaderFileInfo(libHeaderFile, pkgGuid);\r
+                               } catch (Exception e) {\r
+                                       String errorMessage;\r
+\r
+                                       errorMessage = "Error (" + e.getMessage()\r
+                                                       + ")occurs when parsing " + libHeaderFile;\r
+                                       System.out.println(errorMessage);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       private final void collectGuidDatabase(PackageSurfaceArea spdDatabase)\r
+                       throws Exception {\r
+               String pkgGuid;\r
+               GuidDeclarations guidDeclarations;\r
+\r
+               pkgGuid = spdDatabase.getSpdHeader().getGuidValue();\r
+               guidDeclarations = spdDatabase.getGuidDeclarations();\r
+               if (guidDeclarations != null) {\r
+                       Iterator<GuidDeclarations.Entry> itGuids;\r
+\r
+                       itGuids = guidDeclarations.getEntryList().iterator();\r
+                       while (itGuids.hasNext()) {\r
+                               hashDbGuids.put(itGuids.next().getCName(), pkgGuid);\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       private final void collectPpiDatabase(PackageSurfaceArea spdDatabase)\r
+                       throws Exception {\r
+               String pkgGuid;\r
+               PpiDeclarations ppiDeclarations;\r
+\r
+               pkgGuid = spdDatabase.getSpdHeader().getGuidValue();\r
+               ppiDeclarations = spdDatabase.getPpiDeclarations();\r
+\r
+               if (ppiDeclarations != null) {\r
+                       Iterator<PpiDeclarations.Entry> itPpis;\r
+\r
+                       itPpis = ppiDeclarations.getEntryList().iterator();\r
+                       while (itPpis.hasNext()) {\r
+                               hashDbPpis.put(itPpis.next().getCName(), pkgGuid);\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       private final void collectProtocolDatabase(PackageSurfaceArea spdDatabase)\r
+                       throws Exception {\r
+               String pkgGuid;\r
+               ProtocolDeclarations protocolDeclarations;\r
+\r
+               pkgGuid = spdDatabase.getSpdHeader().getGuidValue();\r
+               protocolDeclarations = spdDatabase.getProtocolDeclarations();\r
+\r
+               if (protocolDeclarations != null) {\r
+                       Iterator<ProtocolDeclarations.Entry> itProtocols;\r
+\r
+                       itProtocols = protocolDeclarations.getEntryList().iterator();\r
+                       while (itProtocols.hasNext()) {\r
+                               hashDbGuids.put(itProtocols.next().getCName(), pkgGuid);\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       private final void collectPackageDatabase(String packageFileName)\r
+                       throws Exception {\r
+               XmlObject xmlPackage;\r
+               PackageSurfaceArea spdDatabase;\r
+               File pkgFile;\r
+\r
+               pkgFile = new File(packageFileName);\r
+               xmlPackage = XmlObject.Factory.parse(pkgFile);\r
+               spdDatabase = ((PackageSurfaceAreaDocument) xmlPackage)\r
+                               .getPackageSurfaceArea();\r
+\r
+               collectGuidDatabase(spdDatabase);\r
+               collectProtocolDatabase(spdDatabase);\r
+               collectPpiDatabase(spdDatabase);\r
+               collectLibDataBase(spdDatabase, pkgFile.getParent());\r
+\r
+       }\r
+\r
+       public final void collectWorkSpaceDatabase() throws Exception {\r
+               String databaseFileName;\r
+               File databaseFile;\r
+               XmlObject xmlDatabase;\r
+               FrameworkDatabase frameworkDatabase;\r
+               Iterator<DbPathAndFilename> packageFile;\r
+\r
+               workspacePath = System.getenv("WORKSPACE");\r
+\r
+               if (workspacePath == null) {\r
+                       String errorMessage = "Envivornment variable \"WORKSPACE\" is not set!";\r
+                       throw new Exception(errorMessage);\r
+               }\r
+               databaseFileName = workspacePath + File.separator + "Tools"\r
+                               + File.separator + "Conf" + File.separator\r
+                               + "FrameworkDatabase.db";\r
+               System.out.println("Open " + databaseFileName);\r
+               databaseFile = new File(databaseFileName);\r
+               xmlDatabase = XmlObject.Factory.parse(databaseFile);\r
+               frameworkDatabase = ((FrameworkDatabaseDocument) xmlDatabase)\r
+                               .getFrameworkDatabase();\r
+               packageFile = frameworkDatabase.getPackageList().getFilenameList()\r
+                               .iterator();\r
+\r
+               while (packageFile.hasNext()) {\r
+                       String packageFileName = packageFile.next().getStringValue();\r
+                       packageFileName = workspacePath + File.separator + packageFileName;\r
+                       packageFileName = convertToOsFilePath(packageFileName);\r
+\r
+                       System.out.println("Parsing: " + packageFileName);\r
+                       try {\r
+                               collectPackageDatabase(packageFileName);\r
+                       } catch (Exception e) {\r
+                               System.out.println("Error occured when opening "\r
+                                               + packageFileName + e.getMessage());\r
+                       }\r
+               }\r
+       }\r
 }\r