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

farm.nurture.laminar.generator.ast.javalang.AstAbstractBackendController Maven / Gradle / Ivy

The newest version!
/*
 *  Copyright 2022 Nurture.Farm
 *
 *    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 farm.nurture.laminar.generator.ast.javalang;

import static farm.nurture.laminar.generator.Constants.ABSTRACT_BACKEND_CONTROLLER_TEMPLATE;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_FACTORY;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_FACTORY_TEMPLATE;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_INSERT_REQ_RES;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_INSERT_TEMPLATE;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_SELECT_ON_DATA;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_SELECT_REQ_RES;
import static farm.nurture.laminar.generator.Constants.BACKEND_CONTROLLER_SELECT_TEMPLATE;
import static farm.nurture.laminar.generator.Constants.FORWARD_SLASH;
import static farm.nurture.laminar.generator.Constants.JAVA_PACKAGE;
import static farm.nurture.laminar.generator.Constants.SERVICE_NAME;
import static farm.nurture.laminar.generator.Constants.SERVICE_REQ;
import static farm.nurture.laminar.generator.Constants.SERVICE_RES;

import farm.nurture.laminar.generator.AppConfigVO;
import farm.nurture.laminar.generator.Configuration;
import farm.nurture.laminar.generator.FieldDetail;
import farm.nurture.laminar.generator.TemplatesVO;
import farm.nurture.laminar.generator.ast.AstBase;
import java.util.List;

public class AstAbstractBackendController extends AstBase {

    private static String AbstractBackendControllerF =
        TemplatesVO.getTEMPLATE_DIR() + ABSTRACT_BACKEND_CONTROLLER_TEMPLATE;
    private static String BackendControllerFactoryF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_FACTORY_TEMPLATE;
    private static String BackendControllerInsertF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_INSERT_TEMPLATE;
    private static String BackendControllerInsertReqResF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_INSERT_REQ_RES;
    private static String BackendControllerSelectF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_SELECT_TEMPLATE;
    private static String BackendControllerSelectOnDataF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_SELECT_ON_DATA;
    private static String BackendControllerSelectReqResF =
        TemplatesVO.getTEMPLATE_DIR() + BACKEND_CONTROLLER_SELECT_REQ_RES;
    private final String AbstractBackendController;
    private final String BackendControllerFactory;
    private final String BackendControllerInsert;
    private final String BackendControllerInsertReqRes;
    private final String BackendControllerSelect;
    private final String BackendControllerSelectOnData;
    private final String BackendControllerSelectReqRes;
    private StringBuilder backendControllerSb = new StringBuilder(4096);

    public AstAbstractBackendController() {
        AbstractBackendController = readTemplateFile(AbstractBackendControllerF);
        BackendControllerFactory = readTemplateFile(BackendControllerFactoryF);
        BackendControllerInsert = readTemplateFile(BackendControllerInsertF);
        BackendControllerInsertReqRes = readTemplateFile(BackendControllerInsertReqResF);
        BackendControllerSelect = readTemplateFile(BackendControllerSelectF);
        BackendControllerSelectOnData = readTemplateFile(BackendControllerSelectOnDataF);
        BackendControllerSelectReqRes = readTemplateFile(BackendControllerSelectReqResF);
    }

    @Override
    public void onStart(Configuration conf, AstBase.Flags flags) {
        super.onStart(conf, flags);
    }

    @Override
    public void onEntry(
        AppConfigVO entry, List requestFields, List responseFields) {

        if (entry.isDeclGrpc()) {
            ifDeclGrpc(entry);
        }

        if (entry.isImplGrpc()) {
            ifImplGrpc(entry);
        }

        if (entry.isImplGrpc() || entry.isDeclGrpc()) {
            ifImplOrDecl(entry);
        }
    }

    private void ifImplOrDecl(AppConfigVO entry) {
        if (entry.isMutation()) {
            backendControllerSb.append(
                BackendControllerInsert.replace(SERVICE_NAME, entry.getTitle())
                    .replace(SERVICE_REQ, entry.getReqName())
                    .replace(SERVICE_RES, entry.getResName()));

            // Bulk onError
            backendControllerSb.append(
                BackendControllerInsert.replace(SERVICE_NAME, "Bulk" + entry.getTitle())
                    .replace(SERVICE_REQ, entry.getBulkReqName())
                    .replace(SERVICE_RES, entry.getBulkResName()));

        } else {
            backendControllerSb.append(
                BackendControllerSelect.replace(SERVICE_NAME, entry.getTitle())
                    .replace(SERVICE_REQ, entry.getReqName())
                    .replace(SERVICE_RES, entry.getResName()));
        }
    }

    private void ifImplGrpc(AppConfigVO entry) {
        if (!entry.isMutation()) {
            backendControllerSb.append(
                BackendControllerSelectOnData.replace(SERVICE_NAME, entry.getReqName())
                    .replace(SERVICE_RES, entry.getResName()));
        }
    }

    private void ifDeclGrpc(AppConfigVO entry) {
        if (entry.isMutation()) {

            // Regular insert
            backendControllerSb.append(
                BackendControllerInsertReqRes.replace(SERVICE_NAME, entry.getTitle())
                    .replace(SERVICE_REQ, entry.getReqName())
                    .replace(SERVICE_RES, entry.getResName()));

            // Bulk insert
            backendControllerSb.append(
                BackendControllerInsertReqRes.replace(SERVICE_NAME, "Bulk" + entry.getTitle())
                    .replace(SERVICE_REQ, entry.getBulkReqName())
                    .replace(SERVICE_RES, entry.getBulkResName()));

        } else {
            backendControllerSb.append(
                BackendControllerSelectReqRes.replace(SERVICE_NAME, entry.getTitle())
                    .replace(SERVICE_REQ, entry.getReqName())
                    .replace(SERVICE_RES, entry.getResName()));
        }
    }

    @Override
    public void onEnd() {
        super.onEnd();

        writeToFile(
            getJavaPackageDirectory() + FORWARD_SLASH + BACKEND_CONTROLLER_FACTORY,
            BackendControllerFactory.replace(JAVA_PACKAGE, getJavaPackage()));

        writeToFile(
            getJavaPackageDirectory() + FORWARD_SLASH + BACKEND_CONTROLLER,
            AbstractBackendController.replace("@hooks@", backendControllerSb.toString())
                .replace(JAVA_PACKAGE, getJavaPackage()));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy