1 package jp.sourceforge.stigmata.ui.swing;
3 import java.awt.BorderLayout;
4 import java.awt.GridLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.MouseAdapter;
8 import java.awt.event.MouseEvent;
9 import java.util.HashMap;
12 import javax.swing.Box;
13 import javax.swing.DefaultListModel;
14 import javax.swing.JButton;
15 import javax.swing.JComponent;
16 import javax.swing.JList;
17 import javax.swing.JPanel;
18 import javax.swing.JScrollPane;
19 import javax.swing.event.ListSelectionEvent;
20 import javax.swing.event.ListSelectionListener;
22 import jp.sourceforge.stigmata.ComparisonPairFilter;
23 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
24 import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
25 import jp.sourceforge.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;
26 import jp.sourceforge.stigmata.ui.swing.filter.FilterEditingPane;
27 import jp.sourceforge.stigmata.ui.swing.filter.FilterSetDefinitionPane;
30 * @author Haruaki TAMADA
32 public class FilterManagementPane extends JPanel implements ComparisonPairFilterRetainable{
33 private static final long serialVersionUID = 972135792354L;
35 private StigmataFrame stigmata;
36 private FilterSetDefinitionPane definition;
37 private FilterEditingPane filterPane;
39 private DefaultListModel model;
40 private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
42 public FilterManagementPane(StigmataFrame stigmata){
43 this.stigmata = stigmata;
51 model.removeAllElements();
53 ComparisonPairFilterManager manager = stigmata.getEnvironment().getFilterManager();
54 for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
55 addFilterSet(filterset);
59 public void updateFilterManager(ComparisonPairFilterManager manager){
60 for(ComparisonPairFilterSet filterset: filters.values()){
61 manager.addFilterSet(filterset);
66 public void addFilterSet(ComparisonPairFilterSet filterset){
67 filters.put(filterset.getName(), filterset);
69 model.addElement(filterset.getName());
70 list.setSelectedIndex(model.getSize() - 1);
74 public void removeFilterSet(String name){
76 model.removeElement(name);
78 list.clearSelection();
82 public void updateFilterSet(String oldName, ComparisonPairFilterSet newfilter){
83 for(int i = 0; i < model.getSize(); i++){
84 if(oldName.equals(model.getElementAt(i))){
85 model.setElementAt(newfilter.getName(), i);
89 filters.remove(oldName);
90 filters.put(newfilter.getName(), newfilter);
94 public ComparisonPairFilterSet getFilterSet(String name){
95 return filters.get(name);
99 public void filterSelected(ComparisonPairFilter filter){
100 filterPane.setFilter(filter);
103 private void initLayouts(){
104 definition = new FilterSetDefinitionPane(stigmata, this);
105 filterPane = new FilterEditingPane(stigmata);
106 filterPane.addComparisonPairFilterListener(definition);
107 JComponent filtersetlist = createFilterSetPane();
109 GUIUtility.decorateJComponent(stigmata.getMessages(), filtersetlist, "filtersetlist.pane");
110 GUIUtility.decorateJComponent(stigmata.getMessages(), definition, "filterdefinition.pane");
111 GUIUtility.decorateJComponent(stigmata.getMessages(), filterPane, "filter.pane");
113 setLayout(new GridLayout(1, 3));
119 private JComponent createFilterSetPane(){
120 model = new DefaultListModel();
121 list = new JList(model);
123 final JButton upButton = GUIUtility.createButton(stigmata.getMessages(), "moveup");
124 final JButton downButton = GUIUtility.createButton(stigmata.getMessages(), "movedown");
126 Box south = Box.createHorizontalBox();
127 south.add(Box.createHorizontalGlue());
129 south.add(Box.createHorizontalGlue());
130 south.add(downButton);
131 south.add(Box.createHorizontalGlue());
133 list.addMouseListener(new MouseAdapter(){
135 public void mouseClicked(MouseEvent e){
136 int index = list.locationToIndex(e.getPoint());
137 list.setSelectedIndex(index);
141 list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
143 public void valueChanged(ListSelectionEvent e){
144 int[] indexes = list.getSelectedIndices();
145 int rows = model.getSize();
147 upButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != 0);
148 downButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != (rows - 1));
149 if(indexes.length != 1){
150 definition.setFilterSet(null);
153 definition.setFilterSet(filters.get(model.getElementAt(indexes[0])));
157 ActionListener listener = new ActionListener(){
159 public void actionPerformed(ActionEvent e){
161 if(e.getActionCommand().equals("moveup")){
164 int index = list.getSelectedIndex();
165 Object e1 = model.getElementAt(index);
166 Object e2 = model.getElementAt(index + step);
167 model.setElementAt(e1, index + step);
168 model.setElementAt(e2, index);
169 list.setSelectedIndex(index + step);
172 upButton.addActionListener(listener);
173 downButton.addActionListener(listener);
174 upButton.setEnabled(false);
175 downButton.setEnabled(false);
177 JPanel panel = new JPanel(new BorderLayout());
178 panel.add(new JScrollPane(list), BorderLayout.CENTER);
179 panel.add(south, BorderLayout.SOUTH);