package com.mysema.rdfbean.object;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import com.google.common.collect.Sets;
import com.mysema.commons.lang.IteratorAdapter;
import com.mysema.rdfbean.TEST;
import com.mysema.rdfbean.annotations.ClassMapping;
import com.mysema.rdfbean.annotations.Container;
import com.mysema.rdfbean.annotations.ContainerType;
import com.mysema.rdfbean.annotations.Id;
import com.mysema.rdfbean.annotations.Predicate;
import com.mysema.rdfbean.model.ID;
import com.mysema.rdfbean.model.IDType;
import com.mysema.rdfbean.model.MiniRepository;
import com.mysema.rdfbean.model.STMT;
import com.mysema.rdfbean.model.UID;
@ClassMapping
public class MultiPropertyTest {
private static final UID NAME = new UID(TEST.NS, "name");
private static final UID NAME2 = new UID(TEST.NS, "name2");
private static final UID NAME3 = new UID(TEST.NS, "name3");
@Id
ID id;
@Predicate(ln = "name")
Set<String> names = new HashSet<String>();
@Predicate(ln = "name2")
@Container(ContainerType.NONE)
List<String> namesList = new ArrayList<String>();
@Predicate(ln = "name3")
@Container(ContainerType.NONE)
String[] namesArray;
@Test
public void MultiProperties() {
MiniRepository repository = new MiniRepository();
Session session = SessionUtil.openSession(repository, MultiPropertyTest.class);
MultiPropertyTest test = new MultiPropertyTest();
test.names.add("Tom");
test.names.add("Jane");
test.namesList.add("Tom");
test.namesList.add("Jane");
test.namesArray = new String[] { "Tom", "Jane" };
session.save(test);
session.clear();
List<STMT> stmts = IteratorAdapter.asList(repository.findStatements(null, NAME, null, null, false));
assertEquals(2, stmts.size());
stmts = IteratorAdapter.asList(repository.findStatements(null, NAME2, null, null, false));
assertEquals(2, stmts.size());
stmts = IteratorAdapter.asList(repository.findStatements(null, NAME3, null, null, false));
assertEquals(2, stmts.size());
MultiPropertyTest test2 = session.get(MultiPropertyTest.class, test.id);
assertEquals(test.names, test2.names);
// ordering is not preseved
assertEquals(Sets.newHashSet(test.namesList), Sets.newHashSet(test2.namesList));
// ordering is not preseved
assertEquals(Sets.newHashSet(test.namesArray), Sets.newHashSet(test2.namesArray));
}
}