--- /dev/null
+package org.tianocore.build.global;\r
+\r
+import java.util.HashMap;\r
+import java.util.Hashtable;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+import java.util.Stack;\r
+\r
+import org.apache.tools.ant.Project;\r
+import org.apache.tools.ant.PropertyHelper;\r
+\r
+public class PropertyManager {\r
+ private static Stack<HashMap<String, String>> propertyTableStack = new Stack<HashMap<String, String>>();\r
+ private static HashMap<String, String> orgPropertyTable = null;\r
+ private static HashMap<String, String> oldPropertyTable = null;\r
+ private static HashMap<String, String> bakPropertyTable = null;\r
+ private static Project prj = null;\r
+\r
+ public static void save() {\r
+ if (orgPropertyTable == null) {\r
+ Hashtable prjProperties = prj.getProperties();\r
+ orgPropertyTable = new HashMap<String, String>();\r
+\r
+ Set keys = prjProperties.keySet();\r
+ Iterator iter = keys.iterator();\r
+ while (iter.hasNext()) {\r
+ String item = (String)iter.next();\r
+ orgPropertyTable.put(item, (String)prjProperties.get(item));\r
+ }\r
+ }\r
+\r
+ if (bakPropertyTable != null) {\r
+ propertyTableStack.push(bakPropertyTable);\r
+ oldPropertyTable = bakPropertyTable;\r
+ } else {\r
+ oldPropertyTable = orgPropertyTable;\r
+ }\r
+ bakPropertyTable = new HashMap<String, String>();\r
+ }\r
+\r
+ public static void restore() {\r
+ if (bakPropertyTable == null) {\r
+ return;\r
+ }\r
+ Set keys = bakPropertyTable.keySet();\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
+ }\r
+\r
+ if (propertyTableStack.size() > 0) {\r
+ bakPropertyTable = (HashMap<String, String>)propertyTableStack.pop();\r
+ } else {\r
+ bakPropertyTable = null;\r
+ }\r
+\r
+ if (propertyTableStack.size() == 0) {\r
+ oldPropertyTable = orgPropertyTable;\r
+ } else {\r
+ oldPropertyTable = (HashMap<String, String>)propertyTableStack.peek();\r
+ }\r
+ }\r
+\r
+ public static void setProject(Project prj) {\r
+ PropertyManager.prj = prj;\r
+ }\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
+ public static void setProperty(Project project, String name, String value) {\r
+ if (project == null) {\r
+ if (prj == null) {\r
+ return;\r
+ }\r
+ project = prj;\r
+ }\r
+\r
+ PropertyHelper.getPropertyHelper(project).setProperty(null, name, value, false);\r
+ }\r
+}\r
+\r