package com.mysema.rdfbean.object;
import static org.junit.Assert.*;
import java.util.Map;
import org.junit.Test;
import com.google.common.collect.Maps;
import com.mysema.rdfbean.TEST;
import com.mysema.rdfbean.annotations.ClassMapping;
import com.mysema.rdfbean.annotations.Id;
import com.mysema.rdfbean.annotations.Properties;
import com.mysema.rdfbean.model.BID;
import com.mysema.rdfbean.model.ID;
import com.mysema.rdfbean.model.MiniRepository;
import com.mysema.rdfbean.model.STMT;
import com.mysema.rdfbean.model.UID;
public class DynamicPropertiesContextTest {
@ClassMapping
static class Entity {
@Id
ID id;
@Properties
Map<UID, ID> properties;
@Properties(context=TEST.NS)
Map<UID, ID> properties2;
}
@Test
public void test() {
MiniRepository repository = new MiniRepository();
Session session = SessionUtil.openSession(repository, Entity.class);
UID testContext = new UID(TEST.NS);
UID sibling = new UID(TEST.NS, "sibling");
UID parent = new UID(TEST.NS, "parent");
// save
Entity entity = new Entity();
entity.properties = Maps.newHashMap();
entity.properties2 = Maps.newHashMap();
entity.properties.put(sibling, new BID());
entity.properties2.put(parent, new BID());
session.save(entity);
session.flush();
// repository state
STMT siblingStmt = repository.findStatements(entity.id, sibling, null, null, false).next();
STMT parentStmt = repository.findStatements(entity.id, parent, null, null, false).next();
assertNull(siblingStmt.getContext());
assertEquals(testContext, parentStmt.getContext());
// load
session.clear();
entity = session.get(Entity.class, entity.id);
assertEquals(2, entity.properties.size()); // XXX by design
assertEquals(1, entity.properties2.size());
assertTrue(entity.properties.containsKey(sibling));
assertTrue(entity.properties2.containsKey(parent));
}
}