/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.support.editor.inspectors.attachments; import com.eviware.soapui.impl.wsdl.AttachmentContainer; import com.eviware.soapui.impl.wsdl.MutableAttachmentContainer; import com.eviware.soapui.impl.wsdl.support.WsdlAttachment; import com.eviware.soapui.model.iface.Attachment; import javax.swing.table.AbstractTableModel; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.util.Arrays; /** * TableModel for Request Attachments * * @author emibre */ public class AttachmentsTableModel extends AbstractTableModel implements PropertyChangeListener, AttachmentTableModel { private AttachmentContainer container; /** * Creates a new instance of AttachmentTableModel */ public AttachmentsTableModel(AttachmentContainer request) { this.container = request; this.container.addAttachmentsChangeListener(this); } public void release() { container.removeAttachmentsChangeListener(this); } /* * (non-Javadoc) * * @see * com.eviware.soapui.impl.wsdl.panels.attachments.AttachmentTableModel#addFile * (java.io.File, boolean) */ public void addFile(File file, boolean cacheInRequest) throws IOException { if (container instanceof MutableAttachmentContainer) { ((MutableAttachmentContainer) container).attachFile(file, cacheInRequest); } this.fireTableRowsInserted(container.getAttachmentCount(), container.getAttachmentCount()); } public void removeAttachment(int[] rowIndexes) { Arrays.sort(rowIndexes); for (int i = rowIndexes.length - 1; i >= 0; i--) { removeAttachment(rowIndexes[i]); } } public void removeAttachment(int rowIndex) { if (container instanceof MutableAttachmentContainer) { ((MutableAttachmentContainer) container).removeAttachment(container.getAttachmentAt(rowIndex)); this.fireTableRowsDeleted(rowIndex, rowIndex); } } public int getRowCount() { return container.getAttachmentCount(); } public int getColumnCount() { return container instanceof MutableAttachmentContainer ? 7 : 6; } public Attachment getAttachmentAt(int rowIndex) { return container.getAttachmentAt(rowIndex); } public Object getValueAt(int rowIndex, int columnIndex) { if (rowIndex > getRowCount()) { return null; } Attachment att = container.getAttachmentAt(rowIndex); switch (columnIndex) { case 0: return att.isCached() ? att.getName() : att.getUrl(); case 1: return att.getContentType(); case 2: return att.getSize(); case 3: return att.getPart(); case 4: return att.getAttachmentType(); case 5: return att.getContentID(); case 6: return att.isCached(); default: return null; } } public int findColumn(String columnName) { if (columnName.equals("Name")) { return 0; } else if (columnName.equals("Content type")) { return 1; } else if (columnName.equals("Size")) { return 2; } else if (columnName.equals("Part")) { return 3; } else if (columnName.equals("Type")) { return 4; } return -1; } public String getColumnName(int column) { if (column == 0) { return "Name"; } else if (column == 1) { return "Content type"; } else if (column == 2) { return "Size"; } else if (column == 3) { return "Part"; } else if (column == 4) { return "Type"; } else if (column == 5) { return "ContentID"; } else if (column == 6) { return "Cached"; } else { return null; } } @Override public Class<?> getColumnClass(int columnIndex) { return columnIndex == 6 ? Boolean.class : super.getColumnClass(columnIndex); } public boolean isCellEditable(int rowIndex, int columnIndex) { return container instanceof MutableAttachmentContainer && (columnIndex == 0 || columnIndex == 1 || columnIndex == 3 || columnIndex == 5); } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (!(container instanceof MutableAttachmentContainer)) { return; } WsdlAttachment att = (WsdlAttachment) container.getAttachmentAt(rowIndex); if (columnIndex == 0) { if (att.isCached()) { att.setName((String) aValue); } else { att.setUrl(aValue.toString()); } } else if (columnIndex == 1) { att.setContentType((String) aValue); } else if (columnIndex == 3) { att.setPart((String) aValue); } else if (columnIndex == 5) { att.setContentID((String) aValue); } fireTableRowsUpdated(rowIndex, rowIndex); } /** * Update table when attachments or response changes */ public void propertyChange(PropertyChangeEvent evt) { fireTableDataChanged(); } }