Author: echatellier Date: 2010-04-09 18:12:37 +0200 (Fri, 09 Apr 2010) New Revision: 2842 Log: Migration of transaction and lettering UI. Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/AccountComboBoxModel.java Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/EntryBookComboBoxModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/FinancialPeriodComboBoxModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTable.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTableModel.java Copied: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/AccountComboBoxModel.java (from rev 2836, trunk/lima-swing/src/main/java/org/chorem/lima/combobox/model/AccountComboBoxModel.java) =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/AccountComboBoxModel.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/AccountComboBoxModel.java 2010-04-09 16:12:37 UTC (rev 2842) @@ -0,0 +1,52 @@ +/* *##% Lima Swing + * Copyright (C) 2008 - 2010 CodeLutin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * ##%*/ + +package org.chorem.lima.ui.transaction.model; + +import javax.swing.DefaultComboBoxModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Account combo box model. + * + * Used in: + * - lettering view + * + * @author ore + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class AccountComboBoxModel extends DefaultComboBoxModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = -6914345613508897515L; + + /** log. */ + private static final Log log = LogFactory.getLog(AccountComboBoxModel.class); + + /** + * @param items + */ + public AccountComboBoxModel() { + super(); + } +} Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/EntryBookComboBoxModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/EntryBookComboBoxModel.java 2010-04-09 16:12:23 UTC (rev 2841) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/EntryBookComboBoxModel.java 2010-04-09 16:12:37 UTC (rev 2842) @@ -36,11 +36,11 @@ */ public class EntryBookComboBoxModel implements ComboBoxModel { - protected Object selectedMonth; + protected Object selectedEntryBook; protected EntryBookService entryBookService; - public EntryBookComboBoxModel(Object selectedMonth) { + public EntryBookComboBoxModel() { entryBookService = LimaServiceFactory.getInstance().getEntryBookService(); } @@ -99,7 +99,7 @@ */ @Override public void setSelectedItem(Object anItem) { - selectedMonth = anItem; + selectedEntryBook = anItem; } /* @@ -107,6 +107,6 @@ */ @Override public Object getSelectedItem() { - return selectedMonth; + return selectedEntryBook; } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/FinancialPeriodComboBoxModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/FinancialPeriodComboBoxModel.java 2010-04-09 16:12:23 UTC (rev 2841) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/model/FinancialPeriodComboBoxModel.java 2010-04-09 16:12:37 UTC (rev 2842) @@ -24,7 +24,6 @@ import org.chorem.lima.business.FinancialPeriodService; import org.chorem.lima.business.LimaException; import org.chorem.lima.service.LimaServiceFactory; -import org.nuiton.util.MonthEnum; /** * Opened financial period combo box model. @@ -37,11 +36,11 @@ */ public class FinancialPeriodComboBoxModel implements ComboBoxModel { - protected Object selectedMonth; + protected Object selectedFinancialPeriod; protected FinancialPeriodService financialPeriodService; - public FinancialPeriodComboBoxModel(Object selectedMonth) { + public FinancialPeriodComboBoxModel() { financialPeriodService = LimaServiceFactory.getInstance().getFinancialPeriodService(); } @@ -100,7 +99,7 @@ */ @Override public void setSelectedItem(Object anItem) { - selectedMonth = anItem; + selectedFinancialPeriod = anItem; } /* @@ -108,6 +107,6 @@ */ @Override public Object getSelectedItem() { - return selectedMonth; + return selectedFinancialPeriod; } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTable.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTable.java 2010-04-09 16:12:23 UTC (rev 2841) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTable.java 2010-04-09 16:12:37 UTC (rev 2842) @@ -1,127 +1,98 @@ -/* - * *##% Lima Main +/* *##% Lima Swing * Copyright (C) 2008 - 2010 CodeLutin * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* - */ + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * ##%*/ package org.chorem.lima.ui.transaction.table; import java.awt.Color; import java.awt.Component; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.util.Date; -import javax.swing.ListSelectionModel; -import javax.swing.table.TableColumnModel; -import javax.swing.table.TableModel; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.lima.enumeration.TransactionEnum; +import org.chorem.lima.entity.Transaction; import org.chorem.lima.listener.EmptyLineSelectionListener; -import org.chorem.lima.listener.TransactionHeaderListener; -import org.chorem.lima.listener.TransactionKeyListener; -import org.chorem.lima.table.editor.AccountTableCellEditor; import org.chorem.lima.table.editor.DateTableCellEditor; -import org.chorem.lima.table.editor.JournalTableCellEditor; -import org.chorem.lima.table.editor.NumberTableCellEditor; -import org.chorem.lima.table.editor.PeriodTableCellEditor; -import org.chorem.lima.table.editor.TextTableCellEditor; -import org.chorem.lima.table.model.TransactionFlattenTableModel; import org.chorem.lima.table.model.TransactionSortedTableColumnModel; import org.chorem.lima.table.model.TransactionTableModel; -import org.chorem.lima.table.renderer.AccountTableCellRenderer; -import org.chorem.lima.table.renderer.AmountTableCellRenderer; -import org.chorem.lima.table.renderer.DateTableCellRenderer; -import org.chorem.lima.table.renderer.JournalTableCellRenderer; -import org.chorem.lima.table.renderer.PeriodTableCellRenderer; -import org.chorem.lima.table.renderer.StatusTableCellRenderer; -import org.chorem.lima.table.renderer.TextTableCellRenderer; -import org.chorem.lima.table.renderer.TransactionHeaderRenderer; +import org.chorem.lima.ui.transaction.TransactionHelper; +import org.chorem.lima.ui.transaction.TransactionViewHandler; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.ComponentAdapter; import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.HighlighterFactory; /** + * Table des transaction qui ajoute des comportement (keys). + * * @author ore * @author Rémi Chapelet */ -public class TransactionTable extends JXTable { +public class TransactionTable extends JXTable implements KeyListener { /** serialVersionUID. */ private static final long serialVersionUID = 3133690382049594727L; - + /** log. */ private static final Log log = LogFactory.getLog(TransactionTable.class); + protected TransactionViewHandler handler; + private ColorHighlighter colorEmptyLine; - + private ColorHighlighter colorTransaction; - + private ColorHighlighter colorBalance; - + private EmptyLineSelectionListener emptyLineSelectionListener; - - private TransactionKeyListener keyListener; /** - * @param model - * @param columnModel */ - public TransactionTable(TransactionTableModel model, TransactionSortedTableColumnModel columnModel) { - super(model, columnModel); - createDefaultColumnsFromModel(); - - //setSelectionBackground(new Color(250,250,250)); - //setSelectionForeground(new Color(0,0,0)); - - setHighlighters(HighlighterFactory.createAlternateStriping(Color.WHITE,new Color(250,250,250))); - setColumnControlVisible(true); - getColumnExt(TransactionEnum.LETTERING.ordinal()).setVisible(false); - /** + public TransactionTable(TransactionViewHandler handler/*, + TransactionTableModel model, + TransactionSortedTableColumnModel columnModel*/) { + //super(model, columnModel); + + this.handler = handler; + + /* * New Table Header */ - getTableHeader().setDefaultRenderer(TransactionHeaderRenderer.getInstance()); - getTableHeader().addMouseListener(new TransactionHeaderListener(this)); + // header renderer getTableHeader().setDefaultRenderer(TransactionHeaderRenderer.getInstance()); + //getTableHeader().addMouseListener(new TransactionHeaderListener(this)); - /** + /* * Mod : il est possible d'activer cette option. * Lorsque l'utilisateur clique sur une ligne du tableau, on ajoute * automatiquement une nouvelle ligne (une entrée comptable) */ - //addMouseListener(getEmptyLineSelectionListener()); - /** - * Fin mod - */ + addMouseListener(getEmptyLineSelectionListener()); - /** + /* * Mod : il est possible d'activer cette option. * Lorsque l'utilisateur appuie sur une touche "insert" ou autres, le * programme insère une ligne comptable. */ - addKeyListener(getKeyListener()); + addKeyListener(this); - - /** - * Editing true - */ - setTransactionEditable(true); - // cell rendering - TableColumnModel tcm = getColumnModel(); + /*TableColumnModel tcm = getColumnModel(); tcm.getColumn(TransactionEnum.DATE.ordinal()).setCellRenderer(DateTableCellRenderer.getInstance()); tcm.getColumn(TransactionEnum.ACCOUNT.ordinal()).setCellRenderer(AccountTableCellRenderer.getInstance()); tcm.getColumn(TransactionEnum.JOURNAL.ordinal()).setCellRenderer(JournalTableCellRenderer.getInstance()); @@ -141,37 +112,23 @@ tcm.getColumn(TransactionEnum.CREDIT.ordinal()).setCellEditor(NumberTableCellEditor.getInstance()); tcm.getColumn(TransactionEnum.DESCRIPTION.ordinal()).setCellEditor(TextTableCellEditor.getInstance()); tcm.getColumn(TransactionEnum.DOCUMENT.ordinal()).setCellEditor(TextTableCellEditor.getInstance()); - tcm.getColumn(TransactionEnum.PERIOD.ordinal()).setCellEditor(PeriodTableCellEditor.getInstance()); - packAll(); - /** - * Color transactions - */ + tcm.getColumn(TransactionEnum.PERIOD.ordinal()).setCellEditor(PeriodTableCellEditor.getInstance());*/ + + setDefaultEditor(Date.class, new DateTableCellEditor()); + + + // Color transactions addColorTransaction(); - addColorBalance(); + addColorNonBalancedTransaction(); } /** - * @param editable - */ - public void setTransactionEditable(boolean editable) { - if (editable) { - addMouseListener(emptyLineSelectionListener); - addKeyListener(keyListener); - } else { - removeMouseListener(emptyLineSelectionListener); - removeKeyListener(keyListener); - } - TransactionTableModel model = (TransactionTableModel) getModel(); - model.setEditable(editable); - } - - /** * */ public void addColorEmptyLine() { - /* - * Renvoie une couleur jaune pour chaque nouvelle ligne créée - removeColorEmptyLine(); + + // Renvoie une couleur jaune pour chaque nouvelle ligne créée + /*removeColorEmptyLine(); if (TransactionFlattenTableModel.isFlattenModel(getModel())) { final int posNext = ((TransactionFlattenTableModel) getModel()).getEmptyLinePosition(); HighlightPredicate predicate = new HighlightPredicate() { @@ -199,59 +156,50 @@ * Cette méthode permet de colorer toutes les transactions dans le tableau * afin de bien distinguer les transactions et entrées comptables. */ - public void addColorTransaction() { + protected void addColorTransaction() { if (colorTransaction != null) { removeHighlighter(colorTransaction); } HighlightPredicate predicate = new HighlightPredicate() { - @Override - public boolean isHighlighted(Component arg0, ComponentAdapter adapter) { - return DTOHelper.isTransaction(getModel().getElementAt(adapter.row)) ? true : false; + public boolean isHighlighted(Component renderer, + ComponentAdapter adapter) { + return getModel().getElementAt(adapter.row) instanceof Transaction; } }; - colorTransaction = new ColorHighlighter(predicate, new Color(222,222,222), null,null,null); + colorTransaction = new ColorHighlighter(predicate, new Color(222, 222, + 222), null, null, null); addHighlighter(colorTransaction); } - /** * Permet de surligner une transaction dans le tableau lorsque cette dernière * n'est pas équilibrée. */ - public void addColorBalance() { + protected void addColorNonBalancedTransaction() { if (colorBalance != null) { removeHighlighter(colorBalance); } HighlightPredicate predicate = new HighlightPredicate() { - @Override - public boolean isHighlighted(Component arg0, ComponentAdapter adapter) { + public boolean isHighlighted(Component renderer, + ComponentAdapter adapter) { boolean isHighlighted = false; - // Si c'est une transaction - if ( DTOHelper.isTransaction(getModel().getElementAt(adapter.row)) ) - { - if ( !DTOHelper.isBalanced((TransactionDTO) getModel().getElementAt(adapter.row)) ) - { + Object value = getModel().getElementAt(adapter.row); + if (value instanceof Transaction) { + Transaction currentTransaction = (Transaction) value; + if (!TransactionHelper.isBalanced(currentTransaction)) { isHighlighted = true; } } return isHighlighted; } }; - colorTransaction = new ColorHighlighter(predicate, new Color(255,198,209),null,null,null); + colorTransaction = new ColorHighlighter(predicate, new Color(255, 198, + 209), null, null, null); addHighlighter(colorTransaction); } - /** - * - */ - public void removeColorTransaction() { - if (colorTransaction != null) { - removeHighlighter(colorTransaction); - } - } - @Override public TransactionTableModel getModel() { return (TransactionTableModel) this.dataModel; @@ -269,27 +217,165 @@ return emptyLineSelectionListener; } - /** - * @return - */ - public TransactionKeyListener getKeyListener() { - if (keyListener == null) { - return new TransactionKeyListener(); + @Override + public void keyPressed(KeyEvent e) { + + // VK_DELETE suppression de la transaction en cours + // ou de l'entree + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + handler.deleteSelectedRow(); } - return keyListener; + + // Touche : insert ou ctrl+I + // Ajoute une transaction + if ((e.getKeyCode() == KeyEvent.VK_INSERT) + || (e.getKeyCode() == KeyEvent.VK_I && e.getModifiers() == KeyEvent.CTRL_MASK)) { + + // TODO EC 20100408 String result = table.getModel().addEmptyTransaction(); + } + + // Touche '+' OU 'ctrl+Entr' + // Ajoute une entrée comptable ou transaction + if (e.getKeyCode() == KeyEvent.VK_PLUS + || (e.getKeyCode() == KeyEvent.VK_ENTER && e.getModifiers() == KeyEvent.CTRL_MASK)) { + /*int max_y = table.getRowCount(); + addLine(table); + table.setColumnSelectionInterval(0, 0); + table.setRowSelectionInterval(max_y, max_y);*/ + } + + /** + * Touche tab + * Ajoute une entrée comptable ou transaction seulement si tab est sur + * la dernière cellule. + */ + if (e.getKeyChar() == KeyEvent.VK_TAB) { + // Vérifie si la cellule sélectionnée est la dernière + /*int x = table.getSelectedColumn(); + int y = table.getSelectedRow(); + int max_x = table.getColumnCount() - 1; + int max_y = table.getRowCount() - 1; + if (x == max_x && y == max_y) { + boolean result = addLine(table); + // positionne la sélection sur la nouvelle ligne créée + if (result) { + table.setColumnSelectionInterval(0, 0); + table.setRowSelectionInterval(max_y + 1, max_y + 1); + } + }*/ + } + } - /** - * @param model - * @return + /* + * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent) */ - public boolean isFlattenModel(TableModel model) { - return TransactionFlattenTableModel.isFlattenModel(model); + @Override + public void keyTyped(KeyEvent e) { + } + /* + * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent) + */ @Override - public void setModel(TableModel arg0) { - super.setModel(arg0); - removeColorEmptyLine(); + public void keyReleased(KeyEvent e) { + } + + /** + * Permet d'ajouter une nouvelle ligne : transaction ou entrée + * @param table la table + * @return + */ + /*private boolean addLine(TransactionJXTable table) { + if (TransactionFlattenTableModel.isFlattenModel(table.getModel())) { + // Vérifie si le tableau est vide, alors ajout d'une transaction + if (table.getRowCount() == 0) { + String result = table.getModel().addEmptyTransaction(); + ErrorMessage.showMessage(result); + return true; + } + TransactionFlattenTableModel flattenModel = (TransactionFlattenTableModel) table + .getModel(); + int selectedRow = 0; + // Vérifie si une ligne est sélectionnée ou non + if (table.getSelectionModel().isSelectionEmpty()) { + // Not line selected + selectedRow = table.getRowCount() - 1; + } else { + // Line selected + selectedRow = table.getSelectedRow(); + } + // Récupère la position de la transaction rattachée + int parentIndex = flattenModel.getParentIndex(selectedRow); + + // Is transaction editable ? + Object o = flattenModel.getElementAt(parentIndex); + if (DTOHelper.isTransaction(o)) { + // Transaction n'est pas éditable + if (!ServiceHelper.isEditable((TransactionDTO) o)) { + return false; + } + } else { + //Entry n'est pas éditable + if (!ServiceHelper.isEditable((EntryDTO) o)) { + return false; + } + } + + // Vérifie si la transaction est équilibrée ou non (et qu'elle posséde des entrées) + TransactionDTO transaction = (TransactionDTO) flattenModel + .getElementAt(parentIndex); + if (DTOHelper.isBalanced(transaction) + && !transaction.getEntries().isEmpty()) { + String result = table.getModel().addEmptyTransaction(); + ErrorMessage.showMessage(result); + return true; + } + + // Vérifie si une ligne est sélectionnée ou non + if (table.getSelectionModel().isSelectionEmpty()) { + // Not line selected + // Click in not current transaction + if (flattenModel.getCurrentParentIndex() != parentIndex) { + int posNext = selectedRow + 1; + flattenModel.createEmptyLine(); + flattenModel.addEmptyLine(posNext); + // To end + flattenModel.setCurrentParentIndex(parentIndex); + } + + // New Line Color + table.addColorEmptyLine(); + } else { + // Line selected + // Click in not current transaction + if (flattenModel.getCurrentParentIndex() != parentIndex) { + int posNext = flattenModel + .emptyLineNextPosition(selectedRow); + + // Once traitement for transaction + if (flattenModel.isEmptyLineEmpty()) { + flattenModel.createEmptyLine(); + } else { + flattenModel.removeEmptyLine(); + selectedRow = table.getSelectedRow(); + parentIndex = flattenModel.getParentIndex(selectedRow); + posNext = flattenModel + .emptyLineNextPosition(selectedRow); + flattenModel.createEmptyLine(); + } + flattenModel.addEmptyLine(posNext); + // To end + flattenModel.setCurrentParentIndex(parentIndex); + } + + // New Line Color + table.addColorEmptyLine(); + } + return true; + } + return false; + }*/ } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTableModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTableModel.java 2010-04-09 16:12:23 UTC (rev 2841) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/transaction/table/TransactionTableModel.java 2010-04-09 16:12:37 UTC (rev 2842) @@ -1,51 +1,57 @@ -/* - * *##% Lima Main +/* *##% Lima Swing * Copyright (C) 2008 - 2010 CodeLutin * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* - */ + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * ##%*/ package org.chorem.lima.ui.transaction.table; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; +import static org.nuiton.i18n.I18n._; + import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.List; import javax.swing.table.AbstractTableModel; -import javax.xml.rpc.ServiceFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.lima.LimaContext; +import org.chorem.lima.business.LimaException; import org.chorem.lima.business.RecordService; import org.chorem.lima.business.TransactionService; -import org.chorem.lima.comparator.JournalComparator; -import org.chorem.lima.comparator.PeriodComparator; -import org.chorem.lima.comparator.StatusComparator; -import org.chorem.lima.enumeration.FilterEnum; -import org.chorem.lima.enumeration.TransactionEnum; +import org.chorem.lima.entity.Account; +import org.chorem.lima.entity.Entry; +import org.chorem.lima.entity.EntryBook; +import org.chorem.lima.entity.FinancialPeriod; +import org.chorem.lima.entity.Transaction; import org.chorem.lima.service.LimaServiceFactory; -import org.chorem.lima.util.ServiceHelper; +import org.chorem.lima.ui.transaction.TransactionHelper; +import org.chorem.lima.util.ErrorHelper; /** * Basic transaction table model. * + * Le modele est filtré sur {@link #selectedEntryBook} et + * {@link #selectedFinancialPeriod} (montée en charge !). + * + * TODO EC20100408 revoir le modele, avoir des transactions et des entries + * c'est pas gérables. + * Le mieux serait d'avoir un "mega component transaction par ligne" et + * que ce composant puisse editer les entries. + * Ou autre chose. + * * @author ore * @author chatellier * @version $Revision$ @@ -57,16 +63,20 @@ /** serialVersionUID. */ private static final long serialVersionUID = 3914954536809622358L; - + /** log. */ - private static final Log log = LogFactory.getLog(TransactionTableModel.class); + private static final Log log = LogFactory + .getLog(TransactionTableModel.class); - /** - * Services - */ + /** Transaction service. */ + protected final TransactionService transactionService; + /** Record service. */ protected final RecordService recordService; - protected final TransactionService transactionService; + protected EntryBook selectedEntryBook; + + protected FinancialPeriod selectedFinancialPeriod; + /** * Model constructor. * @@ -75,130 +85,336 @@ public TransactionTableModel() { /* Services */ recordService = LimaServiceFactory.getInstance().getRecordService(); - transactionService = LimaServiceFactory.getInstance().getTransactionService(); + transactionService = LimaServiceFactory.getInstance() + .getTransactionService(); } - @Override - public int getRowCount() { - return model.getRowCount(); + /** + * Le model est une combinaison de Transaction/Entries. + * + * TODO EC20100408 c'est pas evident a manipuler via une table + * + * @return + */ + protected List<Object> getDataList() { + + List<Object> results = new ArrayList<Object>(); + try { + List<Transaction> transactions = + transactionService.getAllTransactionsForEntryBookAndFinancialPeriod(selectedEntryBook, selectedFinancialPeriod); + + for (Transaction transaction : transactions) { + results.add(transaction); + // TODO EC20100408 warn about lazy exception here + // TODO EC20100408 warn about non ordonned transaction.getEntry() + results.addAll(transaction.getEntry()); + } + } + catch (LimaException eee) { + if (log.isErrorEnabled()) { + log.debug("Can't update model", eee); + } + + ErrorHelper.showErrorDialog("Can't get transaction list", eee); + } + + return results; } @Override public int getColumnCount() { - return model.getColumnCount(); + return 10; } @Override - public Object getValueAt(int row, int column) { - return model.getValueAt(getSortedRow(row), column); - } + public Class<?> getColumnClass(int column) { - @Override - public Object getElementAt(int row) { - return model.getElementAt(getSortedRow(row)); - } + Class<?> result = null; - @Override - public boolean isEditable() { - return model.isEditable(); - } + switch (column) { + case 0: + result = Date.class; + break; + case 1: + result = Account.class; + break; + case 2: + result = EntryBook.class; + break; + case 3: + result = FinancialPeriod.class; + break; + case 4: + result = String.class; + break; + case 5: + result = Double.class; + break; + case 6: + result = Double.class; + break; + case 7: + result = String.class; + break; + case 8: + result = String.class; + break; + case 9: + result = String.class; + break; + } - @Override - public Class<?> getColumnClass(int column) { - return model.getColumnClass(column); + return result; } @Override public String getColumnName(int column) { - return model.getColumnName(column); + String result = "n/a"; + + switch (column) { + case 0: + result = _("lima.transaction.column.date"); + break; + case 1: + result = _("lima.transaction.column.account"); + break; + case 2: + result = _("lima.transaction.column.entrybook"); + break; + case 3: + result = _("lima.transaction.column.period"); + break; + case 4: + result = _("lima.transaction.column.status"); + break; + case 5: + result = _("lima.transaction.column.debit"); + break; + case 6: + result = _("lima.transaction.column.credit"); + break; + case 7: + result = _("lima.transaction.column.balance"); + break; + case 8: + result = _("lima.transaction.column.description"); + break; + case 9: + result = _("lima.transaction.column.document"); + break; + } + + return result; } @Override - public boolean isCellEditable(int row, int column) { - return model.isCellEditable(getSortedRow(row), column); + public int getRowCount() { + int result = 0; + + // just prevent too much result + if (selectedEntryBook != null) { + List<Object> datas = getDataList(); + result = datas.size(); + } + else { + if (log.isDebugEnabled()) { + log.debug("No entry book selected skip table model update"); + } + } + + return result; } @Override - public void setValueAt(Object value, int row, int col) { - row = getSortedRow(row); - String response; - /** - * TransactionDTO - */ - TransactionDTO trans = (TransactionDTO) getElementAt(row); - TransactionDTO cloneTrans = DTOHelper.cloneTransaction(trans); - switch (TransactionEnum.values()[col]) { - case PERIOD: - cloneTrans.setPeriod((PeriodDTO) value); - response = transactionServ.updateTransaction( - LimaContext.getContext().getDataManager().getStatus(), - trans, - cloneTrans); - if (ServiceHelper.RESPOND_SUCCESS.equals(response)) { - trans.setPeriod(cloneTrans.getPeriod()); - trans.setStatus(cloneTrans.getStatus()); + public Object getValueAt(int row, int column) { + Object result = null; + + // just prevent too much result + if (selectedEntryBook != null) { + // TODO EC-20100407 remove this ugly code + List<Object> datas = getDataList(); + result = datas.get(row); + + if (result instanceof Transaction) { + Transaction currentRow = (Transaction)result; + switch (column) { + case 0: + result = currentRow.getTransactionDate(); + break; + case 1: + result = null; // account ? + break; + case 2: + result = null; // entry book + break; + case 3: + result = null; //currentRow.getFinancialPeriod(); + break; + case 4: + result = null; // what is status ? _("lima.transaction.column.status"); + break; + case 5: + result = TransactionHelper.getDebit(currentRow); + break; + case 6: + result = TransactionHelper.getCredit(currentRow); + break; + case 7: + result = TransactionHelper.getDebit(currentRow) - TransactionHelper.getCredit(currentRow); + break; + case 8: + result = currentRow.getDescription(); + break; + case 9: + result = currentRow.getVoucherRef(); + break; } - break; - case JOURNAL: - cloneTrans.setJournal((JournalDTO) value); - response = transactionServ.updateTransaction( - LimaContext.getContext().getDataManager().getStatus(), - trans, - cloneTrans); - if (ServiceHelper.RESPOND_SUCCESS.equals(response)) { - trans.setJournal(cloneTrans.getJournal()); - trans.setStatus(cloneTrans.getStatus()); + } + else if (result instanceof Entry) { + Entry currentEntry = (Entry)result; + switch (column) { + case 0: + result = null; // date + break; + case 1: + result = currentEntry.getAccount(); // account ? + break; + case 2: + result = null; // entry book + break; + case 3: + result = null; //currentRow.getFinancialPeriod(); + break; + case 4: + result = null; // what is status ? _("lima.transaction.column.status"); + break; + case 5: + result = currentEntry.getDebit() ? currentEntry.getAmount() : 0; + break; + case 6: + result = currentEntry.getDebit() ? 0 : currentEntry.getAmount(); + break; + case 7: + result = null; + break; + case 8: + result = currentEntry.getDescription(); + break; + case 9: + result = null; + break; } - break; - case DATE: - cloneTrans.setEntryDate((Date) value); - response = transactionServ.updateTransaction( - LimaContext.getContext().getDataManager().getStatus(), - trans, - cloneTrans); - if (ServiceHelper.RESPOND_SUCCESS.equals(response)) { - trans.setEntryDate(cloneTrans.getEntryDate()); - trans.setStatus(cloneTrans.getStatus()); - } - break; - case DOCUMENT: - cloneTrans.setVoucherRef((String) value); - response = transactionServ.updateTransaction( - LimaContext.getContext().getDataManager().getStatus(), - trans, - cloneTrans); - if (ServiceHelper.RESPOND_SUCCESS.equals(response)) { - trans.setVoucherRef(cloneTrans.getVoucherRef()); - trans.setStatus(cloneTrans.getStatus()); - } - break; - case DESCRIPTION: - cloneTrans.setDescription((String) value); - response = transactionServ.updateTransaction( - LimaContext.getContext().getDataManager().getStatus(), - trans, - cloneTrans); - if (ServiceHelper.RESPOND_SUCCESS.equals(response)) { - trans.setDescription(cloneTrans.getDescription()); - trans.setStatus(cloneTrans.getStatus()); - } - break; + } } + else { + if (log.isDebugEnabled()) { + log.debug("No entry book selected skip table model update"); + } + } + + return result; } - /** - * - */ @Override - public String addEmptyTransaction() { - return model.addEmptyTransaction(); - } + public void setValueAt(Object value, int row, int column) { - /** - * @param trans - */ - @Override - public String removeTransaction(TransactionDTO trans) { - return model.removeTransaction(trans); + // just prevent too much result + if (selectedEntryBook != null) { + // TODO EC-20100407 remove this ugly code + List<Object> datas = getDataList(); + Object currentRow = datas.get(row); + + if (currentRow instanceof Transaction) { + Transaction currentTransaction = (Transaction)currentRow; + switch (column) { + case 0: + currentTransaction.setTransactionDate((Date)value); + break; + /*case 1: + result = null; // account ? + break; + case 2: + result = null; // entry book + break; + case 3: + result = null; //currentRow.getFinancialPeriod(); + break; + case 4: + result = null; // what is status ? _("lima.transaction.column.status"); + break; + case 5: + result = TransactionHelper.getDebit(currentRow); + break; + case 6: + result = TransactionHelper.getCredit(currentRow); + break; + case 7: + result = TransactionHelper.getDebit(currentRow) - TransactionHelper.getCredit(currentRow); + break;*/ + case 8: + currentTransaction.setDescription((String)value); + break; + case 9: + currentTransaction.setVoucherRef((String)value); + break; + } + + // notify service for modification + try { + transactionService.updateTransaction(currentTransaction); + } catch (LimaException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + //fireTableRowsUpdated(row, row); // to update what ??? + + } + else if (currentRow instanceof Entry) { + Entry currentEntry = (Entry)currentRow; + switch (column) { + /*case 0: + result = null; // date + break;*/ + case 1: + currentEntry.setAccount((Account)value); // account ? + break; + /*case 2: + result = null; // entry book + break; + case 3: + result = null; //currentRow.getFinancialPeriod(); + break; + case 4: + result = null; // what is status ? _("lima.transaction.column.status"); + break;*/ + case 5: + currentEntry.setAmount((Double)value); + currentEntry.setDebit(true); + break; + case 6: + currentEntry.setAmount((Double)value); + currentEntry.setDebit(false); + break; + /*case 7: + result = null; + break;*/ + case 8: + currentEntry.setDescription((String)value); + break; + /*case 9: + result = null; + break;*/ + } + + //transactionService.updateEntry(currentEntry); + // fire modification of all transaction + // see here, table is not adapted :) + } + } + else { + if (log.isDebugEnabled()) { + log.debug("No entry book selected skip table model update"); + } + } } }
participants (1)
-
echatellier@users.chorem.org