@CliOption(key = "fetch", mandatory = false, help = "The fetch semantics at a JPA level") final Fetch fetch,
@CliOption(key = "comment", mandatory = false, help = "An optional comment for JavaDocs") final String comment,
@CliOption(key = "transient", mandatory = false, unspecifiedDefaultValue = "false", specifiedDefaultValue = "true", help = "Indicates to mark the field as transient") final boolean transientModifier,
@CliOption(key = "permitReservedWords", mandatory = false, unspecifiedDefaultValue = "false", specifiedDefaultValue = "true", help = "Indicates whether reserved words are ignored by Roo") final boolean permitReservedWords) {
final ClassOrInterfaceTypeDetails cid = typeLocationService
.getTypeDetails(fieldType);
Validate.notNull(
cid,
"The specified target '--type' does not exist or can not be found. Please create this type first.");
// Check if the requested entity is a JPA @Entity
final MemberDetails memberDetails = memberDetailsScanner
.getMemberDetails(this.getClass().getName(), cid);
final AnnotationMetadata entityAnnotation = memberDetails
.getAnnotation(ENTITY);
final AnnotationMetadata persistentAnnotation = memberDetails
.getAnnotation(PERSISTENT);
if (entityAnnotation != null) {
Validate.isTrue(cardinality == Cardinality.ONE_TO_MANY
|| cardinality == Cardinality.MANY_TO_MANY,
"Cardinality must be ONE_TO_MANY or MANY_TO_MANY for the field list command");
}
else if (cid.getPhysicalTypeCategory() == PhysicalTypeCategory.ENUMERATION) {
cardinality = null;
}
else if (persistentAnnotation != null) {
// Yes, we can deal with that
}
else {
throw new IllegalStateException(
"The field list command is only applicable to enum, JPA @Entity or Spring Data @Persistence elements");
}
final ClassOrInterfaceTypeDetails javaTypeDetails = typeLocationService
.getTypeDetails(typeName);
Validate.notNull(javaTypeDetails,
"The type specified, '%s' doesn't exist", typeName);
final String physicalTypeIdentifier = javaTypeDetails
.getDeclaredByMetadataId();
final ListField fieldDetails = new ListField(physicalTypeIdentifier,
new JavaType(LIST.getFullyQualifiedTypeName(), 0,
DataType.TYPE, null, Arrays.asList(fieldType)),
fieldName, fieldType, cardinality);