/*
* Copyright 2009 Peter Karich, peat_hal ‘at’ users ‘dot’ sourceforge ‘dot’ net.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* under the License.
*/
package de.timefinder.core.ui.form;
import de.timefinder.data.access.Dao;
import java.awt.BorderLayout;
import javolution.util.FastMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JComponent;
import javax.swing.JPanel;
import org.springframework.binding.form.FormModel;
import org.springframework.binding.form.HierarchicalFormModel;
import org.springframework.binding.value.ValueModel;
import org.springframework.binding.value.support.ObservableList;
import org.springframework.richclient.dialog.control.ExtTabbedPane;
import org.springframework.richclient.dialog.control.Tab;
import org.springframework.richclient.form.AbstractDetailForm;
import org.springframework.richclient.form.builder.TableFormBuilder;
import org.springframework.richclient.util.Assert;
/**
* Will be used to add/delete an object from the collection dao.getAll
* with the help of the provided form.
*
* @author Peter Karich, peat_hal ‘at’ users ‘dot’ sourceforge ‘dot’ net
* @see CollectionMasterDetailForm
*/
public abstract class AbstractDaoForm extends AbstractDetailForm {
private Dao dao;
private TableFormBuilder propertiesFB;
private ExtTabbedPane pane;
private Map<String, TableFormBuilder> allTabs = new FastMap<String, TableFormBuilder>();
private ObservableList masterList;
public AbstractDaoForm(HierarchicalFormModel parentFormModel,
String formId, ValueModel childFormObjectHolder, ObservableList masterList) {
super(parentFormModel, formId, childFormObjectHolder, masterList);
this.masterList = masterList;
}
public AbstractDaoForm(FormModel formModel, String formId, ObservableList editableItemList) {
super(formModel, formId, editableItemList);
}
// @Override
// public ValidationResultsReporter newSingleLineResultsReporter(Messagable messageReceiver) {
// ValidationResultsReporter l = super.newSingleLineResultsReporter(messageReceiver );
// subForm.newSimpleValidationResultsReporter(getFormModel().getValidationResults(), messageReceiver );
// return l;
// }
public TableFormBuilder getFormBuilder() {
if (propertiesFB == null) {
propertiesFB = new TableFormBuilder(getBindingFactory());
propertiesFB.setLabelAttributes("colGrId=label colSpec=right:pref");
}
return propertiesFB;
}
@Override
protected JComponent createFormControl() {
Assert.notNull(dao);
addTabs();
JPanel mainPanel = new JPanel(new BorderLayout());
if (allTabs.isEmpty()) {
mainPanel.add(getFormBuilder().getForm(), BorderLayout.CENTER);
} else {
pane = new ExtTabbedPane();
pane.addTab(new Tab("Properties", getFormBuilder().getForm()));
for (Entry<String, TableFormBuilder> entry : allTabs.entrySet()) {
pane.addTab(new Tab(entry.getKey(), entry.getValue().getForm()));
}
mainPanel.add(pane.getControl(), BorderLayout.CENTER);
}
mainPanel.add(createButtonBar(), BorderLayout.SOUTH);
updateControlsForState();
return mainPanel;
}
protected TableFormBuilder createTab(String str) {
TableFormBuilder formBuilder = new TableFormBuilder(getBindingFactory());
formBuilder.setLabelAttributes("colGrId=label colSpec=right:pref");
allTabs.put(str, formBuilder);
return formBuilder;
}
protected void addTabs() {
}
public void setDao(Dao dao) {
this.dao = dao;
}
public Dao getDao() {
return dao;
}
/**
* Overwrites because we need to avoid masterEvent.add
* @see org.springframework.richclient.form.AbstractForm
* @see org.springframework.richclient.form.AbstractDetailForm
*/
@Override
@SuppressWarnings("unchecked")
public void postCommit(FormModel formModel) {
if (isEditingNewFormObject()) {
if (dao != null)
dao.attach(formModel.getFormObject());
// ATTENTION: now suppress adding to list!
// masterList.add(formModel.getFormObject());
setEditingFormObjectIndexSilently(masterList.size() - 1);
} else {
int index = getEditingFormObjectIndex();
// Avoid updating unless we have actually selected an object for edit
if (index >= 0) {
// if we add these lines like in the original class
// the object will be duplicated sometimes! (Threading problem?)
// IndexAdapter adapter = masterList.getIndexAdapter(index);
// adapter.setValue(formModel.getFormObject());
// adapter.fireIndexedObjectChanged();
}
}
setEditingNewFormObject(false);
setSelectedIndex(-1);
}
@Override
protected Object createNewObject() {
requestFocusInWindow();
return dao.create();
}
public boolean requestFocusInWindow() {
return false;
}
}