package jp.naist.se.stigmata.ui.swing;\r
\r
/*\r
- * $Id: CompareTablePane.java,v 1.2 2005/01/30 08:41:45 harua-t Exp $\r
+ * $Id$\r
*/\r
\r
import java.awt.BorderLayout;\r
import java.awt.Component;\r
-import java.awt.FlowLayout;\r
import java.awt.GridLayout;\r
import java.awt.event.ActionEvent;\r
import java.awt.event.ActionListener;\r
import java.io.File;\r
import java.io.IOException;\r
import java.io.PrintWriter;\r
+import java.net.URL;\r
import java.util.HashMap;\r
+import java.util.Iterator;\r
import java.util.Map;\r
\r
-import javax.swing.BoxLayout;\r
+import javax.swing.Box;\r
import javax.swing.JButton;\r
-import javax.swing.JComboBox;\r
+import javax.swing.JComponent;\r
import javax.swing.JLabel;\r
+import javax.swing.JMenuItem;\r
import javax.swing.JOptionPane;\r
import javax.swing.JPanel;\r
import javax.swing.JScrollPane;\r
\r
import jp.naist.se.stigmata.Birthmark;\r
import jp.naist.se.stigmata.BirthmarkComparator;\r
-import jp.naist.se.stigmata.BirthmarkContext;\r
+import jp.naist.se.stigmata.BirthmarkEnvironment;\r
import jp.naist.se.stigmata.BirthmarkSet;\r
-import jp.naist.se.stigmata.CertainPairComparisonResultSet;\r
import jp.naist.se.stigmata.ComparisonResultSet;\r
-import jp.naist.se.stigmata.RoundRobinComparisonResultSet;\r
+import jp.naist.se.stigmata.ExtractionResultSet;\r
+import jp.naist.se.stigmata.ExtractionTarget;\r
+import jp.naist.se.stigmata.filter.FilteredComparisonResultSet;\r
+import jp.naist.se.stigmata.format.FormatManager;\r
+import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
+import jp.naist.se.stigmata.result.MemoryExtractionResultSet;\r
+import jp.naist.se.stigmata.result.RoundRobinComparisonResultSet;\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
* @author Haruaki TAMADA\r
* @version $Revision$ $Date$\r
*/\r
-public class RoundRobinComparisonResultPane extends JPanel implements BirthmarkDataWritable{\r
+public class RoundRobinComparisonResultPane extends JPanel{\r
private static final long serialVersionUID = 2134574576543623L;\r
\r
- private BirthmarkSet[] birthmarksX;\r
-\r
- private BirthmarkSet[] birthmarksY;\r
-\r
+ private ExtractionResultSet extraction;\r
+ // private List<BirthmarkSet> birthmarksX;\r
+ // private List<BirthmarkSet> birthmarksY;\r
private JTable table;\r
-\r
private DefaultTableModel model;\r
-\r
private JLabel classCount, comparisonCount, distinctionRatio;\r
-\r
private JLabel average, minimum, maximum;\r
-\r
private StigmataFrame stigmataFrame;\r
+ // private BirthmarkEnvironment environment;\r
\r
- private BirthmarkContext context;\r
-\r
- public RoundRobinComparisonResultPane(StigmataFrame stigmata, BirthmarkContext context,\r
- BirthmarkSet[] birthmarksX, BirthmarkSet[] birthmarksY){\r
+ public RoundRobinComparisonResultPane(StigmataFrame stigmata, ExtractionResultSet resultset){\r
this.stigmataFrame = stigmata;\r
- this.context = context;\r
- this.birthmarksX = birthmarksX;\r
- this.birthmarksY = birthmarksY;\r
-\r
+ this.extraction = resultset;\r
initialize();\r
compare(model);\r
}\r
\r
- public void writeData(PrintWriter out, ResultFormatSpi service){\r
- service.getComparisonResultFormat().printResult(out,\r
- new RoundRobinComparisonResultSet(birthmarksX, birthmarksY, context));\r
+ @Deprecated\r
+ public RoundRobinComparisonResultPane(StigmataFrame stigmata, BirthmarkEnvironment environment,\r
+ BirthmarkSet[] birthmarksX, BirthmarkSet[] birthmarksY){\r
+ this.stigmataFrame = stigmata;\r
+\r
+ initialize();\r
+ compare(model);\r
}\r
\r
private void compare(DefaultTableModel model){\r
- int comparison = birthmarksX.length * birthmarksY.length;\r
+ int countX = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X);\r
+ int countY = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_Y);\r
+ int comparisonCount = countX * countY;\r
\r
- classCount.setText(Integer.toString(birthmarksX.length + birthmarksY.length));\r
- comparisonCount.setText(Integer.toString(comparison));\r
+ classCount.setText(Integer.toString(countX + countY));\r
+ this.comparisonCount.setText(Integer.toString(comparisonCount));\r
int correct = 0;\r
double avg = 0d;\r
double max = 0d;\r
double min = 100d;\r
- model.addColumn(""); //$NON-NLS-1$\r
- for(BirthmarkSet x: birthmarksX){\r
- model.addColumn(x.getClassName());\r
+ model.addColumn("");\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
+ BirthmarkSet x = i.next();\r
+ model.addColumn(x.getName());\r
}\r
- for(int j = 0; j < birthmarksY.length; j++){\r
- Object[] rows = new Object[birthmarksX.length + 1];\r
- rows[0] = birthmarksY[j].getClassName();\r
-\r
- for(int i = 0; i < birthmarksX.length; i++){\r
- double similarity = compare(context, birthmarksX[i], birthmarksY[j]);\r
- rows[i + 1] = new Double(similarity);\r
+ int sizeX = extraction.getBirthmarkSetSize(ExtractionTarget.TARGET_X);\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
+ Object[] rows = new Object[sizeX + 1];\r
+ BirthmarkSet setY = i.next();\r
+ rows[0] = setY.getName();\r
+\r
+ int index = 0;\r
+ for(Iterator<BirthmarkSet> j = extraction.birthmarkSets(ExtractionTarget.TARGET_X); j.hasNext(); ){\r
+ BirthmarkSet setX = j.next();\r
+ double similarity = compare(setX, setY, extraction.getEnvironment());\r
+ rows[index + 1] = new Double(similarity);\r
\r
if(Math.abs(similarity - 1) < 1E-8){\r
correct += 1;\r
avg += similarity;\r
if(max < similarity) max = similarity;\r
if(min > similarity) min = similarity;\r
+ index++;\r
}\r
model.addRow(rows);\r
}\r
- distinctionRatio.setText(Double.toString((double)(comparison - correct)\r
- / (double)comparison));\r
- avg = avg / comparison;\r
+ distinctionRatio.setText(\r
+ Double.toString((double)(comparisonCount - correct) / (double)comparisonCount)\r
+ );\r
+ avg = avg / comparisonCount;\r
average.setText(Double.toString(avg));\r
minimum.setText(Double.toString(min));\r
maximum.setText(Double.toString(max));\r
}\r
\r
- private double compare(BirthmarkContext context, BirthmarkSet x, BirthmarkSet y){\r
+ private double compare(BirthmarkSet x, BirthmarkSet y, BirthmarkEnvironment environment){\r
double similarity = 0d;\r
int count = 0;\r
\r
Birthmark b1 = x.getBirthmark(type);\r
Birthmark b2 = y.getBirthmark(type);\r
if(b1 != null && b2 != null){\r
- BirthmarkComparator comparator = context.getService(type).getComparator();\r
+ BirthmarkComparator comparator = environment.getService(type).getComparator();\r
double result = comparator.compare(b1, b2);\r
- if(result != Double.NaN){\r
+ if(!Double.isNaN(result)){\r
similarity += result;\r
count++;\r
}\r
\r
model = new RoundRobinComparisonResultSetTableModel();\r
table = new JTable(model);\r
- table.setDefaultRenderer(Double.class, new CompareTableCellRenderer());\r
+ table.setDefaultRenderer(Double.class, new CompareTableCellRenderer(extraction.getEnvironment()));\r
table.addMouseListener(new MouseAdapter(){\r
public void mouseClicked(MouseEvent e){\r
if(e.getClickCount() == 2){\r
int col = table.columnAtPoint(e.getPoint());\r
if(col >= 1 && col < table.getColumnCount() && row >= 0\r
&& row < table.getRowCount()){\r
- BirthmarkSet b1 = birthmarksX[col - 1];\r
- BirthmarkSet b2 = birthmarksY[row];\r
+ BirthmarkSet b1 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_X, col - 1);\r
+ BirthmarkSet b2 = extraction.getBirthmarkSet(ExtractionTarget.TARGET_Y, row);\r
\r
- stigmataFrame.compareDetails(b1, b2, context);\r
+ stigmataFrame.compareDetails(b1, b2, extraction.getContext());\r
}\r
}\r
}\r
scroll.setViewportView(table);\r
scroll.setWheelScrollingEnabled(true);\r
panel.add(scroll, BorderLayout.CENTER);\r
- JPanel south = new JPanel();\r
- south.setLayout(new BoxLayout(south, BoxLayout.Y_AXIS));\r
+ JComponent south = Box.createVerticalBox();\r
JPanel box1 = new JPanel(new GridLayout(1, 3));\r
box1.add(classCount = new JLabel());\r
box1.add(comparisonCount = new JLabel());\r
box1.add(distinctionRatio = new JLabel());\r
south.add(box1);\r
JPanel box2 = new JPanel(new GridLayout(1, 3));\r
- box2.setBorder(new TitledBorder(Messages.getString("similarity.border"))); //$NON-NLS-1$\r
+ box2.setBorder(new TitledBorder(Messages.getString("similarity.border")));\r
box2.add(average = new JLabel());\r
box2.add(minimum = new JLabel());\r
box2.add(maximum = new JLabel());\r
south.add(box2);\r
\r
- classCount.setBorder(new TitledBorder(Messages.getString("numberofclasses.border"))); //$NON-NLS-1$\r
- comparisonCount.setBorder(new TitledBorder(Messages.getString("comparisoncount.border"))); //$NON-NLS-1$\r
- distinctionRatio.setBorder(new TitledBorder(Messages.getString("distinctionratio.border"))); //$NON-NLS-1$\r
- average.setBorder(new TitledBorder(Messages.getString("average.border"))); //$NON-NLS-1$\r
- minimum.setBorder(new TitledBorder(Messages.getString("minimum.border"))); //$NON-NLS-1$\r
- maximum.setBorder(new TitledBorder(Messages.getString("maximum.border"))); //$NON-NLS-1$\r
+ classCount.setBorder(new TitledBorder(Messages.getString("numberofclasses.border")));\r
+ comparisonCount.setBorder(new TitledBorder(Messages.getString("comparisoncount.border")));\r
+ distinctionRatio.setBorder(new TitledBorder(Messages.getString("distinctionratio.border")));\r
+ average.setBorder(new TitledBorder(Messages.getString("average.border")));\r
+ minimum.setBorder(new TitledBorder(Messages.getString("minimum.border")));\r
+ maximum.setBorder(new TitledBorder(Messages.getString("maximum.border")));\r
\r
panel.add(south, BorderLayout.SOUTH);\r
\r
return panel;\r
}\r
\r
- private void saveButtonActionPerformed(ActionEvent e){\r
- stigmataFrame.saveAction(this);\r
+ private void mdsButtonActionPerformed(ActionEvent e){\r
+ Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
+ BirthmarkSet bs = i.next();\r
+ map.put(bs.getLocation(), bs);\r
+ }\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
+ BirthmarkSet bs = i.next();\r
+ map.put(bs.getLocation(), bs);\r
+ }\r
+ int index = 0;\r
+ BirthmarkSet[] set = new BirthmarkSet[map.size()];\r
+ for(Map.Entry<URL, BirthmarkSet> entry: map.entrySet()){\r
+ set[index] = entry.getValue();\r
+ index++;\r
+ }\r
+ \r
+ stigmataFrame.showMDSGraph(set, extraction.getContext());\r
}\r
\r
private void graphButtonActionPerformed(ActionEvent e){\r
values.put(new Integer(similarity), dist);\r
}\r
}\r
- stigmataFrame.showGraph(values);\r
+ stigmataFrame.showSimilarityDistributionGraph(values);\r
}\r
\r
private void initialize(){\r
- JButton save = Utility.createButton("savecomparison"); //$NON-NLS-1$\r
- JButton graph = Utility.createButton("showgraph"); //$NON-NLS-1$\r
- JButton obfuscate = Utility.createButton("obfuscate"); //$NON-NLS-1$\r
- JButton compare = Utility.createButton("compare"); //$NON-NLS-1$\r
- final JComboBox combo = new JComboBox();\r
- JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));\r
+ JButton save = Utility.createButton(\r
+ "savecomparison", new SaveAction(stigmataFrame, new AsciiDataWritable(){\r
+ public void writeAsciiData(PrintWriter out, String format){\r
+ ResultFormatSpi service = FormatManager.getInstance().getService(format);\r
+ if(service == null){\r
+ service = FormatManager.getDefaultFormatService();\r
+ }\r
\r
- String[] comparisonMethods = Messages.getStringArray("comparison.methods.inroundrobinresult");\r
- for(int i = 0; i < comparisonMethods.length; i++){\r
- combo.addItem(comparisonMethods[i]);\r
- }\r
+ service.getComparisonResultFormat().printResult(\r
+ out, new RoundRobinComparisonResultSet(extraction)\r
+ );\r
+ }\r
+ }\r
+ ));\r
+ JButton graph = Utility.createButton("showgraph");\r
+ JButton obfuscate = Utility.createButton("obfuscate");\r
+ JButton compare = Utility.createButton("guessedpair");\r
+ JButton updateColor = Utility.createButton(\r
+ "updatecellcolor", new UpdateBirthmarkCellColorAction(this, extraction.getEnvironment())\r
+ );\r
+ JMenuItem mdsMenu = Utility.createJMenuItem("mdsmap");\r
+\r
+ PopupButton comparePopup = new PopupButton(compare);\r
+ PopupButton graphPopup = new PopupButton(graph);\r
+\r
+ JComponent southPanel = Box.createHorizontalBox();\r
\r
setLayout(new BorderLayout());\r
add(getMainPane(), BorderLayout.CENTER);\r
add(southPanel, BorderLayout.SOUTH);\r
+ southPanel.add(Box.createHorizontalGlue());\r
southPanel.add(save);\r
- southPanel.add(graph);\r
+ southPanel.add(Box.createHorizontalGlue());\r
+ southPanel.add(updateColor);\r
+ southPanel.add(Box.createHorizontalGlue());\r
+ southPanel.add(graphPopup);\r
+ southPanel.add(Box.createHorizontalGlue());\r
southPanel.add(obfuscate);\r
- southPanel.add(compare);\r
- southPanel.add(combo);\r
+ southPanel.add(Box.createHorizontalGlue());\r
+ southPanel.add(comparePopup);\r
+ southPanel.add(Box.createHorizontalGlue());\r
\r
- save.addActionListener(new ActionListener(){\r
+ graph.addActionListener(new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
- saveButtonActionPerformed(e);\r
+ graphButtonActionPerformed(e);\r
}\r
});\r
-\r
- graph.addActionListener(new ActionListener(){\r
+ mdsMenu.addActionListener(new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
- graphButtonActionPerformed(e);\r
+ mdsButtonActionPerformed(e);\r
}\r
});\r
+\r
obfuscate.addActionListener(new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
obfuscateClassNames();\r
}\r
});\r
\r
- compare.addActionListener(new ActionListener(){\r
+ ActionListener compareListener = new ActionListener(){\r
public void actionPerformed(ActionEvent e){\r
- String item = (String)combo.getSelectedItem();\r
- if(item.equals(Messages.getString("guessedpair.label"))){\r
+ String item = e.getActionCommand();\r
+ if(item.equals("guessedpair")){\r
compareGuessedPair();\r
}\r
- else if(item.equals(Messages.getString("specifiedpair.label"))){\r
+ else if(item.equals("specifiedpair")){\r
compareSpecifiedPair();\r
}\r
+ else if(item.equals("roundrobin.filtering")){\r
+ compareRoundRobinWithFiltering();\r
+ }\r
}\r
- });\r
+ };\r
+\r
+ compare.addActionListener(compareListener);\r
+ String[] comparisonMethods = Messages.getStringArray("comparison.methods.inroundrobinresult");\r
+ for(int i = 1; i < comparisonMethods.length; i++){\r
+ JMenuItem item = Utility.createJMenuItem(comparisonMethods[i]);\r
+ comparePopup.addMenuItem(item);\r
+ item.addActionListener(compareListener);\r
+ }\r
+ graphPopup.addMenuItem(mdsMenu);\r
+ }\r
+\r
+ private void compareRoundRobinWithFiltering(){\r
+ FilterSelectionPane pane = new FilterSelectionPane(\r
+ extraction.getEnvironment().getFilterManager()\r
+ );\r
+ int returnValue = JOptionPane.showConfirmDialog(\r
+ stigmataFrame, pane, Messages.getString("filterselection.dialog.title"),\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.QUESTION_MESSAGE\r
+ );\r
+ if(returnValue == JOptionPane.OK_OPTION){\r
+ String[] filterSetList = pane.getSelectedFilters();\r
+\r
+ ComparisonResultSet rs = new RoundRobinComparisonResultSet(extraction);\r
+ \r
+ ComparisonResultSet filterResultSet = new FilteredComparisonResultSet(\r
+ rs, extraction.getEnvironment().getFilterManager().getFilterSets(filterSetList)\r
+ );\r
+ stigmataFrame.showComparisonResultSet(filterResultSet);\r
+ }\r
}\r
\r
private void compareGuessedPair(){\r
- ComparisonResultSet resultset = new CertainPairComparisonResultSet(birthmarksX, birthmarksY, context);\r
- stigmataFrame.showComparisonResultSet(resultset);\r
+ ComparisonResultSet rs = new CertainPairComparisonResultSet(extraction);\r
+ stigmataFrame.showComparisonResultSet(rs);\r
}\r
\r
private void compareSpecifiedPair(){\r
- File file = stigmataFrame.getOpenFile(Messages.getStringArray("comparemapping.extension"), Messages.getString("comparemapping.description"));\r
+ File file = stigmataFrame.getOpenFile(\r
+ Messages.getStringArray("comparemapping.extension"),\r
+ Messages.getString("comparemapping.description")\r
+ );\r
if(file != null){\r
Map<String, String> mapping = stigmataFrame.constructMapping(file);\r
- \r
- ComparisonResultSet resultset = new CertainPairComparisonResultSet(birthmarksX, birthmarksY, mapping, context); \r
- stigmataFrame.showComparisonResultSet(resultset);\r
+\r
+ ComparisonResultSet comparison = new CertainPairComparisonResultSet(extraction, mapping);\r
+ stigmataFrame.showComparisonResultSet(comparison);\r
}\r
}\r
\r
private void obfuscateClassNames(){\r
ClassNameObfuscator obfuscator = new ClassNameObfuscator();\r
\r
- for(int i = 0; i < birthmarksX.length; i++){\r
- birthmarksX[i] = obfuscator.obfuscateClassName(birthmarksX[i]);\r
- }\r
- for(int i = 0; i < birthmarksY.length; i++){\r
- birthmarksY[i] = obfuscator.obfuscateClassName(birthmarksY[i]);\r
- }\r
-\r
try{\r
- File file = stigmataFrame.getSaveFile(Messages.getStringArray("obfuscationmapping.extension"),\r
- Messages.getString("obfuscationmapping.description"));\r
- obfuscator.outputNameMappings(file);\r
+ File file = stigmataFrame.getSaveFile(\r
+ Messages.getStringArray("obfuscationmapping.extension"),\r
+ Messages.getString("obfuscationmapping.description")\r
+ );\r
+ if(file != null){\r
+ ExtractionResultSet ers = new MemoryExtractionResultSet(extraction.getContext(), extraction.isTableType());\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_X); i.hasNext(); ){\r
+ BirthmarkSet bs = i.next();\r
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_X, obfuscator.obfuscateClassName(bs));\r
+ }\r
+ for(Iterator<BirthmarkSet> i = extraction.birthmarkSets(ExtractionTarget.TARGET_Y); i.hasNext(); ){\r
+ BirthmarkSet bs = i.next();\r
+ ers.addBirthmarkSet(ExtractionTarget.TARGET_Y, obfuscator.obfuscateClassName(bs));\r
+ }\r
+ this.extraction = ers;\r
+ obfuscator.outputNameMappings(file);\r
+ }\r
}catch(IOException e){\r
JOptionPane.showMessageDialog(this, e.getMessage(), Messages\r
.getString("error.dialog.title"), JOptionPane.ERROR_MESSAGE);\r