**/ \r
package org.tianocore.build.pcd.entity;\r
\r
+import java.math.BigInteger;\r
import java.util.ArrayList;\r
+import java.util.HashMap;\r
import java.util.List;\r
-import java.util.UUID;\r
import java.util.Map;\r
-import java.util.HashMap;\r
+import java.util.UUID;\r
\r
import org.tianocore.build.pcd.action.ActionMessage;\r
import org.tianocore.build.pcd.exception.EntityException;\r
dynamicValue = getDefaultSku();\r
switch (dynamicValue.type) {\r
case HII_TYPE:\r
- try {\r
- value = Integer.decode(dynamicValue.hiiDefaultValue);\r
- } catch (NumberFormatException nfEx) {\r
- isInteger = false;\r
- }\r
- \r
- if (isInteger && (value == 0)) {\r
- return false;\r
- } else {\r
- return true;\r
- }\r
-\r
+ return !isValidNullValue(dynamicValue.hiiDefaultValue);\r
case VPD_TYPE:\r
return false;\r
-\r
case DEFAULT_TYPE:\r
- try{\r
- value = Integer.decode(dynamicValue.value);\r
- } catch (NumberFormatException nfEx) {\r
- isInteger = false;\r
- }\r
+ return !isValidNullValue(dynamicValue.value);\r
+ }\r
+ }\r
+\r
+ return false;\r
+ }\r
\r
- if (isInteger && (value == 0)) {\r
- return false;\r
+ public boolean isValidNullValue(String judgedValue) {\r
+ int intValue;\r
+ BigInteger bigIntValue;\r
+\r
+ switch (datumType) {\r
+ case UINT8:\r
+ case UINT16:\r
+ case UINT32:\r
+ intValue = Integer.decode(judgedValue);\r
+ if (intValue == 0) {\r
+ return true;\r
+ }\r
+ break;\r
+ case UINT64:\r
+ if (judgedValue.length() > 2){\r
+ if ((judgedValue.charAt(0) == '0') && \r
+ ((judgedValue.charAt(1) == 'x') ||\r
+ (judgedValue.charAt(1) == 'X'))) {\r
+ bigIntValue = new BigInteger(judgedValue.substring(2, judgedValue.length()), 16);\r
+ if (bigIntValue.bitCount() == 0) {\r
+ return true;\r
+ }\r
} else {\r
+ bigIntValue = new BigInteger(judgedValue);\r
+ if (bigIntValue.bitCount() == 0) {\r
+ return true;\r
+ }\r
+ }\r
+ } else {\r
+ bigIntValue = new BigInteger(judgedValue);\r
+ if (bigIntValue.bitCount() == 0) {\r
return true;\r
}\r
-\r
+ }\r
+ break;\r
+ case BOOLEAN:\r
+ if (judgedValue.equalsIgnoreCase("false")) {\r
+ return true;\r
+ }\r
+ break;\r
+ case POINTER:\r
+ if (judgedValue.equalsIgnoreCase("") ||\r
+ judgedValue.equalsIgnoreCase("\"\"") ||\r
+ judgedValue.equalsIgnoreCase("L\"\"") ||\r
+ (judgedValue.length() == 0) ||\r
+ judgedValue.equalsIgnoreCase("{}")) {\r
+ return true;\r
}\r
}\r
-\r
return false;\r
}\r
\r
- //\r
- // TODO: Need scott's confirmation\r
- // \r
public boolean isStringType () {\r
String str = getDefaultSku().value;\r
\r
- if (datumType == Token.DATUM_TYPE.POINTER &&\r
- str.startsWith("L\"") && \r
- str.endsWith("\"")) {\r
+ //\r
+ // BUGBUG: need scott confirmation.\r
+ // \r
+ if (datumType == Token.DATUM_TYPE.POINTER) {\r
return true;\r
}\r
\r