Skip to content

Commit

Permalink
SubmitAssociation type added; closes #14
Browse files Browse the repository at this point in the history
  • Loading branch information
stanojevic-boris committed Feb 8, 2013
1 parent a7f8166 commit 32f58d8
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 14 deletions.
Expand Up @@ -44,6 +44,7 @@ public class Association implements Serializable {
private String previousVersion;
private String originalStatus;
private String newStatus;
private String associationPropagation;

/**
* Constructs an association.
Expand Down Expand Up @@ -207,6 +208,21 @@ public void setNewStatus(String newStatus) {
this.newStatus = newStatus;
}

/**
* @return associationPropagation annotation value
*/
public String getAssociationPropagation() {
return associationPropagation;
}

/**
* @param associationPropagation
* value of associationPropagation annotation
*/
public void setAssociationPropagation(String associationPropagation) {
this.associationPropagation = associationPropagation;
}

@Override
public int hashCode() {
final int prime = 31;
Expand All @@ -220,6 +236,7 @@ public int hashCode() {
result = prime * result + ((previousVersion == null) ? 0 : previousVersion.hashCode());
result = prime * result + ((originalStatus == null) ? 0 : originalStatus.hashCode());
result = prime * result + ((newStatus == null) ? 0 : newStatus.hashCode());
result = prime * result + ((associationPropagation == null) ? 0 : associationPropagation.hashCode());
return result;
}

Expand Down Expand Up @@ -282,6 +299,11 @@ public boolean equals(Object obj) {
return false;
} else if (!newStatus.equals(other.newStatus))
return false;
if (associationPropagation == null) {
if (other.associationPropagation != null)
return false;
} else if (!associationPropagation.equals(other.associationPropagation))
return false;
return true;
}

Expand Down
Expand Up @@ -43,8 +43,10 @@ public enum AssociationType {
@XmlEnumValue("signs") SIGNS("signs", "urn:ihe:iti:2007:AssociationType:signs"),
/** An entry that represents a link to the On-Demand DocumentEntry. */
@XmlEnumValue("IsSnapshotOf") IS_SNAPSHOT_OF("IsSnapshotOf", "urn:ihe:iti:2010:AssociationType:IsSnapshotOf"),
/** An entry that represents a association for update availability status trigger. */
@XmlEnumValue("UpdateAvailabilityStatus") UPDATE_AVAILABILITY_STATUS("UpdateAvailabilityStatus", "urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus");
/** An entry that represents an association for update availability status trigger. */
@XmlEnumValue("UpdateAvailabilityStatus") UPDATE_AVAILABILITY_STATUS("UpdateAvailabilityStatus", "urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus"),
/** An entry that represents an association for submit association trigger. */
@XmlEnumValue("SubmitAssociation") SUBMIT_ASSOCIATION("SubmitAssociation", "urn:ihe:iti:2010:AssociationType:SubmitAssociation");

private final String opcode21;
private final String opcode30;
Expand Down
Expand Up @@ -235,6 +235,9 @@ public enum DisplayNameUsage {REQUIRED, OPTIONAL}
/** Name of the slot that is used for new association type status on update associations*/
public static final String SLOT_NAME_NEW_STATUS = "NewStatus";

/** Annotation for association propagation*/
public static final String SLOT_NAME_ASSOCIATION_PROPAGATION = "AssociationPropagation";

/** Universal ID Type to be used for all HD data types used with XDS */
public static final String UNIVERSAL_ID_TYPE_OID = "ISO";

Expand Down
Expand Up @@ -75,6 +75,9 @@ public EbXMLAssociation toEbXML(Association association, EbXMLObjectLibrary obje
String newStatus = association.getNewStatus();
result.addSlot(Vocabulary.SLOT_NAME_NEW_STATUS, newStatus);

String associationPropagation = association.getAssociationPropagation();
result.addSlot(Vocabulary.SLOT_NAME_ASSOCIATION_PROPAGATION, associationPropagation);

EbXMLClassification contentType = codeTransformer.toEbXML(association.getDocCode(), objectLibrary);
result.addClassification(contentType, Vocabulary.ASSOCIATION_DOC_CODE_CLASS_SCHEME);

Expand Down Expand Up @@ -111,6 +114,9 @@ public Association fromEbXML(EbXMLAssociation association) {
String newStatus = association.getSingleSlotValue(Vocabulary.SLOT_NAME_NEW_STATUS);
result.setNewStatus(newStatus);

String associationPropagation = association.getSingleSlotValue(Vocabulary.SLOT_NAME_ASSOCIATION_PROPAGATION);
result.setAssociationPropagation(associationPropagation);

EbXMLClassification docCode = association.getSingleClassification(Vocabulary.ASSOCIATION_DOC_CODE_CLASS_SCHEME);
result.setDocCode(codeTransformer.fromEbXML(docCode));

Expand Down
Expand Up @@ -121,7 +121,8 @@ public enum ValidationMessage {
MISSING_ORIGINAL_STATUS("UpdateAvailabilityStatus Association must specify an original document status"),
MISSING_NEW_STATUS("UpdateAvailabilityStatus Association must specify an new document status"),
MISSING_HAS_MEMBER_ASSOCIATION("No SubmissionSet to DocumentEntry/Folder HasMember Association found for the entry: %s"),
MISSING_SUBMISSION_SET("Association specifies a sourceObject: %s submission set, but it was not provided");
MISSING_SUBMISSION_SET("Association specifies a sourceObject: %s submission set, but it was not provided"),
MISSING_ASSOCIATION("Association specifies a targetObject: %s association, but it was not provided");


private final String text;
Expand Down
Expand Up @@ -288,15 +288,25 @@ private void validateAssociations(EbXMLObjectContainer container, ValidationProf
for (EbXMLRegistryPackage submissionSet : container.getRegistryPackages(SUBMISSION_SET_CLASS_NODE)) {
submissionSetIds.add(submissionSet.getId());
}
Set<String> associationIds = new HashSet<String>();
boolean hasSubmitAssociationType = false;
for (EbXMLAssociation association : container.getAssociations()) {
associationIds.add(association.getId());
if (!hasSubmitAssociationType){
hasSubmitAssociationType = association.getAssociationType() != null &&
association.getAssociationType().equals(AssociationType.SUBMIT_ASSOCIATION);
}
}

for (EbXMLAssociation association : container.getAssociations()) {
AssociationType type = association.getAssociationType();
metaDataAssert(type != null, INVALID_ASSOCIATION_TYPE);

if (type != AssociationType.HAS_MEMBER) {
validateDocumentRelationship(association, docEntryIds, profile);
validateIsSnapshotRelationship(container, association);
validateDocumentRelationship(association, docEntryIds, profile, hasSubmitAssociationType);
validateUpdateAvailabilityStatusRelationship(submissionSetIds, association);
validateSubmitAssociationRelationship(submissionSetIds, associationIds, association);
}
else {
validateAssociation(association, docEntryIds, profile);
Expand All @@ -321,8 +331,9 @@ private void validateAssociation(EbXMLAssociation association, Set<String> docEn
}
}

private void validateDocumentRelationship(EbXMLAssociation association, Set<String> docEntryIds, ValidationProfile profile) throws XDSMetaDataException {
if (!profile.isQuery()) {
private void validateDocumentRelationship(EbXMLAssociation association, Set<String> docEntryIds, ValidationProfile profile,
boolean hasSubmitAssociationType) throws XDSMetaDataException {
if (!profile.isQuery() && !hasSubmitAssociationType) {
metaDataAssert(docEntryIds.contains(association.getSource()), SOURCE_UUID_NOT_FOUND);
}
}
Expand All @@ -331,11 +342,7 @@ private void validateIsSnapshotRelationship(EbXMLObjectContainer container, EbXM
if (association.getAssociationType() == AssociationType.IS_SNAPSHOT_OF){
EbXMLExtrinsicObject sourceDocEntry = getExtrinsicObject(
container, association.getSource(), DocumentEntryType.STABLE.getUuid());
EbXMLExtrinsicObject targetDocEntry = getExtrinsicObject(
container, association.getTarget(), DocumentEntryType.ON_DEMAND.getUuid());
metaDataAssert(sourceDocEntry != null, MISSING_SNAPSHOT_ASSOCIATION, "sourceObject", association.getSource());
metaDataAssert(targetDocEntry != null, MISSING_SNAPSHOT_ASSOCIATION, "targetObject", association.getTarget());
metaDataAssert(targetDocEntry.getStatus().equals(AvailabilityStatus.APPROVED), WRONG_SNAPSHOT_ASSOCIATION_STATUS);
}
}

Expand All @@ -351,6 +358,13 @@ private void validateUpdateAvailabilityStatusRelationship(Set<String> submission
}
}

private void validateSubmitAssociationRelationship(Set<String> submissionSetIds, Set<String> associationIds, EbXMLAssociation association){
if (association.getAssociationType() == AssociationType.SUBMIT_ASSOCIATION){
metaDataAssert(submissionSetIds.contains(association.getSource()), MISSING_SUBMISSION_SET, association.getSource());
metaDataAssert(associationIds.contains(association.getTarget()), MISSING_ASSOCIATION, association.getTarget());
}
}

private EbXMLExtrinsicObject getExtrinsicObject(EbXMLObjectContainer container, String docEntryId, String... objectTypes){
for (EbXMLExtrinsicObject docEntry : container.getExtrinsicObjects(objectTypes)) {
if (docEntry.getId() != null && docEntry.getId().equals(docEntryId)) {
Expand Down
Expand Up @@ -193,14 +193,32 @@ public void testSourceUUIDNotFound() {
@Test
public void testSourceIsSnapshotAssociation() {
Association association = new Association();
association.setTargetUuid("BLAH");
association.setSourceUuid("document01");
association.setTargetUuid("urn:uuid:e0985823-dc50-45a5-a6c8-a11a829893bd");
association.setSourceUuid("blah");
association.setAssociationType(AssociationType.IS_SNAPSHOT_OF);
association.setEntryUuid("isSnapshotEntryId");
request.getAssociations().add(association);
expectFailure(MISSING_SNAPSHOT_ASSOCIATION);
}

@Test
public void testSubmitAssociation() {
Association association = new Association();
association.setTargetUuid("urn:uuid:aa0da13b-51b0-4c2e-868c-cef8d7e1bc3d");
association.setSourceUuid("document01");
association.setAssociationType(AssociationType.APPEND);
association.setEntryUuid("apnd_assoc");
request.getAssociations().add(association);

Association submitAssociation = new Association();
submitAssociation.setTargetUuid("apnd_assoc1");
submitAssociation.setSourceUuid("submissionSet01");
submitAssociation.setAssociationType(AssociationType.SUBMIT_ASSOCIATION);
submitAssociation.setEntryUuid("submitAssociation");
request.getAssociations().add(submitAssociation);
expectFailure(MISSING_ASSOCIATION);
}

@Test
public void testWrongNumberOfClassifications() {
docEntry.setFormatCode(null);
Expand Down
Expand Up @@ -234,6 +234,6 @@
</rim:ValueList>
</rim:Slot>
</rim:Association>
<rim:Association id="as02" associationType="urn:ihe:iti:2010:AssociationType:IsSnapshotOf" sourceObject="SubmissionSet01" targetObject="Document01" />
<rim:Association id="as02" associationType="urn:ihe:iti:2010:AssociationType:IsSnapshotOf" sourceObject="Document01" targetObject="urn:uuid:e0985823-dc50-45a5-a6c8-a11a829893bd" />
</rim:RegistryObjectList>
</lcm:SubmitObjectsRequest>
Expand Up @@ -33,7 +33,7 @@
import java.util.Map;

/**
* The Camel component for the ITI-42 transaction.
* The Camel component for the ITI-57 transaction.
*/
public class Iti57Component extends AbstractWsComponent<WsTransactionConfiguration> {
protected final static WsTransactionConfiguration WS_CONFIG = new WsTransactionConfiguration(
Expand Down

0 comments on commit 32f58d8

Please sign in to comment.