View Javadoc

    1   /*
    2    *  soapUI, copyright (C) 2004-2007 eviware.com
    3    *
    4    *  soapUI is free software; you can redistribute it and/or modify it under the
    5    *  terms of version 2.1 of the GNU Lesser General Public License as published by
    6    *  the Free Software Foundation.
    7    *
    8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
    9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    10   *  See the GNU Lesser General Public License for more details at gnu.org.
    11   */
    12
    13  package com.eviware.soapui.impl.wsdl.panels.testcase;
    14
    15  import java.awt.BorderLayout;
    16  import java.awt.Color;
    17  import java.awt.Component;
    18  import java.awt.event.ActionEvent;
    19  import java.awt.event.MouseAdapter;
    20  import java.awt.event.MouseEvent;
    21
    22  import javax.swing.BorderFactory;
    23  import javax.swing.JLabel;
    24  import javax.swing.JList;
    25  import javax.swing.JPanel;
    26  import javax.swing.JPopupMenu;
    27  import javax.swing.JScrollPane;
    28  import javax.swing.ListCellRenderer;
    29
    30  import com.eviware.soapui.impl.wsdl.testcase.TestCaseLogItem;
    31  import com.eviware.soapui.impl.wsdl.testcase.TestCaseLogModel;
    32  import com.eviware.soapui.model.testsuite.TestStepResult;
    33  import com.eviware.soapui.support.UISupport;
    34  import com.eviware.soapui.support.action.swing.ActionList;
    35  import com.eviware.soapui.support.action.swing.ActionSupport;
    36
    37  /***
    38   * Panel for displaying TestStepResults
    39   *
    40   * @author Ole.Matzura
    41   */
    42
    43  public class TestCaseLog extends JPanel
    44  {
    45  	private TestCaseLogModel logListModel;
    46  	private JList testLogList;
    47
    48  	public TestCaseLog()
    49  	{
    50  		super(new BorderLayout());
    51
    52  		buildUI();
    53  	}
    54
    55  	private void buildUI()
    56  	{
    57  		logListModel = new TestCaseLogModel();
    58  		testLogList = new JList(logListModel);
    59  		testLogList.setCellRenderer(new TestLogCellRenderer());
    60  		testLogList.setPrototypeCellValue( "Testing 123" );
    61  		testLogList.setFixedCellWidth( -1 );
    62  		testLogList.addMouseListener(new LogListMouseListener());
    63  		testLogList.setBorder( BorderFactory.createLineBorder(  Color.GRAY ) );
    64
    65  		JScrollPane scrollPane = new JScrollPane(testLogList);
    66  		scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "Test Log"));
    67  		add(scrollPane, BorderLayout.CENTER);
    68  	}
    69
    70  	private static final class TestLogCellRenderer extends JLabel implements ListCellRenderer
    71  	{
    72  		public TestLogCellRenderer()
    73  		{
    74  			setOpaque(true);
    75  			setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
    76  			setIcon(null);
    77  		}
    78
    79  		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
    80  				boolean cellHasFocus)
    81  		{
    82  			if (value instanceof String)
    83  			{
    84  				setText(value.toString());
    85  			}
    86  			else if (value instanceof TestCaseLogItem)
    87  			{
    88  				TestCaseLogItem logItem = (TestCaseLogItem) value;
    89  				String msg = logItem.getMsg();
    90  				setText(msg == null ? "" : msg);
    91  			}
    92
    93  			if (isSelected)
    94  			{
    95  				setBackground(list.getSelectionBackground());
    96  				setForeground(list.getSelectionForeground());
    97  			}
    98  			else
    99  			{
    100 				setBackground(list.getBackground());
    101 				setForeground(list.getForeground());
    102 			}
    103
    104 			setEnabled(list.isEnabled());
    105 			//setFont(list.getFont());
    106
    107 			return this;
    108 		}
    109 	}
    110
    111 	/***
    112 	 * Mouse Listener for triggering default action and showing popup for log list items
    113 	 *
    114 	 * @author Ole.Matzura
    115 	 */
    116
    117 	private final class LogListMouseListener extends MouseAdapter
    118 	{
    119 		public void mouseClicked(MouseEvent e)
    120 		{
    121 			if (e.getClickCount() < 2)
    122 				return;
    123 			int selectedIndex = testLogList.getSelectedIndex();
    124 			if (selectedIndex == -1)
    125 				return;
    126 			TestStepResult result = logListModel.getResultAt(selectedIndex);
    127 			if (result != null && result.getActions() != null)
    128 				result.getActions().performDefaultAction(new ActionEvent(this, 0, null));
    129 		}
    130
    131 		public void mousePressed(MouseEvent e)
    132 		{
    133 			if (e.isPopupTrigger())
    134 				showPopup(e);
    135 		}
    136
    137 		public void mouseReleased(MouseEvent e)
    138 		{
    139 			if (e.isPopupTrigger())
    140 				showPopup(e);
    141 		}
    142
    143 		public void showPopup(MouseEvent e)
    144 		{
    145 			int row = testLogList.locationToIndex(e.getPoint());
    146 			if (row == -1)
    147 				return;
    148
    149 			if (testLogList.getSelectedIndex() != row)
    150 			{
    151 				testLogList.setSelectedIndex(row);
    152 			}
    153
    154 			TestStepResult result = logListModel.getResultAt(row);
    155 			if (result == null)
    156 				return;
    157
    158 			ActionList actions = result.getActions();
    159
    160 			if (actions == null || actions.getActionCount() == 0)
    161 				return;
    162
    163 			JPopupMenu popup = ActionSupport.buildPopup(actions);
    164 			UISupport.showPopup(popup, testLogList, e.getPoint());
    165 		}
    166 	}
    167
    168 	public void clear()
    169 	{
    170 		logListModel.clear();
    171 	}
    172
    173 	public void addText(String string)
    174 	{
    175 		logListModel.addText( string );
    176 	}
    177
    178 	public void addTestStepResult(TestStepResult stepResult)
    179 	{
    180 		logListModel.addTestStepResult( stepResult );
    181 	}
    182
    183 	public TestCaseLogModel getLogListModel()
    184 	{
    185 		return logListModel;
    186 	}
    187
    188 	public void setLogListModel(TestCaseLogModel logListModel)
    189 	{
    190 		this.logListModel = logListModel;
    191 		testLogList.setModel( logListModel );
    192 	}
    193 }