1
2 package org.weda.store;
3
4 import java.util.Collection;
5 import java.util.List;
6 import java.util.Set;
7 import org.weda.action.ActionContainer;
8 import org.weda.model.RowSelectionModel;
9 import org.weda.store.impl.ObjectSet;
10
11 /**Цель:
12 *
13 * @author tim
14 */
15 public interface ObjectSource extends RowSelectionModel, ActionContainer {
16 public static enum Mode {
17 /**Означает что, источник данных закрыт. Для его открытия
18 * необходимо воспользоваться одним из методов.
19 * <ul>
20 * <li>{@link #open()}</li>
21 * <li>{@link #refresh()}</li>
22 * <li>{@link #refresh(Object)}</li>
23 * </ul>
24 */
25 CLOSED,
26 /**Нормальный режим работы источника данных.
27 */
28 VIEW,
29 /**Режим в котором источник данных должен выбрать строку и вернуть
30 * ее вызываемому компоненту.
31 */
32 SELECT,
33 /**Режим в котором осуществляется модификация выделенных строк.
34 */
35 EDIT
36 };
37
38 public void init() throws ObjectSourceException;
39 /**Метод возвращает имя источника данных.
40 */
41 public String getName();
42 /**Метод возвращает режим в котором работает источник данных
43 */
44 public Mode getMode();
45 /**Метод устанавливает режим в котором работает источник данных
46 */
47 public void setMode(Mode mode);
48 /**Метод вернет <code>TRUE</code> если в источник данных нельзя
49 * вносить изменения.
50 */
51 public boolean isReadOnly();
52 /**Если передать <code>TRUE</code> то в источник данных будет нельзя
53 * вносить изменения.
54 */
55 public void setReadOnly(boolean readOnly);
56 /**Метод открывает источник объектов если тот находится в состояние
57 * {@link Mode#CLOSED}. Т.е. в источнике данных появляются
58 * строки соответствующие запросу и установленому фильтру.
59 * После выполнения метода источник объектов
60 * переводится в состояние {@link Mode#VIEW}.
61 *
62 *@see #setQuery(Query)
63 *@see #setQueryFilter(QueryFilter)
64 *@see #close()
65 *@see #refresh()
66 *@see #refresh(Object)
67 */
68 public void open() throws ObjectSourceException;
69 /**Метод закрывает, а затем открывает источник объектов.
70 * @see #open()
71 * @see #close()
72 * @see #refresh(Object)
73 */
74 public void refresh() throws ObjectSourceException;
75 /**Метод делает следующее:
76 * <ul>
77 * <li>закрывает источник объектов
78 * <li>настраивает фильтр таким образом, что бы после открытия появились
79 * только те строки в которых значение объекта базового класса
80 * равнялись объекту переданному в параметре.
81 * <li>открывает источник объектов
82 * </ul>
83 *
84 * @see #setBaseClass(Class)
85 * @see #open()
86 * @see #close()
87 * @see #refresh()
88 * @throws DataSourceException если значение переданного в параметре объекта
89 * null или объект не является экземпляром базового класса.
90 */
91 public void refresh(Object baseClassObject) throws ObjectSourceException;
92 /**
93 * Метод закрывает источник данных если тот не находится
94 * в состоянии {@link Mode#CLOSED}. После выполнения метода источник
95 * объектов переводится в состояние {@link Mode#CLOSED}.
96 *
97 * @see #open()
98 * @see #close()
99 * @see #refresh()
100 * @see #refresh(Object)
101 */
102 public void close() throws ObjectSourceException;
103 /**Метод добавляет информацию об источнике данных который является
104 * подчиненным по отношению к данному.
105 *@see #activateDetailConstraints(Object masterObject)
106 *@see #deactivateDetailConstraints()
107 *@see #isDetailConstraintsActivated()
108 *@see #getDetailInfos()
109 */
110 public void addDetailInfo(
111 DetailObjectSourceInfo detailDataSourceInfo);
112 /**Метод возвращает информацию об подчиненных источниках данных.
113 *@see #activateDetailConstraints(Object masterObject)
114 *@see #deactivateDetailConstraints()
115 *@see #isDetailConstraintsActivated()
116 *@see #addDetailInfo(DetailDataSourceInfo detailDataSourceInfo)
117 */
118 public Collection<DetailObjectSourceInfo> getDetailInfos();
119 /**Метод устанавливает ограничения на подчиненных источниках данных.
120 *@param masterObject объект которой является главным для подчиненных
121 * источников данных.
122 *@see #deactivateDetailConstraints()
123 *@see #isDetailConstraintsActivated()
124 *@see #addDetailInfo(DetailDataSourceInfo detailDataSourceInfo)
125 *@see #getDetailInfos()
126 */
127 public void activateDetailConstraints(
128 Object masterObject, boolean masterPropertiesOnly)
129 throws ObjectSourceException;
130 /**Метод снимает ограничения с подчиненных источников данных.
131 *@see #activateDetailConstraints(Object masterObject)
132 *@see #isDetailConstraintsActivated()
133 *@see #addDetailInfo(DetailDataSourceInfo detailDataSourceInfo)
134 *@see #getDetailInfos()
135 */
136 public void deactivateDetailConstraints() throws ObjectSourceException;
137 /**Метод вернет <code>TRUE</code> если ограничения на подчиненных
138 * источниках данных были установлены, но еще не были сняты.
139 *@see #activateDetailConstraints(Object masterObject)
140 *@see #deactivateDetailConstraints()
141 *@see #addDetailInfo(DetailDataSourceInfo detailDataSourceInfo)
142 *@see #getDetailInfos()
143 */
144 public boolean isDetailConstraintsActivated();
145 /**Метод добавляет ограничение к источнику данных.
146 * @see #removeConstraint(DataSourceConstraint)
147 */
148 public void addConstraint(ObjectSourceConstraint constraint)
149 throws ObjectSourceException;
150 /**Метод снимает ограничение с источника данных.
151 * @see #addConstraint(DataSourceConstraint)
152 */
153 public void removeConstraint(ObjectSourceConstraint constraint);
154 /**Метод возвращает количество строк в источнике данных на текущий момент
155 */
156 public int getRowCount();
157 /**Метод возвращает строку в указанной позиции
158 */
159 public Object[] getRowAt(int row);
160 /**Метод возвращает запрос, при помощи которого будет получен
161 * результирующий набор данных.
162 */
163 public Query getQuery();
164 /**Метод устанавливает запрос, при помощи которого будет получен
165 * результирующий набор данных.
166 */
167 public void setQuery(Query query);
168 /**Метод возвращает фильтр для источника данных.
169 */
170 public QueryFilter getQueryFilter();
171 /**Метод задает фильтр для источника данных.
172 */
173 public void setQueryFilter(QueryFilter queryFilter);
174 /**Метод возвращает позиции выделенных в источнике данных строк.
175 */
176 public Set<Integer> getSelectedRows();
177 /**Метод возвращает количество выделенных строк.
178 */
179 public int getSelectedRowCount();
180 /**Метод вернет <code>true</code> если в источнике данных есть выделенные
181 * строки
182 *@see #selectRowInPage(int)
183 *@see #selectRow(int)
184 */
185 public boolean hasSelectedRows();
186 /**Метод возвращает класс являющийся базовым для источника данных.
187 * @see #setBaseClass(Class)
188 */
189 public Class getBaseClass();
190 /**Метод устанавливает класс являющийся базовым для источника данных.
191 * Только объекты базового класса могут редактироваться в источнике данных.
192 *@see #setBaseClass
193 */
194 public void setBaseClass(Class baseClass);
195 /**Метод возвращает позицию базового класса в строке.
196 *@see #setBaseClass(Class)
197 *@see #getCurrentPage()
198 */
199 public int getBaseClassPosition();
200 /**Метод устанавливает позицию базового класса в строке.
201 *@see #setBaseClass(Class)
202 *@see #getCurrentPage()
203 */
204 public void setBaseClassPosition(int position);
205 /**Метод возвращает alias базового класса в запросе.
206 */
207 public String getBaseClassAlias();
208 /**Метод создает новую запись в источнике данных, выбирает ее и начинает
209 * процесс изменения, вызывая метод {@link #beginModification()}.
210 * @see #beginModification()
211 * @see #cancelModification()
212 * @see #saveModification()
213 * @see #getSelectedObjectSet
214 */
215 public void createNewRow() throws ObjectSourceException;
216 /**Метод удаляет выделенные строки в источнике объектов.
217 */
218 public void removeSelectedRows() throws ObjectSourceException;
219 /**Метод возвращает множество объектов выделенных в текущий момент времени
220 * и доступный для редактирования.
221 * @throws DataSourceException если источник данных находится не в режиме
222 * редактирования.
223 * @see #beginModification()
224 * @see #cancelModification()
225 * @see #saveModification()
226 */
227 public ObjectSet getSelectedObjectSet();
228 /**Вызов данного метода перевовит datasource в режим редактирования
229 * {@link Mode#EDIT}.
230 * @see #saveModification()
231 * @see #cancelModification()
232 * @see #getSelectedObjectSet
233 */
234 public void beginModification() throws ObjectSourceException;
235 /**Метод фиксирует изменения произведенные над выделенными строками.
236 * После выполнения метода источник данных переходит в тот режим в котором
237 * он был перед вызовом метода {@link #beginModification()}
238 * @throws DataSourceException если произошли ошибки во время фиксации
239 * или источник данных не находится в режиме редактирования.
240 * @see #beginModification()
241 * @see #cancelModification()
242 * @see #getSelectedObjectSet
243 */
244 public void saveModification() throws ObjectSourceException;
245 /**Метод сохраняет изменения, но не фиксирует их.
246 * @see #saveModification()
247 * @see #beginModification()
248 * @see #cancelModification()
249 * @see #getSelectedObjectSet
250 */
251 public void applyModification() throws ObjectSourceException;
252 /**Метод отменяет изменения произведенные над выделенными строками.
253 * После выполнения метода источник данных переходит в тот режим в котором
254 * он был перед вызовом метода {@link #beginModification()}
255 * @throws DataSourceException если произошли ошибки во время отмены
256 * или источник данных не находится в режиме редактирования.
257 * @see #beginModification()
258 * @see #savelModification()
259 * @see #getSelectedObjectSet
260 */
261 public void cancelModification() throws ObjectSourceException;
262 /**Метод вернет <code>TRUE</code> если между вызовами методов
263 * <code>beginModification()</code> и <code>saveModification()
264 * || cancelModification</code> был успешно выполнен метод
265 * <code>applyModification</code>.
266 * @see #applyModification()
267 * @see #saveModification()
268 * @see #beginModification()
269 * @see #cancelModification()
270 * @see #getSelectedObjectSet
271 */
272 public boolean isModificationApplied();
273 /**Метод добавляет слушателя к источнику объектов.
274 */
275 public void addListener(ObjectSourceListener listener);
276 /**Метод удаляет слушателя.
277 */
278 public void removeListener(ObjectSourceListener listener);
279 /**Метод возвращает стоку содержащую сводную информацию в разрезе строк
280 * источника объектов.
281 */
282 public SummaryRow getSummaryRow();
283
284 public Object clone() throws CloneNotSupportedException;
285 }