Browse Source

completed the set of modifier operations for UpdateBuilder

pull/1/head
Thomas Risberg 15 years ago
parent
commit
61b0fbdad2
  1. 43
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/UpdateBuilder.java
  2. 74
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/UpdateBuilderTests.java

43
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/UpdateBuilder.java

@ -23,6 +23,10 @@ import com.mongodb.DBObject;
public class UpdateBuilder { public class UpdateBuilder {
public enum Position {
LAST, FIRST
}
private LinkedHashMap<String, Object> criteria = new LinkedHashMap<String, Object>(); private LinkedHashMap<String, Object> criteria = new LinkedHashMap<String, Object>();
public UpdateBuilder set(String key, Object value) { public UpdateBuilder set(String key, Object value) {
@ -40,6 +44,45 @@ public class UpdateBuilder {
return this; return this;
} }
public UpdateBuilder push(String key, Object value) {
criteria.put("$push", Collections.singletonMap(key, value));
return this;
}
public UpdateBuilder pushAll(String key, Object[] values) {
DBObject keyValue = new BasicDBObject();
keyValue.put(key, values);
criteria.put("$pushAll", keyValue);
return this;
}
public UpdateBuilder addToSet(String key, Object value) {
criteria.put("$addToSet", Collections.singletonMap(key, value));
return this;
}
public UpdateBuilder pop(String key, Position pos) {
criteria.put("$pop", Collections.singletonMap(key, (pos == Position.FIRST ? -1 : 1)));
return this;
}
public UpdateBuilder pull(String key, Object value) {
criteria.put("$pull", Collections.singletonMap(key, value));
return this;
}
public UpdateBuilder pullAll(String key, Object[] values) {
DBObject keyValue = new BasicDBObject();
keyValue.put(key, values);
criteria.put("$pullAll", keyValue);
return this;
}
public UpdateBuilder rename(String oldName, String newName) {
criteria.put("$rename", Collections.singletonMap(oldName, newName));
return this;
}
public DBObject build() { public DBObject build() {
DBObject dbo = new BasicDBObject(); DBObject dbo = new BasicDBObject();
for (String k : criteria.keySet()) { for (String k : criteria.keySet()) {

74
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/UpdateBuilderTests.java

@ -15,27 +15,30 @@
*/ */
package org.springframework.data.document.mongodb; package org.springframework.data.document.mongodb;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class UpdateBuilderTests { public class UpdateBuilderTests {
@Test @Test
public void testSetUpdate() { public void testSet() {
UpdateBuilder ub = new UpdateBuilder() UpdateBuilder ub = new UpdateBuilder()
.set("directory", "/Users/Test/Desktop"); .set("directory", "/Users/Test/Desktop");
Assert.assertEquals("{ \"$set\" : { \"directory\" : \"/Users/Test/Desktop\"}}", ub.build().toString()); Assert.assertEquals("{ \"$set\" : { \"directory\" : \"/Users/Test/Desktop\"}}", ub.build().toString());
} }
@Test @Test
public void testIncUpdate() { public void testInc() {
UpdateBuilder ub = new UpdateBuilder() UpdateBuilder ub = new UpdateBuilder()
.inc("size", 1); .inc("size", 1);
Assert.assertEquals("{ \"$inc\" : { \"size\" : 1}}", ub.build().toString()); Assert.assertEquals("{ \"$inc\" : { \"size\" : 1}}", ub.build().toString());
} }
@Test @Test
public void testIncAndSetUpdate() { public void testIncAndSet() {
UpdateBuilder ub = new UpdateBuilder() UpdateBuilder ub = new UpdateBuilder()
.inc("size", 1) .inc("size", 1)
.set("directory", "/Users/Test/Desktop"); .set("directory", "/Users/Test/Desktop");
@ -50,4 +53,69 @@ public class UpdateBuilderTests {
Assert.assertEquals("{ \"$unset\" : { \"directory\" : 1}}", ub.build().toString()); Assert.assertEquals("{ \"$unset\" : { \"directory\" : 1}}", ub.build().toString());
} }
@Test
public void testPush() {
Map<String, Object> m = new HashMap<String, Object>();
m.put("name", "Sven");
UpdateBuilder ub = new UpdateBuilder()
.push("authors", m);
Assert.assertEquals("{ \"$push\" : { \"authors\" : { \"name\" : \"Sven\"}}}", ub.build().toString());
}
@Test
public void testPushAll() {
Map<String, Object> m1 = new HashMap<String, Object>();
m1.put("name", "Sven");
Map<String, Object> m2 = new HashMap<String, Object>();
m2.put("name", "Maria");
UpdateBuilder ub = new UpdateBuilder()
.pushAll("authors", new Object[] {m1, m2});
Assert.assertEquals("{ \"$pushAll\" : { \"authors\" : [ { \"name\" : \"Sven\"} , { \"name\" : \"Maria\"}]}}", ub.build().toString());
}
@Test
public void testAddToSet() {
Map<String, Object> m = new HashMap<String, Object>();
m.put("name", "Sven");
UpdateBuilder ub = new UpdateBuilder()
.addToSet("authors", m);
Assert.assertEquals("{ \"$addToSet\" : { \"authors\" : { \"name\" : \"Sven\"}}}", ub.build().toString());
}
@Test
public void testPop() {
UpdateBuilder ub = new UpdateBuilder()
.pop("authors", UpdateBuilder.Position.FIRST);
Assert.assertEquals("{ \"$pop\" : { \"authors\" : -1}}", ub.build().toString());
ub = new UpdateBuilder()
.pop("authors", UpdateBuilder.Position.LAST);
Assert.assertEquals("{ \"$pop\" : { \"authors\" : 1}}", ub.build().toString());
}
@Test
public void testPull() {
Map<String, Object> m = new HashMap<String, Object>();
m.put("name", "Sven");
UpdateBuilder ub = new UpdateBuilder()
.pull("authors", m);
Assert.assertEquals("{ \"$pull\" : { \"authors\" : { \"name\" : \"Sven\"}}}", ub.build().toString());
}
@Test
public void testPullAll() {
Map<String, Object> m1 = new HashMap<String, Object>();
m1.put("name", "Sven");
Map<String, Object> m2 = new HashMap<String, Object>();
m2.put("name", "Maria");
UpdateBuilder ub = new UpdateBuilder()
.pullAll("authors", new Object[] {m1, m2});
Assert.assertEquals("{ \"$pullAll\" : { \"authors\" : [ { \"name\" : \"Sven\"} , { \"name\" : \"Maria\"}]}}", ub.build().toString());
}
@Test
public void testRename() {
UpdateBuilder ub = new UpdateBuilder()
.rename("directory", "folder");
Assert.assertEquals("{ \"$rename\" : { \"directory\" : \"folder\"}}", ub.build().toString());
}
} }

Loading…
Cancel
Save