DATADOC-270 - Removed critical Sonar warnings from codebase.

This commit is contained in:
Oliver Gierke
2011-09-14 15:34:29 +02:00
parent 5dab0c721e
commit 73b2d5a99c
7 changed files with 143 additions and 143 deletions

View File

@@ -2,10 +2,6 @@ package org.springframework.data.persistence.document.mongodb;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoException;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
@@ -18,152 +14,157 @@ import org.springframework.data.persistence.ChangeSetBacked;
import org.springframework.data.persistence.ChangeSetPersister; import org.springframework.data.persistence.ChangeSetPersister;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoException;
public class MongoChangeSetPersister implements ChangeSetPersister<Object> { public class MongoChangeSetPersister implements ChangeSetPersister<Object> {
private static final String ENTITY_CLASS = "_entity_class"; private static final String ENTITY_CLASS = "_entity_class";
private static final String ENTITY_ID = "_entity_id"; private static final String ENTITY_ID = "_entity_id";
private static final String ENTITY_FIELD_NAME = "_entity_field_name"; private static final String ENTITY_FIELD_NAME = "_entity_field_name";
private static final String ENTITY_FIELD_CLASS = "_entity_field_class"; private static final String ENTITY_FIELD_CLASS = "_entity_field_class";
protected final Log log = LogFactory.getLog(getClass()); protected final Log log = LogFactory.getLog(getClass());
private MongoTemplate mongoTemplate; private MongoTemplate mongoTemplate;
private EntityManagerFactory entityManagerFactory; private EntityManagerFactory entityManagerFactory;
public void setMongoTemplate(MongoTemplate mongoTemplate) { public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate; this.mongoTemplate = mongoTemplate;
} }
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory; this.entityManagerFactory = entityManagerFactory;
} }
public void getPersistentState(Class<? extends ChangeSetBacked> entityClass, public void getPersistentState(Class<? extends ChangeSetBacked> entityClass,
Object id, final ChangeSet changeSet) Object id, final ChangeSet changeSet)
throws DataAccessException, NotFoundException { throws DataAccessException, NotFoundException {
if (id == null) {
log.debug("Unable to load MongoDB data for null id");
return;
}
String collName = getCollectionNameForEntity(entityClass);
final DBObject dbk = new BasicDBObject(); if (id == null) {
dbk.put(ENTITY_ID, id); log.debug("Unable to load MongoDB data for null id");
dbk.put(ENTITY_CLASS, entityClass.getName()); return;
if (log.isDebugEnabled()) { }
log.debug("Loading MongoDB data for " + dbk);
}
mongoTemplate.execute(collName, new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
for (DBObject dbo : collection.find(dbk)) {
String key = (String) dbo.get(ENTITY_FIELD_NAME);
if (log.isDebugEnabled()) {
log.debug("Processing key: " + key);
}
if (!changeSet.getValues().containsKey(key)) {
String className = (String) dbo.get(ENTITY_FIELD_CLASS);
if (className == null) {
throw new DataIntegrityViolationException(
"Unble to convert property " + key
+ ": Invalid metadata, " + ENTITY_FIELD_CLASS + " not available");
}
Class<?> clazz = ClassUtils.resolveClassName(className, ClassUtils.getDefaultClassLoader());
Object value = mongoTemplate.getConverter().read(clazz, dbo);
if (log.isDebugEnabled()) {
log.debug("Adding to ChangeSet: " + key);
}
changeSet.set(key, value);
}
}
return null;
}
});
}
public Object getPersistentId(ChangeSetBacked entity, ChangeSet cs) throws DataAccessException { String collName = getCollectionNameForEntity(entityClass);
log.debug("getPersistentId called on " + entity);
if (entityManagerFactory == null) {
throw new DataAccessResourceFailureException("EntityManagerFactory cannot be null");
}
Object o = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);
return o;
}
public Object persistState(ChangeSetBacked entity, ChangeSet cs) throws DataAccessException { final DBObject dbk = new BasicDBObject();
if (cs == null) { dbk.put(ENTITY_ID, id);
log.debug("Flush: changeset was null, nothing to flush."); dbk.put(ENTITY_CLASS, entityClass.getName());
return 0L; if (log.isDebugEnabled()) {
} log.debug("Loading MongoDB data for " + dbk);
}
if (log.isDebugEnabled()) { mongoTemplate.execute(collName, new CollectionCallback<Object>() {
log.debug("Flush: changeset: " + cs.getValues()); public Object doInCollection(DBCollection collection)
} throws MongoException, DataAccessException {
for (DBObject dbo : collection.find(dbk)) {
String key = (String) dbo.get(ENTITY_FIELD_NAME);
if (log.isDebugEnabled()) {
log.debug("Processing key: " + key);
}
if (!changeSet.getValues().containsKey(key)) {
String className = (String) dbo.get(ENTITY_FIELD_CLASS);
if (className == null) {
throw new DataIntegrityViolationException(
"Unble to convert property " + key
+ ": Invalid metadata, " + ENTITY_FIELD_CLASS + " not available");
}
Class<?> clazz = ClassUtils.resolveClassName(className, ClassUtils.getDefaultClassLoader());
Object value = mongoTemplate.getConverter().read(clazz, dbo);
if (log.isDebugEnabled()) {
log.debug("Adding to ChangeSet: " + key);
}
changeSet.set(key, value);
}
}
return null;
}
});
}
String collName = getCollectionNameForEntity(entity.getClass()); public Object getPersistentId(ChangeSetBacked entity, ChangeSet cs) throws DataAccessException {
DBCollection dbc = mongoTemplate.getCollection(collName); log.debug("getPersistentId called on " + entity);
if (dbc == null) { if (entityManagerFactory == null) {
dbc = mongoTemplate.createCollection(collName); throw new DataAccessResourceFailureException("EntityManagerFactory cannot be null");
} }
for (String key : cs.getValues().keySet()) { Object o = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);
if (key != null && !key.startsWith("_") && !key.equals(ChangeSetPersister.ID_KEY)) { return o;
Object value = cs.getValues().get(key); }
final DBObject dbQuery = new BasicDBObject();
dbQuery.put(ENTITY_ID, getPersistentId(entity, cs));
dbQuery.put(ENTITY_CLASS, entity.getClass().getName());
dbQuery.put(ENTITY_FIELD_NAME, key);
DBObject dbId = mongoTemplate.execute(collName,
new CollectionCallback<DBObject>() {
public DBObject doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
return collection.findOne(dbQuery);
}
});
if (value == null) {
if (log.isDebugEnabled()) {
log.debug("Flush: removing: " + dbQuery);
}
mongoTemplate.execute(collName, new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
collection.remove(dbQuery);
return null;
}
});
}
else {
final DBObject dbDoc = new BasicDBObject();
dbDoc.putAll(dbQuery);
if (log.isDebugEnabled()) {
log.debug("Flush: saving: " + dbQuery);
}
mongoTemplate.getConverter().write(value, dbDoc);
dbDoc.put(ENTITY_FIELD_CLASS, value.getClass().getName());
if (dbId != null) {
dbDoc.put("_id", dbId.get("_id"));
}
mongoTemplate.execute(collName, new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
collection.save(dbDoc);
return null;
}
});
}
}
}
return 0L;
}
private String getCollectionNameForEntity(Class<? extends ChangeSetBacked> entityClass) { public Object persistState(ChangeSetBacked entity, ChangeSet cs) throws DataAccessException {
return ClassUtils.getQualifiedName(entityClass); if (cs == null) {
} log.debug("Flush: changeset was null, nothing to flush.");
return 0L;
}
if (log.isDebugEnabled()) {
log.debug("Flush: changeset: " + cs.getValues());
}
String collName = getCollectionNameForEntity(entity.getClass());
if (mongoTemplate.getCollection(collName) == null) {
mongoTemplate.createCollection(collName);
}
for (String key : cs.getValues().keySet()) {
if (key != null && !key.startsWith("_") && !key.equals(ChangeSetPersister.ID_KEY)) {
Object value = cs.getValues().get(key);
final DBObject dbQuery = new BasicDBObject();
dbQuery.put(ENTITY_ID, getPersistentId(entity, cs));
dbQuery.put(ENTITY_CLASS, entity.getClass().getName());
dbQuery.put(ENTITY_FIELD_NAME, key);
DBObject dbId = mongoTemplate.execute(collName,
new CollectionCallback<DBObject>() {
public DBObject doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
return collection.findOne(dbQuery);
}
});
if (value == null) {
if (log.isDebugEnabled()) {
log.debug("Flush: removing: " + dbQuery);
}
mongoTemplate.execute(collName, new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
collection.remove(dbQuery);
return null;
}
});
}
else {
final DBObject dbDoc = new BasicDBObject();
dbDoc.putAll(dbQuery);
if (log.isDebugEnabled()) {
log.debug("Flush: saving: " + dbQuery);
}
mongoTemplate.getConverter().write(value, dbDoc);
dbDoc.put(ENTITY_FIELD_CLASS, value.getClass().getName());
if (dbId != null) {
dbDoc.put("_id", dbId.get("_id"));
}
mongoTemplate.execute(collName, new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection)
throws MongoException, DataAccessException {
collection.save(dbDoc);
return null;
}
});
}
}
}
return 0L;
}
private String getCollectionNameForEntity(Class<? extends ChangeSetBacked> entityClass) {
return ClassUtils.getQualifiedName(entityClass);
}
} }

View File

@@ -35,10 +35,10 @@ public class CannotGetMongoDbConnectionException extends DataAccessResourceFailu
super(msg); super(msg);
} }
public CannotGetMongoDbConnectionException(String msg, String database, String username, char[] password2) { public CannotGetMongoDbConnectionException(String msg, String database, String username, char[] password) {
super(msg); super(msg);
this.username = username; this.username = username;
this.password = password2; this.password = password == null ? null : password.clone();
this.database = database; this.database = database;
} }

View File

@@ -866,7 +866,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
} else { } else {
commandResult = executeCommand(commandObject); commandResult = executeCommand(commandObject);
} }
commandResult.throwOnError(); commandResult.throwOnError();
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
this.potentiallyConvertRuntimeException(ex); this.potentiallyConvertRuntimeException(ex);
} }
@@ -1277,7 +1277,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
if (entityClass == null) { if (entityClass == null) {
throw new InvalidDataAccessApiUsageException( throw new InvalidDataAccessApiUsageException(
"No class parameter provided, entity collection can't be determined for " + entityClass); "No class parameter provided, entity collection can't be determined!");
} }
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(entityClass); MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(entityClass);

View File

@@ -100,9 +100,8 @@ public class QueryMapper {
newConditions.add(getMappedObject((DBObject) iter.next(), entity)); newConditions.add(getMappedObject((DBObject) iter.next(), entity));
} }
value = newConditions; value = newConditions;
} else {
// TODO: Implement other forms of conversion (like @Alias and whatnot)
} }
newDbo.put(newKey, value); newDbo.put(newKey, value);
} }
return newDbo; return newDbo;

View File

@@ -200,7 +200,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App
spelCtx.setBeanResolver(new BeanFactoryResolver(applicationContext)); spelCtx.setBeanResolver(new BeanFactoryResolver(applicationContext));
} }
if (!(dbo instanceof BasicDBList)) { if (!(dbo instanceof BasicDBList)) {
String[] keySet = dbo.keySet().toArray(new String[] {}); String[] keySet = dbo.keySet().toArray(new String[dbo.keySet().size()]);
for (String key : keySet) { for (String key : keySet) {
spelCtx.setVariable(key, dbo.get(key)); spelCtx.setVariable(key, dbo.get(key));
} }

View File

@@ -51,6 +51,6 @@ public class Circle {
@Override @Override
public String toString() { public String toString() {
return String.format("Circle [center=%s, radius=%d]", center, radius); return String.format("Circle [center=%s, radius=%f]", center, radius);
} }
} }

View File

@@ -25,7 +25,7 @@ public class OrCriteria implements CriteriaDefinition {
public OrCriteria(Query[] queries) { public OrCriteria(Query[] queries) {
super(); super();
this.queries = queries; this.queries = queries == null ? null : queries.clone();
} }
/* /*