/* $RCSfile$
* $Author$
* $Date$
* $Revision$
*
* Copyright (C) 2006-2007 Egon Willighagen <egonw@users.sf.net>
*
* Contact: cdk-devel@lists.sourceforge.net
*
* 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 2.1
* 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.openscience.cdk.interfaces;
import java.util.Map;
/**
* The base class for all chemical objects in this cdk. It provides methods for
* adding listeners and for their notification of events, as well a a hash
* table for administration of physical or chemical properties
*
*@author egonw
* @cdk.githash
*@cdk.module interfaces
*/
public interface IChemObject extends Cloneable {
/**
* Use this to add yourself to this IChemObject as a listener. In order to do
* so, you must implement the ChemObjectListener Interface.
*
* @param col the ChemObjectListener
* @see #removeListener
*/
public void addListener(IChemObjectListener col);
/**
* Returns the number of ChemObjectListeners registered with this object.
*
* @return the number of registered listeners.
*/
public int getListenerCount();
/**
* Use this to remove a ChemObjectListener from the ListenerList of this
* IChemObject. It will then not be notified of change in this object anymore.
*
* @param col The ChemObjectListener to be removed
* @see #addListener
*/
public void removeListener(IChemObjectListener col);
/**
* Set a flag to use or not use notification. By default it should be set
* to true.
*
* @param bool if true, then notification messages are sent.
* @see #getNotification()
*/
public void setNotification(boolean bool);
/**
* Returns the flag that indicates whether notification messages are sent around.
*
* @return true if messages are sent.
* @see #setNotification(boolean)
*/
public boolean getNotification();
/**
* This should be triggered by an method that changes the content of an object
* to that the registered listeners can react to it.
*/
public void notifyChanged();
/**
* This should be triggered by an method that changes the content of an object
* to that the registered listeners can react to it. This is a version of
* notifyChanged() which allows to propagate a change event while preserving
* the original origin.
*
* @param evt A ChemObjectChangeEvent pointing to the source of where
* the change happend
*/
public void notifyChanged(IChemObjectChangeEvent evt);
/**
* Sets a property for a IChemObject.
*
* @param description An object description of the property (most likely a
* unique string)
* @param property An object with the property itself
* @see #getProperty
* @see #removeProperty
*/
public void setProperty(Object description, Object property);
/**
* Removes a property for a IChemObject.
*
* @param description The object description of the property (most likely a
* unique string)
* @see #setProperty
* @see #getProperty
*/
public void removeProperty(Object description);
/**
* Returns a property for the IChemObject.
*
* @param description An object description of the property (most likely a
* unique string)
* @return The object containing the property. Returns null if
* propert is not set.
* @see #setProperty
* @see #removeProperty
*/
public Object getProperty(Object description);
/**
* Returns a Map with the IChemObject's properties.
*
*@return The object's properties as an Map
*@see #setProperties
*/
public Map<Object,Object> getProperties();
/**
* Returns the identifier (ID) of this object.
*
* @return a String representing the ID value
* @see #setID
*/
public String getID();
/**
* Sets the identifier (ID) of this object.
*
* @param identifier a String representing the ID value
* @see #getID
*/
public void setID(String identifier);
/**
* Sets the value of some flag.
*
* @param flag_type Flag to set
* @param flag_value Value to assign to flag
* @see #getFlag
*/
public void setFlag(int flag_type, boolean flag_value);
/**
* Returns the value of some flag.
*
* @param flag_type Flag to retrieve the value of
* @return true if the flag <code>flag_type</code> is set
* @see #setFlag
*/
public boolean getFlag(int flag_type);
/**
* Sets the properties of this object.
*
* @param properties a Map specifying the property values
* @see #getProperties
*/
public void setProperties(Map<Object,Object> properties);
/**
* Sets the whole set of flags.
*
* @param flagsNew the new flags.
* @see #getFlags
*/
public void setFlags(boolean[] flagsNew);
/**
* Returns the whole set of flags.
*
* @return the flags.
* @see #setFlags
*/
public boolean[] getFlags();
/**
* Returns a one line description of this IChemObject.
*
* @return a String representation of this object
*/
public String toString();
/**
* Returns a deep clone of this IChemObject.
*
* @return Object the clone of this IChemObject.
* @throws CloneNotSupportedException if the IChemObject cannot be cloned
*/
public Object clone() throws CloneNotSupportedException;
/**
* Returns a ChemObjectBuilder for the data classes that extend
* this class.
*
* @return The IChemObjectBuilder matching this IChemObject
*/
public IChemObjectBuilder getBuilder();
}