package gov.nist.registry.ws.sq; import gov.nist.registry.common2.exception.MetadataException; import gov.nist.registry.common2.exception.MetadataValidationException; import gov.nist.registry.common2.exception.XdsException; import gov.nist.registry.common2.exception.XdsInternalException; import gov.nist.registry.common2.registry.Metadata; import gov.nist.registry.common2.registry.MetadataSupport; import gov.nist.registry.common2.registry.SQCodedTerm; import gov.nist.registry.common2.registry.storedquery.StoredQuerySupport; import java.util.ArrayList; import java.util.List; import org.openhealthtools.openxds.log.LoggerException; /** Generic implementation of FindSubmissionSets Stored Query. This class knows how to parse a * FindSubmissionSets Stored Query request producing a collection of instance variables describing * the request. A sub-class must provide the runImplementation() method that uses the pre-parsed * information about the stored query and queries a metadata database. * @author bill * */ abstract public class FindSubmissionSets extends StoredQuery { /** * Method required in subclasses (implementation specific class) to define specific * linkage to local database * @return matching metadata * @throws MetadataException * @throws XdsException * @throws LoggerException */ abstract protected Metadata runImplementation() throws MetadataException, XdsException, LoggerException; public FindSubmissionSets(StoredQuerySupport sqs) throws MetadataValidationException { super(sqs); } void validateParameters() throws MetadataValidationException { // param name, required?, multiple?, is string?, is code?, support AND/OR alternative sqs.validate_parm("$XDSSubmissionSetPatientId", true, false, true, false, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetSourceId", false, true, true, false, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetSubmissionTimeFrom", false, false, true, false, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetSubmissionTimeTo", false, false, true, false, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetAuthorPerson", false, false, true, false, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetContentType", false, true, true, true, false, (String[])null ); sqs.validate_parm("$XDSSubmissionSetStatus", true, true, true, false, false, (String[])null ); if (sqs.has_validation_errors) throw new MetadataValidationException("Metadata Validation error present"); } public Metadata runSpecific() throws XdsInternalException, XdsException, LoggerException { sqs.log_message.addOtherParam("SqParams", sqs.params.toString()); validateParameters(); parseParameters(); return runImplementation(); } protected String patient_id; protected List<String> source_id; protected String submission_time_from; protected String submission_time_to; protected String author_person; protected SQCodedTerm content_type; protected List<String> status; void parseParameters() throws XdsInternalException, XdsException, LoggerException { patient_id = sqs.params.getStringParm ("$XDSSubmissionSetPatientId"); source_id = sqs.params.getListParm("$XDSSubmissionSetSourceId"); submission_time_from = sqs.params.getIntParm ("$XDSSubmissionSetSubmissionTimeFrom"); submission_time_to = sqs.params.getIntParm ("$XDSSubmissionSetSubmissionTimeTo"); author_person = sqs.params.getStringParm ("$XDSSubmissionSetAuthorPerson"); content_type = sqs.params.getCodedParm("$XDSSubmissionSetContentType"); status = sqs.params.getListParm("$XDSSubmissionSetStatus"); String status_ns_prefix = MetadataSupport.status_type_namespace; // ArrayList new_status = new ArrayList(); for (int i=0; i<status.size(); i++) { String stat = (String) status.get(i); if ( ! stat.startsWith(status_ns_prefix)) throw new MetadataValidationException("Status parameter must have namespace prefix " + status_ns_prefix + " found " + stat); // new_status.add(stat.replaceFirst(status_ns_prefix, "")); } // status = new_status; } }