/*
* Copyright (C) 2003-2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.chromattic.test.onetomany.hierarchical;
import org.chromattic.api.ChromatticSession;
import org.chromattic.common.TypeLiteral;
import org.chromattic.test.AbstractTestCase;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public abstract class AbstractMultiChildrenTestCase<O, M1, M2 extends M1, M3 extends M1> extends AbstractTestCase {
/** . */
private final Class<O> oneSide = TypeLiteral.get(getClass(), 0);
/** . */
private final Class<M1> manySide1 = TypeLiteral.get(getClass(), 1);
/** . */
private final Class<M2> manySide2 = TypeLiteral.get(getClass(), 2);
/** . */
private final Class<M3> manySide3 = TypeLiteral.get(getClass(), 3);
public abstract <M extends M1> Collection<M> getMany(O one, Class<M> manySide);
protected void createDomain() {
addClass(oneSide);
addClass(manySide1);
addClass(manySide2);
addClass(manySide3);
}
public void testFoo() throws Exception {
ChromatticSession session = login();
//
O a = session.create(oneSide, "a");
M1 b = session.create(manySide1, "b");
M2 c = session.create(manySide2, "c");
M3 d = session.create(manySide3, "d");
//
session.persist(a);
getMany(a, manySide1).add(b);
getMany(a, manySide2).add(c);
getMany(a, manySide3).add(d);
//
ArrayList<M1> bsCopy = new ArrayList<M1>(getMany(a, manySide1));
ArrayList<M2> csCopy = new ArrayList<M2>(getMany(a, manySide2));
ArrayList<M3> dsCopy = new ArrayList<M3>(getMany(a, manySide3));
//
assertEquals(3, bsCopy.size());
assertTrue(bsCopy.contains(b));
assertTrue(bsCopy.contains(c));
assertTrue(bsCopy.contains(d));
//
assertEquals(1, csCopy.size());
assertTrue(csCopy.contains(c));
//
assertEquals(1, dsCopy.size());
assertTrue(dsCopy.contains(d));
}
public void testBar() throws Exception {
ChromatticSession session = login();
O a = session.create(oneSide, "a");
String aId = session.persist(a);
M2 c = session.create(manySide2, "c");
getMany(a, manySide1).add(c);
String cId = session.getId(c);
M3 d = session.create(manySide3, "d");
getMany(a, manySide1).add(d);
String dId = session.getId(d);
session.save();
session = login();
a = session.findById(oneSide, aId);
c = session.findById(manySide2, cId);
d = session.findById(manySide3, dId);
Collection<M1> bs = getMany(a, manySide1);
assertTrue(bs.contains(c));
assertTrue(bs.contains(d));
assertEquals(2, bs.size());
Collection<M1> copy = new ArrayList<M1>(bs);
assertTrue(copy.contains(c));
assertTrue(copy.contains(d));
assertEquals(2, copy.size());
}
}