/*
* 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.impl.wsdl.panels.request;
import com.eviware.soapui.support.types.StringToStringMap;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import java.util.ArrayList;
import java.util.List;
/**
* TableModel for StringToString Maps
*
* @author ole.matzura
*/
public class StringToStringMapTableModel extends AbstractTableModel implements TableModel {
private StringToStringMap data;
private final String keyCaption;
private final String valueCaption;
private List<String> keyList;
private final boolean editable;
public StringToStringMapTableModel(StringToStringMap data, String keyCaption, String valueCaption, boolean editable) {
this.data = data;
this.keyCaption = keyCaption;
this.valueCaption = valueCaption;
this.editable = editable;
keyList = data == null ? new ArrayList<String>() : new ArrayList<String>(data.keySet());
}
public int getColumnCount() {
return 2;
}
public String getColumnName(int arg0) {
return arg0 == 0 ? keyCaption : valueCaption;
}
public boolean isCellEditable(int arg0, int arg1) {
return editable;
}
public Class<?> getColumnClass(int arg0) {
return String.class;
}
public void setValueAt(Object arg0, int arg1, int arg2) {
String oldKey = keyList.get(arg1);
if (arg2 == 0) {
String value = data.get(oldKey);
data.remove(oldKey);
data.put(arg0.toString(), value);
keyList.set(arg1, arg0.toString());
} else {
data.put(oldKey, arg0.toString());
}
fireTableCellUpdated(arg1, arg2);
}
public int getRowCount() {
return data == null ? 0 : data.size();
}
public Object getValueAt(int arg0, int arg1) {
String str = keyList.get(arg0);
return arg1 == 0 ? str : data.get(str);
}
public void add(String key, String value) {
if (keyList.contains(key)) {
data.put(key, value);
fireTableCellUpdated(keyList.indexOf(key), 1);
} else {
data.put(key, value);
keyList.add(key);
fireTableRowsInserted(keyList.size() - 1, keyList.size() - 1);
}
}
public void remove(int row) {
String key = keyList.get(row);
keyList.remove(row);
data.remove(key);
fireTableRowsDeleted(row, row);
}
public StringToStringMap getData() {
return new StringToStringMap(this.data == null ? new StringToStringMap() : this.data);
}
public void setData(StringToStringMap data) {
this.data = data == null ? new StringToStringMap() : data;
keyList = new ArrayList<String>(this.data.keySet());
fireTableDataChanged();
}
}