1 package jimm.datavision.gui.sql; 2 import jimm.datavision.*; 3 import jimm.datavision.gui.Designer; 4 import jimm.datavision.gui.EditWin; 5 import jimm.datavision.source.*; 6 import jimm.datavision.gui.cmd.TableJoinCommand; 7 import jimm.util.I18N; 8 import java.awt.BorderLayout ; 9 import java.awt.event.ActionListener ; 10 import java.awt.event.ActionEvent ; 11 import java.util.*; 12 import javax.swing.*; 13 14 23 public class VisTableWin extends EditWin implements ActionListener { 24 25 26 static class RevertInfo { 27 ArrayList joins; 28 RevertInfo(Query q) { 29 joins = new ArrayList(); 30 for (Iterator iter = q.joins(); iter.hasNext(); ) { 31 Join j = (Join)iter.next(); 32 joins.add(j.clone()); 33 } 34 } 35 } 36 37 38 static class JoinFields { 39 40 Join join; JCheckBox del; 42 JComboBox from; 43 JComboBox relation; 44 JComboBox to; 45 46 JoinFields(Join j, DataSource db) { 47 join = j; 48 del = new JCheckBox(); 49 from = buildColDropdown((j == null) ? null : j.getFrom(), db); 50 relation = buildRelDropdown((j == null) ? null : j.getRelation()); 51 to = buildColDropdown((j == null) ? null : j.getTo(), db); 52 } 53 54 protected JComboBox buildColDropdown(Column col, DataSource db) { 55 JComboBox cb = new JComboBox(); 56 57 for (Iterator iter = db.columnsInTablesUsedInReport(); iter.hasNext(); ) { 60 Column c = (Column)iter.next(); 61 cb.addItem(c.fullName()); 62 if (col != null && col.equals(c)) 63 cb.setSelectedItem(c.fullName()); 64 } 65 66 return cb; 67 } 68 69 protected JComboBox buildRelDropdown(String rel) { 70 JComboBox cb = new JComboBox(Join.RELATIONS); 71 if (rel != null) 72 cb.setSelectedItem(rel); 73 return cb; 74 } 75 } 76 77 78 79 protected Report report; 80 protected Query query; 81 protected ArrayList joinFieldsList; 82 protected JPanel joinsPanel; 83 protected Box delCheckBoxPanel; 84 protected Box fromPanel; 85 protected Box relationPanel; 86 protected Box toPanel; 87 protected JButton deleteButton; 88 89 95 public VisTableWin(Designer designer, Report report) { 96 this(designer, report, report.getDataSource().getQuery()); 97 } 98 99 106 public VisTableWin(Designer designer, Report report, Query query) { 107 super(designer, I18N.get("VisTableWin.title"), "TableJoinCommand.name"); 108 this.report = report; 109 this.query = query; 110 111 buildWindow(); 112 pack(); 113 setVisible(true); 114 } 115 116 119 protected void buildWindow() { 120 buildJoinsPanel(); 122 123 JPanel addDelButtons = new JPanel(); 125 JButton button = new JButton(I18N.get("VisTableWin.add")); 126 button.addActionListener(this); 127 addDelButtons.add(button); 128 129 deleteButton = new JButton(I18N.get("VisTableWin.delete_selected")); 130 deleteButton.addActionListener(this); 131 addDelButtons.add(deleteButton); 132 133 JPanel centerPanel = new JPanel(); 135 centerPanel.setLayout(new BorderLayout ()); 136 centerPanel.add(joinsPanel, BorderLayout.CENTER); 137 centerPanel.add(addDelButtons, BorderLayout.SOUTH); 138 139 JPanel buttonPanel = closeButtonPanel(); 141 142 getContentPane().add(centerPanel, BorderLayout.CENTER); 144 getContentPane().add(buttonPanel, BorderLayout.SOUTH); 145 } 146 147 protected void buildJoinsPanel() { 148 joinsPanel = new JPanel(); 149 joinsPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 150 151 Box panel = Box.createHorizontalBox(); 152 joinsPanel.add(panel); 153 154 delCheckBoxPanel = Box.createVerticalBox(); 155 fromPanel = Box.createVerticalBox(); 156 relationPanel = Box.createVerticalBox(); 157 toPanel = Box.createVerticalBox(); 158 159 fillJoinsPanel(); 160 161 panel.add(delCheckBoxPanel); 162 panel.add(fromPanel); 163 panel.add(relationPanel); 164 panel.add(toPanel); 165 } 166 167 protected void fillJoinsPanel() { 168 joinFieldsList = new ArrayList(); 169 for (Iterator iter = query.joins(); iter.hasNext(); ) { 170 Join j = (Join)iter.next(); 171 joinFieldsList.add(new JoinFields(j, report.getDataSource())); 172 } 173 174 for (Iterator iter = joinFieldsList.iterator(); iter.hasNext(); ) { 175 JoinFields jf = (JoinFields)iter.next(); 176 delCheckBoxPanel.add(jf.del); 177 fromPanel.add(jf.from); 178 relationPanel.add(jf.relation); 179 toPanel.add(jf.to); 180 } 181 } 182 183 protected void emptyJoinsPanel() { 184 delCheckBoxPanel.removeAll(); 185 fromPanel.removeAll(); 186 relationPanel.removeAll(); 187 toPanel.removeAll(); 188 } 189 190 193 public void actionPerformed(ActionEvent e) { 194 String cmd = e.getActionCommand(); 195 if (cmd.equals(I18N.get("VisTableWin.add"))) 196 addNewJoin(); 197 else if (cmd.equals(I18N.get("VisTableWin.delete_selected"))) 198 deleteSelectedJoins(); 199 else 200 super.actionPerformed(e); 201 } 202 203 protected void addNewJoin() { 204 JoinFields jf = new JoinFields(null, report.getDataSource()); 205 joinFieldsList.add(jf); 206 207 delCheckBoxPanel.add(jf.del); 208 fromPanel.add(jf.from); 209 relationPanel.add(jf.relation); 210 toPanel.add(jf.to); 211 212 joinsPanel.invalidate(); 213 pack(); 214 } 215 216 protected void deleteSelectedJoins() { 217 ArrayList copy = (ArrayList)joinFieldsList.clone(); 218 for (Iterator iter = copy.iterator(); iter.hasNext(); ) { 219 JoinFields jf = (JoinFields)iter.next(); 220 if (jf.del.isSelected()) { 221 joinFieldsList.remove(jf); 222 223 delCheckBoxPanel.remove(jf.del); 224 fromPanel.remove(jf.from); 225 relationPanel.remove(jf.relation); 226 toPanel.remove(jf.to); 227 } 228 } 229 joinsPanel.invalidate(); 230 pack(); 231 } 232 233 protected void doSave() { 234 ArrayList newJoins = new ArrayList(); 235 for (Iterator iter = joinFieldsList.iterator(); iter.hasNext(); ) { 236 JoinFields jf = (JoinFields)iter.next(); 237 Column from = columnFromDropdown(jf.from); 238 String relation = (String )jf.relation.getSelectedItem(); 239 Column to = columnFromDropdown(jf.to); 240 241 newJoins.add(new Join(from, relation, to)); 242 } 243 244 TableJoinCommand cmd = new TableJoinCommand(query, newJoins); 245 cmd.perform(); 246 commands.add(cmd); 247 } 248 249 protected Column columnFromDropdown(JComboBox cb) { 250 String sel = (String )cb.getSelectedItem(); 251 return report.findColumn(sel); 252 } 253 254 protected void doRevert() { 255 emptyJoinsPanel(); 257 fillJoinsPanel(); 258 joinsPanel.invalidate(); 259 pack(); 260 } 261 262 } 263 264 | Popular Tags |