1   package test.tuigwaa;
2   
3   import java.util.ArrayList;
4   import java.util.HashSet;
5   import java.util.List;
6   import java.util.Set;
7   
8   import junit.framework.TestCase;
9   
10  import org.apache.commons.beanutils.PropertyUtils;
11  import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
12  import org.seasar.tuigwaa.database.CriteriaFunctionFactory;
13  import org.seasar.tuigwaa.database.DataTable;
14  import org.seasar.tuigwaa.database.DynaDatabaseService;
15  import org.seasar.tuigwaa.database.function.CriteriaExeFunction;
16  import org.seasar.tuigwaa.database.function.criteria.CriteriaFunction;
17  import org.seasar.tuigwaa.database.function.criteria.EqCriteriaFunction;
18  import org.seasar.tuigwaa.database.function.criteria.SubcriteriaFunction;
19  import org.seasar.tuigwaa.model.DAOService;
20  import org.seasar.tuigwaa.model.ModelService;
21  import org.seasar.tuigwaa.model.core.TgwAttribute;
22  import org.seasar.tuigwaa.model.core.TgwEntity;
23  import org.seasar.tuigwaa.model.core.impl.FkAttribute;
24  import org.seasar.tuigwaa.model.core.impl.SetAttribute;
25  import org.seasar.tuigwaa.model.core.impl.StringAttribute;
26  import org.seasar.tuigwaa.model.core.impl.TgwEntityImpl;
27  
28  
29  public class EntityRefTest extends TestCase {
30  
31  	private static ModelService model;
32  
33  	private static DynaDatabaseService db;
34  
35  	private static DAOService daoServie;
36  
37  	static {
38  		SingletonS2ContainerFactory.init();
39  		model = (ModelService) SingletonS2ContainerFactory.getContainer()
40  				.getComponent(ModelService.class);
41  		daoServie = (DAOService) SingletonS2ContainerFactory.getContainer()
42  				.getComponent(DAOService.class);
43  		db = (DynaDatabaseService) SingletonS2ContainerFactory.getContainer()
44  				.getComponent(DynaDatabaseService.class);
45  		
46  		try {
47  			db.dropSchema("junit");
48  		} catch (Exception e) {
49  			e.printStackTrace();
50  		}
51  		model.createDomain("junit");
52  	}
53  
54  	public void testSetAttribute() throws Exception {
55  		List list = getTestEntities();
56  		model.createEntities("junit", list);
57  
58  		//
59  		TgwEntity entity1 = (TgwEntity) list.get(0);
60  		TgwEntity entity2 = (TgwEntity) list.get(1);
61  		Object obj1 = entity1.newInstance();
62  		PropertyUtils.setProperty(obj1, "sattr", "hoge");
63  
64  		Object obj21 = entity2.newInstance();
65  		PropertyUtils.setProperty(obj21, "s2attr", "nishioka");
66  		PropertyUtils.setProperty(obj21, "fkattr", obj1);
67  		Object obj22 = entity2.newInstance();
68  		PropertyUtils.setProperty(obj22, "s2attr", "someda");
69  		PropertyUtils.setProperty(obj22, "fkattr", obj1);
70  		Set set = new HashSet();
71  		set.add(obj21);
72  		set.add(obj22);
73  		PropertyUtils.setProperty(obj1, "setattr", set);
74  
75  		daoServie.getDAO(entity1).saveOrUpdate(obj1);
76  
77  		CriteriaFunction eqFunction = new SubcriteriaFunction("setattr",
78  				new EqCriteriaFunction("s2attr", "nishioka"));
79  		CriteriaExeFunction sampleFilter = CriteriaFunctionFactory
80  				.createCriteriaExeFunction(entity1, "sample", eqFunction);
81  
82  		DataTable dataTable = (DataTable) sampleFilter.evaluate();
83  		assertEquals(1, dataTable.getRowSize());
84  	}
85  
86  	private List getTestEntities() {
87  		TgwEntity entity1 = new TgwEntityImpl("junit", "reftest1");
88  		TgwAttribute sattr = new StringAttribute();
89  		SetAttribute setattr = new SetAttribute();
90  		sattr.setName("sattr");
91  		setattr.setName("setattr");
92  		entity1.addField(sattr);
93  		entity1.addField(setattr);
94  
95  		// entity2
96  		TgwEntity entity2 = new TgwEntityImpl("junit", "reftest2");
97  		FkAttribute fkattr = new FkAttribute();
98  		StringAttribute s2attr = new StringAttribute();
99  		fkattr.setName("fkattr");
100 		s2attr.setName("s2attr");
101 		entity2.addField(fkattr);
102 		entity2.addField(s2attr);
103 
104 		// create reference
105 		setattr.setRefEntity(entity2);
106 		fkattr.setRefEntity(entity1);
107 		setattr.setInverseField(fkattr);
108 		fkattr.setInverseField(setattr);
109 
110 		// list
111 		List list = new ArrayList();
112 		list.add(entity1);
113 		list.add(entity2);
114 		return list;
115 	}
116 
117 }