@Test public void testAddEntity() { List<Entity> keys = DATASTORE.fetch(ENTITY1.getKey(), ENTITY3.getKey()); assertEquals(ENTITY1, keys.get(0)); assertNull(keys.get(1)); assertEquals(2, keys.size()); try { DATASTORE.add(ENTITY1); fail("Expecting a failure"); } catch (DatastoreException expected) { // expected; } List<Entity> entities = DATASTORE.add(ENTITY3, PARTIAL_ENTITY1, PARTIAL_ENTITY2); assertEquals(ENTITY3, DATASTORE.get(ENTITY3.getKey())); assertEquals(ENTITY3, entities.get(0)); assertEquals(PARTIAL_ENTITY1.getNames(), entities.get(1).getNames()); assertEquals(PARTIAL_ENTITY1.getKey().getAncestors(), entities.get(1).getKey().getAncestors()); assertNotNull(DATASTORE.get(entities.get(1).getKey())); assertEquals(PARTIAL_ENTITY2.getNames(), entities.get(2).getNames()); assertEquals(PARTIAL_ENTITY2.getKey().getAncestors(), entities.get(2).getKey().getAncestors()); assertNotNull(DATASTORE.get(entities.get(2).getKey())); for (Entity entity : entities) { DATASTORE.delete(entity.getKey()); } }
@Test public void testPut() { Entity updatedEntity = Entity.newBuilder(ENTITY1).set("new_property", 42L).build(); assertEquals(updatedEntity, DATASTORE.put(updatedEntity)); assertEquals(updatedEntity, DATASTORE.get(updatedEntity.getKey())); Entity entity2 = Entity.newBuilder(ENTITY2).clear().set("bla", new NullValue()).build(); assertNotEquals(ENTITY2, entity2); List<Entity> entities = DATASTORE.put(ENTITY1, entity2, ENTITY3, PARTIAL_ENTITY1); assertEquals(ENTITY1, entities.get(0)); assertEquals(entity2, entities.get(1)); assertEquals(ENTITY3, entities.get(2)); assertEquals(PARTIAL_ENTITY1.getNames(), entities.get(3).getNames()); assertEquals(PARTIAL_ENTITY1.getKey().getAncestors(), entities.get(3).getKey().getAncestors()); assertEquals(ENTITY1, DATASTORE.get(ENTITY1.getKey())); assertEquals(entity2, DATASTORE.get(entity2.getKey())); assertEquals(ENTITY3, DATASTORE.get(ENTITY3.getKey())); Entity entity = DATASTORE.get(entities.get(3).getKey()); assertEquals(entities.get(3), entity); for (Entity entityToDelete : entities) { DATASTORE.delete(entityToDelete.getKey()); } }
Entity entity6 = entities.get(1); assertSame(entity4, entities.get(0)); assertEquals(PARTIAL_ENTITY2.getNames(), entity6.getNames()); assertEquals(PARTIAL_ENTITY2.getKey().getProjectId(), entity6.getKey().getProjectId()); assertEquals(PARTIAL_ENTITY2.getKey().getNamespace(), entity6.getKey().getNamespace()); List<Key> generatedKeys = response.getGeneratedKeys(); assertEquals(1, generatedKeys.size()); assertEquals(PARTIAL_ENTITY3.getNames(), DATASTORE.get(generatedKeys.get(0)).getNames()); assertEquals(PARTIAL_ENTITY3.getKey(), IncompleteKey.newBuilder(generatedKeys.get(0)).build());
@Override public Map<Object, Object> loadInto(final Value<FullEntity<?>> node, final LoadContext ctx, final Path path, Map<Object, Object> into) { // Make this work more like collections than atomic values if (node == null) throw new SkipException(); if (into == null) //noinspection unchecked into = (Map<Object, Object>)fact.constructMap(mapType); else into.clear(); for (final String name : node.get().getNames()) { final Object key = stringifier.fromString(name); final Value<?> nodeValue = node.get().getValue(name); @SuppressWarnings("unchecked") final Object value = componentTranslator.load((Value)nodeValue, ctx, path.extend(name)); into.put(key, value); } return into; }
@SuppressWarnings("unchecked") @Override public Object toModel(Value<?> input) { if (input instanceof NullValue) { return null; } EntityValue entityValue = (EntityValue) input; FullEntity<?> entity = entityValue.get(); Map<String, Object> map; if (Modifier.isAbstract(mapClass.getModifiers())) { if (SortedMap.class.equals(mapClass)) { map = new TreeMap<>(); } else { map = new HashMap<>(); } } else { map = (Map<String, Object>) IntrospectionUtils.instantiateObject(mapClass); } for (String property : entity.getNames()) { map.put(property, valueMapper.toModel(entity.getValue(property))); } return map; }
FullEntity<?> entity = entityValue.get(); Map<String, Object> map = new HashMap<>(); for (String property : entity.getNames()) { map.put(property, toModel(entity.getValue(property)));