ru.codeinside.gses.activiti.forms.values.ValueBuilder.java Source code

Java tutorial

Introduction

Here is the source code for ru.codeinside.gses.activiti.forms.values.ValueBuilder.java

Source

/*
 * 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);
        }
    }
}