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

farm.nurture.laminar.generator.ast.javalang.AstGrpcServerSelect 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.JAVA_SQL_DATE;
import static farm.nurture.laminar.generator.Constants.JAVA_SQL_TIMESTAMP;
import static farm.nurture.laminar.generator.Constants.PARAM_VALUES;
import static farm.nurture.laminar.generator.Constants.PROTO_TYPE_BYTES;
import static farm.nurture.laminar.generator.Constants.PROTO_TYPE_DOUBLE;
import static farm.nurture.laminar.generator.Constants.PROTO_TYPE_FLOAT;
import static farm.nurture.laminar.generator.Constants.REQUEST_GET;
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 static farm.nurture.laminar.generator.Constants.STRING;

import farm.nurture.laminar.generator.AppConfigVO;
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 AstGrpcServerSelect extends AstBase {

    private String ServiceGrpcServerSelectF =
        TemplatesVO.getTEMPLATE_DIR() + "/java/ServiceGrpcServerSelect.template";
    private String ServiceGrpcServerSelect = readTemplateFile(ServiceGrpcServerSelectF);
    private String ServiceGrpcServerSelectImplF =
        TemplatesVO.getTEMPLATE_DIR() + "/java/ServiceGrpcServerSelectImpl.template";
    private String ServiceGrpcServerSelectImpl = readTemplateFile(ServiceGrpcServerSelectImplF);
    StringBuilder serverSelectContent;

    public AstGrpcServerSelect(StringBuilder serverSelectContent) {
        this.serverSelectContent = serverSelectContent;
    }

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

        if (!entry.isMutation()) {
            selectResponse(entry, requestFields);
        }
    }

    void selectResponse(AppConfigVO entry, List requestFields) {

        StringBuilder grpcServerParamValues = new StringBuilder(512);
        parameterHandling(entry.getReqName(), requestFields, grpcServerParamValues);

        if (entry.isDeclGrpc()) {
            String commentImpl = (entry.isImplGrpc()) ? "" : "//";
            serverSelectContent
                .append('\n')
                .append(
                    ServiceGrpcServerSelect.replace(SERVICE_NAME, entry.getTitle())
                        .replace(SERVICE_REQ, entry.getReqName())
                        .replace(SERVICE_RES, entry.getResName())
                            .
                        //                            replace("@paramValues@",
                        // grpcServerParamValues.toString()).
                            replace("@grpc_impl@", commentImpl))
                .append('\n');
        }

        if (entry.isImplGrpc()) {
            String addRecords =
                (entry.isSqlUniquekey())
                    ? "for ( @service_response@VO vo : recordList)  { responseBuilder.setRecords(vo.buildProto()); break; }"
                    : "for ( @service_response@VO vo : recordList)  responseBuilder.addRecords(vo.buildProto());";

            StringBuilder sqlReplaceConent = new StringBuilder();
            replaceSql(entry.getSqlReplaces(), sqlReplaceConent);
            serverSelectContent
                .append('\n')
                .append(
                    ServiceGrpcServerSelectImpl.replace(SERVICE_NAME, entry.getTitle())
                        .replace("@add_records@", addRecords)
                        .replace(SERVICE_REQ, entry.getReqName())
                        .replace(SERVICE_RES, entry.getResName())
                        .replace("@sqlreplace@", sqlReplaceConent.toString())
                        .replace(PARAM_VALUES, grpcServerParamValues.toString()))
                .append('\n');
        }
    }

    void parameterHandling(
        String requestName, List paramDetails, StringBuilder grpcServerParamValues) {

        if (!paramDetails.isEmpty()) {

            grpcServerParamValues.append("paramValues = new Object[] {");
            boolean isFirst = true;
            for (FieldDetail aParam : paramDetails) {

                String fldName = aParam.getFldNameCamel();
                if (isFirst) isFirst = false;
                else grpcServerParamValues.append(',');
                String getSetSuffix = Character.toUpperCase(fldName.charAt(0)) + fldName.substring(1);
                if (aParam.getJavaType().equals(JAVA_SQL_DATE))
                    grpcServerParamValues.append(" new java.sql.Date(request.get")
                        .append(getSetSuffix).append("() )");
                else if (aParam.getJavaType().equals(JAVA_SQL_TIMESTAMP))
                    grpcServerParamValues.append(" new java.sql.Timestamp(request.get")
                        .append(getSetSuffix).append("() )");
                else if (aParam.getProtoType().equals(PROTO_TYPE_BYTES))
                    grpcServerParamValues.append(" (request.get").append(getSetSuffix)
                        .append("().toByteArray() )");
                else if (aParam.getProtoType().startsWith("enum "))
                    grpcServerParamValues.append(REQUEST_GET).append(getSetSuffix)
                        .append("().name() ");
                else if (aParam.getProtoType().contains("int") && "offset".equalsIgnoreCase(getSetSuffix))
                    grpcServerParamValues.append(REQUEST_GET).append(getSetSuffix).append("() ");
                else if (aParam.getProtoType().equals(PROTO_TYPE_DOUBLE)
                    || aParam.getProtoType().equals(PROTO_TYPE_FLOAT)
                    || aParam.getProtoType().contains("int")
                    || aParam.getProtoType().contains("fixed"))
                    grpcServerParamValues.append(REQUEST_GET).append(getSetSuffix)
                        .append("() != 0 ? request.get").append(getSetSuffix).append("() : null");
                else if (aParam.getProtoType().equals(STRING))
                    grpcServerParamValues.append("StringUtils.isNonEmpty(request.get")
                        .append(getSetSuffix).append("()) ? request.get").append(getSetSuffix)
                        .append("() : null");
                else grpcServerParamValues.append(REQUEST_GET + getSetSuffix + "() ");
            }
            grpcServerParamValues.append("};");
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy