List of usage examples for org.springframework.data.crossstore ChangeSet getValues
Map<String, Object> getValues();
From source file:org.springframework.data.mongodb.crossstore.MongoChangeSetPersister.java
public void getPersistentState(Class<? extends ChangeSetBacked> entityClass, Object id, final ChangeSet changeSet) throws DataAccessException, NotFoundException { if (id == null) { log.debug("Unable to load MongoDB data for null id"); return;/*from w w w .j a va2s. co m*/ } String collName = getCollectionNameForEntity(entityClass); final DBObject dbk = new BasicDBObject(); dbk.put(ENTITY_ID, id); dbk.put(ENTITY_CLASS, entityClass.getName()); 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; } }); }
From source file:org.springframework.data.mongodb.crossstore.MongoChangeSetPersister.java
public Object persistState(ChangeSetBacked entity, ChangeSet cs) throws DataAccessException { if (cs == null) { log.debug("Flush: changeset was null, nothing to flush."); return 0L; }//from w w w . j a v a 2s. com 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; }