@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);
Validate.isTrue(
entityAnnotation != null || persistentAnnotation != null,
"The field reference command is only applicable to JPA @Entity or Spring Data @Persistent target types.");
Validate.isTrue(cardinality == Cardinality.MANY_TO_ONE
|| cardinality == Cardinality.ONE_TO_ONE,
"Cardinality must be MANY_TO_ONE or ONE_TO_ONE for the field reference command");
final ClassOrInterfaceTypeDetails javaTypeDetails = typeLocationService
.getTypeDetails(typeName);
Validate.notNull(javaTypeDetails,
"The type specified, '%s', doesn't exist", typeName);
final String physicalTypeIdentifier = javaTypeDetails
.getDeclaredByMetadataId();
final ReferenceField fieldDetails = new ReferenceField(
physicalTypeIdentifier, fieldType, fieldName, cardinality);
fieldDetails.setNotNull(notNull);
fieldDetails.setNullRequired(nullRequired);