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.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.mock.WsdlMockResponse;
24  import com.eviware.soapui.impl.wsdl.support.WsdlAttachment;
25  import com.eviware.soapui.model.iface.Attachment;
26  
27  /***
28   * TableModel for MockAttachments in a WsdlMockResponse
29   * 
30   * @author ole.matzura
31   */
32  
33  public class MockAttachmentTableModel extends AbstractTableModel implements PropertyChangeListener, AttachmentTableModel {
34  	
35  	private boolean isResponse = false;
36  	private WsdlMockResponse mockResponse;
37  	
38  	/*** Creates a new instance of AttachmentTableModel */
39  	public MockAttachmentTableModel(WsdlMockResponse mockOperation2, boolean isResponse) {
40  		this.mockResponse = mockOperation2;
41  		this.isResponse = isResponse;
42  		
43  		mockResponse.addPropertyChangeListener( this );
44  	}
45  	
46  	public void release()
47  	{
48  		mockResponse.removePropertyChangeListener( this );
49  	}
50  	
51  	public void addFile( File file, boolean cacheInRequest) throws IOException 
52  	{
53  		if (isResponse)
54  		{
55  			Attachment attachment = mockResponse.attachFile( file, cacheInRequest );
56  			attachment.setContentType( ContentTypeHandler.getContentTypeFromFilename(file.getName()));
57  			this.fireTableRowsInserted(mockResponse.getAttachmentCount(), mockResponse.getAttachmentCount());
58  		}
59  	}
60  		
61  	public void removeAttachment(int[] rowIndexes) {
62  		Arrays.sort(rowIndexes);
63  		for (int i = rowIndexes.length-1; i >=0; i--)
64  			removeAttachment(rowIndexes[i]);
65  	}
66  	
67  	public void removeAttachment(int rowIndex) {
68  		if (isResponse)
69  		{
70  			mockResponse.removeAttachment(mockResponse.getAttachmentAt(rowIndex));
71  			this.fireTableRowsDeleted(rowIndex, rowIndex);
72  		}
73  	}
74  	
75  	public int getRowCount() {
76  		if (isResponse)
77  			return mockResponse.getAttachmentCount();
78  		else {
79  			try {
80  				// Response may not exist yet and attachments may be null
81  				return mockResponse.getMockResult().getMockRequest().getRequestAttachments().length;
82  			} catch (Exception e) {
83  				return 0;
84  			}
85  		}
86  	}
87  	
88  	public int getColumnCount() {
89  		return isResponse ? 6 : 5;
90  	}
91  	
92  	public Attachment getAttachmentAt( int rowIndex )
93  	{
94  		if (isResponse)
95  			return mockResponse.getAttachmentAt(rowIndex);
96  		else
97  			return mockResponse.getMockResult().getMockRequest().getRequestAttachments()[rowIndex];
98  	}
99  	
100 	public Object getValueAt(int rowIndex, int columnIndex) {
101 		if (rowIndex > getRowCount())
102 			return null;
103 		
104 		Attachment att = null;
105 		if (isResponse)
106 			att = mockResponse.getAttachmentAt(rowIndex);
107 		else
108 			att = mockResponse.getMockResult().getMockRequest().getRequestAttachments()[rowIndex];
109 		
110 		switch (columnIndex) {
111 			case 0:
112 				return att.getName();
113 			case 1:
114 				return att.getContentType();
115 			case 2:
116 				return att.getSize();
117 			case 3:
118 				return att.getPart();
119 			case 4:
120 				return att.getAttachmentType();
121 			case 5:
122 				return att.getContentID();
123 			default:
124 				return null;
125 		}
126 	}
127 	
128 	public int findColumn(String columnName) {
129 		if (columnName.equals("Name"))
130 			return 0;
131 		else if (columnName.equals("Content type"))
132 			return 1;
133 		else if (columnName.equals("Size"))
134 			return 2;
135 		else if (columnName.equals("Part"))
136 			return 3;
137 		else if (columnName.equals("Type"))
138 			return 4;
139 		
140 		return -1;
141 	}
142 	
143 	public String getColumnName(int column) {
144 		if (column == 0)
145 			return "Name";
146 		else if (column == 1)
147 			return "Content type";
148 		else if (column == 2)
149 			return "Size";
150 		else if (column == 3)
151 			return "Part";
152 		else if (column == 4)
153 			return "Type";
154 		else if (column == 5)
155 			return "ContentID";
156 		else
157 			return null;
158 	}
159 	
160 	public boolean isCellEditable(int rowIndex, int columnIndex) {
161 		return isResponse && (columnIndex == 1 || columnIndex == 3 || columnIndex == 5 );
162 	}
163 	
164 	public void setValueAt(Object aValue, int rowIndex, int columnIndex)
165 	{
166 		if( !isResponse )
167 			return;
168 		
169 		WsdlAttachment att = ( WsdlAttachment ) mockResponse.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 	
189 }