OSDN Git Service

8a342be5913d4bd2ea2c2efa6a431274bc58a6b1
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / PairComparisonPane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 import java.awt.BorderLayout;
4 import java.awt.Dimension;
5 import java.awt.FlowLayout;
6 import java.awt.GridLayout;
7 import java.io.IOException;
8 import java.io.PrintWriter;
9
10 import javax.swing.BorderFactory;
11 import javax.swing.BoxLayout;
12 import javax.swing.JButton;
13 import javax.swing.JComboBox;
14 import javax.swing.JLabel;
15 import javax.swing.JPanel;
16 import javax.swing.JScrollPane;
17 import javax.swing.JSplitPane;
18 import javax.swing.JTree;
19 import javax.swing.border.TitledBorder;
20
21 import jp.sourceforge.stigmata.BirthmarkSet;
22 import jp.sourceforge.stigmata.ComparisonPair;
23 import jp.sourceforge.stigmata.ComparisonPairElement;
24 import jp.sourceforge.stigmata.printer.PrinterManager;
25 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
26 import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
27 import jp.sourceforge.stigmata.utils.AsciiDataWritable;
28
29 /**
30  * 
31  * @author Haruaki TAMADA
32  */
33 public class PairComparisonPane extends JPanel{
34     private static final long serialVersionUID = 2342856785474356234L;
35
36     private StigmataFrame frame;
37     private ComparisonPair pair;
38
39     public PairComparisonPane(StigmataFrame frame, ComparisonPair pair){
40         this.frame = frame;
41         this.pair = pair;
42
43         initialize(frame);
44     }
45
46     private void initialize(StigmataFrame frame){
47         this.setLayout(new java.awt.BorderLayout());
48         this.add(getSouthPanel(frame), java.awt.BorderLayout.SOUTH);
49         this.add(getMainPane(frame), java.awt.BorderLayout.CENTER);
50     }
51
52     private JPanel getSouthPanel(StigmataFrame stigmata){
53         JPanel panel = new JPanel();
54         panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
55         JPanel similarityPanel = new JPanel();
56         similarityPanel.setLayout(new GridLayout(1, 3));
57
58         JLabel label = new JLabel(Double.toString(pair.calculateSimilarity()));
59         label.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("result.border")));
60         JComboBox combo = new JComboBox();
61         for(ComparisonPairElement elem : pair){
62             combo.addItem(new ClippedLRListCellRenderer.LRItem(elem.getType(), elem.getSimilarity()));
63         }
64         combo.setRenderer(new ClippedLRListCellRenderer(new Dimension(100, combo.getPreferredSize().height), 50));
65         combo.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("eachbirthmarksimilarity.border")));
66         similarityPanel.add(label);
67         similarityPanel.add(combo);
68         similarityPanel.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));
69
70         panel.add(similarityPanel);
71
72         JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
73         JButton saveButton = GUIUtility.createButton(
74             frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){
75                 @Override
76                 public void writeAsciiData(PrintWriter out, String format) throws IOException{
77                     ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
78                     if(service == null){
79                         service = PrinterManager.getDefaultFormatService();
80                     }
81
82                     service.getComparisonPairPrinter().printResult(out, pair);
83                 }
84             })
85         );
86
87         buttonPanel.add(saveButton);
88         panel.add(buttonPanel);
89
90         return panel;
91     }
92
93     private JSplitPane getMainPane(StigmataFrame frame){
94         JSplitPane spliter = new javax.swing.JSplitPane();
95         spliter.setLeftComponent(getSpliterPanel(frame, pair.getTarget1()));
96         spliter.setRightComponent(getSpliterPanel(frame, pair.getTarget2()));
97         spliter.setDividerLocation((spliter.getWidth() - spliter.getDividerSize()) / 2);
98         spliter.setContinuousLayout(true);
99
100         return spliter;
101     }
102
103     private JPanel getSpliterPanel(StigmataFrame stigmata, BirthmarkSet birthmark){
104         JPanel panel = new JPanel();
105         panel.setLayout(new BorderLayout());
106         JTree tree = new JTree(new BirthmarkTreeNode(birthmark));
107
108         panel.add(new JScrollPane(tree), BorderLayout.CENTER);
109         JPanel south = new JPanel(new BorderLayout());
110         panel.add(south, BorderLayout.SOUTH);
111
112         JLabel elementCount = new JLabel(Integer.toString(birthmark.getSumOfElementCount()));
113         elementCount.setBorder(new TitledBorder(stigmata.getMessages().get("elementcount.border")));
114         south.add(elementCount, BorderLayout.CENTER);
115
116         return panel;
117     }
118 }