Coverage Report - org.jtheque.films.view.impl.panels.principals.FilmView
 
Classes in this File Line Coverage Branch Coverage Complexity
FilmView
0 %
0/17
N/A
1.158
FilmView$1
N/A
N/A
1.158
FilmView$FilmViewImpl
0 %
0/131
0 %
0/6
1.158
 
 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.JXImagePanel;
 21  
 import org.jdesktop.swingx.JXTitledPanel;
 22  
 import org.jdesktop.swingx.border.DropShadowBorder;
 23  
 import org.jtheque.core.managers.Managers;
 24  
 import org.jtheque.core.managers.beans.IBeansManager;
 25  
 import org.jtheque.core.managers.error.JThequeError;
 26  
 import org.jtheque.core.managers.language.ILanguageManager;
 27  
 import org.jtheque.core.managers.language.TabTitleUpdater;
 28  
 import org.jtheque.core.managers.persistence.able.DataContainer;
 29  
 import org.jtheque.core.managers.resource.IResourceManager;
 30  
 import org.jtheque.core.managers.resource.ImageType;
 31  
 import org.jtheque.core.utils.ui.PanelBuilder;
 32  
 import org.jtheque.core.utils.ui.constraints.ConstraintManager;
 33  
 import org.jtheque.films.controllers.able.IFilmController;
 34  
 import org.jtheque.films.services.able.IFilmsService;
 35  
 import org.jtheque.films.services.able.IRealizersService;
 36  
 import org.jtheque.films.utils.Constants;
 37  
 import org.jtheque.films.utils.Constants.Properties.Film;
 38  
 import org.jtheque.films.view.able.IFilmView;
 39  
 import org.jtheque.films.view.able.IInfosActorsView;
 40  
 import org.jtheque.films.view.able.IInfosFilmView;
 41  
 import org.jtheque.films.view.able.IInfosKindsView;
 42  
 import org.jtheque.films.view.able.IInfosOthersView;
 43  
 import org.jtheque.films.view.able.IInfosPersoView;
 44  
 import org.jtheque.films.view.impl.actions.sort.AcSortFilm;
 45  
 import org.jtheque.films.view.impl.fb.FilmFormBean;
 46  
 import org.jtheque.films.view.impl.fb.IFilmFormBean;
 47  
 import org.jtheque.films.view.impl.models.FilmsModel;
 48  
 import org.jtheque.films.view.impl.models.able.IFilmsModel;
 49  
 import org.jtheque.films.view.impl.toolbars.JPanelFilmToolBar;
 50  
 import org.jtheque.primary.controller.able.FormBean;
 51  
 import org.jtheque.primary.od.able.Type;
 52  
 import org.jtheque.primary.services.able.IKindsService;
 53  
 import org.jtheque.primary.services.able.ITypesService;
 54  
 import org.jtheque.primary.view.impl.actions.type.AcNewType;
 55  
 import org.jtheque.primary.view.impl.components.panels.JThequeTitledPanel;
 56  
 import org.jtheque.primary.view.impl.models.DataContainerCachedComboBoxModel;
 57  
 import org.jtheque.utils.ui.GridBagUtils;
 58  
 
 59  
 import javax.annotation.PostConstruct;
 60  
 import javax.swing.JButton;
 61  
 import javax.swing.JComboBox;
 62  
 import javax.swing.JComponent;
 63  
 import javax.swing.JTabbedPane;
 64  
 import javax.swing.JTextField;
 65  
 import javax.swing.UIManager;
 66  
 import java.awt.Color;
 67  
 import java.awt.Font;
 68  
 import java.awt.Image;
 69  
 import java.awt.Insets;
 70  
 import java.awt.image.BufferedImage;
 71  
 import java.util.Collection;
 72  
 import java.util.HashMap;
 73  
 import java.util.Map;
 74  
 
 75  
 /**
 76  
  * View to create/edit films.
 77  
  *
 78  
  * @author Baptiste Wicht
 79  
  */
 80  0
 public final class FilmView extends AbstractPrincipalDelegatedView implements IFilmView {
 81  
     public FilmView() {
 82  0
         super(1, "film.data.title");  
 83  
 
 84  0
         UIManager.put("JXTitledPanel.title.foreground", Color.white);
 85  0
     }
 86  
 
 87  
     @Override
 88  
     public IFilmFormBean fillFilmFormBean() {
 89  0
         IFilmFormBean fb = new FilmFormBean();
 90  
 
 91  0
         getImplementationView().fillFormBean(fb);
 92  
 
 93  0
         return fb;
 94  
     }
 95  
 
 96  
     @Override
 97  
     public void setImageOfPanel(BufferedImage image) {
 98  0
         ((FilmViewImpl)getImplementationView()).setImage(image);
 99  0
     }
 100  
 
 101  
     @Override
 102  
     public IFilmsModel getModel() {
 103  0
         return (IFilmsModel) super.getModel();
 104  
     }
 105  
     
 106  
     @PostConstruct
 107  
     public void init(){
 108  0
         buildInEDT();
 109  0
     }
 110  
     
 111  
     @Override
 112  
     protected void buildDelegatedView() {
 113  0
         FilmViewImpl impl = new FilmViewImpl();
 114  0
         setView(impl);
 115  0
         impl.build();
 116  
         
 117  0
         getModel().addCurrentObjectListener(this);
 118  0
     }
 119  
 
 120  0
     private static final class FilmViewImpl extends AbstractPrincipalDataPanel<IFilmsModel> {
 121  
         private final IInfosKindsView panelKinds;
 122  
         private final IInfosActorsView panelActors;
 123  
         private final IInfosPersoView panelPerso;
 124  
         private final IInfosFilmView panelInfos;
 125  
         private final IInfosOthersView panelOthers;
 126  
         
 127  
         private JXTitledPanel panelFilm;
 128  
     
 129  
         private JTextField fieldTitle;
 130  
         private DataContainerCachedComboBoxModel<Type> modelType;
 131  
         private JComboBox comboType;
 132  
         private JButton buttonNewType;
 133  
         private JXImagePanel panelImage;
 134  
 
 135  
         private FilmViewImpl() {
 136  0
             super(IFilmsService.DATA_TYPE);
 137  
             
 138  0
             setModel(new FilmsModel());
 139  
             
 140  0
             panelKinds = Managers.getManager(IBeansManager.class).getBean("filmKindsView");
 141  0
             panelActors = Managers.getManager(IBeansManager.class).getBean("filmActorsView");
 142  0
             panelPerso = Managers.getManager(IBeansManager.class).getBean("filmPersoView");
 143  0
             panelInfos = Managers.getManager(IBeansManager.class).getBean("filmInfosView");
 144  0
             panelOthers = Managers.getManager(IBeansManager.class).getBean("filmOthersView");
 145  0
         }
 146  
 
 147  
         /**
 148  
          * Build the view.
 149  
          */
 150  
         private void build() {
 151  0
             PanelBuilder builder = new PanelBuilder(this);
 152  
     
 153  0
             buildPanelList(builder);
 154  0
             buildPanelTri(builder);
 155  0
             buildPanelFilm(builder);
 156  
     
 157  0
             addListeners();
 158  0
         }
 159  
     
 160  
         /**
 161  
          * Add listeners to and from the view.
 162  
          */
 163  
         private void addListeners() {
 164  0
             IFilmController filmController = Managers.getManager(IBeansManager.class).getBean("filmController");
 165  
             
 166  0
             panelImage.addMouseListener(filmController);
 167  
             
 168  0
             getTree().addTreeSelectionListener(filmController);
 169  
             
 170  0
             getModel().addDisplayListListener(this);
 171  
             
 172  0
             getModel().addCurrentObjectListener(panelKinds);
 173  0
             getModel().addCurrentObjectListener(panelInfos);
 174  0
             getModel().addCurrentObjectListener(panelActors);
 175  0
             getModel().addCurrentObjectListener(panelPerso);
 176  0
             getModel().addCurrentObjectListener(panelOthers);
 177  0
         }
 178  
         
 179  
         /**
 180  
          * Build the internal panel film.
 181  
          *
 182  
          * @param parent The parent builder.
 183  
          */
 184  
         private void buildPanelFilm(PanelBuilder parent) {
 185  0
             panelFilm = new JThequeTitledPanel("film.view.panel.film.title");
 186  0
             panelFilm.setBorder(new DropShadowBorder());
 187  0
             panelFilm.setTitleFont(panelFilm.getTitleFont().deriveFont(Font.BOLD));
 188  
     
 189  0
             PanelBuilder builder = new PanelBuilder();
 190  
     
 191  0
             JPanelFilmToolBar toolBar = new JPanelFilmToolBar();
 192  
             
 193  0
             setToolBar(toolBar);
 194  
             
 195  0
             builder.add(toolBar, builder.gbcSet(0, 0, GridBagUtils.HORIZONTAL, 4, 1));
 196  
     
 197  0
             builder.addI18nLabel(Film.TITLE, builder.gbcSet(0, 1));
 198  
     
 199  0
             fieldTitle = builder.add(new JTextField(20), builder.gbcSet(1, 1, GridBagUtils.NONE, 0, 1));
 200  0
             ConstraintManager.configure(fieldTitle, Film.TITLE);
 201  0
             fieldTitle.setEnabled(false);
 202  
     
 203  0
             addTypeField(builder);
 204  
     
 205  0
             panelImage = new JXImagePanel();
 206  0
             panelImage.setBackground(Color.white);
 207  0
             builder.add(panelImage, builder.gbcSet(3, 1, GridBagUtils.BOTH, 1, 2));
 208  
     
 209  0
             addTabbedPane(builder);
 210  
     
 211  0
             panelFilm.setContentContainer(builder.getPanel());
 212  
     
 213  0
             parent.add(panelFilm, parent.gbcSet(1, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 1, 2, 1 - Constants.A_QUARTER, 1.0));
 214  0
         }
 215  
     
 216  
         /**
 217  
          * Add the field for the type.
 218  
          *
 219  
          * @param builder The builder of the view.
 220  
          */
 221  
         private void addTypeField(PanelBuilder builder) {
 222  0
             builder.addI18nLabel(Film.TYPE, builder.gbcSet(0, 2));
 223  
     
 224  0
             modelType = new DataContainerCachedComboBoxModel<Type>(Managers.getManager(IBeansManager.class).<DataContainer<Type>>getBean("typesServices"));
 225  
     
 226  0
             comboType = builder.addComboBox(modelType, builder.gbcSet(1, 2));
 227  0
             comboType.setEnabled(false);
 228  
     
 229  0
             buttonNewType = builder.addButton(new AcNewType(), builder.gbcSet(2, 2));
 230  0
             buttonNewType.setEnabled(false);
 231  0
         }
 232  
     
 233  
         /**
 234  
          * Add the tabbed pane to the view.
 235  
          *
 236  
          * @param builder The builder of the view.
 237  
          */
 238  
         private void addTabbedPane(PanelBuilder builder) {
 239  0
             Insets oldInsets = UIManager.getInsets("TabbedPane.contentBorderInsets");
 240  0
             UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
 241  
     
 242  0
             JTabbedPane tabInfos = new JTabbedPane();
 243  
     
 244  0
             UIManager.put("TabbedPane.contentBorderInsets", oldInsets);
 245  
     
 246  0
             Map<JComponent, String> components = new HashMap<JComponent, String>(3);
 247  
     
 248  0
             components.put(panelInfos.getImpl(), "film.view.panel.general.title");
 249  0
             tabInfos.addTab(getMessage("film.view.panel.general.title"), panelInfos.getImpl());
 250  
     
 251  0
             components.put(panelKinds.getImpl(), "film.view.panel.kinds.title");
 252  0
             tabInfos.addTab(getMessage("film.view.panel.kinds.title"), panelKinds.getImpl());
 253  
     
 254  0
             components.put(panelActors.getImpl(), "film.view.panel.actors.title");
 255  0
             tabInfos.addTab(getMessage("film.view.panel.actors.title"), panelActors.getImpl());
 256  
     
 257  0
             components.put(panelOthers.getImpl(), "film.view.panel.others.title");
 258  0
             tabInfos.addTab(getMessage("film.view.panel.others.title"), panelOthers.getImpl());
 259  
     
 260  0
             components.put(panelPerso.getImpl(), "film.view.panel.personal.title");
 261  0
             tabInfos.addTab(getMessage("film.view.panel.personal.title"), panelPerso.getImpl());
 262  
     
 263  0
             builder.add(tabInfos, builder.gbcSet(0, 3, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 0, 0, 1.0, 1.0));
 264  
     
 265  0
             Managers.getManager(ILanguageManager.class).addInternationalizable(new TabTitleUpdater(tabInfos, components));
 266  0
         }
 267  
     
 268  
         /**
 269  
          * Build the internal panel sort.
 270  
          *
 271  
          * @param parent The parent builder.
 272  
          */
 273  
         private static void buildPanelTri(PanelBuilder parent) {
 274  0
             JXTitledPanel panelTri = new JThequeTitledPanel("film.view.panel.sort.title");
 275  0
             panelTri.setBorder(new DropShadowBorder());
 276  0
             panelTri.setTitleFont(panelTri.getTitleFont().deriveFont(Font.BOLD));
 277  
     
 278  0
             PanelBuilder builder = new PanelBuilder();
 279  
             
 280  0
             JXHyperlink linkTriGenre = builder.add(new JXHyperlink(new AcSortFilm("film.view.actions.sort.kind", IKindsService.DATA_TYPE)),
 281  
                     builder.gbcSet(0, 0, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 282  0
             linkTriGenre.setClickedColor(linkTriGenre.getUnclickedColor());
 283  
     
 284  0
             JXHyperlink linkTriType = builder.add(new JXHyperlink(new AcSortFilm("film.view.actions.sort.type", ITypesService.DATA_TYPE)),
 285  
                     builder.gbcSet(0, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 286  0
             linkTriType.setClickedColor(linkTriType.getUnclickedColor());
 287  
     
 288  0
             JXHyperlink linkTriRealizer = builder.add(new JXHyperlink(new AcSortFilm("film.view.actions.sort.realizer", IRealizersService.DATA_TYPE)),
 289  
                     builder.gbcSet(0, 2, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 290  0
             linkTriRealizer.setClickedColor(linkTriRealizer.getUnclickedColor());
 291  
     
 292  0
             JXHyperlink linkTriYear = builder.add(new JXHyperlink(new AcSortFilm("film.view.actions.sort.year", "Year")),
 293  
                     builder.gbcSet(0, 3, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 0, 1, 1.0, 0.0));
 294  0
             linkTriYear.setClickedColor(linkTriYear.getUnclickedColor());
 295  
     
 296  0
             panelTri.setContentContainer(builder.getPanel());
 297  
     
 298  0
             parent.add(panelTri, parent.gbcSet(0, 1, GridBagUtils.HORIZONTAL, GridBagUtils.FIRST_LINE_START, Constants.A_QUARTER, 0.0));
 299  0
         }
 300  
     
 301  
         /**
 302  
          * Build the internal panel list.
 303  
          *
 304  
          * @param parent The parent builder.
 305  
          */
 306  
         private void buildPanelList(PanelBuilder parent) {
 307  0
             JXTitledPanel panelList = new JThequeTitledPanel("film.view.panel.list.title");
 308  0
             panelList.setBorder(new DropShadowBorder());
 309  0
             panelList.setTitleFont(panelList.getTitleFont().deriveFont(Font.BOLD));
 310  
     
 311  0
             PanelBuilder builder = new PanelBuilder();
 312  
     
 313  0
             setTreeModel(getSorter().createInitialModel(IFilmsService.DATA_TYPE));
 314  
     
 315  0
             initTree();
 316  
     
 317  0
             builder.addScrolled(getTree(), builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, 0, 0, 1.0, 1.0));
 318  
     
 319  0
             panelList.setContentContainer(builder.getPanel());
 320  
     
 321  0
             parent.add(panelList, parent.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.BASELINE_LEADING, Constants.A_QUARTER, 1.0));
 322  0
         }
 323  
     
 324  
         @Override
 325  
         public void setCurrent(Object object) {
 326  0
             org.jtheque.films.persistence.od.able.Film film = (org.jtheque.films.persistence.od.able.Film)object;
 327  
             
 328  0
             panelFilm.setTitle(film.getDisplayableText());
 329  
     
 330  0
             fieldTitle.setText(film.getTitle());
 331  
     
 332  0
             if (film.getTheType() != null) {
 333  0
                 modelType.setSelectedItem(film.getTheType());
 334  
             }
 335  
     
 336  0
             if (film.getImage() == null || film.getImage().length() == 0) {
 337  0
                 panelImage.setImage(null);
 338  
             } else {
 339  0
                 panelImage.setImage(Managers.getManager(IResourceManager.class).getImage(
 340  
                         film.getImage(),
 341  
                         ImageType.JPG,
 342  
                         Constants.MINIATURE_WIDTH));
 343  
             }
 344  0
         }
 345  
 
 346  
         @Override
 347  
         public void setEnabled(boolean enabled) {
 348  0
             fieldTitle.setEnabled(enabled);
 349  0
             buttonNewType.setEnabled(enabled);
 350  0
             comboType.setEnabled(enabled);
 351  
     
 352  0
             panelKinds.setEnabled(enabled);
 353  0
             panelActors.setEnabled(enabled);
 354  0
             panelPerso.setEnabled(enabled);
 355  0
             panelInfos.setEnabled(enabled);
 356  0
             panelOthers.setEnabled(enabled);
 357  0
         }
 358  
 
 359  
         @Override
 360  
         public void fillFormBean(FormBean formBean) {
 361  0
             IFilmFormBean fb = (IFilmFormBean)formBean;
 362  
             
 363  0
             fb.setTitle(fieldTitle.getText());
 364  0
             fb.setType(modelType.getSelectedData());
 365  
     
 366  0
             panelActors.fillFilm(fb);
 367  0
             panelPerso.fillFilm(fb);
 368  0
             panelInfos.fillFilm(fb);
 369  0
             panelOthers.fillFilm(fb);
 370  0
             panelKinds.fillFilm(fb);
 371  0
         }
 372  
 
 373  
         public void setImage(Image image) {
 374  0
             panelImage.setImage(image);
 375  0
         }
 376  
 
 377  
         @Override
 378  
         public void validate(Collection<JThequeError> errors) {
 379  0
             ConstraintManager.validate(Film.TITLE, fieldTitle.getText(), errors);
 380  0
             ConstraintManager.validate(Film.TYPE, modelType, errors);
 381  
     
 382  0
             panelKinds.validate(errors);
 383  0
             panelActors.validate(errors);
 384  0
             panelPerso.validate(errors);
 385  0
             panelInfos.validate(errors);
 386  0
             panelOthers.validate(errors);
 387  0
         }
 388  
     }
 389  
 }