package elh.maayan.test;
import java.lang.reflect.Method;
import java.util.Collection;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import junit.framework.TestCase;
import net.sf.beanlib.hibernate4.Hibernate4BeanReplicator;
import net.sf.beanlib.spi.PropertyFilter;
public class TestRep extends TestCase {
private SessionFactory sessionFactory;
private Session session;
private long id;
@Override
protected void setUp() throws Exception {
super.setUp();
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
this.sessionFactory = metadata.getSessionFactoryBuilder().build();
this.session = this.sessionFactory.openSession();
final Supplier ms = new Supplier("Microsoft");
ms.setSsn(323);
final Supplier oracle = new Supplier("oracle");
oracle.setSsn(222);
final Supplier mac = new Supplier("mac");
mac.setSsn(2323);
final Contract mc = new Contract(323, ms);
final Factory f = new Factory();
f.addContract(mc);
f.addSupplier(ms);
// f.addSupplier(oracle);
// f.addSupplier(mac);
f.setAddress("main street");
this.session.save(f);
this.id = f.getId();
this.session.flush();
// this.session.connection().commit();
this.session.close();
}
public void testLoad() throws Exception {
this.session = this.sessionFactory.openSession();
final Factory load = this.session.load(Factory.class, this.id); // (long) 350);
System.out.println("factory " + load);
final Collection<Supplier> suppliers = load.getSuppliers();
final Collection<Contract> contracts = load.getContracts();
assertEquals(1, load.getSuppliers().size());
for (final Contract contract : contracts) {
final Supplier supplier = contract.getSupplier();
assertTrue(suppliers.contains(supplier));
supplier.setName("hello");
assertEquals(supplier.getName(), suppliers.iterator().next().getName());
}
final Hibernate4BeanReplicator r = new Hibernate4BeanReplicator();
r.initPropertyFilter(new PropertyFilter() {
@Override
public boolean propagate(final String propertyName, final Method readerMethod) {
return !"id".equals(propertyName);
}
});
r.initDebug(true);
final Factory copy = r.copy(load);
final Collection<Supplier> clonedSuppliers = copy.getSuppliers();
final Collection<Contract> clonedContracts = copy.getContracts();
assertEquals(1, copy.getSuppliers().size());
for (final Contract contract : clonedContracts) {
final Supplier supplier = contract.getSupplier();
assertTrue(clonedSuppliers.contains(supplier));
supplier.setName("changed value");
assertEquals(supplier.getName(), clonedSuppliers.iterator().next().getName());
}
System.out.println("clone ed" + copy);
// this.session.save(copy);
}
@Override
protected void tearDown() throws Exception {
this.session.close();
this.sessionFactory.close();
}
}