package gov.nist.registry.ws.sq.ebxmlrr21; 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.MetadataParser; import gov.nist.registry.common2.registry.MetadataSupport; import gov.nist.registry.common2.registry.SQCodedTerm; import gov.nist.registry.common2.registry.storedquery.StoredQuerySupport; import gov.nist.registry.ws.sq.GetFolderAndContents; import java.util.ArrayList; import java.util.List; import org.apache.axiom.om.OMElement; import org.openhealthtools.openxds.log.LoggerException; /** * Implementation specific class for GetFolderAndContents stored query. * All the logic is in the runImplementation() method. * @author bill * */ public class EbXML21GetFolderAndContents extends GetFolderAndContents { EbXML21QuerySupport eb; /** * Constructor * @param sqs * @throws MetadataValidationException */ public EbXML21GetFolderAndContents(StoredQuerySupport sqs) { super(sqs); eb = new EbXML21QuerySupport(sqs); } /** * Main method, runs query logic * @return Metadata * @throws MetadataException * @throws XdsException */ public Metadata runImplementation() throws XdsException, LoggerException, MetadataException, MetadataValidationException, XdsInternalException { Metadata metadata; if (fol_uuid != null) { // starting from uuid OMElement x = eb.getFolByUuid(fol_uuid); metadata = MetadataParser.parseNonSubmission(x); if (sqs.return_leaf_class) { if (metadata.getFolders().size() == 0) return metadata; } else { if (metadata.getObjectRefs().size() == 0) return metadata; } } else { // starting from uniqueid OMElement x = eb.getFolByUid(fol_uid); metadata = MetadataParser.parseNonSubmission(x); if (sqs.return_leaf_class) { if (metadata.getFolders().size() == 0) return metadata; } else { if (metadata.getObjectRefs().size() == 0) return metadata; } fol_uuid = metadata.getFolder(0).getAttributeValue(MetadataSupport.id_qname); } sqs.log_message.addOtherParam("Folder id", fol_uuid); List<String> folder_ids = new ArrayList<String>(); folder_ids.add(fol_uuid); // fol_uuid has now been set List<String> content_ids = new ArrayList<String>(); SQCodedTerm conf_codes = sqs.params.getCodedParm("$XDSDocumentEntryConfidentialityCode"); SQCodedTerm format_codes = sqs.params.getCodedParm("$XDSDocumentEntryFormatCode"); OMElement doc_metadata = eb.getFolDocs(fol_uuid, format_codes, conf_codes, object_type); metadata.addMetadata(doc_metadata); List<String> docIds = eb.getIdsFromAdhocQueryResponse(doc_metadata); content_ids.addAll(docIds); sqs.log_message.addOtherParam("Doc ids", docIds.toString()); List<String> assocIds; if (content_ids.size() > 0 && folder_ids.size() > 0) { OMElement assoc_metadata = eb.getRegistryPackageAssocs(folder_ids, content_ids); assocIds = eb.getIdsFromAdhocQueryResponse(assoc_metadata); sqs.log_message.addOtherParam("Assoc ids", assocIds.toString()); metadata.addMetadata(assoc_metadata); } sqs.log_message.addOtherParam("Assoc ids", "None"); return metadata; } }