1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.request.components.editor.inspectors.attachments;
14
15 import java.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
17 import java.io.File;
18 import java.io.IOException;
19 import java.util.Arrays;
20
21 import javax.swing.table.AbstractTableModel;
22
23 import com.eviware.soapui.impl.wsdl.AttachmentContainer;
24 import com.eviware.soapui.impl.wsdl.support.WsdlAttachment;
25 import com.eviware.soapui.model.iface.Attachment;
26
27 /***
28 * TableModel for Request Attachments
29 *
30 * @author emibre
31 */
32
33 public class AttachmentsTableModel extends AbstractTableModel implements PropertyChangeListener,
34 AttachmentTableModel
35 {
36
37 AttachmentContainer container;
38
39 /*** Creates a new instance of AttachmentTableModel */
40 public AttachmentsTableModel( AttachmentContainer request )
41 {
42 this.container = request;
43
44 this.container.addAttachmentsChangeListener( this );
45 }
46
47 public void release()
48 {
49 container.removeAttachmentsChangeListener( this );
50 }
51
52
53
54
55
56
57
58 public void addFile( File file, boolean cacheInRequest ) throws IOException
59 {
60 if( !container.isReadOnly() )
61 {
62 container.attachFile( file, cacheInRequest );
63 }
64
65 this.fireTableRowsInserted( container.getAttachmentCount(), container.getAttachmentCount() );
66 }
67
68 public void removeAttachment( int[] rowIndexes )
69 {
70 Arrays.sort( rowIndexes );
71 for( int i = rowIndexes.length - 1; i >= 0; i-- )
72 removeAttachment( rowIndexes[i] );
73 }
74
75 public void removeAttachment( int rowIndex )
76 {
77 if( !container.isReadOnly() )
78 {
79 container.removeAttachment( container.getAttachmentAt( rowIndex ) );
80 this.fireTableRowsDeleted( rowIndex, rowIndex );
81 }
82 }
83
84 public int getRowCount()
85 {
86 return container.getAttachmentCount();
87 }
88
89 public int getColumnCount()
90 {
91 return !container.isReadOnly() ? 6 : 5;
92 }
93
94 public Attachment getAttachmentAt( int rowIndex )
95 {
96 return container.getAttachmentAt( rowIndex );
97 }
98
99 public Object getValueAt( int rowIndex, int columnIndex )
100 {
101 if( rowIndex > getRowCount() )
102 return null;
103
104 Attachment att = container.getAttachmentAt( rowIndex );
105
106 switch( columnIndex )
107 {
108 case 0:
109 return att.getName();
110 case 1:
111 return att.getContentType();
112 case 2:
113 return att.getSize();
114 case 3:
115 return att.getPart();
116 case 4:
117 return att.getAttachmentType();
118 case 5:
119 return att.getContentID();
120 default:
121 return null;
122 }
123 }
124
125 public int findColumn( String columnName )
126 {
127 if( columnName.equals( "Name" ) )
128 return 0;
129 else if( columnName.equals( "Content type" ) )
130 return 1;
131 else if( columnName.equals( "Size" ) )
132 return 2;
133 else if( columnName.equals( "Part" ) )
134 return 3;
135 else if( columnName.equals( "Type" ) )
136 return 4;
137
138 return -1;
139 }
140
141 public String getColumnName( int column )
142 {
143 if( column == 0 )
144 return "Name";
145 else if( column == 1 )
146 return "Content type";
147 else if( column == 2 )
148 return "Size";
149 else if( column == 3 )
150 return "Part";
151 else if( column == 4 )
152 return "Type";
153 else if( column == 5 )
154 return "ContentID";
155 else
156 return null;
157 }
158
159 public boolean isCellEditable( int rowIndex, int columnIndex )
160 {
161 return !container.isReadOnly() && ( columnIndex == 1 || columnIndex == 3 || columnIndex == 5 );
162 }
163
164 public void setValueAt( Object aValue, int rowIndex, int columnIndex )
165 {
166 if( !!container.isReadOnly() )
167 return;
168
169 WsdlAttachment att = ( WsdlAttachment ) container.getAttachmentAt( rowIndex );
170 if( columnIndex == 1 )
171 att.setContentType( ( String ) aValue );
172 else if( columnIndex == 3 )
173 att.setPart( ( String ) aValue );
174 else if( columnIndex == 5 )
175 att.setContentID( ( String ) aValue );
176
177 fireTableRowsUpdated( rowIndex, rowIndex );
178 }
179
180 /***
181 * Update table when attachments or response changes
182 */
183
184 public void propertyChange( PropertyChangeEvent evt )
185 {
186 fireTableDataChanged();
187 }
188 }