package es.udc.cartolab.gvsig.navtable.contextualmenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JTable;
import javax.swing.RowSorter.SortKey;
import javax.swing.SortOrder;
import org.apache.log4j.Logger;
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
import com.iver.andami.PluginServices;
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
import es.icarto.gvsig.commons.gui.OkCancelPanel;
import es.icarto.gvsig.commons.utils.Field;
import es.udc.cartolab.gvsig.navtable.NavTable;
public class SorterAddon implements INavTableContextMenu {
private static final Logger logger = Logger.getLogger(SorterAddon.class);
private NavTable navtable;
private JTable table;
private boolean userVisibility = true;
@Override
public String getName() {
return this.getClass().getName();
}
@Override
public String getDescription() {
return "sorter_addon_description";
}
@Override
public JMenuItem[] getMenuItems() {
final int rowSelected = table.getSelectedRow();
JMenuItem[] menu = new JMenuItem[4];
JMenuItem asc = new JMenuItem(PluginServices.getText(this, "sort_asc"));
asc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SortKey sortKey = new SortKey(rowSelected, SortOrder.ASCENDING);
navtable.setSortKeys(Arrays.asList(sortKey));
}
});
menu[0] = asc;
JMenuItem desc = new JMenuItem(
PluginServices.getText(this, "sort_desc"));
desc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SortKey sortKey = new SortKey(rowSelected, SortOrder.DESCENDING);
navtable.setSortKeys(Arrays.asList(sortKey));
}
});
menu[1] = desc;
JMenuItem advanced = new JMenuItem(PluginServices.getText(this,
"sort_advanced"));
menu[2] = advanced;
advanced.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String[] fieldNames = new String[0];
try {
fieldNames = navtable.getRecordset().getFieldNames();
} catch (ReadDriverException e2) {
logger.error(e2.getStackTrace(), e2);
}
List<Field> fields = new ArrayList<Field>();
for (String name : fieldNames) {
fields.add(new Field(name, name));
}
ChooseSortFieldDialog dialog = new ChooseSortFieldDialog(fields);
if (dialog.open().equals(OkCancelPanel.OK_ACTION_COMMAND)) {
List<Field> sortedFields = dialog.getFields();
List<SortKey> sortKeys = new ArrayList<SortKey>();
SelectableDataSource sds = navtable.getRecordset();
for (Field field : sortedFields) {
try {
int fieldIdx = sds.getFieldIndexByName(field
.getKey());
sortKeys.add(new SortKey(fieldIdx, field
.getSortOrder()));
} catch (ReadDriverException e1) {
logger.error(e1.getStackTrace(), e1);
}
}
navtable.setSortKeys(sortKeys);
}
}
});
JMenuItem defaultSort = new JMenuItem(PluginServices.getText(this,
"sort_default"));
defaultSort.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
navtable.setSortKeys(null);
}
});
menu[3] = defaultSort;
return menu;
}
@Override
public boolean isVisible() {
return (userVisibility && table.getSelectedRowCount() == 1);
}
@Override
public void setUserVisibility(boolean userVisibility) {
this.userVisibility = userVisibility;
}
@Override
public void setNavtableInstance(NavTable navtable) {
this.navtable = navtable;
this.table = navtable.getTable();
}
@Override
public boolean getDefaultVisibiliy() {
return true;
}
}