/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * AttributeTableModel.java * * Created on 24. Juni 2004, 16:53 */ package Sirius.navigator.ui.attributes; import org.apache.log4j.Logger; import java.util.*; import javax.swing.table.*; /** * DOCUMENT ME! * * @author pascal * @version $Revision$, $Date$ */ class AttributeTableModel extends AbstractTableModel { //~ Static fields/initializers --------------------------------------------- private static final int MIN_ROWS = 0; //~ Instance fields -------------------------------------------------------- private final Logger logger = Logger.getLogger(this.getClass()); private final LinkedList metaAttributes = new LinkedList(); private final String[] columnNames; /** Holds value of property editable. */ private boolean editable; /** Utility field used by bound properties. */ private java.beans.PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this); /** Holds value of property showInvisibleAttributes. */ private boolean showInvisibleAttributes; //~ Constructors ----------------------------------------------------------- /** * Konstruktor. ruft den Konstruktor der Superklasse auf. * * @param columnNames DOCUMENT ME! */ public AttributeTableModel(final String[] columnNames) { this.columnNames = (columnNames.length > 1) ? columnNames : new String[2]; this.showInvisibleAttributes = false; } //~ Methods ---------------------------------------------------------------- /* * Ueberschreibt boolen isCellEditable(), damit die Zellen der Tabelle nict editiert werden koennen. */ @Override public boolean isCellEditable(final int row, final int column) { // if(this.editable && column == 1 && row < this.metaAttributes.size()) // { // return true; // } return false; } /** * Loescht den Inhalt der Tabelle. Die aktuelle Anzahl der Zeilen bleibt erhalten. */ public void clear() { // if(logger.isDebugEnabled())logger.debug("clear attribute table model"); this.metaAttributes.clear(); this.fireTableDataChanged(); } @Override public Class getColumnClass(final int column) { return java.lang.Object.class; /*if(column == 0) * { return java.lang.String.class; } else { return java.lang.Object.class;}*/ } /** * DOCUMENT ME! * * @param row DOCUMENT ME! * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ public Class getClassAt(final int row, final int column) { if (row < this.metaAttributes.size()) { if (column == 0) { return String.class; } else { /*Sirius.server.localserver.attribute.Attribute metaAttribute = * (Sirius.server.localserver.attribute.Attribute)this.metaAttributes.get(row); * Object value = metaAttribute.getValue(); if(value!= null) { return value.getClass();}*/ return Sirius.server.localserver.attribute.ObjectAttribute.class; } } return null; } /** * DOCUMENT ME! * * @param row DOCUMENT ME! * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ public TableCellEditor getCellEditor(final int row, final int column) { return null; } @Override public int getColumnCount() { return 2; } @Override public String getColumnName(final int column) { return this.columnNames[column]; } /** * Liefert einen gefakten row c. * * @return DOCUMENT ME! */ @Override public int getRowCount() { return (this.metaAttributes.size() < MIN_ROWS) ? MIN_ROWS : this.metaAttributes.size(); } @Override public Object getValueAt(final int row, final int column) { if (row < this.metaAttributes.size()) { final Sirius.server.localserver.attribute.Attribute metaAttribute = (Sirius.server.localserver.attribute.Attribute)this.metaAttributes.get(row); /*if(this.isShowInvisibleAttributes() || metaAttribute.isVisible()) * { if(column == 0) { return metaAttribute.getName(); } else { return metaAttribute; } } else * if(logger.isDebugEnabled()) { logger.warn("ignoring invisible attribute '" + metaAttribute.getName() + * "'");}*/ if (column == 0) { return metaAttribute.getName(); } else { return metaAttribute; } } return null; } @Override public void setValueAt(final Object aValue, final int row, final int column) { if ((column == 1) && (row < this.metaAttributes.size())) { final Sirius.server.localserver.attribute.Attribute metaAttribute = (Sirius.server.localserver.attribute.Attribute)this.metaAttributes.get(row); metaAttribute.setValue(aValue); // propertyChangeSupport.firePropertyChange("changed", new Boolean(false), new Boolean(true)); this.fireTableCellUpdated(row, column); } } /** * DOCUMENT ME! * * @param metaAttributes DOCUMENT ME! */ public void setAttributes(final Collection metaAttributes) { this.metaAttributes.clear(); if (this.showInvisibleAttributes) { logger.warn("showing invisible attributes"); // NOI18N this.metaAttributes.addAll(metaAttributes); } else { logger.warn("ignoring invisible attributes"); // NOI18N final Iterator iterator = metaAttributes.iterator(); while (iterator.hasNext()) { final Sirius.server.localserver.attribute.Attribute attribute = (Sirius.server.localserver.attribute.Attribute)iterator.next(); if (attribute.isVisible()) { this.metaAttributes.add(attribute); } } } this.fireTableDataChanged(); } /** * Liefert den Editor, der in MetaAttribute definiert ist. * * @param row DOCUMENT ME! * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ public Class getCellRendererClass(final int row, final int column) { if ((column == 1) && (row < this.metaAttributes.size())) { // return Sirius.server.localserver.attribute.ObjectAttribute.class; // Sirius.server.localserver.attribute.Attribute metaAttribute = // (Sirius.server.localserver.attribute.Attribute)this.metaAttributes.get(row); } return null; } /** * Liefert den Renderer, der in MetaAttribute definiert ist. * * @param row DOCUMENT ME! * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ /*public Class getCellEditorClass(int row, int column) * { if(this.isMetaAttribute(row, column) { } else if(logger.isDebug) if(column == 1 && row < * this.metaAttributes.size()) { Sirius.server.localserver.attribute.Attribute metaAttribute = * (Sirius.server.localserver.attribute.Attribute)this.metaAttributes.get(row); } return null;}*/ /** * Returns true, if the Object at the selected position is Meta Attribute. * * @param row DOCUMENT ME! * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ protected boolean isMetaAttribute(final int row, final int column) { return (column == 1) & (row < this.metaAttributes.size()); } /** * Getter for property editable. * * @return Value of property editable. */ public boolean isEditable() { return this.editable; } /** * Setter for property editable. * * @param editable New value of property editable. */ public void setEditable(final boolean editable) { this.editable = editable; // switched to editing mode: reset changed to false // this.changed = this.editable ? false : this.changed; } /** * Adds a PropertyChangeListener to the listener list. * * @param l The listener to add. */ public void addPropertyChangeListener(final java.beans.PropertyChangeListener l) { propertyChangeSupport.addPropertyChangeListener(l); } /** * Removes a PropertyChangeListener from the listener list. * * @param l The listener to remove. */ public void removePropertyChangeListener(final java.beans.PropertyChangeListener l) { propertyChangeSupport.removePropertyChangeListener(l); } /** * Getter for property showInvisibleAttributes. * * @return Value of property showInvisibleAttributes. */ public boolean isShowInvisibleAttributes() { return this.showInvisibleAttributes; } /** * Setter for property showInvisibleAttributes. * * @param showInvisibleAttributes New value of property showInvisibleAttributes. */ public void setShowInvisibleAttributes(final boolean showInvisibleAttributes) { this.showInvisibleAttributes = showInvisibleAttributes; } }