static void initializeClassInfos(DomainModel model, int serverId) { serverOidBase = (long) serverId << 48; // the server id provides de 16 most significant bits of the OID int maxId = 0; Map<Class, DomainClassInfo> map = new IdentityHashMap<Class, DomainClassInfo>(); ArrayList<DomainClassInfo> array = new ArrayList<DomainClassInfo>(); // special case: create record for DomainRoot (must get class id = 0) addNewInfo(map, array, new DomainClassInfo(DomainRoot.class, 0)); // create all other records, skipping DomainRoot of course for (DomainClass domClass : model.getDomainClasses()) { Class javaClass; try { javaClass = Class.forName(domClass.getFullName()); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } if (javaClass != DomainRoot.class && !map.containsKey(javaClass)) { DomainClassInfo classInfo = new DomainClassInfo(javaClass, ++maxId); addNewInfo(map, array, classInfo); } } // finish the initialization by assigning to the static variables classInfoMap = Collections.unmodifiableMap(map); classInfoById = new DomainClassInfo[maxId + 1]; array.toArray(classInfoById); }
public static String getJdbcTypeFor(DomainModel model, String valueType) { ValueType vt = model.findValueType(valueType); String jdbcType = null; if (vt.isEnum()) { jdbcType = "VARCHAR"; } else if (vt.isBuiltin()) { jdbcType = BUILT_IN_JDBC_MAP.get(valueType); } else { List<ExternalizationElement> extElems = vt.getExternalizationElements(); if (extElems.size() != 1) { throw new Error("Can't handle ValueTypes with more than one externalization element, yet!"); } jdbcType = getJdbcTypeFor(model, extElems.get(0).getType().getDomainName()); } if (jdbcType == null) { throw new Error("Couldn't find a JDBC type for the value type " + valueType); } return jdbcType; }