Coverage Report - org.jtheque.films.view.impl.panels.principals.RealizerView
 
Classes in this File Line Coverage Branch Coverage Complexity
RealizerView
0 %
0/17
N/A
1
RealizerView$1
N/A
N/A
1
RealizerView$RealizerViewImpl
0 %
0/94
0 %
0/4
1
 
 1  
 package org.jtheque.films.view.impl.panels.principals;
 2  
 
 3  
 /*
 4  
  * This file is part of JTheque.
 5  
  *
 6  
  * JTheque is free software: you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation, either version 3 of the License.
 9  
  *
 10  
  * JTheque is distributed in the hope that it will be useful,
 11  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  
  * GNU General Public License for more details.
 14  
  *
 15  
  * You should have received a copy of the GNU General Public License
 16  
  * along with JTheque.  If not, see <http://www.gnu.org/licenses/>.
 17  
  */
 18  
 
 19  
 import org.jdesktop.swingx.JXHyperlink;
 20  
 import org.jdesktop.swingx.JXTitledPanel;
 21  
 import org.jdesktop.swingx.border.DropShadowBorder;
 22  
 import org.jtheque.core.managers.Managers;
 23  
 import org.jtheque.core.managers.beans.IBeansManager;
 24  
 import org.jtheque.core.managers.error.JThequeError;
 25  
 import org.jtheque.core.managers.persistence.able.DataContainer;
 26  
 import org.jtheque.core.utils.ui.Borders;
 27  
 import org.jtheque.core.utils.ui.PanelBuilder;
 28  
 import org.jtheque.core.utils.ui.constraints.ConstraintManager;
 29  
 import org.jtheque.films.services.able.IRealizersService;
 30  
 import org.jtheque.films.utils.Constants;
 31  
 import org.jtheque.films.view.able.IRealizerView;
 32  
 import org.jtheque.films.view.impl.actions.actor.NewCountryAction;
 33  
 import org.jtheque.films.view.impl.actions.sort.AcSortRealizer;
 34  
 import org.jtheque.films.view.impl.fb.IPersonFormBean;
 35  
 import org.jtheque.films.view.impl.fb.PersonFormBean;
 36  
 import org.jtheque.films.view.impl.models.RealizersModel;
 37  
 import org.jtheque.films.view.impl.models.able.IRealizersModel;
 38  
 import org.jtheque.films.view.impl.toolbars.JPanelRealizerToolBar;
 39  
 import org.jtheque.primary.controller.able.FormBean;
 40  
 import org.jtheque.primary.od.able.Country;
 41  
 import org.jtheque.primary.od.able.Person;
 42  
 import org.jtheque.primary.view.impl.components.panels.JThequeTitledPanel;
 43  
 import org.jtheque.primary.view.impl.listeners.ObjectChangedEvent;
 44  
 import org.jtheque.primary.view.impl.models.DataContainerCachedComboBoxModel;
 45  
 import org.jtheque.primary.view.impl.models.NotesComboBoxModel;
 46  
 import org.jtheque.primary.view.impl.renderers.NoteComboRenderer;
 47  
 import org.jtheque.utils.ui.GridBagUtils;
 48  
 
 49  
 import javax.annotation.PostConstruct;
 50  
 import javax.swing.*;
 51  
 import javax.swing.event.TreeSelectionListener;
 52  
 import java.awt.*;
 53  
 import java.util.Collection;
 54  
 
 55  
 /**
 56  
  * User interface to edit/add realizer.
 57  
  *
 58  
  * @author Baptiste Wicht
 59  
  */
 60  0
 public final class RealizerView extends AbstractPrincipalDelegatedView implements IRealizerView {
 61  
     /**
 62  
      * Construct a new ActorView.
 63  
      */
 64  
     public RealizerView() {
 65  0
         super(3, "realizer.data.title");
 66  
 
 67  0
         UIManager.put("JXTitledPanel.title.foreground", Color.white);
 68  0
     }
 69  
 
 70  
 
 71  
     @Override
 72  
     public IPersonFormBean fillPersonFormBean() {
 73  0
         IPersonFormBean fb = new PersonFormBean();
 74  
 
 75  0
         getImplementationView().fillFormBean(fb);
 76  
 
 77  0
         return fb;
 78  
     }
 79  
 
 80  
     @Override
 81  
     public void objectChanged(ObjectChangedEvent event) {
 82  0
         getImplementationView().setCurrent(event.getObject());
 83  0
     }
 84  
 
 85  
     @Override
 86  
     public IRealizersModel getModel() {
 87  0
         return (IRealizersModel) super.getModel();
 88  
     }
 89  
 
 90  
     @PostConstruct
 91  
     public void init() {
 92  0
         buildInEDT();
 93  
         
 94  0
         getModel().addCurrentObjectListener(this);
 95  0
     }
 96  
 
 97  
     @Override
 98  
     protected void buildDelegatedView() {
 99  0
         RealizerViewImpl impl = new RealizerViewImpl();
 100  0
         setView(impl);
 101  0
         impl.build();
 102  0
     }
 103  
 
 104  0
     private static final class RealizerViewImpl extends AbstractPrincipalDataPanel<IRealizersModel> {
 105  
         private JXTitledPanel panelRealizer;
 106  
 
 107  
         private JTextField fieldFirstName;
 108  
         private JTextField fieldName;
 109  
         private DataContainerCachedComboBoxModel<Country> modelCountries;
 110  
         private NotesComboBoxModel modelNote;
 111  
         private JComboBox comboCountries;
 112  
         private JComboBox comboNote;
 113  
 
 114  
         private final Action newCountryAction;
 115  
 
 116  
         private static final int FIELD_COLUMNS = 20;
 117  
 
 118  
         private RealizerViewImpl() {
 119  0
             super(IRealizersService.DATA_TYPE);
 120  
 
 121  0
             setModel(new RealizersModel());
 122  
             
 123  0
             newCountryAction = new NewCountryAction();
 124  0
         }
 125  
 
 126  
         /**
 127  
          * Build the view.
 128  
          */
 129  
         private void build() {
 130  0
             getModel().addDisplayListListener(this);
 131  
 
 132  0
             PanelBuilder builder = new PanelBuilder(this);
 133  
 
 134  0
             buildPanelList(builder);
 135  0
             buildPanelTri(builder);
 136  0
             buildPanelRealizer(builder);
 137  
 
 138  0
             setBorder(Borders.DIALOG_BORDER);
 139  
 
 140  0
             getTree().addTreeSelectionListener(Managers.getManager(IBeansManager.class).<TreeSelectionListener>getBean("realizerController"));
 141  
 
 142  0
             selectFirst();
 143  0
         }
 144  
 
 145  
         /**
 146  
          * Build the internal panel realizer.
 147  
          *
 148  
          * @param parent The builder of the frame.
 149  
          */
 150  
         private void buildPanelRealizer(PanelBuilder parent) {
 151  0
             panelRealizer = new JThequeTitledPanel("realizer.view.panel.realizer.title");
 152  0
             panelRealizer.setBorder(new DropShadowBorder());
 153  0
             panelRealizer.setTitleFont(panelRealizer.getTitleFont().deriveFont(Font.BOLD));
 154  
 
 155  0
             PanelBuilder builder = new PanelBuilder();
 156  
 
 157  0
             JPanelRealizerToolBar toolBar = new JPanelRealizerToolBar();
 158  
 
 159  0
             setToolBar(toolBar);
 160  
 
 161  0
             builder.add(toolBar, builder.gbcSet(0, 0, GridBagUtils.HORIZONTAL, 0, 1));
 162  
 
 163  0
             addNamesFields(builder);
 164  0
             addCountryField(builder);
 165  0
             addNoteField(builder);
 166  
 
 167  0
             panelRealizer.setContentContainer(builder.getPanel());
 168  
 
 169  0
             parent.add(panelRealizer, parent.gbcSet(1, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 1, 2, 1 - Constants.A_QUARTER, 1.0));
 170  0
         }
 171  
 
 172  
         /**
 173  
          * Add the field for the name and the first name of the realizer.
 174  
          *
 175  
          * @param builder The builder of the view.
 176  
          */
 177  
         private void addNamesFields(PanelBuilder builder) {
 178  0
             builder.addI18nLabel(Constants.Properties.Person.FIRST_NAME, builder.gbcSet(0, 1));
 179  
 
 180  0
             fieldFirstName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 1, GridBagUtils.NONE, 0, 1));
 181  0
             ConstraintManager.configure(fieldFirstName, Constants.Properties.Person.FIRST_NAME);
 182  0
             fieldFirstName.setEnabled(false);
 183  
 
 184  0
             builder.addI18nLabel(Constants.Properties.Person.NAME, builder.gbcSet(0, 2));
 185  
 
 186  0
             fieldName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 2, GridBagUtils.NONE, 0, 1));
 187  0
             ConstraintManager.configure(fieldName, Constants.Properties.Person.NAME);
 188  0
             fieldName.setEnabled(false);
 189  0
         }
 190  
 
 191  
         /**
 192  
          * Add the field for country.
 193  
          *
 194  
          * @param builder The builder.
 195  
          */
 196  
         private void addCountryField(PanelBuilder builder) {
 197  0
             builder.addI18nLabel(Constants.Properties.Person.COUNTRY, builder.gbcSet(0, 3));
 198  
 
 199  0
             modelCountries = new DataContainerCachedComboBoxModel<Country>(Managers.getManager(IBeansManager.class).<DataContainer<Country>>getBean("countriesService"));
 200  
 
 201  0
             comboCountries = builder.addComboBox(modelCountries, builder.gbcSet(1, 3));
 202  0
             comboCountries.setEnabled(false);
 203  
 
 204  0
             newCountryAction.setEnabled(false);
 205  
 
 206  0
             builder.addButton(newCountryAction, builder.gbcSet(2, 3, GridBagUtils.NONE, 0, 1));
 207  0
         }
 208  
 
 209  
         /**
 210  
          * Add the field for note.
 211  
          *
 212  
          * @param builder The builder.
 213  
          */
 214  
         private void addNoteField(PanelBuilder builder) {
 215  0
             builder.addI18nLabel(Constants.Properties.Person.NOTE, builder.gbcSet(0, 4));
 216  
 
 217  0
             modelNote = new NotesComboBoxModel();
 218  
 
 219  0
             comboNote = builder.addComboBox(modelNote, builder.gbcSet(1, 4, GridBagUtils.NONE, GridBagUtils.ABOVE_BASELINE_LEADING, 0, 0, 1.0, 1.0));
 220  0
             comboNote.setEnabled(false);
 221  0
             comboNote.setRenderer(new NoteComboRenderer());
 222  0
         }
 223  
 
 224  
         /**
 225  
          * Build the internal panel sort.
 226  
          *
 227  
          * @param parent The builder of the frame.
 228  
          */
 229  
         private static void buildPanelTri(PanelBuilder parent) {
 230  0
             JXTitledPanel panelTri = new JThequeTitledPanel("realizer.view.panel.sort.title");
 231  0
             panelTri.setBorder(new DropShadowBorder());
 232  0
             panelTri.setTitleFont(panelTri.getTitleFont().deriveFont(Font.BOLD));
 233  
 
 234  0
             PanelBuilder builder = new PanelBuilder();
 235  
 
 236  0
             JXHyperlink linkTriPays = builder.add(new JXHyperlink(new AcSortRealizer("realizer.view.actions.sort.country", "Countries")),
 237  
                     builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 238  0
             linkTriPays.setClickedColor(linkTriPays.getUnclickedColor());
 239  
 
 240  0
             JXHyperlink linkTriNote = builder.add(new JXHyperlink(new AcSortRealizer("realizer.view.actions.sort.note", "Notes")),
 241  
                     builder.gbcSet(0, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 242  0
             linkTriNote.setClickedColor(linkTriNote.getUnclickedColor());
 243  
 
 244  0
             panelTri.setContentContainer(builder.getPanel());
 245  
 
 246  0
             parent.add(panelTri, parent.gbcSet(0, 1, GridBagUtils.HORIZONTAL, GridBagUtils.FIRST_LINE_START, Constants.A_QUARTER, 0.0));
 247  0
         }
 248  
 
 249  
         /**
 250  
          * Build the internal panel list.
 251  
          *
 252  
          * @param parent The builder of the frame.
 253  
          */
 254  
         private void buildPanelList(PanelBuilder parent) {
 255  0
             JXTitledPanel panelList = new JThequeTitledPanel("realizer.view.panel.list.title");
 256  0
             panelList.setBorder(new DropShadowBorder());
 257  0
             panelList.setTitleFont(panelList.getTitleFont().deriveFont(Font.BOLD));
 258  
 
 259  0
             PanelBuilder builder = new PanelBuilder();
 260  
 
 261  0
             setTreeModel(getSorter().createInitialModel(IRealizersService.DATA_TYPE));
 262  
 
 263  0
             initTree();
 264  
 
 265  0
             builder.addScrolled(getTree(), builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 0, 0, 1.0, 1.0));
 266  
 
 267  0
             panelList.setContentContainer(builder.getPanel());
 268  
 
 269  0
             parent.add(panelList, parent.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, Constants.A_QUARTER, 1.0));
 270  0
         }
 271  
 
 272  
         @Override
 273  
         public void fillFormBean(FormBean formBean) {
 274  0
             IPersonFormBean fb = (IPersonFormBean) formBean;
 275  
 
 276  0
             fb.setName(fieldName.getText());
 277  0
             fb.setFirstName(fieldFirstName.getText());
 278  0
             fb.setNote(modelNote.getSelectedNote());
 279  0
             fb.setCountry(modelCountries.getSelectedData());
 280  0
         }
 281  
 
 282  
         @Override
 283  
         public void setCurrent(Object object) {
 284  0
             Person current = (Person) object;
 285  
 
 286  0
             assert current.getType().equals(IRealizersService.PERSON_TYPE) : "The person must of type Actor";
 287  
 
 288  0
             panelRealizer.setTitle(current.getDisplayableText());
 289  
 
 290  0
             fieldFirstName.setText(current.getFirstName());
 291  0
             fieldName.setText(current.getName());
 292  0
             comboCountries.setSelectedItem(current.getTheCountry().getName());
 293  0
             comboNote.setSelectedItem(current.getNote());
 294  0
         }
 295  
 
 296  
         @Override
 297  
         protected void validate(Collection<JThequeError> errors) {
 298  0
             ConstraintManager.validate(Constants.Properties.Person.NAME, fieldName.getText(), errors);
 299  0
             ConstraintManager.validate(Constants.Properties.Person.FIRST_NAME, fieldFirstName.getText(), errors);
 300  0
             ConstraintManager.validate(Constants.Properties.Person.COUNTRY, modelCountries.getSelectedData(), errors);
 301  0
         }
 302  
 
 303  
         @Override
 304  
         public void setEnabled(boolean enabled) {
 305  0
             fieldFirstName.setEnabled(enabled);
 306  0
             fieldName.setEnabled(enabled);
 307  0
             comboCountries.setEnabled(enabled);
 308  0
             comboNote.setEnabled(enabled);
 309  0
             newCountryAction.setEnabled(enabled);
 310  0
         }
 311  
     }
 312  
 
 313  
 }