package com.c2kernel.gui.graph.view; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import javax.swing.JOptionPane; import javax.swing.event.TableModelEvent; import javax.swing.table.AbstractTableModel; import com.c2kernel.utils.Language; /************************************************************************** * * $Revision: 1.4 $ * $Date: 2005/08/02 07:50:10 $ * * Copyright (C) 2003 CERN - European Organization for Nuclear Research * All rights reserved. **************************************************************************/ public class PropertyTableModel extends AbstractTableModel { private final String[] mColumnNames = { Language.translate("Name"), Language.translate("Value") }; HashMap sourceMap = new HashMap(); ArrayList sortedNameList = new ArrayList(); boolean isEditable = false; public PropertyTableModel() { super(); } @Override public int getColumnCount() { return mColumnNames.length; } @Override public String getColumnName(int col) { return mColumnNames[col]; } @Override public int getRowCount() { synchronized (sourceMap) { return sourceMap.size(); } } @Override public Object getValueAt(int rowIndex, int colIndex) { synchronized (sourceMap) { String rowName = sortedNameList.get(rowIndex); if (colIndex == 0) return rowName; else return sourceMap.get(rowName); } } @Override public void setValueAt(Object value, int rowIndex, int colIndex) { synchronized (sourceMap) { if (colIndex == 0) return; String rowName = sortedNameList.get(rowIndex); Class oldElement = sourceMap.get(rowName).getClass(); if (oldElement == Double.class && value.getClass() == String.class) try { value = Double.valueOf((String)value); } catch (Exception ex) { } if (value.getClass() != oldElement) JOptionPane.showMessageDialog(null, "This property should contain a "+oldElement.getName()+" not a "+value.getClass().getName(), "Incorrect datatype", JOptionPane.ERROR_MESSAGE); else { sourceMap.put(rowName, value); fireTableCellUpdated(rowIndex, colIndex); } } } public void setMap(HashMap props) { synchronized (sourceMap) { sourceMap = props; sortedNameList = new ArrayList(props.size()); for (String string : props.keySet()) sortedNameList.add(string); Collections.sort(sortedNameList, new Comparator() { @Override public int compare(String o1, String o2) { return (o1.compareToIgnoreCase(o2)); } }); } fireTableChanged(new TableModelEvent(this)); } @Override public boolean isCellEditable(int row, int col) { return col==1 && isEditable; } /** * @return Returns the isEditable. */ public boolean isEditable() { return isEditable; } /** * @param isEditable The isEditable to set. */ public void setEditable(boolean isEditable) { this.isEditable = isEditable; } /** * @param text * @param object */ public void addProperty(String text, Object object) { sourceMap.put(text,object); setMap(sourceMap); } /** * @param object */ public void delProperty(Object propName) { sourceMap.remove(propName); setMap(sourceMap); } }