public Long addSchemaMetadata(SchemaMetadata schemaMetadata,
boolean throwErrorIfExists) throws UnsupportedSchemaTypeException {
SchemaMetadataStorable givenSchemaMetadataStorable = SchemaMetadataStorable.fromSchemaMetadataInfo(new SchemaMetadataInfo(schemaMetadata));
String type = schemaMetadata.getType();
if (schemaTypeWithProviders.get(type) == null) {
throw new UnsupportedSchemaTypeException("Given schema type " + type + " not supported");
}
if (!throwErrorIfExists) {
Storable schemaMetadataStorable = storageManager.get(givenSchemaMetadataStorable.getStorableKey());
if (schemaMetadataStorable != null) {
return schemaMetadataStorable.getId();
}
}
final Long nextId = storageManager.nextId(givenSchemaMetadataStorable.getNameSpace());
givenSchemaMetadataStorable.setId(nextId);
givenSchemaMetadataStorable.setTimestamp(System.currentTimeMillis());
storageManager.add(givenSchemaMetadataStorable);
SchemaBranchStorable schemaBranchStorable = new SchemaBranchStorable(SchemaBranch.MASTER_BRANCH, schemaMetadata.getName(), String.format(SchemaBranch.MASTER_BRANCH_DESC, schemaMetadata.getName()), System.currentTimeMillis());
schemaBranchStorable.setId(storageManager.nextId(SchemaBranchStorable.NAME_SPACE));
storageManager.add(schemaBranchStorable);
storageManager.add(new SchemaLockStorable(givenSchemaMetadataStorable.getNameSpace(), givenSchemaMetadataStorable.getName(), System.currentTimeMillis()));
return givenSchemaMetadataStorable.getId();
}