001 package org.springframework.richclient.command;
002
003 import javax.swing.JComponent;
004
005 /**
006 * CommandGroupComponentBuilder is a s-pecial case of the
007 * {@link org.springframework.richclient.command.CommandGroupModelBuilder}that
008 * is specifically designed to build swing GUI components based on the passed in
009 * command-group.
010 *
011 * Basically it wraps the buildXXXModel method hierarchy of the
012 * {@link org.springframework.richclient.command.CommandGroupModelBuilder}into
013 * a buildXXXComponent structure that does the necessary typecasting allong the
014 * way.
015 *
016 * @see org.springframework.richclient.command.CommandGroupModelBuilder
017 */
018 public abstract class CommandGroupJComponentBuilder extends CommandGroupModelBuilder
019 {
020
021 /**
022 * JComponent-building variant of the
023 * {@link CommandGroupModelBuilder#buildModel(CommandGroup)}
024 */
025 public JComponent buildComponent(CommandGroup commandGroup)
026 {
027 return (JComponent) buildModel(commandGroup);
028 }
029
030 /**
031 * JComponent-building variant of the
032 * {@link CommandGroupModelBuilder#buildRootModel(CommandGroup)}
033 */
034 protected abstract JComponent buildRootComponent(AbstractCommand command);
035
036 /**
037 * JComponent-building variant of the
038 * {@link CommandGroupModelBuilder#buildChildModel(Object, AbstractCommand, int)}
039 */
040 protected abstract JComponent buildChildComponent(JComponent parentComponent, AbstractCommand command,
041 int level);
042
043 /**
044 * JComponent-building variant of the
045 * {@link CommandGroupModelBuilder#buildGroupModel(Object, CommandGroup, int)}
046 */
047 protected abstract JComponent buildGroupComponent(JComponent parentComponent, CommandGroup command,
048 int level);
049
050 /**
051 * Implementation wrapping around the
052 * {@link #buildRootComponent(AbstractCommand)}
053 */
054 protected final Object buildRootModel(CommandGroup commandGroup)
055 {
056 return buildRootComponent(commandGroup);
057 }
058
059 /**
060 * Implementation wrapping around the
061 * {@link #buildGroupComponent(JComponent, CommandGroup, int)}
062 */
063 protected final Object buildGroupModel(Object parentModel, CommandGroup commandGroup, int level)
064 {
065 return buildGroupComponent((JComponent) parentModel, commandGroup, level);
066 }
067
068 /**
069 * Implementation wrapping around the
070 * {@link #buildChildComponent(JComponent, AbstractCommand, int)dModel(AbstractCommand)}
071 */
072 protected final Object buildChildModel(Object parentModel, AbstractCommand command, int level)
073 {
074 return buildChildComponent((JComponent) parentModel, command, level);
075 }
076 }
077