Log in Help
Print
Homereleasesgate-8.4-build5748-ALLpluginsTermRaidersrcgatetermraidergui 〉 PairbankViewer.java
 
/*
 *  Copyright (c) 2008--2014, The University of Sheffield. See the file
 *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  $Id: PairbankViewer.java 17967 2014-05-11 16:35:51Z ian_roberts $
 */
package gate.termraider.gui;

import gate.Resource;
import gate.creole.ANNIEConstants;
import gate.creole.AbstractVisualResource;
import gate.creole.metadata.CreoleResource;
import gate.creole.metadata.GuiType;
import gate.event.ProgressListener;
import gate.termraider.bank.AbstractPairbank;
import gate.termraider.bank.PMIBank;
import gate.termraider.util.UnorderedTermPair;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;


@CreoleResource(name = "Pairbank Viewer",
        comment = "viewer for the TermRaider Pairbank",
        helpURL = "http://gate.ac.uk/userguide/sec:creole:termraider",
        guiType = GuiType.LARGE,
        mainViewer = true,
        resourceDisplayed = "gate.termraider.bank.AbstractPairbank")
public class PairbankViewer 
  extends AbstractVisualResource 
  implements ANNIEConstants, ProgressListener {

  private static final long serialVersionUID = -8174187050175560886L;

  private AbstractPairbank pairbank;
  private JTabbedPane tabbedPane;
  private JTable scoreTable;
  private JScrollPane scoreTablePane;
  private PairTableModel scoreTableModel;
  
  
  @Override
  public Resource init() {
    initGuiComponents();
    return this;
  }



  private void initGuiComponents() {
    setLayout(new BorderLayout());
    tabbedPane = new JTabbedPane();
  }
  
  private void generate() {
    JPanel tableTab = new JPanel(new BorderLayout());
    tabbedPane.addTab("Scores", tableTab);
    
    scoreTableModel = new PairTableModel(pairbank);
    scoreTable = new JTable(scoreTableModel);
    scoreTable.setAutoCreateRowSorter(true);
    scoreTablePane = new JScrollPane(scoreTable, 
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    tableTab.add(scoreTablePane, BorderLayout.CENTER);
    
    if (pairbank instanceof PMIBank) {
      JPanel debugger = new PMIDebugger(pairbank);
      tabbedPane.addTab("Details", debugger);
    }
    
    this.add(tabbedPane, BorderLayout.CENTER);
    tabbedPane.validate();
    tabbedPane.repaint();
  }
  
  

  public void processFinished() {
    setTarget(pairbank);
  }

  public void progressChanged(int i) {
    // nothing?
  }

  public void setTarget(Object target) {
    if(target == null || ! (target instanceof AbstractPairbank)) {
      throw new IllegalArgumentException("This Viewer cannot show a "
              + (target == null ? "null" : target.getClass().toString()));
    }
    
    pairbank = (AbstractPairbank) target;
    this.generate();
  }
  
}


class PairTableModel extends AbstractTableModel {
  
  private static final long serialVersionUID = 8824583674024239907L;
  
  private List<UnorderedTermPair> pairs;
  private Map<UnorderedTermPair, Double> scores; 

  public PairTableModel(AbstractPairbank pairbank) {
    this.pairs = new ArrayList<UnorderedTermPair>(pairbank.getPairs());
    this.scores = pairbank.getScores();
  }
  
  public int getColumnCount() {
    return 3;
  }

  public int getRowCount() {
    return this.pairs.size();
  }

  public Object getValueAt(int row, int col) {
    UnorderedTermPair pair = this.pairs.get(row);
    if (col == 0) {
      return pair.getTerm0().toString();
    }
    // implied else
    if (col == 1) {
      return pair.getTerm1().toString();
    }
    // implied else
    return this.scores.get(pair);
  }
  
  public Class<?> getColumnClass(int col) {
    if (col < 2) {
      return String.class;
    }
    // implied else
    return Integer.class;
  }
  
  public String getColumnName(int col) {
    if (col < 2) {
      return "Term";
    }
    // implied else
    return "Score";
  }

}