1
2
3
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 }