001: /**
002: * Copyright 2006 Webmedia Group Ltd.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: **/package org.araneaframework.example.main.web.demo;
016:
017: import java.util.ArrayList;
018: import java.util.List;
019: import org.araneaframework.example.main.TemplateBaseWidget;
020: import org.araneaframework.example.main.business.util.DataDTO;
021: import org.araneaframework.framework.MessageContext;
022: import org.araneaframework.uilib.event.OnClickEventListener;
023: import org.araneaframework.uilib.form.BeanFormWidget;
024: import org.araneaframework.uilib.form.FormWidget;
025: import org.araneaframework.uilib.form.control.ButtonControl;
026: import org.araneaframework.uilib.form.control.CheckboxControl;
027: import org.araneaframework.uilib.form.control.NumberControl;
028: import org.araneaframework.uilib.form.control.TextControl;
029: import org.araneaframework.uilib.form.data.BooleanData;
030: import org.araneaframework.uilib.form.data.LongData;
031: import org.araneaframework.uilib.form.data.StringData;
032: import org.araneaframework.uilib.form.formlist.BeanFormListWidget;
033: import org.araneaframework.uilib.form.formlist.FormListUtil;
034: import org.araneaframework.uilib.form.formlist.FormRow;
035: import org.araneaframework.uilib.form.formlist.InMemoryFormListHelper;
036: import org.araneaframework.uilib.form.formlist.adapter.ValidOnlyIndividualFormRowHandler;
037:
038: /**
039: * Editable list component.
040: *
041: * Seperate forms are used for individual rows, so that client-side validation
042: * would work on the same separate rows.
043: *
044: * @author Jevgeni Kabanov (ekabanov <i>at</i> araneaframework <i>dot</i> org)
045: */
046: public class DemoInMemoryEditableList extends TemplateBaseWidget {
047:
048: private static final long serialVersionUID = 1L;
049: private BeanFormListWidget formList;
050: private List data = new ArrayList();
051:
052: private InMemoryFormListHelper inMemoryHelper;
053:
054: {
055: //Just making the initial data
056: //In reality it should have been read from the database
057: data.add(new DataDTO(new Long(1), Boolean.TRUE, new Long(10),
058: "12313"));
059: data.add(new DataDTO(new Long(2), Boolean.FALSE, new Long(123),
060: "werwer"));
061: data.add(new DataDTO(new Long(3), Boolean.TRUE, new Long(10),
062: "adfhadfh"));
063: }
064:
065: /**
066: * Builds the form with one checkbox, one textbox and a button.
067: */
068: public void init() throws Exception {
069: setViewSelector("demo/demoInMemoryEditableList");
070:
071: formList = new BeanFormListWidget(new DemoEditableRowHandler(),
072: DataDTO.class);
073: inMemoryHelper = new InMemoryFormListHelper(formList, data);
074:
075: addWidget("editableList", formList);
076: }
077:
078: public void handleEventTest(String parameter) throws Exception {
079: }
080:
081: public void handleEventReturn(String param) throws Exception {
082: getFlowCtx().cancel();
083: }
084:
085: public void handleEventClose(String parameter) throws Exception {
086: if (FormListUtil.convertAndValidateRowForms(formList
087: .getFormRows())
088: && !FormListUtil.isRowFormsStateChanged(formList
089: .getFormRows()) || "true".equals(parameter))
090: getFlowCtx().cancel();
091: else
092: putViewDataOnce("askCloseConfirmation", "true");
093: }
094:
095: public class FeedBackProvidingListener implements
096: OnClickEventListener {
097: public void onClick() throws Exception {
098: DemoInMemoryEditableList.this .getMessageCtx().showMessage(
099: MessageContext.INFO_TYPE,
100: "Added: " + inMemoryHelper.getAdded().values());
101: DemoInMemoryEditableList.this .getMessageCtx().showMessage(
102: MessageContext.INFO_TYPE,
103: "Updated: " + inMemoryHelper.getUpdated().values());
104: DemoInMemoryEditableList.this .getMessageCtx().showMessage(
105: MessageContext.INFO_TYPE,
106: "Deleted: " + inMemoryHelper.getDeleted());
107: }
108: }
109:
110: public class DemoEditableRowHandler extends
111: ValidOnlyIndividualFormRowHandler {
112: private static final long serialVersionUID = 1L;
113: private FeedBackProvidingListener listener = new FeedBackProvidingListener();
114:
115: public Object getRowKey(Object row) {
116: return ((DataDTO) row).getId();
117: }
118:
119: public void saveValidRow(FormRow editableRow) throws Exception {
120: //Reading data
121: DataDTO rowData = (DataDTO) ((BeanFormWidget) editableRow
122: .getForm()).writeToBean(editableRow.getRow());
123:
124: //Saving data
125: inMemoryHelper.update(editableRow.getKey(), rowData);
126: editableRow.getForm().markBaseState();
127: }
128:
129: public void deleteRow(Object key) throws Exception {
130: //Deleting data
131: inMemoryHelper.delete(key);
132: }
133:
134: public void addValidRow(FormWidget addForm) throws Exception {
135: DataDTO rowData = (DataDTO) ((BeanFormWidget) addForm)
136: .writeToBean(new DataDTO());
137:
138: inMemoryHelper.add(rowData);
139: }
140:
141: public void initFormRow(FormRow editableRow, Object row)
142: throws Exception {
143: BeanFormWidget rowForm = (BeanFormWidget) editableRow
144: .getForm();
145:
146: addCommonFormFields(rowForm);
147:
148: ButtonControl saveButton = FormListUtil
149: .addSaveButtonToRowForm("#", formList, rowForm,
150: editableRow.getKey());
151: FeedBackProvidingListener listener = new FeedBackProvidingListener();
152: saveButton.addOnClickEventListener(listener);
153: ButtonControl deleteButton = FormListUtil
154: .addDeleteButtonToRowForm("#", formList, rowForm,
155: editableRow.getKey());
156: deleteButton.addOnClickEventListener(listener);
157:
158: rowForm.readFromBean(row);
159: editableRow.getForm().markBaseState();
160: }
161:
162: public void initAddForm(FormWidget addForm) throws Exception {
163: addCommonFormFields(addForm);
164:
165: ButtonControl addButton = FormListUtil
166: .addAddButtonToAddForm("#", formList, addForm);
167: addButton.addOnClickEventListener(listener);
168: }
169:
170: private void addCommonFormFields(FormWidget form)
171: throws Exception {
172: form.addElement("stringField", "#String field",
173: new TextControl(), new StringData(), true);
174: form.addElement("longField", "#Long field",
175: new NumberControl(), new LongData(), true);
176: form.addElement("booleanField", "#Boolean field",
177: new CheckboxControl(), new BooleanData(), true);
178: }
179: }
180: }
|