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.teststeps.support;
14  
15  import java.beans.PropertyChangeEvent;
16  import java.beans.PropertyChangeListener;
17  
18  import javax.swing.AbstractListModel;
19  import javax.swing.ComboBoxModel;
20  
21  import com.eviware.soapui.impl.wsdl.teststeps.WsdlGotoTestStep.GotoCondition;
22  import com.eviware.soapui.model.support.TestSuiteListenerAdapter;
23  import com.eviware.soapui.model.testsuite.TestCase;
24  import com.eviware.soapui.model.testsuite.TestStep;
25  
26  /***
27   * ComboBox-model used by combo in the WsdlGotoTestStep desktop panel for selecting a conditions 
28   * target teststep
29   * 
30   * @author Ole.Matzura
31   */
32  
33  public class GotoTestStepsComboBoxModel extends AbstractListModel implements
34  		ComboBoxModel
35  {
36  	private final TestCase testCase;
37  	private GotoCondition condition;
38  	private InternalTestSuiteListener testSuiteListener = new InternalTestSuiteListener();;
39  	private InternalPropertyChangeListener propertyChangeListener = new InternalPropertyChangeListener();
40  
41  	public GotoTestStepsComboBoxModel( TestCase testCase, GotoCondition condition )
42  	{
43  		super();
44  		this.testCase = testCase;
45  		this.condition = condition;
46  		
47  		testCase.getTestSuite().addTestSuiteListener( testSuiteListener );
48  		
49  		if( condition != null )
50  			condition.addPropertyChangeListener( GotoCondition.TARGET_STEP_PROPERTY, propertyChangeListener );
51  		
52  		for( int c = 0; c < testCase.getTestStepCount(); c++ )
53  		{
54  			testCase.getTestStepAt( c ).addPropertyChangeListener( TestStep.NAME_PROPERTY, propertyChangeListener );
55  		}
56  	}
57  	
58  	public GotoCondition getCondition()
59  	{
60  		return condition;
61  	}
62  
63  	public void setCondition(GotoCondition condition)
64  	{
65  		if( this.condition != null )
66  			this.condition.removePropertyChangeListener( GotoCondition.TARGET_STEP_PROPERTY, propertyChangeListener );
67  		
68  		this.condition = condition;
69  		
70  		if( condition != null )
71  			condition.addPropertyChangeListener( GotoCondition.TARGET_STEP_PROPERTY, propertyChangeListener );
72  		
73  		fireContentsChanged( this, 0, getSize() );
74  	}
75  
76  	public void setSelectedItem(Object anItem)
77  	{
78  		if( condition != null )
79  			condition.setTargetStep( anItem == null ? null : anItem.toString() );
80  	}
81  
82  	public Object getSelectedItem()
83  	{
84  		return condition == null ? null : condition.getTargetStep();
85  	}
86  
87  	public int getSize()
88  	{
89  		return testCase.getTestStepCount();
90  	}
91  
92  	public Object getElementAt(int index)
93  	{
94  		return testCase.getTestStepAt( index ).getName();
95  	}
96  	
97  	private class InternalTestSuiteListener extends TestSuiteListenerAdapter
98  	{
99  		public void testStepAdded(TestStep testStep, int index)
100 		{
101 			if( testStep.getTestCase() == testCase )
102 			{
103 				fireContentsChanged( GotoTestStepsComboBoxModel.this, 0, getSize() );
104 			}
105 		}
106 
107 		public void testStepRemoved(TestStep testStep, int index)
108 		{
109 			if( testStep.getTestCase() == testCase )
110 			{
111 				fireContentsChanged( GotoTestStepsComboBoxModel.this, 0, getSize() );
112 			}
113 		}
114 	}
115 	
116 	private class InternalPropertyChangeListener implements PropertyChangeListener
117 	{
118 		public void propertyChange(PropertyChangeEvent evt)
119 		{
120 			fireContentsChanged( GotoTestStepsComboBoxModel.this, 0, getSize() );
121 		}
122 	}
123 }