/** * Gets the property of a related entity, using raw property information. * * @param rawProperty string that contains the definition of a property, which can be a property accessed by a relation. * @param referenceProperty property that represents a relation with other entity. * @return Pair that contains a property metadata and its name. */ private Pair<Stack<FieldMetadata>, String> extractRelatedEntityValidProperty( String extractProperty, FieldMetadata referenceProperty, Stack<FieldMetadata> path) { if (StringUtils.isBlank(extractProperty) || referenceProperty == null) { return null; } // Extract the property of a related entity String property = StringUtils.substringAfter(extractProperty, referenceProperty.getFieldName().toString()); if (StringUtils.isBlank(property)) { return null; } return extractValidProperty(property, getValidProperties(referenceProperty.getFieldType()), path); }
/** * Return true if field is annotated with @OneToOne or @ManyToOne JPA annotation * * @param field * @return */ private boolean isAnyToOneRelation(FieldMetadata field) { return field.getAnnotation(JpaJavaType.MANY_TO_ONE) != null || field.getAnnotation(JpaJavaType.ONE_TO_ONE) != null; }
/** * This method generates new field instance using an existing FieldMetadata * * @param declaredByMetadataId * @param field * * @return */ private FieldMetadata getNewField(String declaredByMetadataId, FieldMetadata field) { // Use the FieldMetadataBuilder for easy creation of FieldMetadata // based on existing field FieldMetadataBuilder fieldBuilder = new FieldMetadataBuilder(declaredByMetadataId, field.getModifier(), field.getFieldName(), field.getFieldType(), field.getFieldInitializer()); fieldBuilder.setAnnotations(field.getAnnotations()); return fieldBuilder.build(); }
public FieldMetadataBuilder(final String declaredbyMetadataId, final FieldMetadata existing) { super(declaredbyMetadataId, existing); init(existing.getFieldName(), existing.getFieldType(), existing.getFieldInitializer()); this.commentStructure = existing.getCommentStructure(); }
/** * Returns the accessor name for the given field. * * @param field the field to determine the accessor name * @return the accessor method name */ public static JavaSymbolName getAccessorMethodName(final FieldMetadata field) { Validate.notNull(field, "Field required"); return getAccessorMethodName(field.getFieldName(), field.getFieldType()); }
/** * Checks field type and creates a proper expression to check against null. * Mainly differences will be between primitive and non primitive values. * * @return a String with the expression to check. */ private String createNullExpression(FieldMetadata field) { String expression = ""; JavaType versionType = field.getFieldType(); if (versionType.isPrimitive()) { expression = String.format("%s.get%s() != 0", entityItemName, field.getFieldName() .getSymbolNameCapitalisedFirstLetter()); } else { expression = String.format("%s.get%s() != null", entityItemName, field.getFieldName() .getSymbolNameCapitalisedFirstLetter()); } return expression; }
if (annotationValues.isGettersByDefault() && !Modifier.isTransient(field.getModifier()) && !Modifier.isStatic(field.getModifier())) { final InvocableMemberBodyBuilder bodyBuilder = new InvocableMemberBodyBuilder(); String fieldName = field.getFieldName().getSymbolName(); bodyBuilder.appendFormalLine("return this." + fieldName + ";"); new MethodMetadataBuilder(getId(), Modifier.PUBLIC, methodName, field.getFieldType(), bodyBuilder); if (StringUtils.isNotBlank(fieldJavaDoc)) { methodMetadataBuilder.setCommentStructure(JavadocComment.create("Gets %s value\n%s", fieldName, fieldJavaDoc));
compilationUnitServices.getImports(), field.getFieldType()); final Type initType = JavaParserUtils.getResolvedName(compilationUnitServices.getEnclosingTypeName(), field.getFieldType(), compilationUnitServices); final ClassOrInterfaceType finalType = JavaParserUtils.getClassOrInterfaceType(initType); JavaParserUtils.getJavaParserModifier(field.getModifier()), initType, field .getFieldName().getSymbolName()); if (field.getFieldType().getParameters().size() > 0) { final List<Type> fieldTypeArgs = new ArrayList<Type>(); finalType.setTypeArgs(fieldTypeArgs); for (final JavaType parameter : field.getFieldType().getParameters()) { fieldTypeArgs.add(JavaParserUtils.importParametersForType( compilationUnitServices.getEnclosingTypeName(), compilationUnitServices.getImports(), if (StringUtils.isNotBlank(field.getFieldInitializer())) { sb.append(" private " + field.getFieldType() + " " + field.getFieldName() + " = " + field.getFieldInitializer() + ";\n"); sb.append("}\n"); final ByteArrayInputStream bais = new ByteArrayInputStream(sb.toString().getBytes()); for (final AnnotationMetadata annotation : field.getAnnotations()) { JavaParserAnnotationMetadataBuilder.addAnnotationToList(compilationUnitServices, annotations, annotation); if (field.getCommentStructure() != null) {
/** * Generate method name to use for add method of selected field * * @param field * @return */ private JavaSymbolName getAddMethodName(final FieldMetadata field) { final JavaSymbolName methodName = new JavaSymbolName(ADD_METHOD_PREFIX + StringUtils.capitalize(field.getFieldName().getSymbolName())); return methodName; }
JavaSymbolName parameterName, final JavaType childType, final InvocableMemberBodyBuilder builder, ImportRegistrationResolver importResolver) { final String fieldName = field.getFieldName().getSymbolName(); builder.appendFormalLine(String.format("Assert.notNull(%s, %s);", parameterName, getIterableToRemoveCantBeNullConstant().getFieldName())); builder.appendFormalLine(String.format("for (%s item : %s) {", childType.getSimpleTypeName(), parameterName)); builder.indent(); builder.appendFormalLine(String.format("this.%s.remove(item);", fieldName)); builder.appendFormalLine(String.format("item.set%s(null);", StringUtils.capitalize(mappedBy)));
final JavaSymbolName parameterName, final JavaType childType, final InvocableMemberBodyBuilder builder, ImportRegistrationResolver importResolver) { final String fieldName = field.getFieldName().getSymbolName(); builder.appendFormalLine(String.format("Assert.notNull(%s, %s);", parameterName, getIterableToAddCantBeNullConstant().getFieldName())); builder.appendFormalLine(String.format("for (%s item : %s) {", childType.getSimpleTypeName(), parameterName)); builder.indent(); builder.appendFormalLine(String.format("this.%s.add(item);", fieldName)); builder.appendFormalLine(String.format("item.set%s(this);", StringUtils.capitalize(mappedBy)));
new JavaSymbolName("set" + relationInfo.fieldMetadata.getFieldName().getSymbolNameCapitalisedFirstLetter()); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(entity)); parameterNames.add(new JavaSymbolName(StringUtils.uncapitalize(entity.getSimpleTypeName()))); parameterNames.add(relationInfo.fieldMetadata.getFieldName()); if (relationInfo.cardinality == Cardinality.ONE_TO_ONE) { parameterTypes.add(AnnotatedJavaType.convertFromJavaType(relationInfo.childType)); } else if (relationInfo.type == JpaRelationType.COMPOSITION) { parameterTypes.add(AnnotatedJavaType.convertFromJavaType(JavaType .iterableOf(relationInfo.childType))); } else { aspectName); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(JavaType .iterableOf(childEntityMetadata.getCurrentIndentifierField().getFieldType())));
private String getColumnPrecisionAndScaleBody(final FieldMetadata field, final Map<String, Object> values, final String suffix) { if (values == null || !values.containsKey("precision")) { return InvocableMemberBodyBuilder.getInstance().getOutput(); final String fieldName = field.getFieldName().getSymbolName(); final JavaType fieldType = field.getFieldType(); maxValue = new BigDecimal(StringUtils.rightPad("9", precision, '9')); } else { maxValue = new BigDecimal(StringUtils.rightPad("9", precision - scale, '9') + "." + StringUtils.rightPad("9", scale, '9')); final InvocableMemberBodyBuilder bodyBuilder = new InvocableMemberBodyBuilder(); if (fieldType.equals(BIG_DECIMAL)) { bodyBuilder.appendFormalLine("if (" + fieldName + ".compareTo(new " + BIG_DECIMAL.getSimpleTypeName() + "(\"" + maxValue + "\")) == 1) {"); bodyBuilder.indent(); bodyBuilder.appendFormalLine(fieldName + " = new " + BIG_DECIMAL.getSimpleTypeName() + "(\"" + maxValue + "\");"); } else {
private MethodMetadata getDeserializeMethod() { final JavaSymbolName methodName = new JavaSymbolName("deserializeObject"); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(JSON_PARSER)); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(DESERIALIZATION_CONTEXT)); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(OBJECT_CODEC)); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(JSON_NODE)); InvocableMemberBodyBuilder bodyBuilder = new InvocableMemberBodyBuilder(); getTypeToUseAsIdentifier(entityMetadata.getCurrentIndentifierField().getFieldType()); bodyBuilder.appendFormalLine("String idText = tree.asText();"); bodyBuilder.appendFormalLine("%s %s = %s.convert(idText, %s.class);", getNameOfJavaType(idType), entityMetadata.getCurrentIndentifierField().getFieldName(), conversionServiceField.getFieldName(), getNameOfJavaType(idType)); StringUtils.uncapitalize(entityMetadata.getDestination().getSimpleTypeName()); bodyBuilder.appendFormalLine("%s %s = %s.%s(%s);", getNameOfJavaType(entityMetadata.getDestination()), entityItemName, serviceField.getFieldName(), serviceMetadata.getCurrentFindOneMethod().getMethodName(), entityMetadata.getCurrentIndentifierField().getFieldName());
private String getFieldInitializer(final FieldMetadata field, final JpaEntityFactoryMetadata collaboratingMetadata, final Set<ClassOrInterfaceTypeDetails> dataOnDemandClasses) { final JavaType fieldType = field.getFieldType(); final String fieldName = field.getFieldName().getSymbolName(); String initializer = "null"; final String fieldInitializer = field.getFieldInitializer(); final Set<Object> fieldCustomDataKeys = field.getCustomData().keySet(); if (fieldType.equals(DATE)) { if (MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), PAST) != null) { builder.getImportRegistrationResolver().addImport(DATE); initializer = "new Date(new Date().getTime() - 10000000L)"; } else if (MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), FUTURE) != null) { builder.getImportRegistrationResolver().addImport(DATE); initializer = "new Date(new Date().getTime() + 10000000L)"; if (MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), PAST) != null) { initializer = calendarString + " - 1)"; } else if (MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), FUTURE) != null) { initializer = calendarString + " + 1)"; } else { initializer = "Calendar.getInstance()"; if (MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), VALIDATOR_CONSTRAINTS_EMAIL) != null || fieldName.toLowerCase().contains("email")) { initializer = "\"foo\" + " + INDEX_VAR + " + \"@bar.com\""; MemberFindingUtils.getAnnotationOfType(field.getAnnotations(), SIZE); if (sizeAnnotation != null) {
new JavaSymbolName("init" + entity.getSimpleTypeName() + "Binder"); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(SpringJavaType.WEB_DATA_BINDER)); List<JavaSymbolName> parameterNames = new ArrayList<JavaSymbolName>(); parameterNames.add(new JavaSymbolName("binder")); AnnotatedJavaType.convertFromAnnotatedJavaTypes(parameterTypes)); if (existingMethod != null) { return existingMethod; InvocableMemberBodyBuilder body = new InvocableMemberBodyBuilder(); body.appendFormalLine("binder.setDisallowedFields(\"%s\");", entityIdentifier); body.appendFormalLine("binder.setDisallowedFields(\"%s.%s\");", item.getKey().fieldName, item .getValue().getCurrentIndentifierField().getFieldName()); body.appendFormalLine("// Register validators"); body.appendFormalLine("%s validator = new GenericValidator(%s.class, %s());", SpringletsJavaType.SPRINGLETS_GENERIC_VALIDATOR.getNameIncludingTypeParameters(false, builder.getImportRegistrationResolver()), entity.getBaseType() .getNameIncludingTypeParameters(false, builder.getImportRegistrationResolver()), getAccessorMethod(controllerMetadata.getServiceField()).getMethodName()); StringUtils.uncapitalize(entity.getSimpleTypeName())); annotations.add(getInitBinderAnnotation);
public JavaSymbolName getEmbeddedIdMutatorMethodName() { final List<JavaSymbolName> fieldNames = new ArrayList<JavaSymbolName>(); for (final FieldMetadata field : fieldInitializers.keySet()) { fieldNames.add(field.getFieldName()); } int index = -1; JavaSymbolName embeddedIdField; while (true) { // Compute the required field name index++; embeddedIdField = new JavaSymbolName("embeddedIdClass" + StringUtils.repeat("_", index)); if (!fieldNames.contains(embeddedIdField)) { // Found a usable name break; } } return BeanInfoUtils.getMutatorMethodName(embeddedIdField); }
final JavaSymbolName fieldName = new JavaSymbolName("rnd" + StringUtils.repeat("_", index)); this.rndFieldName = fieldName; final FieldMetadata candidate = governorTypeDetails.getField(fieldName); if (candidate != null) { if (!Modifier.isPrivate(candidate.getModifier())) { if (!candidate.getFieldType().equals(RANDOM)) {
new JavaSymbolName(String.format(countPattern, field.getFieldName() .getSymbolNameCapitalisedFirstLetter())); final JavaType paramType = field.getFieldType().getBaseType(); parameterTypes.add(AnnotatedJavaType.convertFromJavaType(paramType)); parameterNames.add(new JavaSymbolName(StringUtils.uncapitalize(field.getFieldName() .getSymbolName()))); AnnotatedJavaType.convertFromAnnotatedJavaTypes(parameterTypes)); if (existingMethod != null) { return existingMethod;
/** * This method returns field to included on service for a Service or * Repository * * @param service * @return */ private FieldMetadata getFieldFor(JavaType type) { // Generating service field name final JavaSymbolName fieldName = new JavaSymbolName(StringUtils.uncapitalize(type.getSimpleTypeName())); FieldMetadata currentField = governorTypeDetails.getField(fieldName); if (currentField != null) { Validate.isTrue(currentField.getFieldType().equals(type), "Field %s already in %s but type not match: expected %s", currentField.getFieldName(), governorTypeDetails.getType(), type); return currentField; } return new FieldMetadataBuilder(getId(), Modifier.PRIVATE, new ArrayList<AnnotationMetadataBuilder>(), fieldName, type).build(); }