+package mir.entity.adapter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import mir.entity.Entity;
+import mir.storage.Database;
+
+public class EntityAdapterModel {
+ private Map entityAdapterMappings;
+
+ public EntityAdapterModel() {
+ entityAdapterMappings = new HashMap();
+ }
+
+ public EntityAdapter makeEntityAdapter( String aName, Entity anEntity ) {
+ Mapping mapping = getMappingForName( aName );
+
+ return mapping.getDefinition().makeEntityAdapter( anEntity, this );
+ }
+
+ public EntityAdapter createNewEntity( String aName ) throws EntityAdapterExc {
+ try {
+ Mapping mapping = getMappingForName(aName);
+ Entity entity = mapping.database.createNewEntity();
+
+ return mapping.getDefinition().makeEntityAdapter(entity, this);
+ }
+ catch (Throwable t) {
+ throw new EntityAdapterFailure(t);
+ }
+ }
+
+ public void addMapping(String aName, Database aDatabase, EntityAdapterDefinition aDefinition ) {
+ entityAdapterMappings.put(aName, new Mapping(aDatabase, aDefinition));
+ }
+
+ public Mapping getMappingForName( String aName ) {
+ if (!entityAdapterMappings.containsKey(aName))
+ throw new EntityAdapterFailure("'" + aName + "' not present in model", null);
+
+ return (Mapping) entityAdapterMappings.get( aName );
+ }
+
+ public class Mapping {
+ private Database database;
+ private EntityAdapterDefinition definition;
+
+ public Mapping(Database aDatabase, EntityAdapterDefinition aDefinition ) {
+ database = aDatabase;
+ definition = aDefinition;
+ }
+
+ public Database getDatabase() {
+ return database;
+ }
+
+ public EntityAdapterDefinition getDefinition() {
+ return definition;
+ }
+ }
+}
+