Coverage Report - org.jtheque.films.view.impl.panels.RealizerView
 
Classes in this File Line Coverage Branch Coverage Complexity
RealizerView
0 %
0/109
0 %
0/4
1
 
 1  
 package org.jtheque.films.view.impl.panels;
 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.JXTree;
 22  
 import org.jdesktop.swingx.border.DropShadowBorder;
 23  
 import org.jtheque.core.managers.error.JThequeError;
 24  
 import org.jtheque.core.utils.ui.Borders;
 25  
 import org.jtheque.core.utils.ui.PanelBuilder;
 26  
 import org.jtheque.core.utils.ui.constraints.ConstraintManager;
 27  
 import org.jtheque.films.controllers.able.IRealizerController;
 28  
 import org.jtheque.films.services.able.IRealizersService;
 29  
 import org.jtheque.films.utils.Constants;
 30  
 import org.jtheque.films.view.able.IRealizerView;
 31  
 import org.jtheque.films.view.impl.fb.IPersonFormBean;
 32  
 import org.jtheque.films.view.impl.fb.PersonFormBean;
 33  
 import org.jtheque.films.view.impl.models.able.IRealizersModel;
 34  
 import org.jtheque.films.view.impl.toolbars.JPanelRealizerToolBar;
 35  
 import org.jtheque.primary.od.able.Country;
 36  
 import org.jtheque.primary.od.able.Person;
 37  
 import org.jtheque.primary.services.able.ICountriesService;
 38  
 import org.jtheque.primary.view.able.ToolbarView;
 39  
 import org.jtheque.primary.view.impl.components.panels.JThequeTitledPanel;
 40  
 import org.jtheque.primary.view.impl.components.panels.PrincipalDataPanel;
 41  
 import org.jtheque.primary.view.impl.listeners.ObjectChangedEvent;
 42  
 import org.jtheque.primary.view.impl.models.DataContainerCachedComboBoxModel;
 43  
 import org.jtheque.primary.view.impl.models.NotesComboBoxModel;
 44  
 import org.jtheque.primary.view.impl.renderers.JThequeTreeCellRenderer;
 45  
 import org.jtheque.primary.view.impl.renderers.NoteComboRenderer;
 46  
 import org.jtheque.primary.view.impl.sort.SortManager;
 47  
 import org.jtheque.utils.ui.GridBagUtils;
 48  
 
 49  
 import javax.annotation.PostConstruct;
 50  
 import javax.annotation.Resource;
 51  
 import javax.swing.Action;
 52  
 import javax.swing.JComboBox;
 53  
 import javax.swing.JComponent;
 54  
 import javax.swing.JTextField;
 55  
 import java.awt.Font;
 56  
 import java.util.Collection;
 57  
 
 58  
 /**
 59  
  * User interface to edit/add realizer.
 60  
  *
 61  
  * @author Baptiste Wicht
 62  
  */
 63  0
 public final class RealizerView extends PrincipalDataPanel<IRealizersModel> implements IRealizerView {
 64  
     private static final long serialVersionUID = -4304886748651187432L;
 65  
 
 66  
     private JXTitledPanel panelRealizer;
 67  
 
 68  
     private JTextField fieldFirstName;
 69  
     private JTextField fieldName;
 70  
     private DataContainerCachedComboBoxModel<Country> modelCountries;
 71  
     private NotesComboBoxModel modelNote;
 72  
     private JComboBox comboCountries;
 73  
     private JComboBox comboNote;
 74  
     private final JPanelRealizerToolBar toolBar;
 75  
 
 76  
     private JXTree treeRealizers;
 77  
 
 78  
     /* Instances */
 79  0
     private final SortManager sorter = new SortManager();
 80  
 
 81  
     @Resource
 82  
     private ICountriesService countriesService;
 83  
 
 84  
     @Resource
 85  
     private IRealizerController realizerController;
 86  
 
 87  
     private final Action newCountryAction;
 88  
     private final Action sortByNoteAction;
 89  
     private final Action sortByCountryAction;
 90  
     private static final int FIELD_COLUMNS = 20;
 91  
     private static final double A_QUARTER = 0.25;
 92  
 
 93  
     /**
 94  
      * Construct a new ActorView.
 95  
      *
 96  
      * @param newCountryAction    The action to create a new country.
 97  
      * @param sortByNoteAction    The action to sort by note.
 98  
      * @param sortByCountryAction The action to sort by country.
 99  
      * @param toolBar             The tool bar.
 100  
      */
 101  
     public RealizerView(Action newCountryAction, Action sortByNoteAction, Action sortByCountryAction, JPanelRealizerToolBar toolBar) {
 102  0
         super();
 103  
 
 104  0
         this.newCountryAction = newCountryAction;
 105  0
         this.sortByNoteAction = sortByNoteAction;
 106  0
         this.sortByCountryAction = sortByCountryAction;
 107  0
         this.toolBar = toolBar;
 108  0
     }
 109  
 
 110  
     /**
 111  
      * Build the view.
 112  
      */
 113  
     @PostConstruct
 114  
     private void build() {
 115  0
         getModel().addDisplayListListener(this);
 116  
 
 117  0
         PanelBuilder builder = new PanelBuilder(this);
 118  
 
 119  0
         buildPanelList(builder);
 120  0
         buildPanelTri(builder);
 121  0
         buildPanelRealizer(builder);
 122  
 
 123  0
         setBorder(Borders.DIALOG_BORDER);
 124  
 
 125  0
         addListeners();
 126  
 
 127  0
         selectFirst();
 128  0
     }
 129  
 
 130  
     /**
 131  
      * Add listeners to and from the view.
 132  
      */
 133  
     private void addListeners() {
 134  0
         treeRealizers.addTreeSelectionListener(realizerController);
 135  
 
 136  0
         getModel().addCurrentObjectListener(this);
 137  0
     }
 138  
 
 139  
     /**
 140  
      * Build the internal panel realizer.
 141  
      *
 142  
      * @param parent The builder of the frame.
 143  
      */
 144  
     private void buildPanelRealizer(PanelBuilder parent) {
 145  0
         panelRealizer = new JThequeTitledPanel("realizer.view.panel.realizer.title");
 146  0
         panelRealizer.setBorder(new DropShadowBorder());
 147  0
         panelRealizer.setTitleFont(panelRealizer.getTitleFont().deriveFont(Font.BOLD));
 148  
 
 149  0
         PanelBuilder builder = new PanelBuilder();
 150  
 
 151  0
         builder.add(toolBar, builder.gbcSet(0, 0, GridBagUtils.HORIZONTAL, 0, 1));
 152  
 
 153  0
         addNamesFields(builder);
 154  0
         addCountryField(builder);
 155  0
         addNoteField(builder);
 156  
 
 157  0
         panelRealizer.setContentContainer(builder.getPanel());
 158  
 
 159  0
         parent.add(panelRealizer, parent.gbcSet(1, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 1, 2, 1 - A_QUARTER, 1.0));
 160  0
     }
 161  
 
 162  
     /**
 163  
      * Add the field for the name and the first name of the realizer.
 164  
      *
 165  
      * @param builder The builder of the view.
 166  
      */
 167  
     private void addNamesFields(PanelBuilder builder) {
 168  0
         builder.addI18nLabel(Constants.Properties.Person.FIRST_NAME, builder.gbcSet(0, 1));
 169  
 
 170  0
         fieldFirstName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 1, GridBagUtils.NONE, 0, 1));
 171  0
         ConstraintManager.configure(fieldFirstName, Constants.Properties.Person.FIRST_NAME);
 172  0
         fieldFirstName.setEnabled(false);
 173  
 
 174  0
         builder.addI18nLabel(Constants.Properties.Person.NAME, builder.gbcSet(0, 2));
 175  
 
 176  0
         fieldName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 2, GridBagUtils.NONE, 0, 1));
 177  0
         ConstraintManager.configure(fieldName, Constants.Properties.Person.NAME);
 178  0
         fieldName.setEnabled(false);
 179  0
     }
 180  
 
 181  
     /**
 182  
      * Add the field for country.
 183  
      *
 184  
      * @param builder The builder.
 185  
      */
 186  
     private void addCountryField(PanelBuilder builder) {
 187  0
         builder.addI18nLabel(Constants.Properties.Person.COUNTRY, builder.gbcSet(0, 3));
 188  
 
 189  0
         modelCountries = new DataContainerCachedComboBoxModel<Country>(countriesService);
 190  
 
 191  0
         comboCountries = builder.addComboBox(modelCountries, builder.gbcSet(1, 3));
 192  0
         comboCountries.setEnabled(false);
 193  
 
 194  0
         newCountryAction.setEnabled(false);
 195  
 
 196  0
         builder.addButton(newCountryAction, builder.gbcSet(2, 3, GridBagUtils.NONE, 0, 1));
 197  0
     }
 198  
 
 199  
     /**
 200  
      * Add the field for note.
 201  
      *
 202  
      * @param builder The builder.
 203  
      */
 204  
     private void addNoteField(PanelBuilder builder) {
 205  0
         builder.addI18nLabel(Constants.Properties.Person.NOTE, builder.gbcSet(0, 4));
 206  
 
 207  0
         modelNote = new NotesComboBoxModel();
 208  
 
 209  0
         comboNote = builder.addComboBox(modelNote, builder.gbcSet(1, 4, GridBagUtils.NONE, GridBagUtils.ABOVE_BASELINE_LEADING, 0, 0, 1.0, 1.0));
 210  0
         comboNote.setEnabled(false);
 211  0
         comboNote.setRenderer(new NoteComboRenderer());
 212  0
     }
 213  
 
 214  
     /**
 215  
      * Build the internal panel sort.
 216  
      *
 217  
      * @param parent The builder of the frame.
 218  
      */
 219  
     private void buildPanelTri(PanelBuilder parent) {
 220  0
         JXTitledPanel panelTri = new JThequeTitledPanel("realizer.view.panel.sort.title");
 221  0
         panelTri.setBorder(new DropShadowBorder());
 222  0
         panelTri.setTitleFont(panelTri.getTitleFont().deriveFont(Font.BOLD));
 223  
 
 224  0
         PanelBuilder builder = new PanelBuilder();
 225  
 
 226  0
         JXHyperlink linkTriPays = builder.add(new JXHyperlink(sortByCountryAction),
 227  
                 builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 228  0
         linkTriPays.setClickedColor(linkTriPays.getUnclickedColor());
 229  
 
 230  0
         JXHyperlink linkTriNote = builder.add(new JXHyperlink(sortByNoteAction),
 231  
                 builder.gbcSet(0, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 232  0
         linkTriNote.setClickedColor(linkTriNote.getUnclickedColor());
 233  
 
 234  0
         panelTri.setContentContainer(builder.getPanel());
 235  
 
 236  0
         parent.add(panelTri, parent.gbcSet(0, 1, GridBagUtils.HORIZONTAL, GridBagUtils.FIRST_LINE_START, A_QUARTER, 0.0));
 237  0
     }
 238  
 
 239  
     /**
 240  
      * Build the internal panel list.
 241  
      *
 242  
      * @param parent The builder of the frame.
 243  
      */
 244  
     private void buildPanelList(PanelBuilder parent) {
 245  0
         JXTitledPanel panelList = new JThequeTitledPanel("realizer.view.panel.list.title");
 246  0
         panelList.setBorder(new DropShadowBorder());
 247  0
         panelList.setTitleFont(panelList.getTitleFont().deriveFont(Font.BOLD));
 248  
 
 249  0
         PanelBuilder builder = new PanelBuilder();
 250  
 
 251  0
         setTreeModel(sorter.createInitialModel(IRealizersService.DATA_TYPE));
 252  
 
 253  0
         treeRealizers = new JXTree(getTreeModel());
 254  0
         treeRealizers.setCellRenderer(new JThequeTreeCellRenderer());
 255  0
         treeRealizers.putClientProperty("JTree.lineStyle", "None");
 256  
 
 257  0
         builder.addScrolled(treeRealizers, builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 0, 0, 1.0, 1.0));
 258  
 
 259  0
         panelList.setContentContainer(builder.getPanel());
 260  
 
 261  0
         parent.add(panelList, parent.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, A_QUARTER, 1.0));
 262  0
     }
 263  
 
 264  
     /**
 265  
      * Set the current realizer.
 266  
      *
 267  
      * @param current The current realizer
 268  
      */
 269  
     private void setCurrentRealizer(Person current) {
 270  0
         assert current.getType().equals(IRealizersService.PERSON_TYPE) : "The person must of type Actor";
 271  
 
 272  0
         panelRealizer.setTitle(current.getDisplayableText());
 273  
 
 274  0
         fieldFirstName.setText(current.getFirstName());
 275  0
         fieldName.setText(current.getName());
 276  0
         comboCountries.setSelectedItem(current.getTheCountry().getName());
 277  0
         comboNote.setSelectedItem(current.getNote());
 278  0
     }
 279  
 
 280  
     @Override
 281  
     public IPersonFormBean fillPersonFormBean() {
 282  0
         IPersonFormBean fb = new PersonFormBean();
 283  
 
 284  0
         fb.setName(fieldName.getText());
 285  0
         fb.setFirstName(fieldFirstName.getText());
 286  0
         fb.setNote(modelNote.getSelectedNote());
 287  0
         fb.setCountry(modelCountries.getSelectedData());
 288  
 
 289  0
         return fb;
 290  
     }
 291  
 
 292  
     @Override
 293  
     public void objectChanged(ObjectChangedEvent event) {
 294  0
         setCurrentRealizer((Person) event.getObject());
 295  0
     }
 296  
 
 297  
     @Override
 298  
     public void setEnabled(boolean enabled) {
 299  0
         fieldFirstName.setEnabled(enabled);
 300  0
         fieldName.setEnabled(enabled);
 301  0
         comboCountries.setEnabled(enabled);
 302  0
         comboNote.setEnabled(enabled);
 303  0
         newCountryAction.setEnabled(enabled);
 304  0
     }
 305  
 
 306  
     @Override
 307  
     public ToolbarView getToolbarView() {
 308  0
         return toolBar;
 309  
     }
 310  
 
 311  
     @Override
 312  
     public String getDataType() {
 313  0
         return IRealizersService.DATA_TYPE;
 314  
     }
 315  
 
 316  
     @Override
 317  
     protected JXTree getTree() {
 318  0
         return treeRealizers;
 319  
     }
 320  
 
 321  
     @Override
 322  
     public JComponent getImpl() {
 323  0
         return this;
 324  
     }
 325  
 
 326  
     @Override
 327  
     public Integer getPosition() {
 328  0
         return 3;
 329  
     }
 330  
 
 331  
     @Override
 332  
     public String getTitleKey() {
 333  0
         return "realizer.data.title";
 334  
     }
 335  
 
 336  
     @Override
 337  
     public void clear() {
 338  0
     }
 339  
 
 340  
     @Override
 341  
     protected void validate(Collection<JThequeError> errors) {
 342  0
         ConstraintManager.validate(Constants.Properties.Person.NAME, fieldName.getText(), errors);
 343  0
         ConstraintManager.validate(Constants.Properties.Person.FIRST_NAME, fieldFirstName.getText(), errors);
 344  0
         ConstraintManager.validate(Constants.Properties.Person.COUNTRY, modelCountries.getSelectedData(), errors);
 345  0
     }
 346  
 
 347  
     @Override
 348  
     public JComponent getComponent() {
 349  0
         return this;
 350  
     }
 351  
 }