![JAR search and dependency download from the Maven repository](/logo.png)
com.redhat.lightblue.crud.mongo.IterateDeleter Maven / Gradle / Ivy
/*
Copyright 2013 Red Hat, Inc. and/or its affiliates.
This file is part of lightblue.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
package com.redhat.lightblue.crud.mongo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.BasicDBObject;
import com.mongodb.WriteResult;
import com.mongodb.WriteConcern;
import com.redhat.lightblue.interceptor.InterceptPoint;
import com.redhat.lightblue.crud.CRUDDeleteResponse;
import com.redhat.lightblue.crud.CRUDOperationContext;
import com.redhat.lightblue.crud.DocCtx;
import com.redhat.lightblue.crud.Operation;
import com.redhat.lightblue.mongo.hystrix.FindCommand;
import com.redhat.lightblue.mongo.hystrix.RemoveCommand;
/**
* Iterates the result set and deleted documents one by one
*/
public class IterateDeleter implements DocDeleter {
private static final Logger LOGGER = LoggerFactory.getLogger(IterateDeleter.class);
private final Translator translator;
public IterateDeleter(Translator translator) {
this.translator = translator;
}
@Override
public void delete(CRUDOperationContext ctx,
DBCollection collection,
DBObject mongoQuery,
CRUDDeleteResponse response) {
LOGGER.debug("Computing the result set for {}", mongoQuery);
DBCursor cursor = null;
int docIndex = 0;
int numDeleted = 0;
try {
// Find docs
cursor = new FindCommand(collection, mongoQuery, null).execute();
LOGGER.debug("Found {} documents", cursor.count());
// read-delet
while (cursor.hasNext()) {
DBObject document = cursor.next();
LOGGER.debug("Retrieved doc {}", docIndex);
Object id = document.get(MongoCRUDController.ID_STR);
DocCtx doc = ctx.addDocument(translator.toJson(document));
doc.setOriginalDocument(doc);
ctx.getFactory().getInterceptors().callInterceptors(InterceptPoint.PRE_CRUD_DELETE_DOC, ctx, doc);
WriteResult result = new RemoveCommand(collection, new BasicDBObject("_id", id), WriteConcern.SAFE).execute();
if (result.getN() == 1) {
numDeleted++;
doc.setOperationPerformed(Operation.DELETE);
}
ctx.getFactory().getInterceptors().callInterceptors(InterceptPoint.POST_CRUD_DELETE_DOC, ctx, doc);
docIndex++;
}
} finally {
if (cursor != null) {
cursor.close();
}
}
response.setNumDeleted(numDeleted);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy