// precondition: info1.field.equals(info2.field); static Info mergeInfos( Info info1, Info info2, AbstractSession session, ClassDescriptor descriptor) { boolean ok = true; DatabaseField fieldMerged = info1.getField(); if (info2.getField().getType() != null) { if (info1.getField().getType() == null) { fieldMerged = info2.field; } else if (!info1.getField().getType().equals(info2.getField().getType())) { session .getIntegrityChecker() .handleError( DescriptorException.returningPolicyFieldTypeConflict( info1.getField().getName(), info1.getField().getType().getName(), info2.getField().getType().getName(), descriptor)); ok = false; } } boolean isInsertMerged = false; boolean isInsertModeReturnOnlyMerged = false; if (info1.isInsert() && !info2.isInsert()) { isInsertMerged = true; isInsertModeReturnOnlyMerged = info1.isInsertModeReturnOnly(); } else if (!info1.isInsert() && info2.isInsert()) { isInsertMerged = true; isInsertModeReturnOnlyMerged = info2.isInsertModeReturnOnly(); } else if (info1.isInsert() && info2.isInsert()) { isInsertMerged = true; isInsertModeReturnOnlyMerged = info1.isInsertModeReturnOnly(); if (info1.isInsertModeReturnOnly() != info2.isInsertModeReturnOnly()) { session .getIntegrityChecker() .handleError( DescriptorException.returningPolicyFieldInsertConflict( info1.getField().getName(), descriptor)); ok = false; } } if (ok) { // merging boolean isUpdateMerged = info1.isUpdate() || info2.isUpdate(); return new Info(fieldMerged, isInsertMerged, isInsertModeReturnOnlyMerged, isUpdateMerged); } else { // there is a problem - can't merge return null; } }
boolean equals(Info infoToCompare) { if (this == infoToCompare) { return true; } if (!getField().equals(infoToCompare.getField())) { return false; } if ((getField().getType() == null) && (infoToCompare.getField().getType() != null)) { return false; } if ((getField().getType() != null) && !getField().getType().equals(infoToCompare.getField().getType())) { return false; } if (isInsert() != infoToCompare.isInsert()) { return false; } if (isInsertModeReturnOnly() != infoToCompare.isInsertModeReturnOnly()) { return false; } if (isUpdate() != infoToCompare.isUpdate()) { return false; } return true; }