All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.speedment.generator.standard.internal.util.GenerateMethodBodyUtil Maven / Gradle / Ivy

/**
 *
 * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
 *
 * 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 com.speedment.generator.standard.internal.util;

import static com.speedment.common.codegen.constant.DefaultAnnotationUsage.OVERRIDE;
import com.speedment.common.codegen.constant.DefaultType;
import com.speedment.common.codegen.constant.SimpleParameterizedType;
import com.speedment.common.codegen.model.File;
import com.speedment.common.codegen.model.Import;
import com.speedment.common.codegen.model.Method;
import static com.speedment.common.codegen.util.Formatting.*;
import static com.speedment.generator.standard.manager.GeneratedManagerImplTranslator.ENTITY_CREATE_METHOD_NAME;
import com.speedment.generator.translator.TranslatorSupport;
import com.speedment.runtime.config.Column;
import com.speedment.runtime.config.Table;
import com.speedment.runtime.config.trait.HasEnabled;
import com.speedment.runtime.core.exception.SpeedmentException;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import static java.util.stream.Collectors.joining;
import java.util.stream.Stream;

/**
 *
 * @author  Emil Forslund
 * @since   3.0.0
 */
public final class GenerateMethodBodyUtil {

    public static Method generateFields(TranslatorSupport support, File file, String methodName, Supplier> columnsSupplier) {
        return Method.of(methodName, 
                DefaultType.stream(
                    SimpleParameterizedType.create(
                        com.speedment.runtime.field.Field.class,
                        support.entityType()
                    )
                )
            )
            .public_().add(OVERRIDE)
            .add(generateFieldsBody(support, file, columnsSupplier));
    }

    public static String[] generateFieldsBody(TranslatorSupport
support, File file, Supplier> columnsSupplier) { file.add(Import.of(Stream.class)); final List rows = new LinkedList<>(); rows.add("return Stream.of("); rows.add(indent(columnsSupplier.get() .filter(HasEnabled::isEnabled) .map(Column::getJavaName) .map(support.namer()::javaStaticFieldName) .map(field -> support.typeName() + "." + field) .collect(joining("," + nl())) )); rows.add(");"); return rows.toArray(new String[rows.size()]); } public static Method generateNewEmptyEntity(TranslatorSupport
support, File file, Supplier> columnsSupplier) { return Method.of(ENTITY_CREATE_METHOD_NAME, support.entityType()) .public_().add(OVERRIDE) .add(generateNewEmptyEntityBody(support, file, columnsSupplier)); } public static String[] generateNewEmptyEntityBody(TranslatorSupport
support, File file, Supplier> columnsSupplier) { file.add(Import.of(support.entityImplType())); return new String[] { "return new " + support.entityImplName() + "();" }; } @FunctionalInterface public interface ReadFromResultSet { String readFromResultSet(File file, Column c, AtomicInteger position); } public static String[] generateApplyResultSetBody(ReadFromResultSet readFromResultSet, TranslatorSupport
support, File file, Supplier> columnsSupplier) { file.add(Import.of(SQLException.class)); final List rows = new LinkedList<>(); rows.add("final " + support.entityName() + " entity = createEntity();"); final Stream.Builder streamBuilder = Stream.builder(); final AtomicInteger position = new AtomicInteger(1); columnsSupplier.get() .filter(HasEnabled::isEnabled) .forEachOrdered(c -> streamBuilder.add("entity.set" + support.namer().javaTypeName(c.getJavaName()) + "(\t " + readFromResultSet.readFromResultSet(file, c, position) + " \t);") ); rows.add( "try " + block(streamBuilder.build()) + " catch (final " + SQLException.class.getSimpleName() + " sqle) " + block( "throw new " + SpeedmentException.class.getSimpleName() + "(sqle);" )); rows.add("return entity;"); return rows.toArray(new String[rows.size()]); } private GenerateMethodBodyUtil() { throw new UnsupportedOperationException(); } }