Coverage Report - org.jtheque.films.view.impl.panels.principals.ActorView
 
Classes in this File Line Coverage Branch Coverage Complexity
ActorView
0 %
0/17
N/A
1
ActorView$1
N/A
N/A
1
ActorView$ActorViewImpl
0 %
0/97
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.IActorService;
 30  
 import org.jtheque.films.utils.Constants;
 31  
 import org.jtheque.films.view.able.IActorView;
 32  
 import org.jtheque.films.view.impl.actions.actor.NewCountryAction;
 33  
 import org.jtheque.films.view.impl.actions.sort.AcSortActor;
 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.ActorsModel;
 37  
 import org.jtheque.films.view.impl.models.able.IActorsModel;
 38  
 import org.jtheque.films.view.impl.toolbars.JPanelActorToolBar;
 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  
  * View to add/edit an actor.
 57  
  *
 58  
  * @author Baptiste Wicht
 59  
  */
 60  0
 public final class ActorView extends AbstractPrincipalDelegatedView implements IActorView {
 61  
     /**
 62  
      * Construct a new ActorView.
 63  
      */
 64  
     public ActorView() {
 65  0
         super(2, "actor.data.title");
 66  
 
 67  0
         UIManager.put("JXTitledPanel.title.foreground", Color.white);
 68  0
     }
 69  
     
 70  
     @Override
 71  
     public IPersonFormBean fillActorFormBean() {
 72  0
         IPersonFormBean fb = new PersonFormBean();
 73  
 
 74  0
         getImplementationView().fillFormBean(fb);
 75  
 
 76  0
         return fb;
 77  
     }
 78  
 
 79  
     @Override
 80  
     public void objectChanged(ObjectChangedEvent event) {
 81  0
         getImplementationView().setCurrent(event.getObject());
 82  0
     }
 83  
 
 84  
     @Override
 85  
     public IActorsModel getModel() {
 86  0
         return (IActorsModel) super.getModel();
 87  
     }
 88  
 
 89  
     @PostConstruct
 90  
     public void init(){
 91  0
         buildInEDT();
 92  
         
 93  0
         getModel().addCurrentObjectListener(this);
 94  0
     }
 95  
     
 96  
     @Override
 97  
     protected void buildDelegatedView() {
 98  0
         ActorViewImpl impl = new ActorViewImpl();
 99  0
         setView(impl);
 100  0
         impl.build();
 101  0
     }
 102  
 
 103  0
     private static final class ActorViewImpl extends AbstractPrincipalDataPanel<IActorsModel> {
 104  
         private static final int FIELD_COLUMNS = 20;
 105  
         
 106  
         private final Action newCountryAction;
 107  
         
 108  
         private JXTitledPanel actorPanel;
 109  
     
 110  
         private JTextField fieldFirstName;
 111  
         private JTextField fieldName;
 112  
         private DataContainerCachedComboBoxModel<Country> modelCountries;
 113  
         private NotesComboBoxModel modelNote;
 114  
         private JComboBox comboCountries;
 115  
         private JComboBox comboNote;
 116  
 
 117  
         private ActorViewImpl() {
 118  0
             super(IActorService.DATA_TYPE);
 119  
             
 120  0
             setModel(new ActorsModel());
 121  
             
 122  0
             newCountryAction = new NewCountryAction();
 123  0
         }
 124  
 
 125  
         /**
 126  
          * Build the view.
 127  
          */
 128  
         private void build() {
 129  0
             getModel().addDisplayListListener(this);
 130  
 
 131  0
             PanelBuilder builder = new PanelBuilder(this);
 132  
 
 133  0
             buildPanelList(builder);
 134  0
             buildPanelTri(builder);
 135  0
             buildPanelActor(builder);
 136  
 
 137  0
             setBorder(Borders.DIALOG_BORDER);
 138  
 
 139  0
             getTree().addTreeSelectionListener(Managers.getManager(IBeansManager.class).<TreeSelectionListener>getBean("actorController"));
 140  
 
 141  0
             getModel().addDisplayListListener(this);
 142  
 
 143  0
             selectFirst();
 144  0
         }
 145  
 
 146  
         /**
 147  
          * Build the internal panel actor.
 148  
          *
 149  
          * @param parent The builder of the frame.
 150  
          */
 151  
         private void buildPanelActor(PanelBuilder parent) {
 152  0
             actorPanel = new JThequeTitledPanel("actor.view.panel.actor.title");
 153  0
             actorPanel.setBorder(new DropShadowBorder());
 154  0
             actorPanel.setTitleFont(actorPanel.getTitleFont().deriveFont(Font.BOLD));
 155  
 
 156  0
             PanelBuilder builder = new PanelBuilder();
 157  
 
 158  0
             JPanelActorToolBar toolBar = new JPanelActorToolBar();
 159  
             
 160  0
             setToolBar(toolBar);
 161  
             
 162  0
             builder.add(toolBar, builder.gbcSet(0, 0, GridBagUtils.HORIZONTAL, 0, 1));
 163  
 
 164  0
             addFirstNameField(builder);
 165  0
             addNameField(builder);
 166  0
             addCountryField(builder);
 167  0
             addNoteField(builder);
 168  
 
 169  0
             actorPanel.setContentContainer(builder.getPanel());
 170  
 
 171  0
             parent.add(actorPanel, parent.gbcSet(1, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 1, 2, 1 - Constants.AN_HALF, 1.0));
 172  0
         }
 173  
 
 174  
         /**
 175  
          * Add the field for first name.
 176  
          *
 177  
          * @param builder The builder.
 178  
          */
 179  
         private void addFirstNameField(PanelBuilder builder) {
 180  0
             builder.addI18nLabel(Constants.Properties.Person.FIRST_NAME, builder.gbcSet(0, 1));
 181  
 
 182  0
             fieldFirstName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 1, GridBagUtils.NONE, 0, 1));
 183  0
             ConstraintManager.configure(fieldFirstName, Constants.Properties.Person.FIRST_NAME);
 184  0
             fieldFirstName.setEnabled(false);
 185  0
         }
 186  
 
 187  
         /**
 188  
          * Add the field for name.
 189  
          *
 190  
          * @param builder The builder.
 191  
          */
 192  
         private void addNameField(PanelBuilder builder) {
 193  0
             builder.addI18nLabel(Constants.Properties.Person.NAME, builder.gbcSet(0, 2));
 194  
 
 195  0
             fieldName = builder.add(new JTextField(FIELD_COLUMNS), builder.gbcSet(1, 2, GridBagUtils.NONE, 0, 1));
 196  0
             ConstraintManager.configure(fieldName, Constants.Properties.Person.NAME);
 197  0
             fieldName.setEnabled(false);
 198  0
         }
 199  
 
 200  
         /**
 201  
          * Add the field for country.
 202  
          *
 203  
          * @param builder The builder.
 204  
          */
 205  
         private void addCountryField(PanelBuilder builder) {
 206  0
             builder.addI18nLabel(Constants.Properties.Person.COUNTRY, builder.gbcSet(0, 3));
 207  
 
 208  0
             modelCountries = new DataContainerCachedComboBoxModel<Country>(Managers.getManager(IBeansManager.class).<DataContainer<Country>>getBean("countriesService"));
 209  
 
 210  0
             comboCountries = builder.addComboBox(modelCountries, builder.gbcSet(1, 3));
 211  0
             comboCountries.setEnabled(false);
 212  
 
 213  0
             newCountryAction.setEnabled(false);
 214  
 
 215  0
             builder.addButton(newCountryAction, builder.gbcSet(2, 3, GridBagUtils.NONE, 0, 1));
 216  0
         }
 217  
 
 218  
         /**
 219  
          * Add the field for note.
 220  
          *
 221  
          * @param builder The builder.
 222  
          */
 223  
         private void addNoteField(PanelBuilder builder) {
 224  0
             builder.addI18nLabel(Constants.Properties.Person.NOTE, builder.gbcSet(0, 4));
 225  
 
 226  0
             modelNote = new NotesComboBoxModel();
 227  
 
 228  0
             comboNote = builder.addComboBox(modelNote, builder.gbcSet(1, 4, GridBagUtils.NONE, GridBagUtils.ABOVE_BASELINE_LEADING, 0, 0, 1.0, 1.0));
 229  0
             comboNote.setEnabled(false);
 230  0
             comboNote.setRenderer(new NoteComboRenderer());
 231  0
         }
 232  
 
 233  
         /**
 234  
          * Build the internal panel sort.
 235  
          *
 236  
          * @param parent The builder of the frame.
 237  
          */
 238  
         private static void buildPanelTri(PanelBuilder parent) {
 239  0
             JXTitledPanel panelTri = new JThequeTitledPanel("actor.view.panel.sort.title");
 240  0
             panelTri.setBorder(new DropShadowBorder());
 241  0
             panelTri.setTitleFont(panelTri.getTitleFont().deriveFont(Font.BOLD));
 242  
 
 243  0
             PanelBuilder builder = new PanelBuilder();
 244  
 
 245  0
             JXHyperlink linkTriPays = builder.add(new JXHyperlink(new AcSortActor("actor.view.actions.sort.country", "Countries")),
 246  
                     builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 247  0
             linkTriPays.setClickedColor(linkTriPays.getUnclickedColor());
 248  
 
 249  0
             JXHyperlink linkTriNote = builder.add(new JXHyperlink(new AcSortActor("actor.view.actions.sort.note", "Notes")),
 250  
                     builder.gbcSet(0, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 251  0
             linkTriNote.setClickedColor(linkTriNote.getUnclickedColor());
 252  
 
 253  0
             panelTri.setContentContainer(builder.getPanel());
 254  
 
 255  0
             parent.add(panelTri, parent.gbcSet(0, 1, GridBagUtils.HORIZONTAL, GridBagUtils.FIRST_LINE_START, Constants.AN_HALF, 0.0));
 256  0
         }
 257  
 
 258  
         /**
 259  
          * Build the internal panel list.
 260  
          *
 261  
          * @param parent The builder of the frame.
 262  
          */
 263  
         private void buildPanelList(PanelBuilder parent) {
 264  0
             JXTitledPanel panelList = new JThequeTitledPanel("actor.view.panel.list.title");
 265  0
             panelList.setBorder(new DropShadowBorder());
 266  0
             panelList.setTitleFont(panelList.getTitleFont().deriveFont(Font.BOLD));
 267  
 
 268  0
             PanelBuilder builder = new PanelBuilder();
 269  
 
 270  0
             setTreeModel(getSorter().createInitialModel(IActorService.DATA_TYPE));
 271  
 
 272  0
             initTree();
 273  
 
 274  0
             builder.addScrolled(getTree(), builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 0, 0, 1.0, 1.0));
 275  
 
 276  0
             panelList.setContentContainer(builder.getPanel());
 277  
 
 278  0
             parent.add(panelList, parent.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, Constants.AN_HALF, 1.0));
 279  0
         }
 280  
 
 281  
         @Override
 282  
         public void fillFormBean(FormBean formBean) {
 283  0
             IPersonFormBean fb = (IPersonFormBean)formBean;
 284  
 
 285  0
             fb.setName(fieldName.getText());
 286  0
             fb.setFirstName(fieldFirstName.getText());
 287  0
             fb.setNote(modelNote.getSelectedNote());
 288  0
             fb.setCountry(modelCountries.getSelectedData());
 289  0
         }
 290  
 
 291  
         @Override
 292  
         public void setCurrent(Object object) {
 293  0
             Person current = (Person) object;
 294  
             
 295  0
             assert current.getType().equals(IActorService.PERSON_TYPE) : "The person must of type Actor";
 296  
 
 297  0
             actorPanel.setTitle(current.getDisplayableText());
 298  
     
 299  0
             fieldFirstName.setText(current.getFirstName());
 300  0
             fieldName.setText(current.getName());
 301  0
             modelCountries.setSelectedItem(current.getTheCountry());
 302  0
             modelNote.setSelectedItem(current.getNote());
 303  0
         }
 304  
 
 305  
         @Override
 306  
         protected void validate(Collection<JThequeError> errors) {
 307  0
             ConstraintManager.validate(Constants.Properties.Person.NAME, fieldName.getText(), errors);
 308  0
             ConstraintManager.validate(Constants.Properties.Person.FIRST_NAME, fieldFirstName.getText(), errors);
 309  0
             ConstraintManager.validate(Constants.Properties.Person.COUNTRY, modelCountries.getSelectedData(), errors);
 310  0
         }
 311  
 
 312  
         @Override
 313  
         public void setEnabled(boolean enabled) {
 314  0
             fieldFirstName.setEnabled(enabled);
 315  0
             fieldName.setEnabled(enabled);
 316  0
             comboCountries.setEnabled(enabled);
 317  0
             comboNote.setEnabled(enabled);
 318  0
             newCountryAction.setEnabled(enabled);
 319  0
         }
 320  
     }
 321  
 }