001 package data; 002 003 import java.beans.PropertyChangeListener; 004 005 /** 006 * An item in a {@link Catalog}. 007 * 008 * <p>CatalogItems describe available objects by their attributes. The only attribute that is mandatory is 009 * a {@link Nameable#getName key} ({@link String}), usually a name, but it could be an ID-Number or 010 * anything. A CatalogItem can have a {@link #getValue value} attribute.<p> 011 * 012 * <p><strong>Note</strong> that the name as obtained via {@link Nameable#getName} is used as the 013 * CatalogItem's key when inserting the CatalogItem inside a Catalog.</p> 014 * 015 * <p>CatalogItems are contained in {@link Catalog Catalogs}.</p> 016 * 017 * @author Steffen Zschaler 018 * @version 2.0 18/08/1999 019 * @since v0.5 020 */ 021 public interface CatalogItem extends Nameable, Comparable<Object> { 022 023 /** 024 * The programmatical name for the "value" property. This is "value". 025 */ 026 public static final String VALUE_PROPERTY = "value"; 027 028 /** 029 * Get the default value of this CatalogItem. Although CatalogItems have a default value, you can use any 030 * other value through the {@link CatalogItemValue} adapter. 031 * 032 * @override Always 033 */ 034 public Value getValue(); 035 036 /** 037 * Get the Catalog that currently contains this CatalogItem. 038 * 039 * @override Always 040 */ 041 public Catalog getCatalog(); 042 043 /** 044 * Add a PropertyChangeListener that will receive events whenever the "value" property changes. 045 * 046 * @override Always 047 */ 048 public void addValueListener(PropertyChangeListener pcl); 049 050 /** 051 * Remove a PropertyChangeListener for the "value" property. 052 * 053 * @override Always 054 */ 055 public void removeValueListener(PropertyChangeListener pcl); 056 }