/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.forms.jbpm.server.service.formGeneration.impl.authoring; import java.util.List; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.inject.Named; import org.guvnor.common.services.backend.util.CommentedOptionFactory; import org.kie.workbench.common.forms.commons.layout.FormLayoutTemplateGenerator; import org.kie.workbench.common.forms.editor.service.backend.FormModelHandler; import org.kie.workbench.common.forms.editor.service.backend.FormModelHandlerManager; import org.kie.workbench.common.forms.editor.service.shared.VFSFormFinderService; import org.kie.workbench.common.forms.editor.type.FormResourceTypeDefinition; import org.kie.workbench.common.forms.jbpm.server.service.formGeneration.impl.AbstractBPMNFormGeneratorService; import org.kie.workbench.common.forms.jbpm.server.service.formGeneration.impl.GenerationContext; import org.kie.workbench.common.forms.model.FieldDefinition; import org.kie.workbench.common.forms.model.FormDefinition; import org.kie.workbench.common.forms.model.JavaModel; import org.kie.workbench.common.forms.serialization.FormDefinitionSerializer; import org.kie.workbench.common.forms.service.FieldManager; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.Path; import org.uberfire.io.IOService; @Authoring @Dependent public class BPMNVFSFormDefinitionGeneratorService extends AbstractBPMNFormGeneratorService<Path> { private FormModelHandlerManager formModelHandlerManager; private VFSFormFinderService formFinderService; private FormDefinitionSerializer formSerializer; private IOService ioService; private CommentedOptionFactory commentedOptionFactory; @Inject public BPMNVFSFormDefinitionGeneratorService(FieldManager fieldManager, FormLayoutTemplateGenerator layoutTemplateGenerator, FormModelHandlerManager formModelHandlerManager, VFSFormFinderService formFinderService, FormDefinitionSerializer formSerializer, @Named("ioStrategy") IOService ioService, CommentedOptionFactory commentedOptionFactory) { super(fieldManager, layoutTemplateGenerator); this.formModelHandlerManager = formModelHandlerManager; this.formFinderService = formFinderService; this.formSerializer = formSerializer; this.ioService = ioService; this.commentedOptionFactory = commentedOptionFactory; } public FormDefinition createRootFormDefinition(GenerationContext<Path> context) { FormModelHandler modelHandler = formModelHandlerManager.getFormModelHandler(context.getFormModel().getClass()); modelHandler.init(context.getFormModel(), context.getSource()); List<FieldDefinition> modelFields = modelHandler.getAllFormModelFields(); FormDefinition form; org.uberfire.java.nio.file.Path kiePath = Paths.convert(context.getSource()); if (ioService.exists(kiePath)) { form = formSerializer.deserialize(ioService.readAllString(kiePath)); form.getFields().forEach(originalField -> { FieldDefinition modelField = modelFields.stream().filter(field -> field.getBinding().equals(originalField.getBinding())).findFirst().orElse(null); if (modelField != null) { originalField.setName(modelField.getName()); originalField.setStandaloneClassName(modelField.getStandaloneClassName()); modelFields.remove(modelField); } else { originalField.setBinding(null); } }); form.getFields().addAll(modelFields); layoutTemplateGenerator.updateLayoutTemplate(form, modelFields); } else { form = new FormDefinition(context.getFormModel()); form.setId(context.getFormModel().getName()); form.setName(context.getSource().getFileName()); form.getFields().addAll(modelFields); layoutTemplateGenerator.generateLayoutTemplate(form); } form.setModel(context.getFormModel()); return form; } @Override protected FormDefinition createModelFormDefinition(String modelType, GenerationContext<Path> context) { FormDefinition form = super.createModelFormDefinition(modelType, context); org.uberfire.java.nio.file.Path path = Paths.convert(context.getSource()).getParent().resolve(form.getName() + "." + FormResourceTypeDefinition.EXTENSION); ioService.write(path, formSerializer.serialize(form), commentedOptionFactory.makeCommentedOption("Automatically generated form")); return form; } @Override protected List<FieldDefinition> extractModelFields(JavaModel formModel, GenerationContext<Path> context) { FormModelHandler handler = formModelHandlerManager.getFormModelHandler(formModel.getClass()); handler.init(formModel, context.getSource()); return handler.getAllFormModelFields(); } @Override protected FormDefinition findFormDefinitionForModelType(String modelType, GenerationContext<Path> context) { FormDefinition form = super.findFormDefinitionForModelType(modelType, context); if (form != null) { return form; } return formFinderService.findFormsForType(modelType, context.getSource()).stream().findFirst().orElse(null); } }