]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/global/PropertyManager.java
Changed spelling to manifest
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / global / PropertyManager.java
index 50a2ead4aa9e9b2702d232ba37c77ecb0e092fc7..1bd7cf97da47da283e3b367e69beed843460ca37 100644 (file)
@@ -1,3 +1,17 @@
+/** @file\r
+  PropertyManager class.\r
+  \r
+  PropertyManager class wraps Project.setProperty and tracks overrided properties.\r
\r
+Copyright (c) 2006, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+**/\r
 package org.tianocore.build.global;\r
 \r
 import java.util.HashMap;\r
@@ -9,14 +23,46 @@ import java.util.Stack;
 import org.apache.tools.ant.Project;\r
 import org.apache.tools.ant.PropertyHelper;\r
 \r
+/**\r
+   PropertyManager uses a incremental way to to track overrided properties when \r
+   setProperty. This is useful for property recovery in nestly calling build files.\r
+   Another functionality of this class is to prevent warning message printed when\r
+   building with "verbose" mode.\r
+ **/\r
 public class PropertyManager {\r
+    //\r
+    // Property table stack, keeps track the history of properties changes\r
+    // \r
     private static Stack<HashMap<String, String>> propertyTableStack = new Stack<HashMap<String, String>>();\r
+    //\r
+    // The very original properties\r
+    // \r
     private static HashMap<String, String> orgPropertyTable = null;\r
+    //\r
+    // The last changes of properties\r
+    // \r
     private static HashMap<String, String> oldPropertyTable = null;\r
+    //\r
+    // The current changes of properties\r
+    // \r
     private static HashMap<String, String> bakPropertyTable = null;\r
+    //\r
+    // The Project of tracking properties\r
+    // \r
     private static Project prj = null;\r
-\r
+    //\r
+    // PropertyHelper of this project for setting property quietly\r
+    // \r
+    private static PropertyHelper ph = null;\r
+\r
+    /**\r
+       Backup properties that have been overrided onto the stack for later recovery.\r
+     **/\r
     public static void save() {\r
+        //\r
+        // If this is the first time to save properties changes, keep all properties\r
+        // of this project as the original property table.\r
+        // \r
         if (orgPropertyTable == null) {\r
             Hashtable prjProperties = prj.getProperties();\r
             orgPropertyTable = new HashMap<String, String>();\r
@@ -29,6 +75,10 @@ public class PropertyManager {
             }\r
         }\r
 \r
+        //\r
+        // If there're already overrided properties, push it onto stack; otherwise\r
+        // prepare taking new overrided property by allocating space for it.\r
+        // \r
         if (bakPropertyTable != null) {\r
             propertyTableStack.push(bakPropertyTable);\r
             oldPropertyTable = bakPropertyTable;\r
@@ -38,25 +88,40 @@ public class PropertyManager {
         bakPropertyTable = new HashMap<String, String>();\r
     }\r
 \r
+    /**\r
+       Restore the properties backup\r
+     **/\r
     public static void restore() {\r
         if (bakPropertyTable == null) {\r
+            //\r
+            // No properties backup, do nothing \r
+            // \r
             return;\r
         }\r
         Set keys = bakPropertyTable.keySet();\r
 \r
+        //\r
+        // Re-set properties in backup\r
+        // \r
         Iterator iter = keys.iterator();\r
         while (iter.hasNext()) {\r
             String name = (String)iter.next();\r
             String value = (String)bakPropertyTable.get(name);\r
-            setProperty(prj, name, value);\r
+            ph.setProperty(null, name, value, false);\r
         }\r
 \r
+        //\r
+        // If there's backup history, get top one for next recovery\r
+        // \r
         if (propertyTableStack.size() > 0) {\r
             bakPropertyTable = (HashMap<String, String>)propertyTableStack.pop();\r
         } else {\r
-            bakPropertyTable = null;\r
+            bakPropertyTable = null;    // no recovery any more\r
         }\r
 \r
+        //\r
+        // Determine last overrided properties for incremental judgement\r
+        // \r
         if (propertyTableStack.size() == 0) {\r
             oldPropertyTable = orgPropertyTable;\r
         } else {\r
@@ -64,37 +129,68 @@ public class PropertyManager {
         }\r
     }\r
 \r
+    /**\r
+       Set current Project for save() and restore() use.\r
+\r
+       @param prj\r
+     **/\r
     public static void setProject(Project prj) {\r
         PropertyManager.prj = prj;\r
+        PropertyManager.ph  = PropertyHelper.getPropertyHelper(prj);\r
     }\r
 \r
+    /**\r
+       Set a property for current project. It will also be put into property\r
+       history record if the record table has been setup.\r
+\r
+       @param name      Property name\r
+       @param value     Property value\r
+     **/\r
     public static void setProperty(String name, String value) {\r
         if (prj == null) {\r
             return;\r
         }\r
 \r
         setProperty(prj, name, value);\r
-\r
-        if (oldPropertyTable == null || bakPropertyTable == null) {\r
-            return;\r
-        }\r
-\r
-        String oldValue = oldPropertyTable.get(name);\r
-        if (oldValue == null) {\r
-            oldValue = value;\r
-        }\r
-        bakPropertyTable.put(name, oldValue);\r
     }\r
 \r
+    /**\r
+       Set a property for current project. It will also be put into property\r
+       history record if the record table has been setup.\r
+\r
+       @param project   The Project for which the property will be set\r
+       @param name      Property name\r
+       @param value     Property value\r
+     **/\r
     public static void setProperty(Project project, String name, String value) {\r
         if (project == null) {\r
             if (prj == null) {\r
-                return;\r
+                return; // a Project must be given; otherwise nothing can be set\r
             }\r
             project = prj;\r
         }\r
 \r
+        //\r
+        // Using PropertyHelper to set a property can be quiet (no override\r
+        // warning preset).\r
+        // \r
         PropertyHelper.getPropertyHelper(project).setProperty(null, name, value, false);\r
+\r
+        //\r
+        // If no property override history record is found, do nothing further\r
+        // \r
+        if (oldPropertyTable == null || bakPropertyTable == null) {\r
+            return;\r
+        }\r
+\r
+        //\r
+        // Put a copy of given property in history record.\r
+        // \r
+        String oldValue = oldPropertyTable.get(name);\r
+        if (oldValue == null) {\r
+            oldValue = value;\r
+        }\r
+        bakPropertyTable.put(name, oldValue);\r
     }\r
 }\r
 \r