package uk.org.ury.database; import java.util.HashMap; import java.util.Map; import uk.org.ury.database.exceptions.MissingPropertyException; /** * An abstract class presenting a template for objects serving as * a data structure for collections of properties retrieved from * a SQL database. * * @param E The enumeration type used as the property list. * * @param T The type of datum stored for each property. * * @author Matt Windsor */ public abstract class DatabaseItem { private Map properties; /** * Construct a new item from an existing list of properties. * * @param properties The map of properties that the new item will * inherit. */ public DatabaseItem (Map properties) { this.properties = properties; } /** * Check whether a property has been set in the item. * * @return true if the property has been set; false otherwise. */ public boolean has (E property) { return properties.containsKey (property); } /** * Query this item for a property. * * @param property The property to query. * * @return The property, if it exists. * * @throws MissingPropertyException if the property does * not exist. */ public T get (E property) throws MissingPropertyException { if (properties.containsKey (property)) return properties.get (property); else throw new MissingPropertyException (property.toString ()); } /** * Retrieve a map of string representations of the properties. * * This relies on E and T having meaningful toString methods. * * @return a list of lines representing the response. */ public Map asResponse () { // TODO: Fan out implementation details into separate class Map response = new HashMap (); for (E property : properties.keySet ()) { if (properties.get (property) != null) response.put (property.toString (), properties.get (property).toString ()); } return response; } }