/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.utils.sql; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.utils.QueryHelper; import net.codjo.utils.SQLFieldList; import net.codjo.utils.sql.event.DbChangeEvent; import java.awt.event.ActionEvent; import java.sql.Connection; import java.sql.SQLException; import java.util.Iterator; import java.util.Map; import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * Action permettant de forcer le champ RECORD_ACCRESS � 0 de l'enregistrement s�lectionn� de la table * courante (BO_STOCK, BO_TRANSACTION et BO_SECURITY) */ public class ForceRecordAction extends AbstractDbAction { private String confirmMsg = "Etes-vous s�r de vouloir restaurer les enregistrements ?"; /** * Constructor for the ForceRecordAction object */ public ForceRecordAction() { putValue(NAME, "Restaurer"); putValue(SHORT_DESCRIPTION, "Restaurer l'enregitrement"); putValue(SMALL_ICON, UIManager.getIcon("ListTable.force")); } /** * Constructor for the ForceRecordAction object * * @param gt Description of the Parameter * * @throws IllegalArgumentException TODO */ public ForceRecordAction(GenericTable gt) { super(null, null, gt); if (gt == null) { throw new IllegalArgumentException(); } putValue(NAME, "Restaurer"); putValue(SHORT_DESCRIPTION, "Restaurer l'enregitrement"); putValue(SMALL_ICON, UIManager.getIcon("ListTable.force")); setEnabled(false); ListSelectionModel rowSM = getGenericTable().getSelectionModel(); rowSM.addListSelectionListener(new SelectionListener()); } /** * Sets the confirmMsg attribute of the ForceRecordAction object * * @param msg The new confirmMsg value */ public void setConfirmMsg(String msg) { confirmMsg = msg; } /** * Description of the Method * * @param evt Description of Parameter */ public void actionPerformed(ActionEvent evt) { fireActionEvent(evt); try { int result = JOptionPane.showConfirmDialog(getDesktopPane(), confirmMsg, "Confirmer la restauration ", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.CANCEL_OPTION) { return; } execute(); } catch (SQLException ex) { ex.printStackTrace(); ErrorDialog.show(getGenericTable(), "Impossible de forcer le champ 'RECORD_ACCESS' de l'enregistrement", ex.getLocalizedMessage()); } } /** * Gets the activatable attribute of the ForceRecordAction object * * @return The activatable value */ private boolean isActivatable() { ListSelectionModel lsm = getGenericTable().getSelectionModel(); return !lsm.isSelectionEmpty(); } /** * Execute la requ�te de for�age * * @throws SQLException - */ private void execute() throws SQLException { Connection con = getConnection(); try { for (Iterator iter = getPrimaryKeys().iterator(); iter.hasNext();) { Map keyMap = (Map)iter.next(); QueryHelper queryHelper = buildQueryHelper(con, keyMap); queryHelper.doForce(); } fireDbChange(DbChangeEvent.FORCE_EVENT, getGenericTablePK()); getGenericTable().refreshData(); } finally { releaseConnection(con); } } /** * Construit la requ�te de for�age. * * @param con une connection valide * @param keyMap Description of Parameter * * @return Description of the Returned Value * * @throws SQLException Erreur SQL */ private QueryHelper buildQueryHelper(Connection con, Map keyMap) throws SQLException { SQLFieldList selector = new SQLFieldList(); SQLFieldList allcols = new SQLFieldList(); Map pk = keyMap; Map allColumns = getGenericTable().getTable().getAllColumns(); for (Iterator iter = allColumns.keySet().iterator(); iter.hasNext();) { String dbField = (String)iter.next(); Integer sqlType = (Integer)allColumns.get(dbField); allcols.addField(dbField, sqlType.intValue()); } for (Iterator iter = pk.keySet().iterator(); iter.hasNext();) { String dbField = (String)iter.next(); Integer sqlType = (Integer)allColumns.get(dbField); selector.addField(dbField, sqlType.intValue()); selector.setFieldValue(dbField, pk.get(dbField)); } QueryHelper queryHelper = new QueryHelper(getDbTableName(), con, allcols, selector); return queryHelper; } /** * Active / Desactive l'action en fonction de la selection sur la table * * @author $Author: marcona $ * @version $Revision: 1.4 $ */ private class SelectionListener implements ListSelectionListener { /** * DOCUMENT ME! * * @param e Description of Parameter */ public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; } setEnabled(isActivatable()); } } }