OSDN Git Service

change internal process method, which introducing ExtractionResultSet
[stigmata/stigmata.git] / src / main / java / jp / naist / se / stigmata / ui / swing / PairComparisonResultSetPane.java
old mode 100755 (executable)
new mode 100644 (file)
index 0c5d937..4a4302c
@@ -14,6 +14,7 @@ import java.io.File;
 import java.io.IOException;\r
 import java.io.PrintWriter;\r
 import java.util.ArrayList;\r
+import java.util.Iterator;\r
 import java.util.List;\r
 \r
 import javax.swing.Box;\r
@@ -29,11 +30,14 @@ import javax.swing.table.DefaultTableModel;
 \r
 import jp.naist.se.stigmata.BirthmarkContext;\r
 import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.CertainPairComparisonResultSet;\r
 import jp.naist.se.stigmata.ComparisonPair;\r
 import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.format.BirthmarkComparisonResultFormat;\r
+import jp.naist.se.stigmata.format.FormatManager;\r
+import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
 import jp.naist.se.stigmata.spi.ResultFormatSpi;\r
+import jp.naist.se.stigmata.ui.swing.actions.SaveAction;\r
+import jp.naist.se.stigmata.ui.swing.actions.UpdateBirthmarkCellColorAction;\r
+import jp.naist.se.stigmata.utils.AsciiDataWritable;\r
 \r
 /**\r
  * \r
@@ -41,43 +45,35 @@ import jp.naist.se.stigmata.spi.ResultFormatSpi;
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
-public class PairComparisonResultSetPane extends JPanel implements BirthmarkDataWritable{\r
+public class PairComparisonResultSetPane extends JPanel{\r
     private static final long serialVersionUID = 3298346465652354302L;\r
 \r
     private StigmataFrame frame;\r
-    private BirthmarkContext context;\r
+    private ComparisonResultSet comparison;\r
     private DefaultTableModel model = new PairComparisonResultSetTableModel();\r
     private JTable table = new JTable(model);\r
     private JLabel averageLabel, maximumLabel, minimumLabel;\r
-    private List<ComparisonPair> list = new ArrayList<ComparisonPair>();\r
     private double average, maximum, minimum;\r
 \r
     public PairComparisonResultSetPane(StigmataFrame frame, ComparisonResultSet resultset){\r
         this.frame = frame;\r
-        this.context = resultset.getContext();\r
-\r
-        for(ComparisonPair pair: resultset){\r
-            list.add(pair);\r
-        }\r
+        this.comparison = resultset;\r
 \r
         initComponent();\r
-        initData(model, list);\r
-    }\r
-\r
-    public void writeData(PrintWriter out, ResultFormatSpi service) throws IOException{\r
-        BirthmarkComparisonResultFormat format = service.getComparisonResultFormat();\r
-        format.printResult(out, new CertainPairComparisonResultSet(\r
-            list.toArray(new ComparisonPair[list.size()]), context\r
-        ));\r
+        initData(model, resultset);\r
     }\r
 \r
     private void obfuscateClassNames(){\r
         ClassNameObfuscator obfuscator = new ClassNameObfuscator();\r
         List<ComparisonPair> newList = new ArrayList<ComparisonPair>();\r
-        for(ComparisonPair pair: list){\r
+        BirthmarkContext context = comparison.getContext();\r
+\r
+        for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){\r
+            ComparisonPair pair = i.next();\r
             BirthmarkSet set1 = obfuscator.obfuscateClassName(pair.getTarget1());\r
             BirthmarkSet set2 = obfuscator.obfuscateClassName(pair.getTarget2());\r
 \r
+            context = comparison.getContext();\r
             newList.add(new ComparisonPair(set1, set2, context));\r
         }\r
 \r
@@ -97,19 +93,19 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
         }\r
 \r
         DefaultTableModel newModel = new PairComparisonResultSetTableModel();\r
-        initData(newModel, newList);\r
-        list = newList;\r
+        initData(newModel, new CertainPairComparisonResultSet(newList.toArray(new ComparisonPair[newList.size()]), context));\r
         model = newModel;\r
         table.setModel(newModel);\r
     }\r
 \r
-    private void initData(DefaultTableModel model, List<ComparisonPair> list){\r
+    private void initData(DefaultTableModel model, ComparisonResultSet comparison){\r
         maximum = 0d;\r
         minimum = 1d;\r
         average = 0d;\r
         model.setColumnIdentifiers(Messages.getStringArray("comparepair.table.columns"));\r
 \r
-        for(ComparisonPair pair: list){\r
+        for(Iterator<ComparisonPair> i = comparison.iterator(); i.hasNext(); ){\r
+            ComparisonPair pair = i.next();\r
             double similarity = pair.calculateSimilarity();\r
             if(similarity > maximum) maximum = similarity;\r
             if(similarity < minimum) minimum = similarity;\r
@@ -118,7 +114,7 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
             model.addRow(new Object[] { pair.getTarget1().getName(),\r
                          pair.getTarget2().getName(), new Double(similarity) });\r
         }\r
-        average = average / list.size();\r
+        average = average / comparison.getPairCount();\r
         \r
         averageLabel.setText(Double.toString(average));\r
         maximumLabel.setText(Double.toString(maximum));\r
@@ -129,7 +125,20 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
         JComponent buttonPanel = Box.createHorizontalBox();\r
         JPanel similarityPane = new JPanel(new GridLayout(1, 3));\r
         JComponent southPanel = Box.createVerticalBox();\r
-        JButton saveButton = Utility.createButton("savecomparison");\r
+        JButton saveButton = Utility.createButton(\r
+            "savecomparison", new SaveAction(frame, new AsciiDataWritable(){\r
+                public void writeAsciiData(PrintWriter out, String format) throws IOException{\r
+                    ResultFormatSpi service = FormatManager.getInstance().getService(format);\r
+                    if(service == null){\r
+                        service = FormatManager.getDefaultFormatService();\r
+                    }\r
+                    service.getComparisonResultFormat().printResult(out, comparison);\r
+                }\r
+            })\r
+        );\r
+        JButton updateColorButton = Utility.createButton(\r
+            "updatecellcolor", new UpdateBirthmarkCellColorAction(this, comparison.getEnvironment())\r
+        );\r
         JButton obfuscateButton = Utility.createButton("obfuscate");\r
         JScrollPane scroll = new JScrollPane();\r
         averageLabel = new JLabel(Double.toString(average), JLabel.RIGHT);\r
@@ -137,7 +146,7 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
         minimumLabel = new JLabel(Double.toString(minimum), JLabel.RIGHT);\r
 \r
         scroll.setViewportView(table);\r
-        table.setDefaultRenderer(Double.class, new CompareTableCellRenderer());\r
+        table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(comparison.getEnvironment()));\r
         similarityPane.setBorder(new TitledBorder(Messages.getString("similarity.border")));\r
         averageLabel.setBorder(new TitledBorder(Messages.getString("average.border")));\r
         maximumLabel.setBorder(new TitledBorder(Messages.getString("maximum.border")));\r
@@ -154,6 +163,8 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
         buttonPanel.add(Box.createHorizontalGlue());\r
         buttonPanel.add(saveButton);\r
         buttonPanel.add(Box.createHorizontalGlue());\r
+        buttonPanel.add(updateColorButton);\r
+        buttonPanel.add(Box.createHorizontalGlue());\r
         buttonPanel.add(obfuscateButton);\r
         buttonPanel.add(Box.createHorizontalGlue());\r
 \r
@@ -164,18 +175,13 @@ public class PairComparisonResultSetPane extends JPanel implements BirthmarkData
                     int col = table.columnAtPoint(e.getPoint());\r
                     if(col >= 1 && col < table.getColumnCount() && row >= 0\r
                             && row < table.getRowCount()){\r
-                        ComparisonPair pair = list.get(row);\r
+                        ComparisonPair pair = comparison.getPairAt(row);\r
 \r
-                        frame.compareDetails(pair.getTarget1(), pair.getTarget2(), context);\r
+                        frame.compareDetails(pair.getTarget1(), pair.getTarget2(), comparison.getContext());\r
                     }\r
                 }\r
             }\r
         });\r
-        saveButton.addActionListener(new ActionListener(){\r
-            public void actionPerformed(ActionEvent e){\r
-                frame.saveAction(PairComparisonResultSetPane.this);\r
-            }\r
-        });\r
 \r
         obfuscateButton.addActionListener(new ActionListener(){\r
             public void actionPerformed(ActionEvent e){\r