/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.segmentation.gui.settings; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.mad.client.request.FieldsList; import net.codjo.mad.client.request.Request; import net.codjo.mad.client.request.RequestException; import net.codjo.mad.client.request.ResultManager; import net.codjo.mad.client.request.Row; import net.codjo.mad.gui.framework.AbstractGuiAction; import net.codjo.mad.gui.framework.GuiContext; import net.codjo.mad.gui.request.RequestTable; import net.codjo.mad.gui.request.factory.CommandFactory; import net.codjo.mad.gui.request.factory.RequestFactory; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.apache.log4j.Logger; /** * */ public class CopyAction extends AbstractGuiAction { private static final String DUPLICATION_PK = "classificationId"; private static final Logger APP = Logger.getLogger(CopyAction.class); private TableSelectionListener listener = new TableSelectionListener(); private RequestTable table; public CopyAction(GuiContext ctxt, RequestTable table) { super(ctxt, "", "", "mad.pageCopy"); setEnabled(false); this.table = table; ListSelectionModel rowSM = table.getSelectionModel(); rowSM.addListSelectionListener(listener); } @Override protected boolean isActivable() { if (table == null) { return false; } ListSelectionModel lsm = table.getSelectionModel(); return !lsm.isSelectionEmpty() && table.getPreference().getDelete() != null; } public void actionPerformed(ActionEvent event) { try { table.cancelAllEditors(); sendCopyRequest(); } catch (Exception ex) { APP.error("Erreur interne", ex); ErrorDialog.show(table, "erreur interne", ex); } } private Request buildCopyRowRequest(RequestFactory factory, Row row) { factory.init(getSelectedRowPkValues(row)); return factory.buildRequest(null); } private FieldsList getSelectedRowPkValues(Row row) { FieldsList fields = new FieldsList(); fields.addField(DUPLICATION_PK, row.getFieldValue(DUPLICATION_PK)); return fields; } protected void sendCopyRequest() throws RequestException { CommandFactory factory = new CommandFactory("duplicateAxis"); Row[] rows = table.getAllSelectedDataRows(); List<Request> list = new ArrayList<Request>(); for (Row row : rows) { list.add(buildCopyRowRequest(factory, row)); } ResultManager result = table.getRequestSender().send(list.toArray(new Request[] {})); if (result.hasError()) { ErrorDialog.show(table, "Impossible de dupliquer la ligne", result.getErrorResult().getLabel() + "(" + result.getErrorResult().getType() + ")"); } else { table.load(); } } private class TableSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent event) { if (event.getValueIsAdjusting()) { return; } setEnabled(true); } } }