Skip to content

Commit

Permalink
Improve Boolean default handling
Browse files Browse the repository at this point in the history
  • Loading branch information
joniles committed Oct 15, 2024
1 parent b471a0c commit 53c21dc
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 26 deletions.
1 change: 1 addition & 0 deletions src/changes/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<release date="unreleased" version="13.5.0">
<action dev="joniles" type="update">Added support for reading and writing Resource Role Assignments for Primavera schedules. The `Resource.getRoleAssignments()` method retrieves a map representing the roles a resource is assigned to, along with the skill level for each assignment. The `Resource.addRoleAssignment()` and `Resource.removeRoleAssignment()` methods allow role assignments to be added and removed.</action>
<action dev="joniles" type="update">Added support for the Resource Primary Role attribute, which is read from and written to Primavera schedules.</action>
<action dev="joniles" type="update">Improve handling Boolean attributes with default values when reading XER files.</action>
</release>
<release date="2024-10-08" version="13.4.2">
<action dev="joniles" type="update">Added the `ProjectCalendarDays.getCalendarHours()` method to allow direct access to the `ProjectCalendarHours` instances for each day of the week.</action>
Expand Down
54 changes: 29 additions & 25 deletions src/main/java/net/sf/mpxj/primavera/MapRow.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,41 +134,45 @@ public MapRow(Map<String, Object> map, boolean ignoreErrors)
}

@Override public final boolean getBoolean(String name)
{
Boolean result = getBooleanObject(name);
return result != null && result.booleanValue();
}

@Override public final Boolean getBooleanObject(String name)
{
try
{
boolean result = false;
Object value = getObject(name);
if (value != null)
if (value == null)
{
if (value instanceof Boolean)
{
result = BooleanHelper.getBoolean((Boolean) value);
}
else
{
if (value instanceof Number)
{
// generally all non-zero numbers are treated as truthy
result = ((Number) value).doubleValue() != 0.0;
}
else
{
if (value instanceof String)
{
result = parseBoolean((String) value);
}
}
}
return null;
}
return result;

if (value instanceof Boolean)
{
return (Boolean)value;
}

if (value instanceof Number)
{
// generally all non-zero numbers are treated as truthy
return Boolean.valueOf(((Number) value).doubleValue() != 0.0);
}

if (value instanceof String)
{
return parseBoolean((String) value);
}

return null;
}

catch (Exception ex)
{
if (m_ignoreErrors)
{
return false;
return null;
}
throw ex;
}
Expand Down Expand Up @@ -253,9 +257,9 @@ private Object getObject(String name)
* @param value string representation
* @return Boolean value
*/
private boolean parseBoolean(String value)
private Boolean parseBoolean(String value)
{
return value != null && (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("y") || value.equalsIgnoreCase("yes"));
return Boolean.valueOf(value != null && (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("y") || value.equalsIgnoreCase("yes")));
}

protected final Map<String, Object> m_map;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/sf/mpxj/primavera/PrimaveraReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -2165,7 +2165,7 @@ private void processFields(Map<FieldType, String> map, Row row, FieldContainer c

case BOOLEAN:
{
value = Boolean.valueOf(row.getBoolean(name));
value = row.getBooleanObject(name);
break;
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/net/sf/mpxj/primavera/Row.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ interface Row
*/
public boolean getBoolean(String name);

/**
* Retrieve a boolean attribute.
*
* @param name attribute name
* @return attribute value
*/
public Boolean getBooleanObject(String name);

/**
* Retrieve an in attribute.
*
Expand Down

0 comments on commit 53c21dc

Please sign in to comment.