001    package org.springframework.richclient.form.binding.support;
002    
003    import org.springframework.binding.form.FormModel;
004    import org.springframework.richclient.command.AbstractCommand;
005    
006    import java.util.List;
007    import java.util.ArrayList;
008    
009    public abstract class AbstractCRUDBinding extends CustomBinding
010    {
011    
012        private AbstractCommand removeCommand;
013    
014        private AbstractCommand addCommand;
015    
016        private AbstractCommand detailCommand;
017    
018        private AbstractCommand editCommand;
019    
020        private List<AbstractCommand>  commands;
021    
022        private boolean addSupported;
023    
024        private boolean removeSupported;
025    
026        private boolean editSupported;
027    
028        private boolean showDetailSupported;
029    
030        protected AbstractCRUDBinding(FormModel formModel, String formPropertyPath, Class requiredSourceClass)
031        {
032            super(formModel, formPropertyPath, requiredSourceClass);
033        }
034    
035        protected List<AbstractCommand> getCommands()
036        {
037            if (this.commands == null)
038                this.commands = createCommands();
039            return this.commands;
040        }
041    
042        protected List<AbstractCommand> createCommands()
043        {
044            int i = isAddSupported() ? 1 : 0;
045            i = isRemoveSupported() ? i + 1 : i;
046            i = isShowDetailSupported() ? i + 1 : i;
047            i = isEditSupported() ? i + 1 : i;
048            this.commands = new ArrayList<AbstractCommand>(i);
049            if (isShowDetailSupported())
050                commands.add(getDetailCommand());
051            if (isAddSupported())
052                commands.add(getAddCommand());
053            if (isRemoveSupported())
054                commands.add(getRemoveCommand());
055            if (isEditSupported())
056                commands.add(getEditCommand());
057            return this.commands;
058        }
059    
060        protected AbstractCommand getAddCommand()
061        {
062            if (this.addCommand == null)
063                this.addCommand = createAddCommand();
064            return this.addCommand;
065        }
066    
067        abstract protected AbstractCommand createAddCommand();
068    
069        protected AbstractCommand getRemoveCommand()
070        {
071            if (this.removeCommand == null)
072                this.removeCommand = createRemoveCommand();
073            return this.removeCommand;
074        }
075    
076        abstract protected AbstractCommand createRemoveCommand();
077    
078        protected AbstractCommand getDetailCommand()
079        {
080            if (this.detailCommand == null)
081                this.detailCommand = createDetailCommand();
082            return this.detailCommand;
083        }
084    
085        abstract protected AbstractCommand createDetailCommand();
086    
087        protected AbstractCommand getEditCommand()
088        {
089            if (this.editCommand == null)
090                this.editCommand = createEditCommand();
091            return this.editCommand;
092        }
093    
094        abstract protected AbstractCommand createEditCommand();
095    
096        public boolean isAddSupported()
097        {
098            return addSupported;
099        }
100    
101        public void setAddSupported(boolean addSupported)
102        {
103            this.addSupported = addSupported;
104        }
105    
106        public boolean isEditSupported()
107        {
108            return editSupported;
109        }
110    
111        public void setEditSupported(boolean editSupported)
112        {
113            this.editSupported = editSupported;
114        }
115    
116        public boolean isRemoveSupported()
117        {
118            return removeSupported;
119        }
120    
121        public void setRemoveSupported(boolean removeSupported)
122        {
123            this.removeSupported = removeSupported;
124        }
125    
126        public boolean isShowDetailSupported()
127        {
128            return showDetailSupported;
129        }
130    
131        public void setShowDetailSupported(boolean showDetailSupported)
132        {
133            this.showDetailSupported = showDetailSupported;
134        }
135    }
136