package uk.nhs.kch.rassyeyanie.framework.processor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.camel.Predicate;
import org.apache.camel.builder.Builder;
import org.apache.camel.builder.PredicateBuilder;
import org.apache.camel.component.hl7.HL7Constants;
import uk.nhs.kch.rassyeyanie.framework.util.CollectionUtils;
/**
* Abstract base class for Transformer. This class provides functionality for matching
* sending applications and trigger events from HL7 message headers.
*/
public abstract class AbstractHeaderMatchingTransformer implements Transformer {
private List<String> sendingApplicationFilterList = Collections.emptyList();
private List<String> sendingFacilityFilterList = Collections.emptyList();
private List<String> receivingApplicationFilterList = Collections.emptyList();
private List<String> receivingFacilityFilterList = Collections.emptyList();
private List<String> messageTypeFilterList = Collections.emptyList();
private List<String> triggerEventFilterList = Collections.emptyList();
@Override
public Predicate shouldProcessMessage() {
// MSH-3
Predicate sendingApplicationFilterPredicate = buildPredicate(HL7Constants.HL7_SENDING_APPLICATION, sendingApplicationFilterList);
// MSH-4
Predicate sendingFacilityFilterPredicate = buildPredicate(HL7Constants.HL7_SENDING_FACILITY, sendingFacilityFilterList);
// MSH-5
Predicate receivingApplicationFilterPredicate = buildPredicate(HL7Constants.HL7_RECEIVING_APPLICATION, receivingApplicationFilterList);
// MSH-6
Predicate receivingFacilityFilterPredicate = buildPredicate(HL7Constants.HL7_RECEIVING_FACILITY, receivingFacilityFilterList);
// MSH-9-1
Predicate messageTypeFilterPredicate = buildPredicate(HL7Constants.HL7_MESSAGE_TYPE, messageTypeFilterList);
// MSH-9-2
Predicate triggerEventPredicate = buildPredicate(HL7Constants.HL7_TRIGGER_EVENT, triggerEventFilterList);
ArrayList<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(sendingApplicationFilterPredicate);
predicates.add(sendingFacilityFilterPredicate);
predicates.add(receivingApplicationFilterPredicate);
predicates.add(receivingFacilityFilterPredicate);
predicates.add(messageTypeFilterPredicate);
predicates.add(triggerEventPredicate);
return PredicateBuilder.and(predicates);
}
private Predicate buildPredicate(String header, List<String> values) {
if (values.isEmpty()) {
return BooleanPredicate.TRUE;
} else {
return Builder.header(header).in(values.toArray());
}
}
public List<String> getSendingApplicationFilterList() {
return sendingApplicationFilterList;
}
public void setSendingApplicationFilterList(List<String> sendingApplicationFilterList) {
this.sendingApplicationFilterList = CollectionUtils.unmodifiableList(sendingApplicationFilterList);
}
public List<String> getSendingFacilityFilterList() {
return sendingFacilityFilterList;
}
public void setSendingFacilityFilterList(List<String> sendingFacilityFilterList) {
this.sendingFacilityFilterList = CollectionUtils.unmodifiableList(sendingFacilityFilterList);
}
public List<String> getReceivingApplicationFilterList() {
return receivingApplicationFilterList;
}
public void setReceivingApplicationFilterList(List<String> receivingApplicationFilterList) {
this.receivingApplicationFilterList = CollectionUtils.unmodifiableList(receivingApplicationFilterList);
}
public List<String> getReceivingFacilityFilterList() {
return receivingFacilityFilterList;
}
public void setReceivingFacilityFilterList(List<String> receivingFacilityFilterList) {
this.receivingFacilityFilterList = CollectionUtils.unmodifiableList(receivingFacilityFilterList);
}
public List<String> getMessageTypeFilterList() {
return messageTypeFilterList;
}
public void setMessageTypeFilterList(List<String> messageTypeFilterList) {
this.messageTypeFilterList = CollectionUtils.unmodifiableList(messageTypeFilterList);
}
public List<String> getTriggerEventFilterList() {
return triggerEventFilterList;
}
public void setTriggerEventFilterList(List<String> triggerEventFilterList) {
this.triggerEventFilterList = CollectionUtils.unmodifiableList(triggerEventFilterList);
}
}