KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > gui > cmd > GroupEditCommand


1 package jimm.datavision.gui.cmd;
2 import jimm.datavision.Report;
3 import jimm.datavision.Group;
4 import jimm.datavision.gui.Designer;
5 import jimm.datavision.gui.GroupWinListItem;
6 import jimm.util.I18N;
7 import java.util.Collection JavaDoc;
8 import java.util.ArrayList JavaDoc;
9 import java.util.Iterator JavaDoc;
10
11 /**
12  * A command for changing a report's {@link Group}s.
13  *
14  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
15  */

16 public class GroupEditCommand extends CommandAdapter {
17
18 protected static final int NO_CHANGE = 0;
19 protected static final int ONLY_SORTING_CHANGE = 1;
20 protected static final int DRASTIC_CHANGE = 2;
21
22 protected Report report;
23 protected Designer designer;
24 protected Collection JavaDoc newGroupItems;
25 protected Collection JavaDoc oldGroupItems;
26
27 public GroupEditCommand(Report r, Designer designer, Collection JavaDoc groupItems) {
28     super(I18N.get("GroupEditCommand.name"));
29     report = r;
30     this.designer = designer;
31     this.newGroupItems = groupItems;
32
33     // Create list of current groups
34
oldGroupItems = new ArrayList JavaDoc();
35     for (Iterator JavaDoc iter = report.groups(); iter.hasNext(); ) {
36     Group group = (Group)iter.next();
37     oldGroupItems.add(new GroupWinListItem(group.getSelectable(), group));
38     }
39
40 }
41
42 public void perform() {
43     setGroups(oldGroupItems, newGroupItems);
44 }
45
46 public void undo() {
47     setGroups(newGroupItems, oldGroupItems);
48 }
49
50 protected void setGroups(Collection JavaDoc fromList, Collection JavaDoc toList) {
51     switch (whatChanged(fromList, toList)) {
52     case ONLY_SORTING_CHANGE:
53     for (Iterator JavaDoc iter = toList.iterator(); iter.hasNext(); ) {
54         GroupWinListItem item = (GroupWinListItem)iter.next();
55         item.getGroup().setSortOrder(item.getSortOrder());
56     }
57     break;
58     case DRASTIC_CHANGE:
59     report.removeAllGroups();
60     for (Iterator JavaDoc iter = toList.iterator(); iter.hasNext(); ) {
61         GroupWinListItem item = (GroupWinListItem)iter.next();
62         Group g = item.getGroup();
63         if (g == null)
64         g = Group.create(report, item.getSelectable());
65         g.setSortOrder(item.getSortOrder());
66         report.addGroup(g);
67     }
68     designer.rebuildGroups();
69     break;
70     case NO_CHANGE:
71     break;
72     }
73 }
74
75 /**
76  * Determines the severity of the difference between the report and what we
77  * have now: <code>NO_CHANGE</code>, <code>ONLY_SORTING_CHANGE</code>, or
78  * <code>DRASTIC_CHANGE</code>.
79  *
80  * @param fromList the list of groups before the pending change
81  * @param toList the list of groups after the pending change
82  * @return one of <code>NO_CHANGE</code>, <code>ONLY_SORTING_CHANGE</code>,
83  * or <code>DRASTIC_CHANGE</code>
84  */

85 protected int whatChanged(Collection JavaDoc fromList, Collection JavaDoc toList) {
86     if (fromList.size() != toList.size())
87     return DRASTIC_CHANGE;
88
89     int change = NO_CHANGE;
90     Iterator JavaDoc fromIter = fromList.iterator();
91     Iterator JavaDoc toIter = toList.iterator();
92     while (fromIter.hasNext()) {
93     GroupWinListItem fromItem = (GroupWinListItem)fromIter.next();
94     GroupWinListItem toItem = (GroupWinListItem)toIter.next();
95     if (fromItem.getGroup() != toItem.getGroup())
96         return DRASTIC_CHANGE;
97     if (fromItem.sortsAscending() != toItem.sortsAscending())
98         change = ONLY_SORTING_CHANGE;
99     }
100     return change; // Either NO_CHANGE or ONLY_SORTING_CHANGE
101
}
102
103 }
104
Popular Tags