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.support.components;
14  
15  import java.awt.BorderLayout;
16  import java.awt.Dimension;
17  import java.awt.event.ActionEvent;
18  import java.awt.event.ActionListener;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import javax.swing.Action;
23  import javax.swing.BorderFactory;
24  import javax.swing.Box;
25  import javax.swing.BoxLayout;
26  import javax.swing.DefaultListModel;
27  import javax.swing.JButton;
28  import javax.swing.JList;
29  import javax.swing.JPanel;
30  import javax.swing.JScrollPane;
31  import javax.swing.event.ListSelectionEvent;
32  import javax.swing.event.ListSelectionListener;
33  
34  import com.eviware.soapui.SoapUI;
35  import com.eviware.soapui.support.UISupport;
36  import com.eviware.soapui.support.types.StringList;
37  
38  public class StringListFormComponent extends JPanel implements JFormComponent, ActionListener
39  {
40  	private DefaultListModel listModel;
41  	private JButton addButton;
42  	private JButton removeButton;
43  	private JList list;
44  	private JButton editButton;
45  	private Box buttonBox;
46  	private List<JButton> buttons = new ArrayList<JButton>();
47  
48  	public StringListFormComponent( String tooltip )
49  	{
50  		this( tooltip, false );
51  	}
52  	
53  	public StringListFormComponent( String tooltip, boolean editOnly )
54  	{
55  		super( new BorderLayout() );
56  		
57  		listModel = new DefaultListModel();
58  		list = new JList(listModel);
59  		list.setToolTipText( tooltip );
60  		JScrollPane scrollPane = new JScrollPane( list);
61  		scrollPane.setPreferredSize( new Dimension( 300, 70 ) );
62  		add( scrollPane, BorderLayout.CENTER);
63  		buttonBox = new Box(BoxLayout.Y_AXIS);
64  		buttonBox.setBorder( BorderFactory.createEmptyBorder( 0, 5, 0, 0 ));
65  		
66  		if( !editOnly )
67  		{
68  			addButton = new JButton( "Add..");
69  			addButton.addActionListener( this );
70  			buttonBox.add( addButton );
71  			buttonBox.add( Box.createVerticalStrut( 5 ));
72  		}
73  		
74  		editButton = new JButton( "Edit..");
75  		editButton.addActionListener( this );
76  		buttons.add( editButton );
77  		buttonBox.add( editButton );
78  		
79  		if( !editOnly )
80  		{
81  			buttonBox.add( Box.createVerticalStrut( 5 ));
82  			removeButton = new JButton( "Remove.." );
83  			removeButton.addActionListener( this );
84  			buttonBox.add( removeButton );
85  			buttons.add( removeButton );
86  		}
87  			
88  		add( buttonBox, BorderLayout.EAST );
89  		
90  		list.addListSelectionListener( new ListSelectionListener() {
91  
92  			public void valueChanged( ListSelectionEvent e )
93  			{
94  				setButtonState();
95  			}} );
96  		
97  		setButtonState();
98  	}
99  	
100 	public void addButton( Action action, boolean requireSelection )
101 	{
102 		buttonBox.add( Box.createVerticalStrut( 5 ));
103 		JButton button = new JButton( action );
104 		buttonBox.add( button);
105 		
106 		if( requireSelection )
107 		{
108 			buttons.add( button );
109 			setButtonState();
110 		}
111 	}
112 	
113 	public void setValue(String value)
114 	{
115 		listModel.clear();
116 
117 		try
118 		{
119 			StringList stringList = StringList.fromXml( value );
120 			
121 			String[] files = stringList.toStringArray();
122 			for( String file : files )
123 				if( file.trim().length() > 0)
124 					listModel.addElement( file );
125 		}
126 		catch( Exception e )
127 		{
128 			SoapUI.logError( e );
129 		}
130 	}
131 
132 	public String getValue()
133 	{
134 		StringList result = new StringList( listModel.toArray() );
135 		return result.toXml();
136 	}
137 
138 	public JList getList()
139 	{
140 		return list;
141 	}
142 	
143 	public void actionPerformed( ActionEvent arg0 )
144 	{
145 		if( arg0.getSource() == addButton )
146 		{
147 			String value = UISupport.prompt( "Specify value to add", "Add..", (String)null );
148          if( value != null )
149 		   {
150 		     	listModel.addElement( value );
151 		   }
152 		}
153 		else
154 		{
155 			int selectedIndex = list.getSelectedIndex();
156 			
157 			if( arg0.getSource() == removeButton && selectedIndex != -1 )
158 			{
159 				Object elm = listModel.getElementAt( selectedIndex );
160 				if( UISupport.confirm( "Remove [" + elm.toString() + "] from list", "Remove" ))
161 				{
162 					listModel.remove( selectedIndex );
163 				}
164 			}
165 			else if( arg0.getSource() == editButton && selectedIndex != -1 )
166 			{
167 				String elm = ( String ) listModel.getElementAt( selectedIndex );
168 				String value = UISupport.prompt( "Specify value", "Edit..", elm );
169 				
170 				if( value != null )
171 				{
172 					listModel.setElementAt( value, selectedIndex );
173 				}
174 			}
175 		}
176 	}
177 
178 	public void setButtonState()
179 	{
180 		boolean b = list.getSelectedIndex() != -1;
181 		for( JButton button : buttons )
182 			button.setEnabled( b );
183 	}
184 
185 	public String [] getData()
186 	{
187 		String [] result = new String[listModel.size()];
188 		for( int c = 0; c < result.length; c++ )
189 			result[c] = ( String ) listModel.get( c );
190 		
191 		return result;
192 	}
193 
194 	public void setData( String[] strings )
195 	{
196 		listModel.clear();
197 		for( String str : strings )
198 		{
199 			listModel.addElement( str );
200 		}
201 	}
202 }