001    package org.springframework.richclient.samples.showcase.binding;
002    
003    import org.springframework.richclient.dialog.TitledApplicationDialog;
004    import org.springframework.richclient.form.AbstractForm;
005    import org.springframework.richclient.form.FormModelHelper;
006    import org.springframework.richclient.form.binding.swing.SwingBindingFactory;
007    import org.springframework.richclient.form.builder.TableFormBuilder;
008    
009    import javax.swing.*;
010    import java.util.ArrayList;
011    import java.util.List;
012    
013    /**
014     * This dialog shows a ShuttleList in which several items can be selected and added to a list on the backing formObject.
015     * Mind that this is far from perfect, but does illustrate the binding and the specific component that is created.
016     *
017     * @see org.springframework.richclient.components.ShuttleList
018     * @see org.springframework.richclient.form.binding.swing.ShuttleListBinder
019     */
020    public class ShuttleListBindingDialog extends TitledApplicationDialog {
021    
022        /** The fixed set of regions that can be selected. */
023        private List<String> selectableRegions;
024    
025        public ShuttleListBindingDialog() {
026            selectableRegions = new ArrayList<String>();
027            selectableRegions.add("Land of the Dead");
028            selectableRegions.add("My little Pony Heaven");
029            selectableRegions.add("Bikini World");
030            selectableRegions.add("Paradise City");
031            selectableRegions.add("The Big Banana");
032        }
033    
034        /** Value object with a list of regions that is a subselection of a given set. */
035        private class Values {
036    
037            private List<String> selectedRegions;
038    
039            public List<String> getSelectedRegions() {
040                return selectedRegions;
041            }
042    
043            public void setSelectedRegions(List<String> selectedRegions) {
044                this.selectedRegions = selectedRegions;
045            }
046        }
047    
048        private class ShuttleListForm extends AbstractForm {
049    
050            public ShuttleListForm() {
051                super(FormModelHelper.createFormModel(new Values()));
052            }
053    
054            @Override
055            protected JComponent createFormControl() {
056                SwingBindingFactory bindingFactory = new SwingBindingFactory(getFormModel());
057                TableFormBuilder builder = new TableFormBuilder(bindingFactory);
058                builder.setLabelAttributes("colGrId=label colSpec=left:pref rowSpec=top:pref");
059                builder.add(bindingFactory.createBoundShuttleList("selectedRegions", selectableRegions));
060                return builder.getForm();
061            }
062    
063        }
064    
065        @Override
066        protected JComponent createTitledDialogContentPane() {
067            return (new ShuttleListForm()).getControl();
068        }
069    
070        @Override
071        protected boolean onFinish() {
072            return true;
073        }
074    
075    }