1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.actions.iface.tools.support;
14
15 import java.awt.BorderLayout;
16 import java.awt.Dimension;
17 import java.util.ArrayList;
18 import java.util.Arrays;
19 import java.util.List;
20
21 import javax.swing.JPanel;
22 import javax.swing.JScrollPane;
23 import javax.swing.table.AbstractTableModel;
24
25 import org.jdesktop.swingx.JXTable;
26
27 import com.eviware.soapui.SoapUI;
28 import com.eviware.soapui.model.iface.Interface;
29 import com.eviware.soapui.support.UISupport;
30 import com.eviware.soapui.support.types.StringToStringMap;
31 import com.eviware.x.form.XForm.ToolkitType;
32 import com.eviware.x.impl.swing.AbstractSwingXFormField;
33
34 /***
35 * Swing JTable for holding Namespace/Package mappings
36 * @author ole.matzura
37 *
38 */
39
40 public class NamespaceTable extends AbstractSwingXFormField<JPanel>
41 {
42 private JXTable table;
43 private JScrollPane scrollPane;
44 private final Interface iface;
45 private NamespaceTableModel namespaceTableModel;
46 private boolean returnEmpty;
47
48 public NamespaceTable(Interface iface)
49 {
50 super( new JPanel(new BorderLayout()) );
51
52 this.iface = iface;
53
54 namespaceTableModel = new NamespaceTableModel();
55 table = new JXTable( namespaceTableModel );
56 table.setHorizontalScrollEnabled( true );
57 scrollPane = new JScrollPane( table );
58 scrollPane.setPreferredSize( new Dimension( 300, 150 ));
59 getComponent().add( scrollPane, BorderLayout.CENTER );
60 }
61
62 public void setReturnEmpty( boolean returnEmpty )
63 {
64 this.returnEmpty = returnEmpty;
65 }
66
67 public JPanel getComponent(ToolkitType toolkitType)
68 {
69 if( toolkitType == ToolkitType.SWT )
70 {
71 UISupport.showErrorMessage( "SWT not supported by namespace table");
72 return null;
73 }
74
75 return getComponent();
76 }
77
78 public void setValue(String value)
79 {
80 namespaceTableModel.setMappings( StringToStringMap.fromXml( value ) );
81 }
82
83 public String getValue()
84 {
85 return namespaceTableModel.getMappings().toXml();
86 }
87
88 private class NamespaceTableModel extends AbstractTableModel
89 {
90 private List<String> namespaces = new ArrayList<String>();
91 private List<String> packages;
92
93 public NamespaceTableModel()
94 {
95 try
96 {
97 if( iface != null )
98 namespaces.addAll( iface.getWsdlContext().getDefinedNamespaces());
99 }
100 catch (Exception e)
101 {
102 SoapUI.logError( e );
103 }
104
105 packages = new ArrayList<String>(Arrays.asList(new String[namespaces.size()]));
106 }
107
108 public void setMappings(StringToStringMap mapping)
109 {
110 for( int c = 0; c < namespaces.size(); c++ )
111 {
112 if( mapping.containsKey( namespaces.get( c )))
113 {
114 packages.set( c, mapping.get( namespaces.get( c )));
115 }
116 else
117 {
118 packages.set( c, "" );
119 }
120 }
121
122 fireTableDataChanged();
123 }
124
125 public int getRowCount()
126 {
127 return namespaces.size();
128 }
129
130 public int getColumnCount()
131 {
132 return 2;
133 }
134
135 public Class<?> getColumnClass(int columnIndex)
136 {
137 return String.class;
138 }
139
140 public String getColumnName(int column)
141 {
142 return column == 0 ? "Namespace" : "Package";
143 }
144
145 public boolean isCellEditable(int rowIndex, int columnIndex)
146 {
147 return columnIndex == 1;
148 }
149
150 public void setValueAt(Object aValue, int rowIndex, int columnIndex)
151 {
152 if( columnIndex == 1 )
153 packages.set( rowIndex, aValue.toString() );
154 }
155
156 public Object getValueAt(int rowIndex, int columnIndex)
157 {
158 if( columnIndex == 0 )
159 return namespaces.get( rowIndex );
160 else
161 return packages/get( rowIndex )/package-summary.html">ong> packages.get( rowIndex );
162 }
163
164 public StringToStringMap getMappings()
165 {
166 StringToStringMap result = new StringToStringMap();
167 for( int c = 0; c < namespaces.size(); c++ )
168 {
169 String pkg = packages.get(c);
170 if( returnEmpty || (pkg != null && pkg.trim().length() > 0 ))
171 {
172 result.put( namespaces.get( c ), pkg == null ? "" : pkg.trim() );
173 }
174 }
175
176 return result;
177 }
178 }
179
180
181 @Override
182 public boolean isMultiRow()
183 {
184 return true;
185 }
186 }