OSDN Git Service

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