Search in sources :

Example 1 with DeleteRequestImpl

use of ddf.catalog.operation.impl.DeleteRequestImpl in project ddf by codice.

the class TestMetacardGroomerPlugin method testDelete.

@Test
public void testDelete() throws PluginExecutionException, StopProcessingException, ParseException {
    DeleteRequest inputRequest = new DeleteRequestImpl(SAMPLE_ID);
    DeleteRequest returnedRequest = plugin.process(inputRequest);
    assertNotNull(returnedRequest);
    assertThat(returnedRequest, equalTo(inputRequest));
}
Also used : DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) DeleteRequest(ddf.catalog.operation.DeleteRequest) Test(org.junit.Test)

Example 2 with DeleteRequestImpl

use of ddf.catalog.operation.impl.DeleteRequestImpl in project ddf by codice.

the class SolrProviderTest method testDeleteNoList.

@Test
public void testDeleteNoList() throws IngestException, UnsupportedQueryException {
    /* EMPTY */
    DeleteRequestImpl deleteRequest = new DeleteRequestImpl(new String[0]);
    DeleteResponse results = provider.delete(deleteRequest);
    assertNotNull(results.getDeletedMetacards());
    assertEquals(0, results.getDeletedMetacards().size());
    assertEquals(deleteRequest, results.getRequest());
    /* EMPTY */
    DeleteRequestImpl emptyDeleteRequest = new DeleteRequestImpl(new ArrayList<Serializable>(), DeleteRequest.DELETE_BY_ID, null);
    results = provider.delete(emptyDeleteRequest);
    assertNotNull(results.getDeletedMetacards());
    assertEquals(0, results.getDeletedMetacards().size());
    assertEquals(emptyDeleteRequest, results.getRequest());
    /* NULL */
    DeleteRequest nullDeleteRequest = new DeleteRequestImpl(null, DeleteRequest.DELETE_BY_ID, null);
    results = provider.delete(nullDeleteRequest);
    assertNotNull(results.getDeletedMetacards());
    assertEquals(0, results.getDeletedMetacards().size());
    assertEquals(nullDeleteRequest, results.getRequest());
}
Also used : Serializable(java.io.Serializable) DeleteResponse(ddf.catalog.operation.DeleteResponse) DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) DeleteRequest(ddf.catalog.operation.DeleteRequest) Test(org.junit.Test)

Example 3 with DeleteRequestImpl

use of ddf.catalog.operation.impl.DeleteRequestImpl in project ddf by codice.

the class RegistryStoreImpl method delete.

@Override
public DeleteResponse delete(DeleteRequest request) throws IngestException {
    List<String> ids = ((OperationTransaction) request.getPropertyValue(Constants.OPERATION_TRANSACTION_KEY)).getPreviousStateMetacards().stream().map(Metacard::getId).collect(Collectors.toList());
    DeleteRequest newRequest = new DeleteRequestImpl(ids.toArray(new String[ids.size()]), request.getProperties());
    return super.delete(newRequest);
}
Also used : DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) DeleteRequest(ddf.catalog.operation.DeleteRequest)

Example 4 with DeleteRequestImpl

use of ddf.catalog.operation.impl.DeleteRequestImpl in project ddf by codice.

the class RESTEndpoint method deleteDocument.

/**
     * REST Delete. Deletes a record from the catalog.
     *
     * @param id
     * @return
     */
@DELETE
@Path("/{id}")
public Response deleteDocument(@PathParam("id") String id, @Context HttpServletRequest httpRequest) {
    LOGGER.debug("DELETE");
    Response response;
    try {
        if (id != null) {
            DeleteRequestImpl deleteReq = new DeleteRequestImpl(id);
            catalogFramework.delete(deleteReq);
            response = Response.ok(id).build();
            LOGGER.debug("Attempting to delete Metacard with id: {}", id);
        } else {
            String errorMessage = "ID of entry not specified, cannot do DELETE.";
            LOGGER.info(errorMessage);
            throw new ServerErrorException(errorMessage, Status.BAD_REQUEST);
        }
    } catch (SourceUnavailableException ce) {
        String exceptionMessage = "Could not delete entry from catalog since the source is unavailable: ";
        LOGGER.info(exceptionMessage, ce);
        throw new ServerErrorException(exceptionMessage, Status.INTERNAL_SERVER_ERROR);
    } catch (InternalIngestException e) {
        String exceptionMessage = "Error deleting entry from catalog: ";
        LOGGER.info(exceptionMessage, e);
        throw new ServerErrorException(exceptionMessage, Status.INTERNAL_SERVER_ERROR);
    } catch (IngestException e) {
        String exceptionMessage = "Error deleting entry from catalog: ";
        LOGGER.info(exceptionMessage, e);
        throw new ServerErrorException(exceptionMessage, Status.BAD_REQUEST);
    }
    return response;
}
Also used : SourceInfoResponse(ddf.catalog.operation.SourceInfoResponse) QueryResponse(ddf.catalog.operation.QueryResponse) Response(javax.ws.rs.core.Response) CreateResponse(ddf.catalog.operation.CreateResponse) SourceUnavailableException(ddf.catalog.source.SourceUnavailableException) InternalIngestException(ddf.catalog.source.InternalIngestException) DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) IngestException(ddf.catalog.source.IngestException) InternalIngestException(ddf.catalog.source.InternalIngestException) Path(javax.ws.rs.Path) DELETE(javax.ws.rs.DELETE)

Example 5 with DeleteRequestImpl

use of ddf.catalog.operation.impl.DeleteRequestImpl in project ddf by codice.

the class MetacardApplication method init.

@Override
public void init() {
    get("/metacardtype", (req, res) -> {
        return util.getJson(util.getMetacardTypeMap());
    });
    get("/metacard/:id", (req, res) -> {
        String id = req.params(":id");
        return util.metacardToJson(id);
    });
    get("/metacard/:id/attribute/validation", (req, res) -> {
        String id = req.params(":id");
        return util.getJson(validator.getValidation(util.getMetacard(id)));
    });
    get("/metacard/:id/validation", (req, res) -> {
        String id = req.params(":id");
        return util.getJson(validator.getFullValidation(util.getMetacard(id)));
    });
    post("/metacards", APPLICATION_JSON, (req, res) -> {
        List<String> ids = JsonFactory.create().parser().parseList(String.class, req.body());
        List<Metacard> metacards = util.getMetacards(ids, "*").entrySet().stream().map(Map.Entry::getValue).map(Result::getMetacard).collect(Collectors.toList());
        return util.metacardsToJson(metacards);
    });
    delete("/metacards", APPLICATION_JSON, (req, res) -> {
        List<String> ids = JsonFactory.create().parser().parseList(String.class, req.body());
        DeleteResponse deleteResponse = catalogFramework.delete(new DeleteRequestImpl(new ArrayList<>(ids), Metacard.ID, null));
        if (deleteResponse.getProcessingErrors() != null && !deleteResponse.getProcessingErrors().isEmpty()) {
            res.status(500);
            return ImmutableMap.of("message", "Unable to archive metacards.");
        }
        return ImmutableMap.of("message", "Successfully archived metacards.");
    }, util::getJson);
    patch("/metacards", APPLICATION_JSON, (req, res) -> {
        List<MetacardChanges> metacardChanges = JsonFactory.createUseJSONDates().parser().parseList(MetacardChanges.class, req.body());
        UpdateResponse updateResponse = patchMetacards(metacardChanges);
        if (updateResponse.getProcessingErrors() != null && !updateResponse.getProcessingErrors().isEmpty()) {
            res.status(500);
            return updateResponse.getProcessingErrors();
        }
        return req.body();
    });
    put("/validate/attribute/:attribute", TEXT_PLAIN, (req, res) -> {
        String attribute = req.params(":attribute");
        String value = req.body();
        return util.getJson(validator.validateAttribute(attribute, value));
    });
    get("/history/:id", (req, res) -> {
        String id = req.params(":id");
        List<Result> queryResponse = getMetacardHistory(id);
        if (queryResponse.isEmpty()) {
            res.status(204);
            return "[]";
        }
        List<HistoryResponse> response = queryResponse.stream().map(Result::getMetacard).map(mc -> new HistoryResponse(mc.getId(), (String) mc.getAttribute(MetacardVersion.EDITED_BY).getValue(), (Date) mc.getAttribute(MetacardVersion.VERSIONED_ON).getValue())).sorted(Comparator.comparing(HistoryResponse::getVersioned)).collect(Collectors.toList());
        return util.getJson(response);
    });
    get("/history/revert/:id/:revertid", (req, res) -> {
        String id = req.params(":id");
        String revertId = req.params(":revertid");
        Metacard versionMetacard = util.getMetacard(revertId);
        List<Result> queryResponse = getMetacardHistory(id);
        if (queryResponse == null || queryResponse.isEmpty()) {
            throw new NotFoundException("Could not find metacard with id: " + id);
        }
        Optional<Metacard> contentVersion = queryResponse.stream().map(Result::getMetacard).filter(mc -> getVersionedOnDate(mc).isAfter(getVersionedOnDate(versionMetacard)) || getVersionedOnDate(mc).equals(getVersionedOnDate(versionMetacard))).filter(mc -> CONTENT_ACTIONS.contains(Action.ofMetacard(mc))).filter(mc -> mc.getResourceURI() != null).filter(mc -> ContentItem.CONTENT_SCHEME.equals(mc.getResourceURI().getScheme())).sorted(Comparator.comparing((Metacard mc) -> util.parseToDate(mc.getAttribute(MetacardVersion.VERSIONED_ON).getValue()))).findFirst();
        if (!contentVersion.isPresent()) {
            /* no content versions, just restore metacard */
            revertMetacard(versionMetacard, id, false);
        } else {
            revertContentandMetacard(contentVersion.get(), versionMetacard, id);
        }
        return util.metacardToJson(MetacardVersionImpl.toMetacard(versionMetacard, types));
    });
    get("/associations/:id", (req, res) -> {
        String id = req.params(":id");
        return util.getJson(associated.getAssociations(id));
    });
    put("/associations/:id", (req, res) -> {
        String id = req.params(":id");
        List<Associated.Edge> edges = JsonFactory.create().parser().parseList(Associated.Edge.class, req.body());
        associated.putAssociations(id, edges);
        return req.body();
    });
    post("/subscribe/:id", (req, res) -> {
        String email = getSubjectEmail();
        if (isEmpty(email)) {
            throw new NotFoundException("Login to subscribe to workspace.");
        }
        String id = req.params(":id");
        subscriptions.addEmail(id, email);
        return ImmutableMap.of("message", String.format("Successfully subscribed to id = %s.", id));
    }, util::getJson);
    post("/unsubscribe/:id", (req, res) -> {
        String email = getSubjectEmail();
        if (isEmpty(email)) {
            throw new NotFoundException("Login to un-subscribe from workspace.");
        }
        String id = req.params(":id");
        subscriptions.removeEmail(id, email);
        return ImmutableMap.of("message", String.format("Successfully un-subscribed to id = %s.", id));
    }, util::getJson);
    get("/workspaces/:id", (req, res) -> {
        String id = req.params(":id");
        String email = getSubjectEmail();
        Metacard metacard = util.getMetacard(id);
        // NOTE: the isEmpty is to guard against users with no email (such as guest).
        boolean isSubscribed = !isEmpty(email) && subscriptions.getEmails(metacard.getId()).contains(email);
        return ImmutableMap.builder().putAll(transformer.transform(metacard)).put("subscribed", isSubscribed).build();
    }, util::getJson);
    get("/workspaces", (req, res) -> {
        String email = getSubjectEmail();
        Map<String, Result> workspaceMetacards = util.getMetacardsByFilter(WorkspaceAttributes.WORKSPACE_TAG);
        // NOTE: the isEmpty is to guard against users with no email (such as guest).
        Set<String> ids = isEmpty(email) ? Collections.emptySet() : subscriptions.getSubscriptions(email);
        return workspaceMetacards.entrySet().stream().map(Map.Entry::getValue).map(Result::getMetacard).map(metacard -> {
            boolean isSubscribed = ids.contains(metacard.getId());
            try {
                return ImmutableMap.builder().putAll(transformer.transform(metacard)).put("subscribed", isSubscribed).build();
            } catch (RuntimeException e) {
                LOGGER.debug("Could not transform metacard. WARNING: This indicates there is invalid data in the system. Metacard title: '{}', id:'{}'", metacard.getTitle(), metacard.getId(), e);
            }
            return null;
        }).filter(Objects::nonNull).collect(Collectors.toList());
    }, util::getJson);
    post("/workspaces", APPLICATION_JSON, (req, res) -> {
        Map<String, Object> incoming = JsonFactory.create().parser().parseMap(req.body());
        Metacard saved = saveMetacard(transformer.transform(incoming));
        Map<String, Object> response = transformer.transform(saved);
        res.status(201);
        return util.getJson(response);
    });
    put("/workspaces/:id", APPLICATION_JSON, (req, res) -> {
        String id = req.params(":id");
        Map<String, Object> workspace = JsonFactory.create().parser().parseMap(req.body());
        Metacard metacard = transformer.transform(workspace);
        metacard.setAttribute(new AttributeImpl(Metacard.ID, id));
        Metacard updated = updateMetacard(id, metacard);
        return util.getJson(transformer.transform(updated));
    });
    delete("/workspaces/:id", APPLICATION_JSON, (req, res) -> {
        String id = req.params(":id");
        catalogFramework.delete(new DeleteRequestImpl(id));
        return ImmutableMap.of("message", "Successfully deleted.");
    }, util::getJson);
    get("/enumerations/metacardtype/:type", APPLICATION_JSON, (req, res) -> {
        return util.getJson(enumExtractor.getEnumerations(req.params(":type")));
    });
    get("/enumerations/attribute/:attribute", APPLICATION_JSON, (req, res) -> {
        return util.getJson(enumExtractor.getAttributeEnumerations(req.params(":attribute")));
    });
    get("/localcatalogid", (req, res) -> {
        return String.format("{\"%s\":\"%s\"}", "local-catalog-id", catalogFramework.getId());
    });
    after((req, res) -> {
        res.type(APPLICATION_JSON);
    });
    exception(IngestException.class, (ex, req, res) -> {
        res.status(404);
        res.header(CONTENT_TYPE, APPLICATION_JSON);
        LOGGER.debug("Failed to ingest metacard", ex);
        res.body(util.getJson(ImmutableMap.of("message", UPDATE_ERROR_MESSAGE)));
    });
    exception(NotFoundException.class, (ex, req, res) -> {
        res.status(404);
        res.header(CONTENT_TYPE, APPLICATION_JSON);
        LOGGER.debug("Failed to find metacard.", ex);
        res.body(util.getJson(ImmutableMap.of("message", ex.getMessage())));
    });
    exception(NumberFormatException.class, (ex, req, res) -> {
        res.status(400);
        res.header(CONTENT_TYPE, APPLICATION_JSON);
        res.body(util.getJson(ImmutableMap.of("message", "Invalid values for numbers")));
    });
    exception(RuntimeException.class, (ex, req, res) -> {
        LOGGER.debug("Exception occured.", ex);
        res.status(404);
        res.header(CONTENT_TYPE, APPLICATION_JSON);
        res.body(util.getJson(ImmutableMap.of("message", "Could not find what you were looking for")));
    });
}
Also used : CONTENT_TYPE(javax.ws.rs.core.HttpHeaders.CONTENT_TYPE) Spark.delete(spark.Spark.delete) Spark.patch(spark.Spark.patch) Date(java.util.Date) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) UnsupportedQueryException(ddf.catalog.source.UnsupportedQueryException) Spark.exception(spark.Spark.exception) LoggerFactory(org.slf4j.LoggerFactory) UpdateStorageRequestImpl(ddf.catalog.content.operation.impl.UpdateStorageRequestImpl) SparkApplication(spark.servlet.SparkApplication) AttributeType(ddf.catalog.data.AttributeType) ExperimentalEnumerationExtractor(org.codice.ddf.catalog.ui.metacard.enumerations.ExperimentalEnumerationExtractor) MetacardVersion(ddf.catalog.core.versioning.MetacardVersion) HistoryResponse(org.codice.ddf.catalog.ui.metacard.history.HistoryResponse) Map(java.util.Map) Action(ddf.catalog.core.versioning.MetacardVersion.Action) DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) Spark.put(spark.Spark.put) SubjectUtils(ddf.security.SubjectUtils) APPLICATION_JSON(javax.ws.rs.core.MediaType.APPLICATION_JSON) MetacardVersionImpl(ddf.catalog.core.versioning.impl.MetacardVersionImpl) ImmutableSet(com.google.common.collect.ImmutableSet) AttributeDescriptor(ddf.catalog.data.AttributeDescriptor) StringUtils.isEmpty(org.apache.commons.lang.StringUtils.isEmpty) ImmutableMap(com.google.common.collect.ImmutableMap) WorkspaceAttributes(org.codice.ddf.catalog.ui.metacard.workspace.WorkspaceAttributes) ResourceRequestById(ddf.catalog.operation.impl.ResourceRequestById) Spark.after(spark.Spark.after) DeletedMetacard(ddf.catalog.core.versioning.DeletedMetacard) Set(java.util.Set) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) NotFoundException(javax.ws.rs.NotFoundException) MetacardType(ddf.catalog.data.MetacardType) Serializable(java.io.Serializable) ResourceNotFoundException(ddf.catalog.resource.ResourceNotFoundException) Objects(java.util.Objects) QueryResponse(ddf.catalog.operation.QueryResponse) List(java.util.List) Validator(org.codice.ddf.catalog.ui.metacard.validation.Validator) SubscriptionsPersistentStore(org.codice.ddf.catalog.ui.query.monitor.api.SubscriptionsPersistentStore) Optional(java.util.Optional) MetacardChanges(org.codice.ddf.catalog.ui.metacard.edit.MetacardChanges) UpdateResponse(ddf.catalog.operation.UpdateResponse) TEXT_PLAIN(javax.ws.rs.core.MediaType.TEXT_PLAIN) SecurityUtils(org.apache.shiro.SecurityUtils) ResourceResponse(ddf.catalog.operation.ResourceResponse) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) Spark.get(spark.Spark.get) ContentItemImpl(ddf.catalog.content.data.impl.ContentItemImpl) FilterBuilder(ddf.catalog.filter.FilterBuilder) SourceUnavailableException(ddf.catalog.source.SourceUnavailableException) CatalogFramework(ddf.catalog.CatalogFramework) AttributeImpl(ddf.catalog.data.impl.AttributeImpl) Spark.post(spark.Spark.post) HashMap(java.util.HashMap) Callable(java.util.concurrent.Callable) DeleteResponse(ddf.catalog.operation.DeleteResponse) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) SortBy(org.opengis.filter.sort.SortBy) EndpointUtil(org.codice.ddf.catalog.ui.util.EndpointUtil) ContentItem(ddf.catalog.content.data.ContentItem) Metacard(ddf.catalog.data.Metacard) AttributeChange(org.codice.ddf.catalog.ui.metacard.edit.AttributeChange) ByteSource(com.google.common.io.ByteSource) Result(ddf.catalog.data.Result) WorkspaceTransformer(org.codice.ddf.catalog.ui.metacard.workspace.WorkspaceTransformer) Associated(org.codice.ddf.catalog.ui.metacard.associations.Associated) CreateRequestImpl(ddf.catalog.operation.impl.CreateRequestImpl) CreateStorageRequestImpl(ddf.catalog.content.operation.impl.CreateStorageRequestImpl) QueryImpl(ddf.catalog.operation.impl.QueryImpl) Logger(org.slf4j.Logger) Security(org.codice.ddf.security.common.Security) JsonFactory(org.boon.json.JsonFactory) IngestException(ddf.catalog.source.IngestException) IOException(java.io.IOException) Subject(ddf.security.Subject) FederationException(ddf.catalog.federation.FederationException) TimeUnit(java.util.concurrent.TimeUnit) ResourceNotSupportedException(ddf.catalog.resource.ResourceNotSupportedException) ExecutionException(org.apache.shiro.subject.ExecutionException) Filter(org.opengis.filter.Filter) Comparator(java.util.Comparator) Collections(java.util.Collections) InputStream(java.io.InputStream) HistoryResponse(org.codice.ddf.catalog.ui.metacard.history.HistoryResponse) AttributeImpl(ddf.catalog.data.impl.AttributeImpl) ArrayList(java.util.ArrayList) NotFoundException(javax.ws.rs.NotFoundException) ResourceNotFoundException(ddf.catalog.resource.ResourceNotFoundException) Result(ddf.catalog.data.Result) UpdateResponse(ddf.catalog.operation.UpdateResponse) Associated(org.codice.ddf.catalog.ui.metacard.associations.Associated) DeleteRequestImpl(ddf.catalog.operation.impl.DeleteRequestImpl) MetacardChanges(org.codice.ddf.catalog.ui.metacard.edit.MetacardChanges) Date(java.util.Date) DeletedMetacard(ddf.catalog.core.versioning.DeletedMetacard) Metacard(ddf.catalog.data.Metacard) DeleteResponse(ddf.catalog.operation.DeleteResponse)

Aggregations

DeleteRequestImpl (ddf.catalog.operation.impl.DeleteRequestImpl)40 DeleteRequest (ddf.catalog.operation.DeleteRequest)24 Test (org.junit.Test)21 DeleteResponse (ddf.catalog.operation.DeleteResponse)20 Metacard (ddf.catalog.data.Metacard)17 ArrayList (java.util.ArrayList)17 QueryRequestImpl (ddf.catalog.operation.impl.QueryRequestImpl)10 HashMap (java.util.HashMap)10 CatalogFramework (ddf.catalog.CatalogFramework)9 IngestException (ddf.catalog.source.IngestException)9 QueryImpl (ddf.catalog.operation.impl.QueryImpl)8 SourceUnavailableException (ddf.catalog.source.SourceUnavailableException)8 Serializable (java.io.Serializable)8 Result (ddf.catalog.data.Result)7 CreateRequestImpl (ddf.catalog.operation.impl.CreateRequestImpl)7 QueryResponse (ddf.catalog.operation.QueryResponse)6 DeleteResponseImpl (ddf.catalog.operation.impl.DeleteResponseImpl)6 List (java.util.List)6 Filter (org.opengis.filter.Filter)6 ContentType (ddf.catalog.data.ContentType)5