/*
* Copyright 2016 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.commons.layout;
import java.util.List;
import org.kie.workbench.common.forms.model.FieldDefinition;
import org.kie.workbench.common.forms.model.FormDefinition;
import org.kie.workbench.common.forms.model.FormLayoutComponent;
import org.uberfire.ext.layout.editor.api.editor.LayoutColumn;
import org.uberfire.ext.layout.editor.api.editor.LayoutComponent;
import org.uberfire.ext.layout.editor.api.editor.LayoutRow;
import org.uberfire.ext.layout.editor.api.editor.LayoutTemplate;
public abstract class AbstractFormLayoutTemplateGenerator implements FormLayoutTemplateGenerator {
@Override
public void generateLayoutTemplate(FormDefinition formDefinition) {
formDefinition.setLayoutTemplate(new LayoutTemplate());
addFieldsToTemplate(formDefinition.getLayoutTemplate(),
formDefinition.getFields(),
formDefinition.getId());
}
@Override
public void updateLayoutTemplate(FormDefinition form,
List<FieldDefinition> newFields) {
newFields.forEach(newField -> {
if (form.getFieldById(newField.getId()) == null) {
form.getFields().add(newField);
}
});
if (form.getLayoutTemplate() == null || form.getLayoutTemplate().isEmpty()) {
generateLayoutTemplate(form);
return;
}
addFieldsToTemplate(form.getLayoutTemplate(),
newFields,
form.getId());
}
protected void addFieldsToTemplate(LayoutTemplate template,
List<FieldDefinition> fields,
String formId) {
fields.forEach(field -> {
LayoutComponent layoutComponent = new LayoutComponent(getDraggableType());
layoutComponent.addProperty(FormLayoutComponent.FORM_ID,
formId);
layoutComponent.addProperty(FormLayoutComponent.FIELD_ID,
field.getId());
LayoutColumn column = new LayoutColumn("12");
column.add(layoutComponent);
LayoutRow row = new LayoutRow();
row.add(column);
template.addRow(row);
});
}
}