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

farm.nurture.laminar.generator.ast.golang.AstHook 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.golang;

import static farm.nurture.laminar.generator.Constants.CODE_URL;
import static farm.nurture.laminar.generator.Constants.FORWARD_SLASH;
import static farm.nurture.laminar.generator.Constants.GO_PACKAGE;
import static farm.nurture.laminar.generator.Constants.GO_PROTO_PATH;
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.TITLE;

import farm.nurture.infra.util.StringUtils;
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.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class AstHook extends AstBase {

  private List  parts = new ArrayList<>();
  private Set ServiceRequestSet = new HashSet<>();
  private String helperContent;
  private String helperSelectContent;
  private String helperInsertContent;
  private String helperSelectInitContent;
  private String helperInsertInitContent;

  private StringBuilder helperInsertBuf = new StringBuilder();
  private StringBuilder helperInsertInitBuf = new StringBuilder();

  private List insertContents = new ArrayList<>();
  private List fileNames = new ArrayList<>();

  AstBase.Flags flags;

  public AstHook() {
    helperContent = readTemplateFile(TemplatesVO.getTEMPLATE_DIR() + "/golang/hook.go.template");
    helperSelectContent =
        readTemplateFile(TemplatesVO.getTEMPLATE_DIR() + "/golang/hook.select.template");
    helperInsertContent =
        readTemplateFile(TemplatesVO.getTEMPLATE_DIR() + "/golang/hook.insert.template");
    helperSelectInitContent =
        readTemplateFile(TemplatesVO.getTEMPLATE_DIR() + "/golang/hook.select.init.template");
    helperInsertInitContent =
        readTemplateFile(TemplatesVO.getTEMPLATE_DIR() + "/golang/hook.insert.init.template");
  }

  @Override
  public void onStart(Configuration conf, Flags flags) {
    super.onStart(conf, flags);
    this.flags = flags;
    for (AstBase b : parts) b.onStart(conf, flags);
  }

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

    for (AstBase b : parts) b.onEntry(entry, requestFields, responseFields);

    String namespace = super.getNamespace();
    if (StringUtils.isNonEmpty(namespace)) {
      namespace = FORWARD_SLASH + namespace;
    }

    String helperInsertContentL = null;
    if (!ServiceRequestSet.contains(entry.getTitle())) {
      helperInsertContentL = getString(entry, namespace);
    }

    if (helperInsertContentL != null) {

      //            helperInsertBuf.append(helperInsertContentL);
      StringBuilder contentBuilder = new StringBuilder();
      contentBuilder.append(helperInsertContentL);
      insertContents.add(contentBuilder);
      fileNames.add(entry.getTitle() + ".go");
    }
  }

  private String getString(AppConfigVO entry, String namespace) {
    String helperInsertContentL;
      helperInsertContentL = getStringHelperInsertContentL(entry);
      if (flags.isContracts()) {
      helperInsertContentL =
          helperInsertContentL.replace(
              GO_PROTO_PATH,
              "\"code.nurture.farm/Core/Contracts/"
                  + super.getServiceName()
                  + "/Gen/Go"
                  + super.getServiceName()
                  + "\"");
    } else {
      helperInsertContentL =
          helperInsertContentL.replace(
              GO_PROTO_PATH,
              "\""
                  + super.getCodeUrl()
                  + namespace
                  + FORWARD_SLASH
                  + super.getServiceName()
                  + "/zerotouch/golang/proto/"
                  + super.getGoPackage()
                  + FORWARD_SLASH
                  + super.getServiceName()
                  + "\"");
    }
    ServiceRequestSet.add(entry.getReqName());
    return helperInsertContentL;
  }

    private String getStringHelperInsertContentL(AppConfigVO entry) {
        String helperInsertContentL;
        if (entry.isMutation()) {
          helperInsertInitBuf.append(helperInsertInitContent.replace(SERVICE_REQ, entry.getTitle()));
          helperInsertContentL = helperInsertContent.replace(SERVICE_NAME, getServiceName());
          helperInsertContentL = helperInsertContentL.replace(TITLE, entry.getTitle());
          helperInsertContentL = helperInsertContentL.replace(SERVICE_REQ, entry.getTitle());
          helperInsertContentL = helperInsertContentL.replace(CODE_URL, getCodeUrl());
          helperInsertContentL = helperInsertContentL.replace("@request_name@", entry.getReqName());
          helperInsertContentL = helperInsertContentL.replace(SERVICE_RES, entry.getResName());
        } else {
          helperInsertInitBuf.append(helperSelectInitContent.replace(SERVICE_REQ, entry.getTitle()));
          helperInsertContentL = helperSelectContent.replace(SERVICE_NAME, getServiceName());
          helperInsertContentL = helperInsertContentL.replace(TITLE, entry.getTitle());
          helperInsertContentL = helperInsertContentL.replace(SERVICE_REQ, entry.getTitle());
          helperInsertContentL = helperInsertContentL.replace(CODE_URL, getCodeUrl());
          helperInsertContentL = helperInsertContentL.replace("@request_name@", entry.getReqName());
          helperInsertContentL = helperInsertContentL.replace(SERVICE_RES, entry.getResName());
        }
        return helperInsertContentL;
    }

    @Override
  public void onEnd() {
    super.onEnd();
    for (AstBase b : parts) b.onEnd();

    File pj = new File(getGoOverridePath() + "/hook");
    if (!pj.exists()) pj.mkdirs();

    String helperContentL = helperContent.replace("@insert_init@", helperInsertInitBuf.toString());
    helperContentL = helperContentL.replace(CODE_URL, super.getCodeUrl());
    helperContentL = helperContentL.replace(SERVICE_NAME, super.getServiceName());
    helperContentL = helperContentL.replace(GO_PACKAGE, super.getGoPackage() + FORWARD_SLASH + super.getServiceName() + "\"");
    helperContentL = helperContentL.replace("@insert@", helperInsertBuf.toString());

    writeToFile(super.getGoOverridePath() + "/hook/hook.go", helperContentL);
    for (int i = 0; i < fileNames.size(); i++) {
      File f = new File(super.getGoOverridePath() + "/hook/" + fileNames.get(i));
      if (!f.exists()) {
        // Write file only if it doesn't exist otherwise dont override file
        writeToFile(
            super.getGoOverridePath() + "/hook/" + fileNames.get(i),
            insertContents.get(i).toString());
      }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy