001: /**
002: * Objective Database Abstraction Layer (ODAL)
003: * Copyright (c) 2004, The ODAL Development Group
004: * All rights reserved.
005: * For definition of the ODAL Development Group please refer to LICENCE.txt file
006: *
007: * Distributable under LGPL license.
008: * See terms of license at gnu.org.
009: */package com.completex.objective.components.persistency;
010:
011: import com.completex.objective.components.persistency.meta.ModelFilter;
012:
013: import java.util.Iterator;
014: import java.util.LinkedHashMap;
015: import java.util.Map;
016:
017: /**
018: * Under construction
019: *
020: * @author Gennady Krizhevsky
021: */
022: public class UserDefinedTypeMetaModel implements ModelConsts {
023:
024: private Map tables = new LinkedHashMap();
025: private Map modelByObjectId = new LinkedHashMap();
026:
027: private ModelFilter filter = new ModelFilter.NullModelFilter();
028:
029: public UserDefinedTypeMetaTable getColumnById(String objectId) {
030: return (UserDefinedTypeMetaTable) modelByObjectId.get(objectId);
031: }
032:
033: public UserDefinedTypeMetaTable getTypeTable(String key) {
034: return (UserDefinedTypeMetaTable) tables.get(key);
035: }
036:
037: public boolean containsObjectId(String objectId) {
038: return modelByObjectId.containsKey(objectId);
039: }
040:
041: public void addColumn(String key, UserDefinedTypeMetaTable table) {
042: tables.put(key, table);
043: table.setModelByObjectId(modelByObjectId);
044: }
045:
046: public Iterator typeTableNameIterator() {
047: return tables.keySet().iterator();
048: }
049:
050: public final Map toInternalMap() {
051: final Map modelMap = new LinkedHashMap();
052:
053: final Map tableMap = new LinkedHashMap();
054:
055: modelMap.put(TABLES_TAG, tableMap);
056:
057: for (Iterator it = tables.keySet().iterator(); it.hasNext();) {
058: String tableName = (String) it.next();
059: UserDefinedTypeMetaTable table = (UserDefinedTypeMetaTable) tables
060: .get(tableName);
061: tableMap.put(table.getName(), table.toInternalMap());
062: }
063:
064: return modelMap;
065: }
066:
067: public final Map toExternalMap() {
068: final Map modelMap = new LinkedHashMap();
069:
070: final Map tableMap = new LinkedHashMap();
071:
072: modelMap.put(TABLES_TAG, tableMap);
073:
074: for (Iterator it = tables.keySet().iterator(); it.hasNext();) {
075: String tableName = (String) it.next();
076: UserDefinedTypeMetaTable table = (UserDefinedTypeMetaTable) tables
077: .get(tableName);
078: tableMap.put(table.getName(), table.toExternalMap());
079: }
080:
081: return modelMap;
082: }
083:
084: /**
085: * This method must be called before fromInternalMap since it populates
086: * aliases map.
087: *
088: * @param modelMap
089: */
090: public final void fromExternalMap(Map modelMap) {
091:
092: Map tablesMap = (Map) modelMap.get(TABLES_TAG);
093:
094: for (Iterator it = tablesMap.keySet().iterator(); it.hasNext();) {
095: String tableKey = (String) it.next();
096: Map tableMap = (Map) tablesMap.get(tableKey);
097: String tableName = (String) tableMap.get(TABLE_NAME_TAG);
098: String tableAlias = (String) tableMap.get(TABLE_ALIAS_TAG);
099:
100: if (filter.isAllowed(tableName)) {
101: UserDefinedTypeMetaTable table = (UserDefinedTypeMetaTable) tables
102: .get(tableName);
103: // if (table == null) {
104: // table = new UserDefinedTypeMetaTable(tableName);
105: // }
106: if (table != null) {
107: table.fromExternalMap(tableMap);
108: tables.put(tableName, table);
109: }
110: }
111: }
112: }
113:
114: public final void fromInternalMap(Map modelMap) {
115: Map tablesMap = (Map) modelMap.get(TABLES_TAG);
116:
117: for (Iterator it = tablesMap.keySet().iterator(); it.hasNext();) {
118: String tableKey = (String) it.next();
119: Map tableMap = (Map) tablesMap.get(tableKey);
120: String tableName = (String) tableMap.get(TABLE_NAME_TAG);
121:
122: if (filter.isAllowed(tableName)) {
123: UserDefinedTypeMetaTable table = (UserDefinedTypeMetaTable) tables
124: .get(tableName);
125: if (table == null) {
126: table = new UserDefinedTypeMetaTable(tableName);
127: }
128: table.fromInternalMap(tableMap);
129: tables.put(tableName, table);
130: }
131: }
132: }
133: }
|