Coverage Report - org.jtheque.films.view.impl.models.table.LendingsTableModel
 
Classes in this File Line Coverage Branch Coverage Complexity
LendingsTableModel
0 %
0/42
0 %
0/17
2.1
LendingsTableModel$Columns
N/A
N/A
2.1
 
 1  
 package org.jtheque.films.view.impl.models.table;
 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.jtheque.core.managers.Managers;
 20  
 import org.jtheque.core.managers.beans.IBeansManager;
 21  
 import org.jtheque.core.managers.log.ILoggingManager;
 22  
 import org.jtheque.core.managers.persistence.able.DataListener;
 23  
 import org.jtheque.core.managers.persistence.able.Entity;
 24  
 import org.jtheque.films.persistence.dao.able.IDaoFilms;
 25  
 import org.jtheque.primary.od.able.Lending;
 26  
 import org.jtheque.primary.od.able.Person;
 27  
 import org.jtheque.primary.services.able.ILendingsService;
 28  
 import org.jtheque.utils.bean.IntDate;
 29  
 import org.jtheque.utils.collections.CollectionUtils;
 30  
 
 31  
 import javax.annotation.Resource;
 32  
 import javax.swing.event.TableModelEvent;
 33  
 import javax.swing.event.TableModelListener;
 34  
 import javax.swing.table.AbstractTableModel;
 35  
 import java.util.List;
 36  
 
 37  
 /**
 38  
  * A table model to display lendings of film.
 39  
  *
 40  
  * @author Baptiste Wicht
 41  
  */
 42  
 public final class LendingsTableModel extends AbstractTableModel implements TableModelListener, DataListener {
 43  
     private static final long serialVersionUID = 1L;
 44  
 
 45  
     /**
 46  
      * The columns of the table.
 47  
      *
 48  
      * @author Baptiste Wicht
 49  
      */
 50  
     private interface Columns {
 51  
         int ID = 0;
 52  
         int FILM = 1;
 53  
         int BORROWER = 2;
 54  
         int DATE = 3;
 55  
     }
 56  
 
 57  
     private String[] headers;
 58  
 
 59  
     private List<Lending> lendings;
 60  
 
 61  
     @Resource
 62  
     private ILendingsService lendingsService;
 63  
 
 64  
     @Resource
 65  
     private IDaoFilms daoFilms;
 66  
 
 67  
     /**
 68  
      * Construct a new <code>LendingsTableModel</code>.
 69  
      */
 70  
     public LendingsTableModel() {
 71  0
         super();
 72  
 
 73  0
         addTableModelListener(this);
 74  
 
 75  0
         Managers.getManager(IBeansManager.class).inject(this);
 76  
 
 77  0
         lendingsService.addDataListener(this);
 78  
 
 79  0
         lendings = CollectionUtils.copyOf(lendingsService.getLendings());
 80  0
     }
 81  
 
 82  
     /**
 83  
      * Set the headers of the table.
 84  
      *
 85  
      * @param headers The headers of the table.
 86  
      */
 87  
     public void setHeader(String[] headers) {
 88  0
         this.headers = headers.clone();
 89  
 
 90  0
         fireTableStructureChanged();
 91  0
     }
 92  
 
 93  
     @Override
 94  
     public int getColumnCount() {
 95  0
         return headers.length;
 96  
     }
 97  
 
 98  
     @Override
 99  
     public int getRowCount() {
 100  0
         return lendingsService.getLendings().size();
 101  
     }
 102  
 
 103  
     @Override
 104  
     public Object getValueAt(int rowIndex, int columnIndex) {
 105  
         Object value;
 106  
 
 107  0
         switch (columnIndex) {
 108  
             case Columns.ID:
 109  0
                 value = lendings.get(rowIndex).getId();
 110  0
                 break;
 111  
             case Columns.FILM:
 112  0
                 value = daoFilms.getFilm(lendings.get(rowIndex).getTheOther());
 113  0
                 break;
 114  
             case Columns.BORROWER:
 115  0
                 value = lendings.get(rowIndex).getThePerson();
 116  0
                 break;
 117  
             case Columns.DATE:
 118  0
                 value = lendings.get(rowIndex).getDate();
 119  0
                 break;
 120  
             default:
 121  0
                 value = "";
 122  
                 break;
 123  
         }
 124  
 
 125  0
         return value;
 126  
     }
 127  
 
 128  
     @Override
 129  
     public void setValueAt(Object value, int column, int row) {
 130  0
         if (value != null) {
 131  0
             Lending lending = lendingsService.getLending(row);
 132  
 
 133  0
             switch (column) {
 134  
                 case Columns.FILM:
 135  0
                     lending.setTheOther(((Entity) value).getId());
 136  0
                     break;
 137  
                 case Columns.BORROWER:
 138  0
                     lending.setThePerson((Person) value);
 139  0
                     break;
 140  
                 case Columns.DATE:
 141  0
                     lending.setDate(new IntDate((Integer) value));
 142  0
                     break;
 143  
                 default:
 144  0
                     Managers.getManager(ILoggingManager.class).getLogger(getClass()).debug("Anormal entry in switch clause. ");
 145  
                     break;
 146  
             }
 147  
 
 148  0
             fireTableCellUpdated(column, row);
 149  
         }
 150  0
     }
 151  
 
 152  
     @Override
 153  
     public String getColumnName(int column) {
 154  0
         return headers[column];
 155  
     }
 156  
 
 157  
     @Override
 158  
     public boolean isCellEditable(int row, int column) {
 159  0
         return false;
 160  
     }
 161  
 
 162  
     @Override
 163  
     public void tableChanged(TableModelEvent event) {
 164  0
         if (event.getType() == TableModelEvent.UPDATE &&
 165  
                 event.getColumn() != -1 &&
 166  
                 event.getFirstRow() == event.getLastRow()) {
 167  0
             lendingsService.save(lendingsService.getLending(event.getFirstRow()));
 168  
         }
 169  0
     }
 170  
 
 171  
     @Override
 172  
     public void dataChanged() {
 173  0
         lendings = CollectionUtils.copyOf(lendingsService.getLendings());
 174  0
         fireTableDataChanged();
 175  0
     }
 176  
 }