001    package org.springframework.richclient.command.support;
002    
003    import org.springframework.richclient.application.Application;
004    import org.springframework.richclient.application.config.ApplicationObjectConfigurer;
005    import org.springframework.richclient.dialog.ApplicationDialog;
006    import org.springframework.richclient.dialog.TitledWidgetApplicationDialog;
007    
008    import java.awt.*;
009    
010    /**
011     * Widget Dialog Command shows a specific widget in a dialog.
012     */
013    public class WidgetDialogCommand extends AbstractWidgetCommand
014    {
015        private ApplicationDialog dialog;
016    
017        /** parent for centering the dialog. */
018        private Component parent;
019    
020        public WidgetDialogCommand()
021        {
022            super();
023        }
024    
025        public WidgetDialogCommand(String id)
026        {
027            super();
028            setId(id);
029        }
030    
031        protected void doExecuteCommand()
032        {
033            dialog = (dialog == null) ? createDialog() : dialog;
034            if (getParent() != null)
035            {
036                dialog.setParentComponent(getParent());
037            }
038            dialog.showDialog();
039        }
040    
041        protected ApplicationDialog createDialog()
042        {
043            ApplicationDialog newlyCreatedDialog = new TitledWidgetApplicationDialog(getWidget());
044            ((ApplicationObjectConfigurer) Application.services().getService(ApplicationObjectConfigurer.class))
045                    .configure(newlyCreatedDialog, getId());
046            return newlyCreatedDialog;
047        }
048    
049        public Component getParent()
050        {
051            return parent;
052        }
053    
054        /**
055         * @param dialogParent
056         *            The parent of the dialog for preservation of hierarchy and correct modality.
057         */
058        public void setParent(Component dialogParent)
059        {
060            this.parent = dialogParent;
061        }
062    }
063