001: package jimm.datavision.gui;
002:
003: import jimm.datavision.Report;
004: import jimm.datavision.UserColumn;
005: import jimm.datavision.Selectable;
006: import jimm.datavision.source.*;
007: import jimm.datavision.gui.cmd.SortEditCommand;
008: import jimm.util.I18N;
009: import java.awt.event.*;
010: import java.util.*;
011:
012: /**
013: * This dialog is used for editing the report query's list of sort
014: * orders.
015: *
016: * @author Jim Menard, <a href="mailto:jimm@io.com">jimm@io.com</a>
017: */
018: public class SortWin extends TwoListWin {
019:
020: protected Query query;
021:
022: /**
023: * Constructor.
024: *
025: * @param designer the window to which this dialog belongs
026: * @param report the...um...I forgot
027: */
028: public SortWin(Designer designer, Report report) {
029: super (designer, I18N.get("SortWin.title"),
030: "SortChangeCommand.name", "SortWin.right_box_title",
031: report);
032: }
033:
034: /**
035: * Fills the unsorted and sorted columns lists. Excludes colums that are
036: * used in report groups.
037: */
038: protected void fillListModels() {
039: // Since this method is called from within our superclass ctor, before
040: // the query gets initialized, we have to grab it here.
041: DataSource ds = report.getDataSource();
042: query = ds.getQuery();
043:
044: // Add user cols used in report that are not used by a group.
045: Iterator iter;
046: for (iter = report.userColumns(); iter.hasNext();) {
047: UserColumn uc = (UserColumn) iter.next();
048: if (!report.isUsedBySomeGroup(uc)) // Ignore group user groups
049: addToModel(uc);
050: }
051:
052: // Add columns used in report that are not used by a group.
053: for (iter = ds.columnsInTablesUsedInReport(); iter.hasNext();) {
054: Column col = (Column) iter.next();
055: if (!report.isUsedBySomeGroup(col)) // Ignore group columns
056: addToModel(col);
057: }
058: }
059:
060: protected void addToModel(Selectable g) {
061: int order = query.sortOrderOf(g);
062: SortWinListItem item = new SortWinListItem(g, order);
063: if (order == Query.SORT_UNDEFINED)
064: leftModel.add(item);
065: else
066: rightModel.addElement(item);
067: }
068:
069: /**
070: * Handles ascending and descending sort order buttons.
071: */
072: public void actionPerformed(ActionEvent e) {
073: String cmd = e.getActionCommand();
074: if (cmd.equals(I18N.get("GUI.ascending")))
075: ((SortWinListItem) rightList.getSelectedValue()).sortOrder = 'a';
076: else if (cmd.equals(I18N.get("GUI.descending")))
077: ((SortWinListItem) rightList.getSelectedValue()).sortOrder = 'd';
078: else
079: super .actionPerformed(e);
080: }
081:
082: protected void doSave() {
083: // Turn the model's vector into a collection
084: ArrayList items = new ArrayList();
085: for (Enumeration e = rightModel.elements(); e.hasMoreElements();)
086: items.add(e.nextElement());
087:
088: SortEditCommand cmd = new SortEditCommand(query, items);
089: cmd.perform();
090: commands.add(cmd);
091: }
092:
093: protected void doRevert() {
094: // Rebuild list models
095: leftModel.removeAllElements();
096: rightModel.removeAllElements();
097: fillListModels();
098: adjustButtons();
099: }
100:
101: }
|