Coverage Report - org.jtheque.core.managers.view.impl.components.renderers.ModuleListRenderer
 
Classes in this File Line Coverage Branch Coverage Complexity
ModuleListRenderer
0 %
0/65
0 %
0/10
1.455
 
 1  
 package org.jtheque.core.managers.view.impl.components.renderers;
 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.jtheque.core.managers.Managers;
 21  
 import org.jtheque.core.managers.language.ILanguageManager;
 22  
 import org.jtheque.core.managers.module.beans.ModuleContainer;
 23  
 import org.jtheque.core.managers.update.IUpdateManager;
 24  
 import org.jtheque.core.managers.view.able.IViewManager;
 25  
 import org.jtheque.core.managers.view.impl.actions.utils.OpenSiteLinkAction;
 26  
 import org.jtheque.core.utils.ui.PanelBuilder;
 27  
 import org.jtheque.utils.ui.GridBagUtils;
 28  
 
 29  
 import javax.swing.JLabel;
 30  
 import javax.swing.JList;
 31  
 import javax.swing.JPanel;
 32  
 import javax.swing.ListCellRenderer;
 33  
 import java.awt.Color;
 34  
 import java.awt.Component;
 35  
 import java.awt.Font;
 36  
 
 37  
 /**
 38  
  * A renderer to display a module in a list.
 39  
  *
 40  
  * @author Baptiste Wicht
 41  
  */
 42  
 public final class ModuleListRenderer extends JPanel implements ListCellRenderer {
 43  
     private final JLabel labelName;
 44  
     private final JLabel labelAuthor;
 45  
 
 46  
     private JLabel labelDate;
 47  
     private JLabel labelState;
 48  
     private JLabel labelCurrentVersion;
 49  
     private JLabel labelOnlineVersion;
 50  
     private JXHyperlink labelSite;
 51  
     private Component labelStateText;
 52  
     private Component labelDateText;
 53  
     private Component labelSiteText;
 54  
     private Component labelCurrentVersionText;
 55  
     private Component labelOnlineVersionText;
 56  
 
 57  
     private static final int TITLE_FONT_SIZE = 16;
 58  
 
 59  
     /**
 60  
      * Construct a new ModuleListRenderer.
 61  
      */
 62  
     public ModuleListRenderer() {
 63  0
         super();
 64  
 
 65  0
         PanelBuilder builder = new PanelBuilder(this);
 66  
 
 67  0
         labelName = builder.add(new JLabel(), builder.gbcSet(0, 0, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 2, 1));
 68  0
         labelName.setFont(labelName.getFont().deriveFont(Font.BOLD, TITLE_FONT_SIZE));
 69  
 
 70  0
         labelAuthor = builder.add(new JLabel(), builder.gbcSet(4, 0, GridBagUtils.HORIZONTAL, GridBagUtils.BASELINE_LEADING, 2, 1));
 71  
 
 72  0
         addStateLabels(builder);
 73  0
         addDateLabels(builder);
 74  0
         addSiteLabels(builder);
 75  0
         addCurrentVersionLabels(builder);
 76  0
         addOnlineVersionLabels(builder);
 77  0
     }
 78  
 
 79  
     /**
 80  
      * Add the online version label.
 81  
      *
 82  
      * @param builder The panel builder.
 83  
      */
 84  
     private void addOnlineVersionLabels(PanelBuilder builder) {
 85  0
         labelOnlineVersionText = builder.addI18nLabel("modules.view.label.versions.online", builder.gbcSet(2, 2));
 86  0
         labelOnlineVersion = builder.addLabel("", builder.gbcSet(3, 2, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 3, 1));
 87  0
     }
 88  
 
 89  
     /**
 90  
      * Add the current version label.
 91  
      *
 92  
      * @param builder The panel builder.
 93  
      */
 94  
     private void addCurrentVersionLabels(PanelBuilder builder) {
 95  0
         labelCurrentVersionText = builder.addI18nLabel("modules.view.label.versions.current", builder.gbcSet(0, 2));
 96  
 
 97  0
         labelCurrentVersion = builder.add(new JLabel(), builder.gbcSet(1, 2));
 98  0
     }
 99  
 
 100  
     /**
 101  
      * Add the sites version label.
 102  
      *
 103  
      * @param builder The panel builder.
 104  
      */
 105  
     private void addSiteLabels(PanelBuilder builder) {
 106  0
         labelSiteText = builder.addI18nLabel("modules.view.label.site", builder.gbcSet(2, 1));
 107  
 
 108  0
         labelSite = builder.add(new JXHyperlink(), builder.gbcSet(3, 1, GridBagUtils.NONE, GridBagUtils.BASELINE_LEADING, 3, 1));
 109  0
     }
 110  
 
 111  
     /**
 112  
      * Add the state version label.
 113  
      *
 114  
      * @param builder The panel builder.
 115  
      */
 116  
     private void addStateLabels(PanelBuilder builder) {
 117  0
         labelStateText = builder.addI18nLabel("modules.view.label.state", builder.gbcSet(2, 0));
 118  
 
 119  0
         labelState = builder.add(new JLabel(), builder.gbcSet(3, 0));
 120  0
     }
 121  
 
 122  
     /**
 123  
      * Add the date version label.
 124  
      *
 125  
      * @param builder The panel builder.
 126  
      */
 127  
     private void addDateLabels(PanelBuilder builder) {
 128  0
         labelDateText = builder.addI18nLabel("modules.view.label.date", builder.gbcSet(0, 1));
 129  
 
 130  0
         labelDate = builder.add(new JLabel(), builder.gbcSet(1, 1));
 131  0
     }
 132  
 
 133  
     @Override
 134  
     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
 135  0
         updateUI(isSelected);
 136  0
         updateInfos(value);
 137  
 
 138  0
         return this;
 139  
     }
 140  
 
 141  
     /**
 142  
      * Update the UI.
 143  
      *
 144  
      * @param isSelected A boolean flag indicating if the current element is selected or not.
 145  
      */
 146  
     private void updateUI(boolean isSelected) {
 147  0
         if (isSelected) {
 148  0
             setBackground(Managers.getManager(IViewManager.class).getViewDefaults().getSelectedBackgroundColor());
 149  0
             setChildsForeground(Managers.getManager(IViewManager.class).getViewDefaults().getSelectedForegroundColor());
 150  
         } else {
 151  0
             setBackground(Managers.getManager(IViewManager.class).getViewDefaults().getBackgroundColor());
 152  0
             setChildsForeground(Managers.getManager(IViewManager.class).getViewDefaults().getForegroundColor());
 153  
         }
 154  
 
 155  0
         labelOnlineVersion.setBackground(getBackground());
 156  0
     }
 157  
 
 158  
     /**
 159  
      * Update the informations with the module informations.
 160  
      *
 161  
      * @param value The module information object.
 162  
      */
 163  
     private void updateInfos(Object value) {
 164  0
         ModuleContainer module = (ModuleContainer) value;
 165  
 
 166  0
         labelName.setText(module.getName());
 167  0
         labelAuthor.setText(Managers.getManager(ILanguageManager.class).getMessage("modules.view.label.author") + " : " +
 168  
                 module.getAuthor());
 169  0
         labelCurrentVersion.setText(module.getInfos().version());
 170  0
         labelState.setText(module.getState().toString());
 171  
 
 172  0
         setToolTipText(module.getDescription());
 173  
 
 174  0
         setModuleDefinitionInfos(module);
 175  0
     }
 176  
 
 177  
     /**
 178  
      * Update the informations with the module definition.
 179  
      *
 180  
      * @param module The module to get the informations from.
 181  
      */
 182  
     private void setModuleDefinitionInfos(ModuleContainer module) {
 183  0
         if (module.getInfos().date() == null || module.getInfos().date().isEmpty()) {
 184  0
             labelDate.setText("");
 185  
         } else {
 186  0
             labelDate.setText(module.getInfos().date());
 187  
         }
 188  
 
 189  0
         if (module.getInfos().url() == null || module.getInfos().url().isEmpty()) {
 190  0
             labelSite.setAction(null);
 191  
         } else {
 192  0
             labelSite.setAction(new OpenSiteLinkAction(module.getInfos().url()));
 193  
         }
 194  
 
 195  0
         labelOnlineVersion.setText(Managers.getManager(IUpdateManager.class).getMostRecentVersion(module).getVersion());
 196  0
     }
 197  
 
 198  
     /**
 199  
      * Set the foregound of the childs.
 200  
      *
 201  
      * @param color The foreground color.
 202  
      */
 203  
     private void setChildsForeground(Color color) {
 204  0
         labelName.setForeground(color);
 205  0
         labelAuthor.setForeground(color);
 206  0
         labelDate.setForeground(color);
 207  0
         labelSite.setForeground(color);
 208  0
         labelCurrentVersion.setForeground(color);
 209  0
         labelCurrentVersionText.setForeground(color);
 210  0
         labelOnlineVersion.setForeground(color);
 211  0
         labelOnlineVersionText.setForeground(color);
 212  0
         labelDateText.setForeground(color);
 213  0
         labelSiteText.setForeground(color);
 214  0
         labelState.setForeground(color);
 215  0
         labelStateText.setForeground(color);
 216  0
     }
 217  
 }