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(51, 51, 51)); 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(546, 128)); descriptionEditorPane.setBackground(SystemColor.control); descriptionEditorPane.setPreferredSize(new Dimension(48, 48)); 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(453, 200)); 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 ); } } }