use of com.amplifyframework.core.model.annotations.ModelConfig in project amplify-android by aws-amplify.
the class ModelSchema method fromModelClass.
/**
* Construct the ModelSchema from the {@link Model} class.
*
* @param clazz the instance of a model class
* @return the ModelSchema object.
* @throws AmplifyException If the conversion fails
*/
@NonNull
public static ModelSchema fromModelClass(@NonNull Class<? extends Model> clazz) throws AmplifyException {
try {
final List<Field> classFields = FieldFinder.findModelFieldsIn(clazz);
final TreeMap<String, ModelField> fields = new TreeMap<>();
final TreeMap<String, ModelAssociation> associations = new TreeMap<>();
final TreeMap<String, ModelIndex> indexes = new TreeMap<>();
final List<AuthRule> authRules = new ArrayList<>();
// Set the model name and plural name (null if not provided)
ModelConfig modelConfig = clazz.getAnnotation(ModelConfig.class);
final String modelName = clazz.getSimpleName();
final String modelPluralName = modelConfig != null && !modelConfig.pluralName().isEmpty() ? modelConfig.pluralName() : null;
final String listPluralName = modelConfig != null && !modelConfig.listPluralName().isEmpty() ? modelConfig.listPluralName() : null;
final String syncPluralName = modelConfig != null && !modelConfig.syncPluralName().isEmpty() ? modelConfig.syncPluralName() : null;
if (modelConfig != null) {
for (com.amplifyframework.core.model.annotations.AuthRule ruleAnnotation : modelConfig.authRules()) {
authRules.add(new AuthRule(ruleAnnotation));
}
}
for (Annotation annotation : clazz.getAnnotations()) {
if (annotation.annotationType().isAssignableFrom(Indexes.class)) {
Indexes indexesAnnotation = (Indexes) annotation;
for (Index indexAnnotation : indexesAnnotation.value()) {
ModelIndex modelIndex = createModelIndex(indexAnnotation);
indexes.put(modelIndex.getIndexName(), modelIndex);
}
} else if (annotation.annotationType().isAssignableFrom(Index.class)) {
ModelIndex modelIndex = createModelIndex((Index) annotation);
indexes.put(modelIndex.getIndexName(), modelIndex);
}
}
for (Field field : classFields) {
final ModelField modelField = createModelField(field);
if (modelField != null) {
fields.put(field.getName(), modelField);
}
final ModelAssociation modelAssociation = createModelAssociation(field);
if (modelAssociation != null) {
associations.put(field.getName(), modelAssociation);
}
}
return ModelSchema.builder().name(modelName).pluralName(modelPluralName).listPluralName(listPluralName).syncPluralName(syncPluralName).authRules(authRules).fields(fields).associations(associations).indexes(indexes).modelClass(clazz).build();
} catch (Exception exception) {
throw new AmplifyException("Error in constructing a ModelSchema.", exception, AmplifyException.TODO_RECOVERY_SUGGESTION);
}
}
Aggregations