/* Similarityox.java * This file is part of Artemis * * Copyright (C) 2007 Genome Research Limited * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ package uk.ac.sanger.artemis.components.genebuilder.ortholog; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import uk.ac.sanger.artemis.io.Qualifier; import uk.ac.sanger.artemis.io.QualifierVector; import uk.ac.sanger.artemis.util.DatabaseDocument; import uk.ac.sanger.artemis.util.StringVector; public class SimilarityTable extends AbstractMatchTable { private int NUMBER_COLUMNS = 13; private Vector rowData = new Vector(); private Vector tableData = new Vector(NUMBER_COLUMNS); private JButton infoLevelButton = new JButton("Details"); // // column headings final static String ORGANISM_COL = "Organism"; final static String HIT_COL = "Hit"; final static String HIT_DBXREF_COL = "DbXRef"; final static String DESCRIPTION_COL = "Description"; final static String EVALUE_COL = "E-value"; final static String LENGTH_COL = "Length"; final static String ID_COL = "ID"; final static String QUERY_COL = "Query"; final static String SUBJECT_COL = "Subject"; final static String SCORE_COL = "Score"; final static String OVERLAP_COL = "Overlap"; final static String METHOD_COL = "Method"; final static String REMOVE_BUTTON_COL = ""; /** * Contruct a component for a similarity line * @param similarity * @param similarityString */ protected SimilarityTable(final Qualifier simQualifier, final DatabaseDocument doc) { this.origQualifiers = new QualifierVector(); this.origQualifiers.add(simQualifier); infoLevelButton.setOpaque(false); infoLevelButton.setHorizontalAlignment(SwingConstants.LEFT); tableData.setSize(NUMBER_COLUMNS); tableData.setElementAt(ORGANISM_COL,0); tableData.setElementAt(HIT_COL,1); tableData.setElementAt(HIT_DBXREF_COL,2); tableData.setElementAt(DESCRIPTION_COL,3); tableData.setElementAt(EVALUE_COL,4); tableData.setElementAt(LENGTH_COL,5); tableData.setElementAt(ID_COL,6); tableData.setElementAt(QUERY_COL,7); tableData.setElementAt(SUBJECT_COL,8); tableData.setElementAt(SCORE_COL,9); tableData.setElementAt(OVERLAP_COL,10); tableData.setElementAt(METHOD_COL,11); tableData.setElementAt(REMOVE_BUTTON_COL,12); // add rows of similarity StringVector sims = simQualifier.getValues(); for(int i=0; i=3) { int columnIndex = tableData.indexOf(ORGANISM_COL); row.setElementAt(((String)sim.get(2)).trim(), columnIndex); } // hit if(sim.size() >=2) { int columnIndex = tableData.indexOf(HIT_COL); String hit = ((String)sim.get(1)).trim(); if(hit.startsWith("with=")) hit = hit.substring(5); final String hits[] = hit.split(" "); row.setElementAt(hits[0], columnIndex); if(hits.length > 1) { // dbxref columnIndex = tableData.indexOf(HIT_DBXREF_COL); if(hits[1].startsWith("(") && hits[1].endsWith(")")) hits[1] = hits[1].substring(1,hits[1].length()-1); row.setElementAt(hits[1], columnIndex); } } // description if(sim.size() >=4) { int columnIndex = tableData.indexOf(DESCRIPTION_COL); row.setElementAt(((String)sim.get(3)).trim(), columnIndex); } // e-value String evalueString; if( !(evalueString=getField("E()=", similarityString)).equals("") ) { int columnIndex = tableData.indexOf(EVALUE_COL); row.setElementAt(evalueString, columnIndex); } // length String lenString; if( !(lenString=getField("length=", similarityString).trim()).equals("") ) { int columnIndex = tableData.indexOf(LENGTH_COL); row.setElementAt(lenString, columnIndex); } else if( !(lenString=getField("length", similarityString).trim()).equals("") ) { int columnIndex = tableData.indexOf(LENGTH_COL); row.setElementAt(lenString, columnIndex); } String ungappedId; if( !(ungappedId=getField("ungapped id", similarityString)).equals("") ) { int columnIndex = tableData.indexOf(ID_COL); row.setElementAt(ungappedId, columnIndex); } String query; if( !(query=getField("query", similarityString).trim()).equals("") ) { int columnIndex = tableData.indexOf(QUERY_COL); row.setElementAt(query, columnIndex); } String subject; if( !(subject=getField("subject", similarityString).trim()).equals("") ) { int columnIndex = tableData.indexOf(SUBJECT_COL); row.setElementAt(subject, columnIndex); } String score; if( !(score=getField("score=", similarityString)).equals("") ) { int columnIndex = tableData.indexOf(SCORE_COL); row.setElementAt(score, columnIndex); } String overlap; if( !(overlap=getField("overlap=", similarityString)).equals("") ) { int columnIndex = tableData.indexOf(OVERLAP_COL); row.setElementAt(overlap, columnIndex); } else if(similarityString.indexOf("overlap;") > -1) { overlap = null; for(int i=0;i