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 ; 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 11 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 newGroupItems; 25 protected Collection oldGroupItems; 26 27 public GroupEditCommand(Report r, Designer designer, Collection groupItems) { 28 super(I18N.get("GroupEditCommand.name")); 29 report = r; 30 this.designer = designer; 31 this.newGroupItems = groupItems; 32 33 oldGroupItems = new ArrayList (); 35 for (Iterator 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 fromList, Collection toList) { 51 switch (whatChanged(fromList, toList)) { 52 case ONLY_SORTING_CHANGE: 53 for (Iterator 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 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 85 protected int whatChanged(Collection fromList, Collection toList) { 86 if (fromList.size() != toList.size()) 87 return DRASTIC_CHANGE; 88 89 int change = NO_CHANGE; 90 Iterator fromIter = fromList.iterator(); 91 Iterator 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; } 102 103 } 104 | Popular Tags |