/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2014, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.activiti.forms.values; import com.google.common.collect.ImmutableList; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.task.Task; import ru.codeinside.gses.activiti.forms.api.definitions.BlockNode; import ru.codeinside.gses.activiti.forms.api.definitions.PropertyNode; import ru.codeinside.gses.activiti.forms.api.definitions.PropertyTree; import ru.codeinside.gses.activiti.forms.api.values.FormValue; import ru.codeinside.gses.activiti.forms.api.values.PropertyValue; import java.util.List; final class ValueBuilder { String id; PropertyNode node; Object value; List<ValueBuilder> valueBuilders; AuditBuilder auditBuilder; FormValue toValues(Task task, ProcessDefinition processDefinition, PropertyTree propertyTree, boolean archiveMode) { List<PropertyValue<?>> values = toCollection(); return new FormValueData(task, processDefinition, propertyTree, values, archiveMode); } List<PropertyValue<?>> toCollection() { ImmutableList.Builder<PropertyValue<?>> builder = ImmutableList.builder(); for (ValueBuilder valueBuilderObject : valueBuilders) { PropertyValue<?> propertyValue = valueBuilderObject.toPropertyValue(); builder.add(propertyValue); } return builder.build(); } private PropertyValue<?> toPropertyValue() { ValueAudit audit = null; if (auditBuilder != null) { audit = new ValueAudit(auditBuilder.login, auditBuilder.verified, auditBuilder.ownerName, auditBuilder.organizationName); } if (node instanceof BlockNode) { ImmutableList<List<PropertyValue<?>>> build; if (valueBuilders == null) { build = ImmutableList.of(); } else { ImmutableList.Builder<List<PropertyValue<?>>> builder = ImmutableList.builder(); for (ValueBuilder valueBuilderClone : valueBuilders) { List<PropertyValue<?>> propertyValue = valueBuilderClone.toCollection(); builder.add(propertyValue); } build = builder.build(); } return new Block(id, node, build, audit); } else { return new Simple<Object>(id, node, value, audit); } } }