package org.compass.annotations.test.reference.poly;
import java.util.HashSet;
import java.util.Set;
import org.compass.annotations.test.AbstractAnnotationsTestCase;
import org.compass.core.CompassSession;
import org.compass.core.CompassTransaction;
import org.compass.core.config.CompassConfiguration;
/**
* Composite tests
*/
public class CompositeTests extends AbstractAnnotationsTestCase {
protected void addExtraConf(CompassConfiguration conf) {
conf.addClass(Category.class).addClass(CategoryGroup.class);
}
public void testCompositeRelationships() {
// Build model
CategoryGroup sports = new CategoryGroup(10l, "Sports");
Set<Category> categories = new HashSet<Category>();
categories.add(new Category(100l, "Fishing"));
categories.add(new Category(101l, "Golf"));
categories.add(new Category(102l, "Extreme Ironing"));
sports.setCategories(categories);
assertSportsCategoryGroup(sports);
// Index
CompassSession compassSession = openSession();
CompassTransaction compassTransaction = compassSession.beginTransaction();
compassSession.save(sports);
for (Category category : sports.getCategories()) {
compassSession.save(category);
}
compassTransaction.commit();
compassSession.close();
// Search
compassSession = openSession();
compassTransaction = compassSession.beginTransaction();
Category category = (Category) compassSession.get(Category.class, 100l);
assertNotNull(category);
assertEquals("Fishing", category.getName());
assertEquals("Golf", ((Category) compassSession.get(Category.class, 101l)).getName());
assertEquals("Extreme Ironing", ((Category) compassSession.get(Category.class, 102l)).getName());
// Load composite and check composed instances
CategoryGroup sportsLoaded = (CategoryGroup) compassSession.get(CategoryGroup.class, 10l);
assertSportsCategoryGroup(sportsLoaded);
compassTransaction.commit();
compassSession.close();
}
private void assertSportsCategoryGroup(CategoryGroup sports) {
assertNotNull(sports);
assertEquals("Sports", sports.getName());
assertNotNull(sports.getCategories());
assertEquals(3, sports.getCategories().size());
}
}