private void doValidate() {
final TreeMap<String, SchemaObjectType> schemaObjectTypesByName = new TreeMap<>();
for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) {
schemaObjectType.validate();
final String schemaObjectTypeName = schemaObjectType.getName();
final SchemaObjectType otherSchemaObjectType = schemaObjectTypesByName.put(schemaObjectTypeName, schemaObjectType);
if (otherSchemaObjectType != null)
throw new InvalidSchemaException("duplicate object name `" + schemaObjectTypeName + "'");
}
final TreeMap<Integer, AbstractSchemaItem> globalItemsByStorageId = new TreeMap<>();
for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) {
for (SchemaField field : schemaObjectType.getSchemaFields().values()) {
globalItemsByStorageId.put(field.getStorageId(), field);
if (field instanceof ComplexSchemaField) {
final ComplexSchemaField complexField = (ComplexSchemaField)field;
for (SimpleSchemaField subField : complexField.getSubFields().values())
globalItemsByStorageId.put(subField.getStorageId(), subField);
}
}
}
for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) {
SchemaModel.verifyUniqueStorageId(globalItemsByStorageId, schemaObjectType);
for (SchemaCompositeIndex index : schemaObjectType.getSchemaCompositeIndexes().values())
SchemaModel.verifyUniqueStorageId(globalItemsByStorageId, index);
}
}