OSDN Git Service

Delete Subversion Tags (Revision, Id)
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / FilterManagementPane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
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;
10 import java.util.Map;
11
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;
21
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;
28
29 /**
30  * @author Haruaki TAMADA
31  */
32 public class FilterManagementPane extends JPanel implements ComparisonPairFilterRetainable{
33     private static final long serialVersionUID = 972135792354L;
34
35     private StigmataFrame stigmata;
36     private FilterSetDefinitionPane definition;
37     private FilterEditingPane filterPane;
38     private JList list;
39     private DefaultListModel model;
40     private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
41
42     public FilterManagementPane(StigmataFrame stigmata){
43         this.stigmata = stigmata;
44         
45         initLayouts();
46     }
47
48     public void reset(){
49         definition.reset();
50         filterPane.reset();
51         model.removeAllElements();
52         
53         ComparisonPairFilterManager manager = stigmata.getEnvironment().getFilterManager();
54         for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
55             addFilterSet(filterset);
56         }
57     }
58
59     public void updateFilterManager(ComparisonPairFilterManager manager){
60         for(ComparisonPairFilterSet filterset: filters.values()){
61             manager.addFilterSet(filterset);
62         }
63     }
64
65     @Override
66     public void addFilterSet(ComparisonPairFilterSet filterset){
67         filters.put(filterset.getName(), filterset);
68
69         model.addElement(filterset.getName());
70         list.setSelectedIndex(model.getSize() - 1);
71     }
72
73     @Override
74     public void removeFilterSet(String name){
75         filters.remove(name);
76         model.removeElement(name);
77
78         list.clearSelection();
79     }
80
81     @Override
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);
86                 break;
87             }
88         }
89         filters.remove(oldName);
90         filters.put(newfilter.getName(), newfilter);
91     }
92
93     @Override
94     public ComparisonPairFilterSet getFilterSet(String name){
95         return filters.get(name);
96     }
97
98     @Override
99     public void filterSelected(ComparisonPairFilter filter){
100         filterPane.setFilter(filter);
101     }
102
103     private void initLayouts(){
104         definition = new FilterSetDefinitionPane(stigmata, this);
105         filterPane = new FilterEditingPane(stigmata);
106         filterPane.addComparisonPairFilterListener(definition);
107         JComponent filtersetlist = createFilterSetPane();
108
109         GUIUtility.decorateJComponent(stigmata.getMessages(), filtersetlist, "filtersetlist.pane");
110         GUIUtility.decorateJComponent(stigmata.getMessages(), definition, "filterdefinition.pane");
111         GUIUtility.decorateJComponent(stigmata.getMessages(), filterPane, "filter.pane");
112
113         setLayout(new GridLayout(1, 3));
114         add(filtersetlist);
115         add(definition);
116         add(filterPane);
117     }
118
119     private JComponent createFilterSetPane(){
120         model = new DefaultListModel();
121         list = new JList(model);
122
123         final JButton upButton = GUIUtility.createButton(stigmata.getMessages(), "moveup");
124         final JButton downButton = GUIUtility.createButton(stigmata.getMessages(), "movedown");
125
126         Box south = Box.createHorizontalBox();
127         south.add(Box.createHorizontalGlue());
128         south.add(upButton);
129         south.add(Box.createHorizontalGlue());
130         south.add(downButton);
131         south.add(Box.createHorizontalGlue());
132
133         list.addMouseListener(new MouseAdapter(){
134             @Override
135             public void mouseClicked(MouseEvent e){
136                 int index = list.locationToIndex(e.getPoint());
137                 list.setSelectedIndex(index);
138                 updateUI();
139             }
140         });
141         list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
142             @Override
143             public void valueChanged(ListSelectionEvent e){
144                 int[] indexes = list.getSelectedIndices();
145                 int rows = model.getSize();
146
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);
151                 }
152                 else{
153                     definition.setFilterSet(filters.get(model.getElementAt(indexes[0])));
154                 }
155             }
156         });
157         ActionListener listener = new ActionListener(){
158             @Override
159             public void actionPerformed(ActionEvent e){
160                 int step = 1;
161                 if(e.getActionCommand().equals("moveup")){
162                     step = -1;
163                 }
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);
170             }
171         };
172         upButton.addActionListener(listener);
173         downButton.addActionListener(listener);
174         upButton.setEnabled(false);
175         downButton.setEnabled(false);
176         
177         JPanel panel = new JPanel(new BorderLayout());
178         panel.add(new JScrollPane(list), BorderLayout.CENTER);
179         panel.add(south, BorderLayout.SOUTH);
180         
181         return panel;
182     }
183 }