Project: hudsontrayapp-plugin
package org.hudson.trayapp.gui;
 
import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JEditorPane; 
 
import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.SystemColor; 
import java.awt.Toolkit; 
 
import javax.swing.JTable; 
import javax.swing.BoxLayout; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.TableColumn; 
 
import org.hudson.trayapp.HudsonTrayApp; 
import org.hudson.trayapp.model.Job; 
import org.hudson.trayapp.model.Server; 
 
import com.sun.swing.TableSorter; 
import javax.swing.BorderFactory; 
import javax.swing.border.TitledBorder; 
import java.awt.Color; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.net.URL; 
 
public class ServerResultsPanel extends JPanel { 
 
 private JScrollPane descriptionScrollPane = null
 private JEditorPane descriptionEditorPane = null
 private JScrollPane resultsScrollPane = null
 private JTable resultsTable = null
 private TitledBorder titledBorder = null
 
 /**
  * This method initializes  
  *  
  */
 
 public ServerResultsPanel() { 
  super(); 
  initialize(); 
 
 
 /**
  * This method initializes this 
  *  
  */
 
 private void initialize() { 
        titledBorder = BorderFactory.createTitledBorder(null"", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 14), new Color(515151)); 
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
        this.setBorder(titledBorder); 
        this.add(getDescriptionScrollPane(), null); 
        this.add(getResultsScrollPane(), null); 
    
 
 
 /**
  * This method initializes descriptionScrollPane  
  *   
  * @return javax.swing.JScrollPane  
  */
 
 private JScrollPane getDescriptionScrollPane() { 
  if (descriptionScrollPane == null) { 
   descriptionScrollPane = new JScrollPane(); 
   descriptionScrollPane.setViewportView(getDescriptionEditorPane()); 
  
  return descriptionScrollPane; 
 
 
 /**
  * This method initializes descriptionEditorPane  
  *   
  * @return javax.swing.JEditorPane  
  */
 
 private JEditorPane getDescriptionEditorPane() { 
  if (descriptionEditorPane == null) { 
   descriptionEditorPane = new JEditorPane(); 
   descriptionEditorPane.setSize(new Dimension(546128)); 
   descriptionEditorPane.setBackground(SystemColor.control); 
   descriptionEditorPane.setPreferredSize(new Dimension(4848)); 
   descriptionEditorPane.setText(""); 
   descriptionEditorPane.setEditable(false); 
   descriptionEditorPane.setContentType("text/html"); 
   descriptionEditorPane.setFont(new Font("SansSerif", Font.PLAIN, 12)); 
  
  return descriptionEditorPane; 
 
 
 /**
  * This method initializes resultsScrollPane  
  *   
  * @return javax.swing.JScrollPane  
  */
 
 private JScrollPane getResultsScrollPane() { 
  if (resultsScrollPane == null) { 
   resultsScrollPane = new JScrollPane(); 
   resultsScrollPane.setPreferredSize(new Dimension(453200)); 
   resultsScrollPane.setViewportView(getResultsTable()); 
  
  return resultsScrollPane; 
 
 
 /**
  * This method initializes resultsTable  
  *   
  * @return javax.swing.JTable  
  */
 
 private JTable getResultsTable() { 
  if (resultsTable == null) { 
   resultsTable = new JTable(); 
   resultsTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
   resultsTable.addMouseListener(new MouseListener() { 
    public void mouseClicked(MouseEvent e) { 
     int column = resultsTable.columnAtPoint(e.getPoint()); 
     if (e.getClickCount() == 2) { 
      int row = resultsTable.rowAtPoint(e.getPoint()); 
      try { 
       String value = resultsTable.getValueAt(row, column).toString(); 
       if (value.indexOf("http://") != -1 || value.indexOf("https://") != -1) { 
        HudsonTrayApp.getHudsonTrayAppInstance().getTray().browse(new URL(Job.getRFC2396CompliantURL(value))); 
       
      catch (Exception ex) { 
       ex.printStackTrace(); 
      
     
    
     
    public void mouseEntered(MouseEvent e) { } 
    public void mouseExited(MouseEvent e) { } 
    public void mousePressed(MouseEvent e) { } 
    public void mouseReleased(MouseEvent e) { } 
     
   }); 
  
  return resultsTable; 
 
  
 
 
 public void setServer(Server server) { 
  titledBorder.setTitle(server.getName()); 
  getDescriptionEditorPane().setText(server.getDescription()); 
  ServerTableModel stm = null
  try { 
   stm = (ServerTableModel) resultsTable.getModel(); 
   stm.setServer(server); 
  catch (ClassCastException e) { 
   stm = new ServerTableModel(server); 
  
   
  TableSorter sortedModel = new TableSorter(stm); 
  resultsTable.setModel(sortedModel); 
  sortedModel.addMouseListenerToHeaderInTable(resultsTable); 
  
  TableColumn colourColumn = resultsTable.getColumnModel().getColumn(0); 
  colourColumn.setCellRenderer(new DefaultTableCellRenderer() { 
   /**
    * 
    */
 
   private static final long serialVersionUID = 1L
  
   public Component getTableCellRendererComponent(JTable table, 
     Object value, boolean isSelected, boolean hasFocus, int row, 
     int column) { 
  
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/org/hudson/trayapp/gui/icons/16x16/"+(String)value + ".gif"))); 
    setIcon(icon); 
    icon.setImageObserver(new CellImageObserver(resultsTable, row, column)); 
    setText(""); 
    setIgnoreRepaint(false); 
    return this
   
  }); 
  colourColumn.setResizable(false); 
  colourColumn.setPreferredWidth(20); 
  colourColumn.setMinWidth(20); 
  colourColumn.setMaxWidth(20); 
  colourColumn.setWidth(20); 
   
  if (stm.getColumnCount() == 4) { 
   TableColumn healthColumn = resultsTable.getColumnModel().getColumn(1); 
   healthColumn.setCellRenderer(new DefaultTableCellRenderer() { 
    /**
     * 
     */
 
    private static final long serialVersionUID = 1L
  
    public Component getTableCellRendererComponent(JTable table, 
      Object value, boolean isSelected, boolean hasFocus, int row, 
      int column) { 
  
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     ImageIcon icon = (ImageIcon) Tray.getIconFromHealth(((Integer) value).intValue()); 
     setIcon(icon); 
     icon.setImageObserver(new CellImageObserver(resultsTable, row, column)); 
     setText(""); 
     if (((Integer) value).intValue() != -1) { 
      setToolTipText(((Integer) value).toString() + "%"); 
     
     setIgnoreRepaint(false); 
     return this
    
   }); 
   healthColumn.setResizable(false); 
   healthColumn.setPreferredWidth(20); 
   healthColumn.setMinWidth(20); 
   healthColumn.setMaxWidth(20); 
   healthColumn.setWidth(20); 
   int width = getWidth() - 40
   resultsTable.getColumnModel().getColumn(2).setPreferredWidth((width - colourColumn.getPreferredWidth() - healthColumn.getPreferredWidth()) / 2 ); 
   resultsTable.getColumnModel().getColumn(3).setPreferredWidth((width - colourColumn.getPreferredWidth() - healthColumn.getPreferredWidth()) / 2 ); 
  else if (stm.getColumnCount() == 3) { 
   int width = getWidth() - 40
   resultsTable.getColumnModel().getColumn(1).setPreferredWidth((width - colourColumn.getPreferredWidth()) / 2 ); 
   resultsTable.getColumnModel().getColumn(2).setPreferredWidth((width - colourColumn.getPreferredWidth()) / 2 ); 
  
 
 
}