List<BaseColumnFieldDiff> result = super.diff( otherColumn );
ActionWorkItemCol52 other = (ActionWorkItemCol52) otherColumn;
// Field: Work Item definition.
final PortableWorkDefinition thisDefinition = this.getWorkItemDefinition();
final PortableWorkDefinition otherDefinition = other.getWorkItemDefinition();
//Determine diffs between "this" WorkItemDefinition and the "other" WorkItemDefinition
//If both are null there are no changes; if however one is null and the other is not
//then the WorkItemDefinition has effectively been added or deleted. Otherwise look
//for differences between the two WorkItemDefinitions
if ( thisDefinition == null && otherDefinition == null ) {
return result;
} else if ( thisDefinition != null && otherDefinition == null ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_NAME,
thisDefinition.getName(),
null ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_DISPLAY_NAME,
thisDefinition.getDisplayName(),
null ) );
for ( PortableParameterDefinition parameter : thisDefinition.getParameters() ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_NAME,
parameter.getName(),
null ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_VALUE,
parameter.asString(),
null ) );
}
} else if ( thisDefinition == null && otherDefinition != null ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_NAME,
null,
otherDefinition.getName() ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_DISPLAY_NAME,
null,
otherDefinition.getDisplayName() ) );
for ( PortableParameterDefinition parameter : otherDefinition.getParameters() ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_NAME,
null,
parameter.getName() ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_VALUE,
null,
parameter.asString() ) );
}
} else {
if ( !thisDefinition.getName().equals( otherDefinition.getName() ) ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_NAME,
thisDefinition.getName(),
otherDefinition.getName() ) );
}
if ( !thisDefinition.getDisplayName().equals( otherDefinition.getDisplayName() ) ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_DISPLAY_NAME,
thisDefinition.getDisplayName(),
otherDefinition.getDisplayName() ) );
}
final List<String> thisDefinitionParameterNames = Arrays.asList( thisDefinition.getParameterNames() );
final List<String> otherDefinitionParameterNames = Arrays.asList( otherDefinition.getParameterNames() );
//Some Parameters have been deleted
final List<String> parameterNamesDeleted = new ArrayList<String>( thisDefinitionParameterNames );
parameterNamesDeleted.removeAll( otherDefinitionParameterNames );
for ( String parameterName : parameterNamesDeleted ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_NAME,
thisDefinition.getParameter( parameterName ).getName(),
null ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_VALUE,
thisDefinition.getParameter( parameterName ).asString(),
null ) );
}
//Some Parameters have been added
final List<String> parameterNamesAdded = new ArrayList<String>( otherDefinitionParameterNames );
parameterNamesAdded.removeAll( thisDefinitionParameterNames );
for ( String parameterName : parameterNamesAdded ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_NAME,
null,
otherDefinition.getParameter( parameterName ).getName() ) );
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_VALUE,
null,
otherDefinition.getParameter( parameterName ).asString() ) );
}
//Some Parameters have been updated
final List<String> parameterNamesUpdated = new ArrayList<String>( thisDefinitionParameterNames );
parameterNamesUpdated.retainAll( otherDefinitionParameterNames );
for ( String parameterName : parameterNamesUpdated ) {
if ( !isEqualOrNull( thisDefinition.getParameter( parameterName ).getName(),
otherDefinition.getParameter( parameterName ).getName() ) ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_NAME,
thisDefinition.getParameter( parameterName ).getName(),
otherDefinition.getParameter( parameterName ).getName() ) );
}
if ( !isEqualOrNull( thisDefinition.getParameter( parameterName ).asString(),
otherDefinition.getParameter( parameterName ).asString() ) ) {
result.add( new BaseColumnFieldDiffImpl( FIELD_WORKITEM_DEFINITION_PARAMETER_VALUE,
thisDefinition.getParameter( parameterName ).asString(),
otherDefinition.getParameter( parameterName ).asString() ) );
}
}
}
return result;