001    package org.springframework.richclient.widget;
002    
003    import org.springframework.richclient.form.AbstractForm;
004    import org.springframework.richclient.command.AbstractCommand;
005    import org.springframework.binding.form.HierarchicalFormModel;
006    import org.springframework.binding.form.FormModel;
007    import org.springframework.binding.value.ValueModel;
008    
009    import javax.swing.*;
010    import java.util.List;
011    import java.util.Collections;
012    
013    /**
014     * Provides an easy way to create widgets based on an AbstractForm.
015     */
016    public abstract class AbstractWidgetForm extends AbstractForm implements Widget
017    {
018        /** Id for the undo command. */
019        public static final String UNDO_CMD_ID = "undo";
020    
021        /** Id for the save command. */
022        public static final String SAVE_CMD_ID = "save";
023    
024        protected boolean showing = false;
025    
026        protected AbstractWidgetForm() {
027            super();
028        }
029    
030        protected AbstractWidgetForm(String formId) {
031            super(formId);
032        }
033    
034        protected AbstractWidgetForm(Object formObject) {
035            super(formObject);
036        }
037    
038        protected AbstractWidgetForm(FormModel pageFormModel) {
039            super(pageFormModel);
040        }
041    
042        protected AbstractWidgetForm(FormModel formModel, String formId) {
043            super(formModel, formId);
044        }
045    
046        protected AbstractWidgetForm(HierarchicalFormModel parentFormModel, String formId, String childFormObjectPropertyPath) {
047            super(parentFormModel, formId, childFormObjectPropertyPath);
048        }
049    
050        protected AbstractWidgetForm(HierarchicalFormModel parentFormModel, String formId, ValueModel childFormObjectHolder) {
051            super(parentFormModel, formId, childFormObjectHolder);
052        }
053    
054        public boolean canClose()
055        {
056            return true;
057        }
058    
059        public List<? extends AbstractCommand> getCommands()
060        {
061            return Collections.emptyList();
062        }
063    
064        public JComponent getComponent()
065        {
066            return getControl();
067        }
068    
069        public void onAboutToHide()
070        {
071            showing = false;
072        }
073    
074        public void onAboutToShow()
075        {
076            showing = true;
077        }
078    
079        public boolean isShowing()
080        {
081            return showing;
082        }
083    
084        @Override
085        protected String getCommitCommandFaceDescriptorId()
086        {
087            return SAVE_CMD_ID;
088        }
089    
090        @Override
091        protected String getRevertCommandFaceDescriptorId()
092        {
093            return UNDO_CMD_ID;
094        }
095    }
096