1 package jp.sourceforge.stigmata.ui.swing;
7 import java.awt.BorderLayout;
8 import java.awt.GridLayout;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import java.awt.event.MouseAdapter;
12 import java.awt.event.MouseEvent;
13 import java.util.HashMap;
16 import javax.swing.Box;
17 import javax.swing.DefaultListModel;
18 import javax.swing.JButton;
19 import javax.swing.JComponent;
20 import javax.swing.JList;
21 import javax.swing.JPanel;
22 import javax.swing.JScrollPane;
23 import javax.swing.event.ListSelectionEvent;
24 import javax.swing.event.ListSelectionListener;
26 import jp.sourceforge.stigmata.ComparisonPairFilter;
27 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
28 import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
29 import jp.sourceforge.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;
30 import jp.sourceforge.stigmata.ui.swing.filter.FilterEditingPane;
31 import jp.sourceforge.stigmata.ui.swing.filter.FilterSetDefinitionPane;
34 * @author Haruaki TAMADA
36 public class FilterManagementPane extends JPanel implements ComparisonPairFilterRetainable{
37 private static final long serialVersionUID = 972135792354L;
39 private StigmataFrame stigmata;
40 private FilterSetDefinitionPane definition;
41 private FilterEditingPane filterPane;
43 private DefaultListModel model;
44 private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
46 public FilterManagementPane(StigmataFrame stigmata){
47 this.stigmata = stigmata;
55 model.removeAllElements();
57 ComparisonPairFilterManager manager = stigmata.getEnvironment().getFilterManager();
58 for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
59 addFilterSet(filterset);
63 public void updateFilterManager(ComparisonPairFilterManager manager){
64 for(ComparisonPairFilterSet filterset: filters.values()){
65 manager.addFilterSet(filterset);
70 public void addFilterSet(ComparisonPairFilterSet filterset){
71 filters.put(filterset.getName(), filterset);
73 model.addElement(filterset.getName());
74 list.setSelectedIndex(model.getSize() - 1);
78 public void removeFilterSet(String name){
80 model.removeElement(name);
82 list.clearSelection();
86 public void updateFilterSet(String oldName, ComparisonPairFilterSet newfilter){
87 for(int i = 0; i < model.getSize(); i++){
88 if(oldName.equals(model.getElementAt(i))){
89 model.setElementAt(newfilter.getName(), i);
93 filters.remove(oldName);
94 filters.put(newfilter.getName(), newfilter);
98 public ComparisonPairFilterSet getFilterSet(String name){
99 return filters.get(name);
103 public void filterSelected(ComparisonPairFilter filter){
104 filterPane.setFilter(filter);
107 private void initLayouts(){
108 definition = new FilterSetDefinitionPane(stigmata, this);
109 filterPane = new FilterEditingPane(stigmata);
110 filterPane.addComparisonPairFilterListener(definition);
111 JComponent filtersetlist = createFilterSetPane();
113 GUIUtility.decorateJComponent(stigmata.getMessages(), filtersetlist, "filtersetlist.pane");
114 GUIUtility.decorateJComponent(stigmata.getMessages(), definition, "filterdefinition.pane");
115 GUIUtility.decorateJComponent(stigmata.getMessages(), filterPane, "filter.pane");
117 setLayout(new GridLayout(1, 3));
123 private JComponent createFilterSetPane(){
124 model = new DefaultListModel();
125 list = new JList(model);
127 final JButton upButton = GUIUtility.createButton(stigmata.getMessages(), "moveup");
128 final JButton downButton = GUIUtility.createButton(stigmata.getMessages(), "movedown");
130 Box south = Box.createHorizontalBox();
131 south.add(Box.createHorizontalGlue());
133 south.add(Box.createHorizontalGlue());
134 south.add(downButton);
135 south.add(Box.createHorizontalGlue());
137 list.addMouseListener(new MouseAdapter(){
139 public void mouseClicked(MouseEvent e){
140 int index = list.locationToIndex(e.getPoint());
141 list.setSelectedIndex(index);
145 list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
147 public void valueChanged(ListSelectionEvent e){
148 int[] indexes = list.getSelectedIndices();
149 int rows = model.getSize();
151 upButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != 0);
152 downButton.setEnabled(indexes.length == 1 && rows > 1 && indexes[0] != (rows - 1));
153 if(indexes.length != 1){
154 definition.setFilterSet(null);
157 definition.setFilterSet(filters.get(model.getElementAt(indexes[0])));
161 ActionListener listener = new ActionListener(){
163 public void actionPerformed(ActionEvent e){
165 if(e.getActionCommand().equals("moveup")){
168 int index = list.getSelectedIndex();
169 Object e1 = model.getElementAt(index);
170 Object e2 = model.getElementAt(index + step);
171 model.setElementAt(e1, index + step);
172 model.setElementAt(e2, index);
173 list.setSelectedIndex(index + step);
176 upButton.addActionListener(listener);
177 downButton.addActionListener(listener);
178 upButton.setEnabled(false);
179 downButton.setEnabled(false);
181 JPanel panel = new JPanel(new BorderLayout());
182 panel.add(new JScrollPane(list), BorderLayout.CENTER);
183 panel.add(south, BorderLayout.SOUTH);