Search in sources :

Example 1 with FieldType

use of org.kie.workbench.common.forms.model.FieldType in project kie-wb-common by kiegroup.

the class FormEditorHelper method initHelper.

public void initHelper(FormModelerContent content) {
    this.content = content;
    if (unbindedFields != null && !unbindedFields.isEmpty()) {
        return;
    }
    for (FieldType baseType : enabledPaletteFieldTypes) {
        EditorFieldLayoutComponent layoutComponent = editorFieldLayoutComponents.get();
        if (layoutComponent != null) {
            FieldDefinition field = fieldManager.getDefinitionByFieldType(baseType);
            field.setName(generateUnboundFieldName(field));
            layoutComponent.init(content.getRenderingContext(), field);
            unbindedFields.put(field.getId(), new Pair<>(layoutComponent, field));
        }
    }
    addAvailableFields();
}
Also used : FieldDefinition(org.kie.workbench.common.forms.model.FieldDefinition) EditorFieldLayoutComponent(org.kie.workbench.common.forms.editor.client.editor.rendering.EditorFieldLayoutComponent) FieldType(org.kie.workbench.common.forms.model.FieldType)

Example 2 with FieldType

use of org.kie.workbench.common.forms.model.FieldType in project kie-wb-common by kiegroup.

the class FormDefinitionsProcessor method extracFormFields.

private List<Map<String, String>> extracFormFields(TypeElement type, FieldPolicy policy, I18nSettings i18nSettings) throws Exception {
    final Elements elementUtils = processingEnv.getElementUtils();
    Collection<FieldInfo> fieldInfos = extractFieldInfos(type, fieldElement -> {
        if (policy.equals(FieldPolicy.ALL)) {
            AnnotationMirror annotation = GeneratorUtils.getAnnotation(elementUtils, fieldElement, SkipFormField.class.getName());
            if (annotation != null) {
                return false;
            }
        } else {
            AnnotationMirror annotation = GeneratorUtils.getAnnotation(elementUtils, fieldElement, FormField.class.getName());
            if (annotation == null) {
                return false;
            }
        }
        return true;
    });
    List<Map<String, String>> elementsSettings = new ArrayList<>();
    for (FieldInfo fieldInfo : fieldInfos) {
        if (fieldInfo.getter != null && fieldInfo.setter != null) {
            String fieldName = fieldInfo.fieldElement.getSimpleName().toString();
            String fieldLabel = fieldName;
            String helpMessage = "";
            String binding = fieldName;
            String methodName = "getFormElement_" + fieldName;
            Map<String, Object> elementContext = new HashMap<>();
            boolean isList = false;
            org.kie.workbench.common.forms.model.TypeKind typeKind = org.kie.workbench.common.forms.model.TypeKind.BASE;
            boolean overrideI18n = false;
            TypeMirror finalType = fieldInfo.fieldElement.asType();
            String fieldModifier = "";
            if (finalType instanceof DeclaredType) {
                Element finalTypeElement = processingEnv.getTypeUtils().asElement(finalType);
                if (finalTypeElement.getKind().equals(ElementKind.CLASS)) {
                    FieldDefinition fieldDefinitionAnnotation = finalTypeElement.getAnnotation(FieldDefinition.class);
                    if (fieldDefinitionAnnotation != null) {
                        // Override the using the i18n mechanism
                        if (fieldDefinitionAnnotation.i18nMode().equals(I18nMode.OVERRIDE_I18N_KEY)) {
                            fieldLabel = finalType.toString() + i18nSettings.separator() + fieldDefinitionAnnotation.labelKeySuffix();
                            Collection<FieldInfo> labelInfos = extractFieldInfos((TypeElement) finalTypeElement, fieldElement -> fieldElement.getAnnotation(FieldLabel.class) != null);
                            if (labelInfos != null && labelInfos.size() == 1) {
                                FieldInfo labelInfo = labelInfos.iterator().next();
                                fieldLabel = finalType.toString() + i18nSettings.separator() + labelInfo.fieldElement.getSimpleName();
                            }
                            helpMessage = finalType.toString() + i18nSettings.separator() + fieldDefinitionAnnotation.helpMessageKeySuffix();
                            Collection<FieldInfo> helpMessages = extractFieldInfos((TypeElement) finalTypeElement, fieldElement -> fieldElement.getAnnotation(FieldHelp.class) != null);
                            if (helpMessages != null && helpMessages.size() == 1) {
                                FieldInfo helpInfo = helpMessages.iterator().next();
                                helpMessage = finalType.toString() + i18nSettings.separator() + helpInfo.fieldElement.getSimpleName();
                            }
                        }
                        Collection<FieldInfo> fieldValue = extractFieldInfos((TypeElement) finalTypeElement, fieldElement -> fieldElement.getAnnotation(FieldValue.class) != null);
                        if (fieldValue == null || fieldValue.size() != 1) {
                            throw new Exception("Problem processing FieldDefinition [" + finalType + "]: it should have one field marked as @FieldValue");
                        }
                        FieldInfo valueInfo = fieldValue.iterator().next();
                        binding += "." + valueInfo.getFieldElement().getSimpleName();
                        fieldModifier = fixClassName(finalType.toString()) + "_FieldStatusModifier";
                        finalType = valueInfo.getFieldElement().asType();
                        overrideI18n = !fieldDefinitionAnnotation.i18nMode().equals(I18nMode.DONT_OVERRIDE);
                    } else {
                        FormDefinition formDefinitionAnnotation = finalTypeElement.getAnnotation(FormDefinition.class);
                        if (formDefinitionAnnotation != null) {
                            fieldLabel = finalType.toString() + i18nSettings.separator() + FieldDefinition.LABEL;
                            Collection<FieldInfo> labelInfos = extractFieldInfos((TypeElement) finalTypeElement, fieldElement -> fieldElement.getAnnotation(FieldLabel.class) != null);
                            if (labelInfos != null && labelInfos.size() == 1) {
                                FieldInfo labelInfo = labelInfos.iterator().next();
                                fieldLabel = finalType.toString() + i18nSettings.separator() + labelInfo.fieldElement.getSimpleName();
                                overrideI18n = true;
                            }
                            helpMessage = finalType.toString() + i18nSettings.separator() + FieldDefinition.HELP_MESSAGE;
                            Collection<FieldInfo> helpMessages = extractFieldInfos((TypeElement) finalTypeElement, fieldElement -> fieldElement.getAnnotation(FieldHelp.class) != null);
                            if (helpMessages != null && helpMessages.size() == 1) {
                                FieldInfo helpInfo = helpMessages.iterator().next();
                                helpMessage = finalType.toString() + i18nSettings.separator() + helpInfo.fieldElement.getSimpleName();
                                overrideI18n = true;
                            }
                            typeKind = org.kie.workbench.common.forms.model.TypeKind.OBJECT;
                        }
                    }
                }
                DeclaredType fieldType = (DeclaredType) finalType;
                if (processingEnv.getTypeUtils().isAssignable(fieldType.asElement().asType(), listType)) {
                    if (fieldType.getTypeArguments().size() != 1) {
                        throw new IllegalArgumentException("Impossible to generate a field for type " + fieldType.toString() + ". Type should have one and only one Type arguments.");
                    }
                    isList = true;
                    finalType = fieldType.getTypeArguments().get(0);
                    if (FormModelPropertiesUtil.isBaseType(finalType.toString())) {
                        typeKind = org.kie.workbench.common.forms.model.TypeKind.BASE;
                    } else if (elementUtils.getTypeElement(finalType.toString()).getSuperclass().toString().startsWith("java.lang.Enum")) {
                        typeKind = org.kie.workbench.common.forms.model.TypeKind.ENUM;
                    } else {
                        typeKind = org.kie.workbench.common.forms.model.TypeKind.OBJECT;
                    }
                } else if (elementUtils.getTypeElement(finalType.toString()).getSuperclass().toString().startsWith("java.lang.Enum")) {
                    typeKind = org.kie.workbench.common.forms.model.TypeKind.ENUM;
                }
            }
            elementContext.put("formModel", type.getQualifiedName().toString());
            elementContext.put("methodName", methodName);
            elementContext.put("fieldName", fieldName);
            elementContext.put("binding", binding);
            elementContext.put("type", typeKind.toString());
            elementContext.put("className", finalType.toString());
            elementContext.put("isList", String.valueOf(isList));
            elementContext.put("fieldModifier", fieldModifier);
            Map<String, String> params = new HashMap<>();
            elementContext.put("params", params);
            String afterElement = "";
            FormField settings = fieldInfo.fieldElement.getAnnotation(FormField.class);
            if (settings != null) {
                String typeName;
                try {
                    typeName = settings.type().getName();
                } catch (MirroredTypeException exception) {
                    typeName = exception.getTypeMirror().toString();
                }
                if (StringUtils.isEmpty(typeName)) {
                    typeName = FieldType.class.getName();
                }
                afterElement = settings.afterElement();
                elementContext.put("preferredType", typeName);
                if (!overrideI18n && !isEmpty(settings.labelKey())) {
                    fieldLabel = settings.labelKey();
                }
                if (!overrideI18n && !isEmpty(settings.helpMessageKey())) {
                    helpMessage = settings.helpMessageKey();
                }
                elementContext.put("required", Boolean.valueOf(settings.required()).toString());
                elementContext.put("readOnly", Boolean.valueOf(settings.readonly()).toString());
                for (FieldParam fieldParam : settings.settings()) {
                    params.put(fieldParam.name(), fieldParam.value());
                }
                elementContext.put("wrap", Boolean.valueOf(settings.layoutSettings().wrap()).toString());
                elementContext.put("horizontalSpan", String.valueOf(settings.layoutSettings().horizontalSpan()));
                elementContext.put("verticalSpan", String.valueOf(settings.layoutSettings().verticalSpan()));
            } else {
                elementContext.put("preferredType", FieldType.class.getName());
                elementContext.put("required", Boolean.FALSE.toString());
                elementContext.put("readOnly", Boolean.FALSE.toString());
                elementContext.put("wrap", Boolean.FALSE.toString());
                elementContext.put("horizontalSpan", "1");
                elementContext.put("verticalSpan", "1");
            }
            if (!overrideI18n) {
                if (!isEmpty(i18nSettings.keyPreffix())) {
                    fieldLabel = i18nSettings.keyPreffix() + i18nSettings.separator() + fieldLabel;
                    helpMessage = i18nSettings.keyPreffix() + i18nSettings.separator() + helpMessage;
                }
            }
            elementContext.put("labelKey", fieldLabel);
            elementContext.put("helpMessageKey", helpMessage);
            elementContext.put("afterElement", afterElement);
            extractFieldExtraSettings(elementContext, fieldInfo.fieldElement);
            StringBuffer methodCode = writeTemplate("templates/FieldElement.ftl", elementContext);
            Map<String, String> fieldSettings = new HashMap<>();
            fieldSettings.put("elementName", fieldName);
            fieldSettings.put("afterElement", afterElement);
            fieldSettings.put("methodName", methodName);
            fieldSettings.put("method", methodCode.toString());
            elementsSettings.add(fieldSettings);
        }
    }
    return elementsSettings;
}
Also used : FieldParam(org.kie.workbench.common.forms.adf.definitions.annotations.FieldParam) HashMap(java.util.HashMap) TypeElement(javax.lang.model.element.TypeElement) Element(javax.lang.model.element.Element) PackageElement(javax.lang.model.element.PackageElement) VariableElement(javax.lang.model.element.VariableElement) ExecutableElement(javax.lang.model.element.ExecutableElement) FieldDefinition(org.kie.workbench.common.forms.adf.definitions.annotations.metaModel.FieldDefinition) ArrayList(java.util.ArrayList) Elements(javax.lang.model.util.Elements) MirroredTypeException(javax.lang.model.type.MirroredTypeException) TypeMirror(javax.lang.model.type.TypeMirror) FormDefinition(org.kie.workbench.common.forms.adf.definitions.annotations.FormDefinition) SkipFormField(org.kie.workbench.common.forms.adf.definitions.annotations.SkipFormField) FormField(org.kie.workbench.common.forms.adf.definitions.annotations.FormField) SkipFormField(org.kie.workbench.common.forms.adf.definitions.annotations.SkipFormField) MirroredTypeException(javax.lang.model.type.MirroredTypeException) GenerationException(org.uberfire.annotations.processors.exceptions.GenerationException) TemplateException(freemarker.template.TemplateException) IOException(java.io.IOException) FieldType(org.kie.workbench.common.forms.model.FieldType) AnnotationMirror(javax.lang.model.element.AnnotationMirror) Map(java.util.Map) HashMap(java.util.HashMap) DeclaredType(javax.lang.model.type.DeclaredType)

Aggregations

FieldType (org.kie.workbench.common.forms.model.FieldType)2 TemplateException (freemarker.template.TemplateException)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 AnnotationMirror (javax.lang.model.element.AnnotationMirror)1 Element (javax.lang.model.element.Element)1 ExecutableElement (javax.lang.model.element.ExecutableElement)1 PackageElement (javax.lang.model.element.PackageElement)1 TypeElement (javax.lang.model.element.TypeElement)1 VariableElement (javax.lang.model.element.VariableElement)1 DeclaredType (javax.lang.model.type.DeclaredType)1 MirroredTypeException (javax.lang.model.type.MirroredTypeException)1 TypeMirror (javax.lang.model.type.TypeMirror)1 Elements (javax.lang.model.util.Elements)1 FieldParam (org.kie.workbench.common.forms.adf.definitions.annotations.FieldParam)1 FormDefinition (org.kie.workbench.common.forms.adf.definitions.annotations.FormDefinition)1 FormField (org.kie.workbench.common.forms.adf.definitions.annotations.FormField)1 SkipFormField (org.kie.workbench.common.forms.adf.definitions.annotations.SkipFormField)1