001 /****************************************************************************** 002 * Copyright (C) MActor Developers. All rights reserved. * 003 * ---------------------------------------------------------------------------* 004 * This file is part of MActor. * 005 * * 006 * MActor is free software; you can redistribute it and/or modify * 007 * it under the terms of the GNU General Public License as published by * 008 * the Free Software Foundation; either version 2 of the License, or * 009 * (at your option) any later version. * 010 * * 011 * MActor is distributed in the hope that it will be useful, * 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 014 * GNU General Public License for more details. * 015 * * 016 * You should have received a copy of the GNU General Public License * 017 * along with MActor; if not, write to the Free Software * 018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * 019 ******************************************************************************/ 020 package org.mactor.ui.gui.testrunner; 021 022 import java.awt.BorderLayout; 023 import java.awt.FlowLayout; 024 import java.util.LinkedList; 025 import java.util.List; 026 import java.util.Map; 027 import java.util.Map.Entry; 028 029 import javax.swing.AbstractAction; 030 import javax.swing.JButton; 031 import javax.swing.JLabel; 032 import javax.swing.JPanel; 033 import javax.swing.JScrollPane; 034 import javax.swing.JSplitPane; 035 import javax.swing.SwingUtilities; 036 037 import org.mactor.framework.MactorException; 038 import org.mactor.framework.TestFeedbackListener; 039 import org.mactor.framework.TestRunner; 040 import org.mactor.framework.data.DataTable; 041 import org.mactor.framework.spec.TestSpec; 042 import org.mactor.ui.gui.GuiUtil; 043 import org.mactor.ui.gui.Stoppable; 044 import org.mactor.ui.gui.project.ProjectTreeNode; 045 import org.mactor.ui.gui.project.editors.ParamsPanel; 046 import org.mactor.ui.gui.project.editors.SimpleFormPanel; 047 import org.mactor.ui.gui.testrunner.RunningTestTreePanel.RunningTestModel; 048 049 public class SingelTestPanel extends JPanel implements Stoppable { 050 RunningTestTreePanel rtPanel; 051 TestRunner tr; 052 ParamsPanel pPanel = new ParamsPanel(); 053 RunningTestModel rtModel = new RunningTestModel(); 054 TestFeedbackListener tfl = new TestFeedbackListener() { 055 public void onNodeEvent(final org.mactor.framework.TestEvent event, org.mactor.framework.TestContext context) { 056 if (event.isStartEventType() || event.isTestCompleteEvent()) { 057 SwingUtilities.invokeLater(new Runnable() { 058 public void run() { 059 if (event.isTestCompleteEvent()) { 060 runTest.setEnabled(true); 061 stopTest.setEnabled(false); 062 } 063 rtModel.addEvent(event); 064 rtPanel.setModel(rtModel); 065 }; 066 }); 067 } 068 }; 069 public void onTestRunCompleted(String testRunInstanceId, int succededCount, int failedCount) { 070 // TODO Auto-generated method stub 071 } 072 }; 073 JButton runTest = new JButton(new AbstractAction("Run Test") { 074 public void actionPerformed(java.awt.event.ActionEvent e) { 075 rtModel.reset(); 076 rtPanel.setModel(rtModel); 077 try { 078 tr = new TestRunner(1, test, getDataTable(), tfl); 079 tr.start(); 080 runTest.setEnabled(false); 081 stopTest.setEnabled(true); 082 } catch (MactorException me) { 083 GuiUtil.showGuiError(SingelTestPanel.this, me); 084 } 085 }; 086 }); 087 JButton stopTest = new JButton(new AbstractAction("Stop Test") { 088 public void actionPerformed(java.awt.event.ActionEvent e) { 089 stop(); 090 }; 091 }); 092 JButton addRowButton = new JButton(new AbstractAction("Add Param") { 093 public void actionPerformed(java.awt.event.ActionEvent e) { 094 pPanel.addNewRow(); 095 }; 096 }); 097 DataTable getDataTable() { 098 DataTable dt = new DataTable(); 099 Map<String, String> params = pPanel.getParams(); 100 if (params.size() == 0) { 101 dt.addColumn("dummy_"); 102 dt.addRow(new String[] { "" }); 103 } else { 104 List<String> values = new LinkedList<String>(); 105 for (Entry<String, String> e : params.entrySet()) { 106 dt.addColumn(e.getKey()); 107 values.add(e.getValue()); 108 } 109 dt.addRow(values); 110 } 111 return dt; 112 } 113 TestSpec test; 114 public SingelTestPanel(ProjectTreeNode node) throws MactorException { 115 super(new BorderLayout()); 116 this.test = TestSpec.loadFromFile(node.getName()); 117 SimpleFormPanel sf = new SimpleFormPanel(); 118 rtPanel = new RunningTestTreePanel(node); 119 sf.add(new JLabel("Params:")); 120 sf.add(pPanel); 121 sf.add(addRowButton); 122 JPanel p1 = new JPanel(new BorderLayout()); 123 p1.add(sf, BorderLayout.NORTH); 124 JScrollPane sp1 = new JScrollPane(p1); 125 JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp1, rtPanel); 126 sp.setDividerLocation(400); 127 add(sp, BorderLayout.CENTER); 128 JPanel buttonPanel = new JPanel(new FlowLayout()); 129 buttonPanel.add(runTest); 130 buttonPanel.add(stopTest); 131 stopTest.setEnabled(false); 132 add(buttonPanel, BorderLayout.NORTH); 133 } 134 public void stop() { 135 if (tr != null) { 136 tr.stop(); 137 tr = null; 138 } 139 runTest.setEnabled(false); 140 stopTest.setEnabled(true); 141 } 142 }