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 }