/** * Copyright (c) 2009 Juwi MacMillan Group GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.juwimm.cms.gui; import static de.juwimm.cms.client.beans.Application.getBean; import static de.juwimm.cms.common.Constants.rb; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import org.apache.log4j.Logger; import org.tizzit.util.DateConverter; import de.juwimm.cms.client.beans.Beans; import de.juwimm.cms.common.Constants; import de.juwimm.cms.gui.table.TaskTableModel; import de.juwimm.cms.util.ActionHub; import de.juwimm.cms.util.Communication; import de.juwimm.cms.util.UIConstants; import de.juwimm.cms.vo.TaskValue; /** * <p>Title: juwimm cms</p> * <p>Description: content management system</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: juwi macmillan group gmbh</p> * @author Dirk Bogun * @version $Id$ */ public class PanTaskTable extends JPanel implements ActionListener { private static final Logger log = Logger.getLogger(PanTaskTable.class); public static final String APPROVE = rb.getString("panel.panelTaskTable.APPROVE"); public static final String REJECT = rb.getString("panel.panelTaskTable.REJECT"); public static final String MESSAGE = rb.getString("panel.panelTaskTable.MESSAGE"); private Communication comm = ((Communication) getBean(Beans.COMMUNICATION)); private JScrollPane scrollPane; private JPanel panel = new JPanel(); private JButton btnDelete = new JButton(); private TaskTableModel tableModel; private JTable table = new JTable(); private int viewedTaskId = -1; public PanTaskTable() { try { setDoubleBuffered(true); jbInit(); ActionHub.addActionListener(this); } catch (Exception exe) { log.error("Initialization Error", exe); } } void jbInit() throws Exception { this.setLayout(new GridBagLayout()); Dimension dim = table.getTableHeader().getPreferredSize(); table.getTableHeader().setPreferredSize(new Dimension(dim.width, 20)); table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); table.getSelectionModel().addListSelectionListener(new MyListSelectionListener()); scrollPane = new JScrollPane(table); scrollPane.setPreferredSize(new Dimension(300, 0)); panel.setLayout(new GridBagLayout()); btnDelete.setEnabled(false); btnDelete.setPreferredSize(new Dimension(30, 30)); btnDelete.setToolTipText(rb.getString("panel.task.delete.single")); btnDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { btnDeleteActionPerformed(e); } }); this.add(scrollPane, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); this.add(panel, new GridBagConstraints(0, 2, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); btnDelete.setIcon(UIConstants.MODULE_DATABASECOMPONENT_DELETE); panel.add(btnDelete, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 0, 3, 5), 0, 0)); } protected void fillTable() { try { TaskValue[] tasks = comm.getAllTasks(); if (tasks != null) { tableModel = new TaskTableModel(tasks); table.setModel(tableModel); } else { DefaultTableModel tm = new DefaultTableModel(); table.setModel(tm); tm.fireTableDataChanged(); } setEditor(); } catch (Exception exe) { log.error("Error filling Table", exe); } } protected void setEditor() { try { TableColumn column = table.getColumnModel().getColumn(0); column.setPreferredWidth(60); column = table.getColumnModel().getColumn(1); column.setPreferredWidth(120); column = table.getColumnModel().getColumn(2); column.setCellRenderer(new MyTableCellRenderer()); column = table.getColumnModel().getColumn(3); column.setPreferredWidth(60); } catch (Exception ex) { if (log.isDebugEnabled()) { log.debug("Error in setEditor in PanTask ", ex); } } } /** * @version $Id$ */ private class MyTableCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(JLabel.CENTER); if (value instanceof Calendar) { this.setText(getDateOrTime((Calendar) value)); } return this; } private String getDateOrTime(Calendar timeStamp) { if (DateConverter.isDateToday(timeStamp)) { return DateConverter.getSql2TimeString(timeStamp); } return DateConverter.getSql2String(timeStamp); } } /** * @version $Id$ */ private class MyListSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { // does not fire, if the same row is selected again if (e.getValueIsAdjusting()) { return; } /* // one of these is the focused row(?) int i1 = e.getFirstIndex(); int i2 = e.getLastIndex(); */ if (table.getSelectedRow() > -1) { btnDelete.setEnabled(true); TaskValue task = (TaskValue) tableModel.getValueAt(table.getSelectedRow(), 4); try { ActionHub.fireActionPerformed(new ActionEvent(task, ActionEvent.ACTION_PERFORMED, Constants.ACTION_TASK_SELECT)); viewedTaskId = task.getTaskId(); if (task.getStatus() == Constants.TASK_STATUS_NEW) { comm.setTaskViewed(task.getTaskId()); } } catch (Exception exe) { log.error("Error selecting task", exe); } if (table.getSelectedRowCount() > 1) { btnDelete.setToolTipText(rb.getString("panel.task.delete.multiple")); } else if (table.getSelectedRowCount() == 1) { btnDelete.setToolTipText(rb.getString("panel.task.delete.single")); } } } } public void reload() { fillTable(); } private void btnDeleteActionPerformed(ActionEvent e) { int delRowsCount = table.getSelectedRowCount(); String confirmMessage = null; if (delRowsCount == 1) { confirmMessage = rb.getString("panel.task.delete.confirm.single"); } else { confirmMessage = rb.getString("panel.task.delete.confirm.multiple"); } int i = JOptionPane.showConfirmDialog(this.getParent().getParent(), confirmMessage, "CMS", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (i == JOptionPane.YES_OPTION) { int deleteIds[] = table.getSelectedRows(); for (int j = (deleteIds.length - 1); j >= 0; j--) { int deleteId = deleteIds[j]; TaskValue task = (TaskValue) tableModel.getValueAt(deleteId, 4); try { comm.removeTask(task.getTaskId()); } catch (Exception ex) { String errorMessage = null; if (delRowsCount == 1) { errorMessage = rb.getString("panel.task.delete.error.single"); } else { errorMessage = rb.getString("panel.task.delete.error.multiple"); } JOptionPane.showMessageDialog(this.getParent().getParent(), errorMessage + "\n" + ex.getMessage(), "CMS", JOptionPane.ERROR_MESSAGE); return; } if (task.getTaskId() == this.viewedTaskId) { ActionHub.fireActionPerformed(new ActionEvent(task, ActionEvent.ACTION_PERFORMED, Constants.ACTION_TASK_DESELECT)); this.viewedTaskId = -1; } } this.reload(); if (delRowsCount > 0) { String successMessage = null; if (delRowsCount == 1) { successMessage = rb.getString("panel.task.delete.success.single"); } else { successMessage = rb.getString("panel.task.delete.success.multiple"); } UIConstants.setStatusInfo(successMessage); } } } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(Constants.ACTION_TASK_DESELECT)) { btnDelete.setEnabled(false); table.clearSelection(); } else if (e.getActionCommand().equals(Constants.ACTION_TASK_DONE)) { btnDelete.doClick(); } else if (e.getActionCommand().equals(Constants.ACTION_TASK_VIEW_COMPONENT_REFRESH)) { TaskValue source = (TaskValue) e.getSource(); for (int i = 0; i < tableModel.getRowCount(); i++) { if (((TaskValue) tableModel.getValueAt(i, 4)).getTaskId().equals(source.getTaskId())) { tableModel.setValueAt(source, i, 4); } } } } }