org.concord.biologica.engine
Class OrganismImage

java.lang.Object
  |
  +--org.xml.sax.HandlerBase
        |
        +--org.concord.biologica.engine.EngineObject
              |
              +--org.concord.biologica.engine.OrganismImage
All Implemented Interfaces:
org.xml.sax.DocumentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, java.util.EventListener, java.beans.PropertyChangeListener, java.io.Serializable

public final class OrganismImage
extends EngineObject
implements java.io.Serializable, java.beans.PropertyChangeListener

This class represents a portion of the image used to draw an organism. A single OrganismImage maintains a reference to a single SpeciesImage and a reference to a single cell in that SpeciesImage. That single cell is one, probably of many, cells used to draw an organism.

For example, if we have an organism of species dragon and we have a SpeciesImage named "bodies" which contains all the images of bodies used for the dragon species, then an OrganismImage for that organism would contain a reference to the "bodies" SpeciesImage and the row and column integer numbers of the cell that represents the body for that organism. The organism would have multiple OrganismImage objects - the bodies one and others for other parts of the dragaon (head, wings, scales, etc.). An OrganismImage also knows how to draw itself if given a Graphics object and a location. In other words, an organism draws itself by walking through its OrganismImage list asking each OrganismImage to draw itself at the appropriate location. An object of this class will generate the following property change events:

Version:
$Revision: 1.2 $ $Date: 2002/02/21 23:13:47 $
Author:
$Author: dima $
See Also:
EngineProp.COLUMN_INDEX, EngineProp.DELETED, EngineProp.ID, EngineProp.LOCKED_STATE, EngineProp.ROW_INDEX, PropertyChangeListener, Serialized Form

Field Summary
static int NO_CELL
          Indicates image should not draw anything, as there was no cell in the speciesImage which should be drawn for this organism.
 boolean organismImageDirty
           
 
Fields inherited from class org.concord.biologica.engine.EngineObject
AUTOMATIC_LOCKED, AUTOMATIC_LOCKED_STRING, changes, deleted, FALSE, id, lockedState, MANUAL_AND_AUTOMATIC_LOCKED, MANUAL_AND_AUTOMATIC_LOCKED_STRING, MANUAL_LOCKED, MANUAL_LOCKED_STRING, NULL_ID, TRUE, UNLOCKED, UNLOCKED_STRING, xmlElementContext
 
Constructor Summary
OrganismImage(Organism anOrganism, SpeciesImage aSpeciesImage)
          Creates a new organism image given an organism and a species image.
OrganismImage(Organism anOrganism, java.lang.String anElementName, int anElementID, com.sun.xml.parser.Parser anXMLParser, ImportContext importContext)
          Create a new organism image and start handling XML parsing events to set the properties of this object.
 
Method Summary
 void characters(char[] ch, int start, int length)
          Receive notification of character data.
 void clearDirtyBit()
           
 void delete()
          Delete this object, notifying parent objects and deleting any child objects.
 void delete(boolean notifyChange)
           
 void endElement(java.lang.String anElementName)
          Handle notification that the parsing of the given element has ended.
 int getColumnIndex()
          Return the column index of this organism image in its corresponding species image.
 int getImageType()
          Get the image type for this organism image.
 Organism getOrganism()
          Return the organism of this object.
 int getRowIndex()
          Return the row index of this organism image in its corresponding species image.
 SpeciesImage getSpeciesImage()
          Return the species image of this object.
 World getWorld()
          Get the world containing this object.
 void ignorableWhitespace(char[] ch, int start, int length)
          Receive notification of ignorable white space character data.
 void propertyChange(java.beans.PropertyChangeEvent event)
          Handle property change events.
 void setColumnAndRowIndices(int aColumnIndex, int aRowIndex)
          Sets the column and row indices of this organism image.
 void setColumnIndex(int aColumnIndex)
          Sets the column index of this organism image.
 void setRowIndex(int aRowIndex)
          Sets the row index of this organism image.
 void startElement(java.lang.String anElementName, org.xml.sax.AttributeList amap)
          Handle notification that the parser has hit the start of a new element with the given name and attributes.
 java.lang.String toString()
          Return a string representation of this object.
 void writeToStream(java.io.PrintWriter stream)
          Writes this object to the given stream in XML format.
 
Methods inherited from class org.concord.biologica.engine.EngineObject
addPropertyChangeListener, getID, getLockedState, getLockedStateAsString, isAutomaticLocked, isDeleted, isLocked, isManualLocked, notifySelected, release, removePropertyChangeListener, setAutomaticLocked, setID, setLockedState, setLockedStateAsString, setManualLocked
 
Methods inherited from class org.xml.sax.HandlerBase
endDocument, error, fatalError, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, startDocument, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NO_CELL

public static final int NO_CELL
Indicates image should not draw anything, as there was no cell in the speciesImage which should be drawn for this organism.

organismImageDirty

public boolean organismImageDirty
Constructor Detail

OrganismImage

public OrganismImage(Organism anOrganism,
                     SpeciesImage aSpeciesImage)
Creates a new organism image given an organism and a species image.

Parameters:
anOrganism - Organism - the organism containing this image, may not be null
aSpeciesImage - SpeciesImage - the species image corresponding to this object
Throws:
java.lang.IllegalArgumentException - - input argument(s) illegal

OrganismImage

public OrganismImage(Organism anOrganism,
                     java.lang.String anElementName,
                     int anElementID,
                     com.sun.xml.parser.Parser anXMLParser,
                     ImportContext importContext)
Create a new organism image and start handling XML parsing events to set the properties of this object.

Parameters:
anOrganism - Organism - the enclosing organism for this new organism image
anElementName - String - the element name
anElementID - int - the element id
anXMLParser - com.sun.xml.parser.Parser - the element parser
importContext - ImportContext - import context for mapping ids from file to this world
Throws:
java.lang.IllegalArgumentException - - input arguments illegal
Method Detail

startElement

public void startElement(java.lang.String anElementName,
                         org.xml.sax.AttributeList amap)
                  throws org.xml.sax.SAXException
Handle notification that the parser has hit the start of a new element with the given name and attributes.

For internal elements (elements that are non-EngineObject instance variables of this object), call xmlElementContext.startElement() and xmlElementContext will receive the remaining element notifications. For external elements (elements that are EngineObject instance variables of this object), create an object of the appropriate class and that object will receive the remaining element notifications.

Overrides:
startElement in class org.xml.sax.HandlerBase
Parameters:
anElementName - String - name of element
amap - AttributeList - an attribute list

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
Receive notification of character data.
Overrides:
characters in class org.xml.sax.HandlerBase
Parameters:
ch - char[] - characters
start - int - start of string
length - int - length of string

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
Receive notification of ignorable white space character data.
Overrides:
ignorableWhitespace in class org.xml.sax.HandlerBase
Parameters:
ch - char[] - characters
start - int - start of string
length - int - length of string

endElement

public void endElement(java.lang.String anElementName)
                throws org.xml.sax.SAXException
Handle notification that the parsing of the given element has ended.
Overrides:
endElement in class org.xml.sax.HandlerBase
Parameters:
anElementName - String - the element name

delete

public void delete()
Delete this object, notifying parent objects and deleting any child objects.

When this method is successful, a property change event is generated for the property named EngineProp.DELETED.

Overrides:
delete in class EngineObject

delete

public void delete(boolean notifyChange)

toString

public java.lang.String toString()
Return a string representation of this object.

Overrides:
toString in class EngineObject
Returns:
String - string representation of object

getOrganism

public Organism getOrganism()
Return the organism of this object.

Returns:
Organism - organism of this object, never null

getSpeciesImage

public SpeciesImage getSpeciesImage()
Return the species image of this object.

Returns:
SpeciesImage - species image of this object, never null

getWorld

public World getWorld()
Get the world containing this object.

Overrides:
getWorld in class EngineObject
Returns:
World - the world containing this object, never null.

getRowIndex

public int getRowIndex()
Return the row index of this organism image in its corresponding species image.

Returns:
int - row index of this organism image

setRowIndex

public void setRowIndex(int aRowIndex)
Sets the row index of this organism image.

When this method is successful, a property change event is fired for the property named EngineProp.ROW.

Parameters:
aRowIndex - int - new row index, may not be < NO_CELL
Throws:
java.lang.IllegalArgumentException - - input argument illegal

getColumnIndex

public int getColumnIndex()
Return the column index of this organism image in its corresponding species image.

Returns:
int - column index of this organism image

setColumnIndex

public void setColumnIndex(int aColumnIndex)
Sets the column index of this organism image.

When this method is successful, a property change event is fired for the property named EngineProp.ROW.

Parameters:
aColumnIndex - int - new column index, may not be < NO_CELL
Throws:
java.lang.IllegalArgumentException - - input argument illegal

setColumnAndRowIndices

public void setColumnAndRowIndices(int aColumnIndex,
                                   int aRowIndex)
Sets the column and row indices of this organism image.

When this method is successful, two property change events are fired - one for the property named EngineProp.COLUMN and another named EngineProp.ROW.

Parameters:
aColumnIndex - int - new column index, may not be < NO_CELL
aRowIndex - int - new row index, may not be < NO_CELL
Throws:
java.lang.IllegalArgumentException - - input argument illegal

getImageType

public int getImageType()
Get the image type for this organism image. We don't store that information here in this object, so we have to go to the parent species image to get it.

Returns:
int - image type of this species image

propertyChange

public void propertyChange(java.beans.PropertyChangeEvent event)
Handle property change events. In particular, react to an event that says the SpeciesImage has changed or been deleted.

Specified by:
propertyChange in interface java.beans.PropertyChangeListener
Parameters:
event - PropertyChangeEvent - the property change event

writeToStream

public void writeToStream(java.io.PrintWriter stream)
                   throws java.io.IOException
Writes this object to the given stream in XML format. Usually this method is used to write the object to a file for saving it, but that is potentially not the only use.

We could supply a default implementation that knows how to write the id value. But that convenience is not chosen because it's never correct to use just this implementation of these methods, so I'd rather have a compilation fail if a derived class fails to implement this method.

The inverse of this method is a constructor that takes a org.xml.sax.Parser argument and other arguments.

Overrides:
writeToStream in class EngineObject
Parameters:
stream - PrintWriter - print stream
Throws:
java.lang.IllegalArgumentException - - input arguments illegal
java.io.IOException - - an IO error occurred in java libraries

clearDirtyBit

public void clearDirtyBit()