View Javadoc

1   /*
2    * PageableTableModelImpl.java
3    * Created on 26 Август 2006 г., 17:34
4    */
5   
6   package org.weda.model.impl;
7   
8   import java.util.ArrayList;
9   import java.util.Arrays;
10  import java.util.List;
11  import java.util.Set;
12  import org.apache.commons.logging.Log;
13  import org.apache.commons.logging.LogFactory;
14  import org.weda.action.ActionContainer;
15  import org.weda.action.ActionContainerProvider;
16  import org.weda.action.ActionExecutionContext;
17  import org.weda.action.ActionRegistryException;
18  import org.weda.action.ActionState;
19  import org.weda.action.ExecutedActionInfo;
20  import org.weda.action.impl.AbstractActionContainer;
21  import org.weda.common.ChangeType;
22  import org.weda.enhance.InjectHivemindObject;
23  import org.weda.model.PageableTableModel;
24  import org.weda.model.PageableTableModelData;
25  import org.weda.model.TableModel;
26  import org.weda.model.TableModelEvent;
27  import org.weda.model.TableModelException;
28  import org.weda.model.TableModelListener;
29  import org.weda.model.TableModelRegistry;
30  import org.weda.property.PropertyDescriptor;
31  
32  /**
33   *
34   * @author Mikhail Titov
35   */
36  public class PageableTableModelImpl 
37          extends AbstractActionContainer
38          implements 
39              PageableTableModel, TableModelListener, ActionContainerProvider
40  {
41      private final static Log log = 
42              LogFactory.getLog(PageableTableModelImpl.class);
43      
44      @InjectHivemindObject()
45      private static TableModelRegistry tableModelRegistry;
46      
47      private TableModel linkedTableModel;
48      private String linkedTableModelName;
49      private String name;
50      private List<TableModelListener> modelListeners;    
51      private int pageSize = 20;
52      
53      public PageableTableModelImpl(){}
54      
55      public PageableTableModelImpl(TableModel linkedTableModel){
56          this.linkedTableModel = linkedTableModel;
57          linkedTableModel.addListener(this);
58      }
59  
60      public void init() throws TableModelException {        
61          setActionContainerName(name);
62          if (getLinkedTableModelName()==null)
63              throw new TableModelException(
64                      String.format(
65                          "The linkedTableModel property must be setted " +
66                          "for pageable table model (%s)", name));
67      }
68  
69      public TableModel getLinkedTableModel() {
70          if (linkedTableModel==null){
71              linkedTableModel = 
72                      tableModelRegistry.getTableModel(getLinkedTableModelName());
73              linkedTableModel.addListener(this);
74          }
75          return linkedTableModel;
76      }
77  
78      public void addListener(TableModelListener listener) {
79          if (modelListeners != null)
80              modelListeners = new ArrayList<TableModelListener>(5);
81          modelListeners.add(listener);
82      }
83  
84      public void open() throws TableModelException {
85          getLinkedTableModel().open();
86      }
87  
88      public void close() throws TableModelException {
89          getLinkedTableModel().close();
90      }
91  
92      public int getColumnCount() throws TableModelException {
93          return getLinkedTableModel().getColumnCount();
94      }
95  
96      public List<PropertyDescriptor> getColumnDescriptors() {
97          return getLinkedTableModel().getColumnDescriptors();
98      }
99  
100     public PageableTableModelData getData() throws TableModelException {
101         PageableTableModelDataImpl data = 
102                 new PageableTableModelDataImpl(
103                     this, getLinkedTableModel().getData());
104         data.init();
105         return data;
106     }
107 
108     public TableModel.Mode getMode() throws TableModelException {
109         return getLinkedTableModel().getMode();
110     }
111 
112     public String getName() {
113         return name;
114     }
115     
116     public void setName(String name){
117         this.name = name;
118     }
119     
120     public int getPageSize() {
121         return pageSize;
122     }
123 
124     public void setPageSize(int rowsPerPage) {
125         pageSize = rowsPerPage;
126     }
127 
128     public void modelChanged(TableModelEvent event) {
129         try {
130             if (event.getChangeType() == ChangeType.ADD)
131                 getData().setPageNumber(0);
132             if (modelListeners != null) {
133                 for (TableModelListener listener: modelListeners)
134                     listener.modelChanged(event);
135             }
136         } catch (TableModelException ex) {
137             log.error(ex.getMessage(), ex);
138         }
139     }
140 
141     public Set<Class> getDisabledActions() {
142         return null;
143     }
144 
145     public String getLinkedTableModelName() {
146         return linkedTableModelName;
147     }
148 
149     public void setLinkedTableModelName(String linkedTableModelName) {
150         this.linkedTableModelName = linkedTableModelName;
151     }
152 
153     public List<ActionContainer> getActionContainers() throws Exception {
154         if (getLinkedTableModel() instanceof ActionContainerProvider)
155             return ((ActionContainerProvider)
156                         getLinkedTableModel()).getActionContainers();
157         else
158             return null;
159     }
160 }