1   package org.weda.model;
2   
3   import java.util.HashMap;
4   import java.util.List;
5   import java.util.Map;
6   import org.weda.ObjectStoreTestCase;
7   import org.weda.action.ActionState;
8   import org.weda.model.impl.ObjectTableModel;
9   import org.weda.store.ObjectSource;
10  import org.weda.store.ObjectSourceRegistry;
11  import org.weda.domain.Address;
12  import org.weda.domain.Company;
13  import org.weda.property.PropertyDescriptor;
14  
15  /**
16   *
17   * @author tim
18   */
19  public class ObjectTableModelTest extends ObjectStoreTestCase {
20      
21      public ObjectTableModelTest(String name) throws Exception {
22          super(name);
23      }
24      
25      public void test_config() throws Exception {
26          checkConfig("company2-view");
27      }        
28      
29      public void test_config_withNamesList() throws Exception {
30          checkConfig("company2-view2");
31      }        
32      
33      public void test_availableActions() throws Exception{
34          checkAvailableActions("company2-view");
35      }
36      
37      public void test_availableActions_withNamesList() throws Exception{
38          checkAvailableActions("company2-view2");
39      }
40      
41      public void test_open_close() throws Exception {
42          Company comp = new Company();
43          comp.setName("company1");
44          store.save(comp);
45          //
46          TableModelRegistry reg=
47              (TableModelRegistry)registry.getService(TableModelRegistry.class);
48          ObjectTableModel model = 
49                  (ObjectTableModel)reg.getTableModel("company2-view");
50          ObjectSourceRegistry dsr = 
51              (ObjectSourceRegistry)
52                  registry.getService(ObjectSourceRegistry.class);
53          ObjectSource ds = dsr.getObjectSource("company2");
54          //
55          ds.close();
56          assertEquals(TableModel.Mode.CLOSED, model.getMode());
57          try{
58              model.getData();
59              fail();
60          }catch(Exception e){}
61          ds.open();
62          assertEquals(TableModel.Mode.VIEW, model.getMode());
63          assertEquals(1, model.getData().getRowCount());
64          //
65          model.close();
66          assertEquals(TableModel.Mode.CLOSED, model.getMode());
67          assertEquals(ObjectSource.Mode.CLOSED, ds.getMode());
68          try{
69              model.getData();
70              fail();
71          }catch(Exception e){}
72          model.open();
73          assertEquals(TableModel.Mode.VIEW, model.getMode());
74          assertEquals(ObjectSource.Mode.VIEW, ds.getMode());
75          assertEquals(1, model.getData().getRowCount());
76      }
77      
78      public void test_getValueAt() throws Exception {
79          checkGetPage("company2-view");
80      }
81      
82      public void test_getValueAt_withNamesList() throws Exception {
83          checkGetPage("company2-view2");
84      }
85      
86      public void test_summaryRow() throws Exception {
87          checkSummaryRow("company2-view");
88      }
89      
90      public void test_summaryRow_withNamesList() throws Exception {
91          checkSummaryRow("company2-view2");
92      }
93      
94      private void checkConfig(String tableModelName) throws Exception {
95          TableModelRegistry reg=
96              (TableModelRegistry)registry.getService(TableModelRegistry.class);
97          assertNotNull(reg);
98          ObjectTableModel model = 
99                  (ObjectTableModel)reg.getTableModel(tableModelName);
100         assertNotNull(model);
101         List<PropertyDescriptor> cols=model.getColumnDescriptors();
102         assertNotNull(cols);
103         assertEquals(4, cols.size());
104         assertNotNull(cols.get(0).getParent());
105         assertEquals("s/n", cols.get(0).getDisplayName());
106         assertEquals("name", cols.get(1).getName());
107         assertEquals("Улица", cols.get(2).getDisplayName());
108         assertEquals("company2", model.getObjectSourceName());
109         assertNotNull(model.getPropertyValueGetter());        
110     }
111     
112     private void checkAvailableActions(String tableModelName)
113         throws Exception
114     {
115         TableModelRegistry reg=
116             (TableModelRegistry)registry.getService(TableModelRegistry.class);
117         ObjectTableModel model = 
118                 (ObjectTableModel)reg.getTableModel(tableModelName);
119         List<ActionState> descriptors = model.getActionsStates();
120         //assertEquals(2, descriptors.size());        
121     }
122     
123     private void checkGetPage(String tableModelName) throws Exception {
124         TableModelRegistry reg=
125             (TableModelRegistry)registry.getService(TableModelRegistry.class);
126         ObjectSourceRegistry dsr = 
127             (ObjectSourceRegistry)
128                 registry.getService(ObjectSourceRegistry.class);
129         ObjectSource ds = dsr.getObjectSource("company2");
130         //
131         Company comp;
132         Map<String, Company> companies = new HashMap<String, Company>();
133         for (int i=0; i<5; i++){
134             comp = new Company();
135             comp.setName("name "+i);
136             comp.setEmployeCount(1);
137             Address addr = new Address();
138             addr.setStreet("street "+i);
139             comp.setAddress(addr);
140             store.save(addr);
141             store.save(comp);
142             companies.put(comp.getName(), comp);
143         }
144         //
145         ds.refresh();
146         ObjectTableModel model = 
147                 (ObjectTableModel)reg.getTableModel(tableModelName);
148         //List<Object[]> page = model.getPage();
149         //assertNotNull(page);
150         TableModelData data = model.getData();
151         assertEquals(5, data.getRowCount());
152         //for (Object[] values: page){
153         for (int row=0; row<data.getRowCount(); row++){
154             for (int col=0; col<model.getColumnCount(); col++){
155                 Object val = data.getValueAt(row, col);
156                 assertNotNull(val);
157                 assertNotNull(val);
158                 assertNotNull(val);
159             }
160             String name=(String)data.getValueAt(row, 1);
161             comp=companies.get(name);
162             assertNotNull(comp);
163             assertEquals(comp.getId(), data.getValueAt(row, 0));
164             assertEquals(
165                     comp.getAddress().getStreet(), data.getValueAt(row, 2));
166         }        
167     }
168 
169     private void checkSummaryRow(String tableModelName) throws Exception {
170         TableModelRegistry reg=
171             (TableModelRegistry)registry.getService(TableModelRegistry.class);
172         ObjectTableModel model = 
173                 (ObjectTableModel)reg.getTableModel(tableModelName);
174         ObjectSourceRegistry dsr = 
175             (ObjectSourceRegistry)
176                 registry.getService(ObjectSourceRegistry.class);
177         ObjectSource ds = dsr.getObjectSource("company2");
178         ds.close();
179         //
180         Company comp;
181         for (int i=0; i<10; i++){
182             comp = new Company();
183             comp.setName("name "+i);
184             comp.setEmployeCount(1);
185             store.save(comp);
186         }
187         //
188         ds.refresh();
189         TableModelData data = model.getData();
190         assertTrue(data.hasSummaryRow());
191         assertEquals(10l, data.getSummaryValueAt(3));        
192     }
193 }