--- trunk/src/skrueger/AttributeMetaData.java 2009/08/19 12:03:12 304 +++ trunk/src/skrueger/AttributeMetadataInterface.java 2010/03/28 10:06:00 776 @@ -1,117 +1,123 @@ -/******************************************************************************* - * Copyright (c) 2009 Martin O. J. Schmitz. - * - * This file is part of the SCHMITZM library - a collection of utility - * classes based on Java 1.6, focusing (not only) on Java Swing - * and the Geotools library. - * - * The SCHMITZM project is hosted at: - * http://wald.intevation.org/projects/schmitzm/ - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 3 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License (license.txt) - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * or try this link: http://www.gnu.org/licenses/lgpl.html - * - * Contributors: - * Martin O. J. Schmitz - initial API and implementation - * Stefan A. Krüger - additional utility classes - ******************************************************************************/ package skrueger; -import org.apache.log4j.Logger; +import java.util.HashSet; -import skrueger.geotools.StyledLayerInterface; +import org.geotools.feature.NameImpl; +import org.opengis.feature.type.Name; + +import skrueger.geotools.Copyable; import skrueger.i8n.Translation; -/** - * This class holds meta information about an attribute/column. This - * information is used by {@link StyledLayerInterface}. - * - * @author Stefan Alfons Krüger - */ -public class AttributeMetaData { - static private final Logger LOGGER = Logger - .getLogger(AttributeMetaData.class); - protected Translation title = new Translation(); - protected Translation desc = new Translation(); - protected boolean visible = false; - protected String unit = ""; - protected int colIdx; - - /** - * Creates an {@link AttributeMetaData} object with the following information - * @param colIdx The column index of this attribute in the underlying table/dbf/etc... - * @param visible Shall this attribute be displayed or hidden from the user? - * @param title {@link Translation} for Name - * @param desc {@link Translation} for an attribute description - * @param unit {@link String} of the unit that the information is in +public interface AttributeMetadataInterface extends Copyable, + Comparable { + + /** + * @return a translatable title for this attribute.. */ - public AttributeMetaData(final int colIdx, final Boolean visible, - final Translation title, final Translation desc, final String unit) { + public Translation getTitle(); + + /** + * Set a translatable title for this attribute.. + */ + public void setTitle(Translation title); - this.colIdx = colIdx; - this.title = title; - this.desc = desc; - if (colIdx == 0){ - // The first attribute is THE_GEOM and shall never be visible! - this.visible = false; - }else - this.visible = visible; - this.unit = unit; - } - - /** - * Creates a new visible {@link AttributeMetaData} with default (no) values. - */ - public AttributeMetaData(final Integer col, final String defaultName) { - this(col, true, new Translation(defaultName), new Translation(), ""); - } - - public Boolean isVisible() { - return visible; - } - - public void setVisible(final Boolean visible) { - this.visible = visible; - } - - /** @return the index of this attribute in the underlying table/dbf **/ - public int getColIdx() { - return colIdx; - } - - public Translation getTitle() { - return title; - } - - public void setTitle(final Translation title) { - this.title = title; - } - - public Translation getDesc() { - return desc; - } - - public void setDesc(final Translation desc) { - this.desc = desc; - } - - public String getUnit() { - return unit; - } - - public void setUnit(final String unit) { - this.unit = unit; - } + /** + * Set an untranslated title for this attribute or pass a {@link Translation} encryped as a {@link String} + */ + public void setTitle(String title); + + /** + * @return a translatable description for this attribute + */ + public Translation getDesc(); + + /** + * Set a translatable description for this attribute. + */ + public void setDesc(Translation desc); + + /** + * Set an untranslated description for this attribute or pass a {@link Translation} encryped as a {@link String} + */ + public void setDesc(String desc); + + + /** + * The local name. E.g. the name of the DBF column as a {@link String}. + */ + public String getLocalName(); + + /** + * A short form for #setName(new NameImpl(localName)) + */ + public void setLocalName(String localName); + + /** + * The fully qualified {@link Name} of the attribute, e.g. + * org.bla.plo:blub. The second part equals the + * {@link #getLocalName()} value. The first may be null or + * represent the layer name. + */ + public NameImpl getName(); + + /** + * set the fully qualified {@link Name} of this attribute. + */ + public void setName(NameImpl name); + + /** + * A list og objects that represent NODATA-values for this attribute. The + * objects are supporsed to be correctly casted already. That means that the + * NODATA objects listed here have must have the same type as the values of + * this object. + */ + public HashSet getNodataValues(); + + /** + * Takes any value object and checks it against the NODATA values. If the + * value equals a NODATA value, null is returned. Otherwise the + * same object is returned. + * + * Note: This method is called often. + */ + public Object fiterNodata(Object value); + + /** + * @return a non-translatable unit {@link String} for this attribute values. + */ + public String getUnit(); + + /** + * Set a unit {@link String} for this attribute values. + */ + public void setUnit(String unit); + + /** + * @return A value defining the position of this attribute whenever the + * attributes are listed to an end-user. The higher the weight, the + * lower the position. (heavy goes down, light goes up) + */ + public double getWeight(); + + /** + * set a value defining the position of this attribute whenever the + * attributes are listed to an end-user. The higher the weight, the lower + * the position. (heavy goes down, light goes up) + */ + public void setWeight(double weight); + + /** + * @return false if this attribute should not be selectable or + * shown to the end-user. + */ + public boolean isVisible(); + + /** + * Set false if this attribute should not be shown to the + * end-user. + */ + public void setVisible(boolean visible); + + String getNoDataValuesFormatted(); + }