package com.c2kernel.gui.tabs.outcome.form.field; import java.util.ArrayList; import java.util.Iterator; import java.util.StringTokenizer; import javax.swing.table.AbstractTableModel; import org.exolab.castor.xml.schema.SimpleType; import com.c2kernel.gui.tabs.outcome.form.OutcomeStructure; import com.c2kernel.utils.Language; /************************************************************************** * * $Revision: 1.2 $ * $Date: 2006/05/24 07:51:53 $ * * Copyright (C) 2003 CERN - European Organization for Nuclear Research * All rights reserved. **************************************************************************/ public class ArrayTableModel extends AbstractTableModel { ArrayList contents = new ArrayList(); Class type; int numCols = 1; boolean readOnly = false; public ArrayTableModel(SimpleType type) { super(); this.type = OutcomeStructure.getJavaClass(type.getTypeCode()); } public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } public void setData(String data) { contents.clear(); StringTokenizer tok = new StringTokenizer(data); while(tok.hasMoreTokens()) contents.add(OutcomeStructure.getTypedValue(tok.nextToken(), type)); fireTableStructureChanged(); } public String getData() { if (contents.size() == 0) return ""; Iterator iter = contents.iterator(); StringBuffer result = new StringBuffer(iter.next().toString()); while (iter.hasNext()) result.append(" ").append(iter.next().toString()); return result.toString(); } public void addField() { contents.add(OutcomeStructure.getTypedValue("", type)); fireTableStructureChanged(); } public void removeField() { contents.remove(contents.size()-1); fireTableStructureChanged(); } @Override public Class getColumnClass(int columnIndex) { return type; } @Override public int getColumnCount() { return numCols; } public int getArrayLength() { return contents.size(); } public void setColumnCount(int newCols) { numCols = newCols; fireTableStructureChanged(); } @Override public String getColumnName(int column) { return Language.translate("Value"); } @Override public int getRowCount() { return (contents.size()/numCols)+1; } @Override public Object getValueAt(int arg0, int arg1) { int index = arg1+(arg0 * numCols); if (index >= contents.size()) return null; return contents.get(arg1+(arg0 * numCols)); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex+(rowIndex*numCols) > contents.size()-1) return false; return !readOnly; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { contents.set(columnIndex+(rowIndex*numCols), aValue); } }