@Override
public void removeEntity(String entityName) {
if (entityName == null || entityName.length() == 0) {
throw new IllegalArgumentException(LITERAL_ENTITY_NAME);
}
DBObject query = new BasicDBObject(LITERAL_NAME, entityName).
append(LITERAL_VERSION, new BasicDBObject("$exists", 1)).
append(LITERAL_STATUS_VALUE, new BasicDBObject("$ne", MetadataParser.toString(MetadataStatus.DISABLED)));
LOGGER.debug("Checking if there are entity versions that are not disabled: {}", query);
DBObject result = new FindOneCommand(collection, query).execute();
if (result != null) {
LOGGER.debug("There is at least one enabled version {}", result);
throw Error.get(MongoMetadataConstants.ERR_CANNOT_DELETE, entityName);
}
LOGGER.warn("All versions of {} are disabled, deleting {}", entityName, entityName);
query = new BasicDBObject(LITERAL_ID, Pattern.compile(entityName + "\\" + BSONParser.DELIMITER_ID + ".*"));
LOGGER.debug("Removal query:{}", query);
try {
WriteResult r = new RemoveCommand(collection, query).execute();
LOGGER.debug("Removal result:{}", r);
String error = r.getError();
if (error != null) {
throw Error.get(MongoMetadataConstants.ERR_DB_ERROR, error);
}
} catch (Exception e) {
LOGGER.error("Error during delete", e);
throw Error.get(MongoMetadataConstants.ERR_DB_ERROR, e.toString());
}
}