Search in sources :

Example 6 with InsertActionImpl

use of org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.InsertActionImpl in project ddf by codice.

the class TransactionRequestConverter method unmarshal.

@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
    CswTransactionRequest cswTransactionRequest = new CswTransactionRequest();
    cswTransactionRequest.setVersion(reader.getAttribute(CswConstants.VERSION));
    cswTransactionRequest.setService(reader.getAttribute(CswConstants.SERVICE));
    cswTransactionRequest.setVerbose(Boolean.valueOf(reader.getAttribute(CswConstants.VERBOSE_RESPONSE)));
    XStreamAttributeCopier.copyXmlNamespaceDeclarationsIntoContext(reader, context);
    while (reader.hasMoreChildren()) {
        reader.moveDown();
        if (reader.getNodeName().contains("Insert")) {
            String typeName = StringUtils.defaultIfEmpty(reader.getAttribute(CswConstants.TYPE_NAME_PARAMETER), CswConstants.CSW_RECORD);
            String handle = StringUtils.defaultIfEmpty(reader.getAttribute(CswConstants.HANDLE_PARAMETER), "");
            context.put(CswConstants.TRANSFORMER_LOOKUP_KEY, TransformerManager.ID);
            context.put(CswConstants.TRANSFORMER_LOOKUP_VALUE, typeName);
            List<Metacard> metacards = new ArrayList<>();
            // Loop through the individual records to be inserted, converting each into a Metacard
            while (reader.hasMoreChildren()) {
                // move down to the record's tag
                reader.moveDown();
                Metacard metacard = (Metacard) context.convertAnother(null, MetacardImpl.class, delegatingTransformer);
                if (metacard != null) {
                    metacards.add(metacard);
                }
                // move back up to the <SearchResults> parent of the <csw:Record> tags
                reader.moveUp();
            }
            cswTransactionRequest.getInsertActions().add(new InsertActionImpl(typeName, handle, metacards));
        } else if (reader.getNodeName().contains("Delete")) {
            XStreamAttributeCopier.copyXmlNamespaceDeclarationsIntoContext(reader, context);
            Map<String, String> xmlnsAttributeToUriMappings = getXmlnsAttributeToUriMappingsFromContext(context);
            Map<String, String> prefixToUriMappings = getPrefixToUriMappingsFromXmlnsAttributes(xmlnsAttributeToUriMappings);
            StringWriter writer = new StringWriter();
            XStreamAttributeCopier.copyXml(reader, writer, xmlnsAttributeToUriMappings);
            DeleteType deleteType = getElementFromXml(writer.toString(), DeleteType.class);
            cswTransactionRequest.getDeleteActions().add(new DeleteActionImpl(deleteType, prefixToUriMappings));
        } else if (reader.getNodeName().contains("Update")) {
            XStreamAttributeCopier.copyXmlNamespaceDeclarationsIntoContext(reader, context);
            UpdateAction updateAction = parseUpdateAction(reader, context);
            cswTransactionRequest.getUpdateActions().add(updateAction);
        }
        reader.moveUp();
    }
    return cswTransactionRequest;
}
Also used : Metacard(ddf.catalog.data.Metacard) InsertActionImpl(org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.InsertActionImpl) StringWriter(java.io.StringWriter) UpdateAction(org.codice.ddf.spatial.ogc.csw.catalog.actions.UpdateAction) CswTransactionRequest(org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.CswTransactionRequest) ArrayList(java.util.ArrayList) DeleteType(net.opengis.cat.csw.v_2_0_2.DeleteType) DeleteActionImpl(org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.DeleteActionImpl) DefaultCswRecordMap(org.codice.ddf.spatial.ogc.csw.catalog.common.converter.DefaultCswRecordMap) HashMap(java.util.HashMap) Map(java.util.Map) MetacardImpl(ddf.catalog.data.impl.MetacardImpl)

Aggregations

CswTransactionRequest (org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.CswTransactionRequest)6 InsertActionImpl (org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.InsertActionImpl)6 MetacardImpl (ddf.catalog.data.impl.MetacardImpl)5 Test (org.junit.Test)4 TransactionResponseType (net.opengis.cat.csw.v_2_0_2.TransactionResponseType)3 Metacard (ddf.catalog.data.Metacard)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 DeleteType (net.opengis.cat.csw.v_2_0_2.DeleteType)2 TransactionSummaryType (net.opengis.cat.csw.v_2_0_2.TransactionSummaryType)2 InsertAction (org.codice.ddf.spatial.ogc.csw.catalog.actions.InsertAction)2 UpdateAction (org.codice.ddf.spatial.ogc.csw.catalog.actions.UpdateAction)2 DeleteActionImpl (org.codice.ddf.spatial.ogc.csw.catalog.common.transaction.DeleteActionImpl)2 Diff (org.custommonkey.xmlunit.Diff)2 ProcessingDetails (ddf.catalog.operation.ProcessingDetails)1 CreateResponseImpl (ddf.catalog.operation.impl.CreateResponseImpl)1 ProcessingDetailsImpl (ddf.catalog.operation.impl.ProcessingDetailsImpl)1 IngestException (ddf.catalog.source.IngestException)1 UnsupportedQueryException (ddf.catalog.source.UnsupportedQueryException)1 Subject (ddf.security.Subject)1