writing()

in generators/CoreCLRStatelessService/index.js [58:451]


  writing() {
    var serviceProjName = this.serviceName;
    var appPackage = this.props.projName;
    var servicePackage = this.serviceName + "Pkg";
    var serviceName = this.serviceName;
    var serviceTypeName = this.serviceName + "Type";
    var appTypeName = this.props.projName + "Type";
    var appName = this.props.projName;

    var serviceJarName = this.serviceName.toLowerCase();

    var serviceMainClass = this.serviceName + "Service";
    var endpoint = serviceName + "Endpoint";
    var replicatorEndpoint = serviceName + "ReplicatorEndpoint";
    var replicatorConfig = serviceName + "ReplicatorConfig";
    var replicatorSecurityConfig = serviceName + "ReplicatorSecurityConfig";
    var localStoreConfig = serviceName + "LocalStoreConfig";

    var appPackagePath =
      this.isAddNewService == false
        ? path.join(this.props.projName, appPackage)
        : appPackage;
    var serviceSrcPath = path.join(this.props.projName, serviceProjName);
    appPackagePath = appName;

    var serviceProject = path.join(
      appPackage,
      "src",
      serviceSrcPath,
      serviceProjName + ".csproj"
    );
    var codePath = path.join(
      appPackage,
      appPackagePath,
      servicePackage,
      "Code"
    );

    var is_Windows = process.platform == "win32";
    var is_Linux = process.platform == "linux";
    var is_mac = process.platform == "darwin";

    var sdkScriptExtension;
    var buildScriptExtension;
    var serviceManifestFile;
    if (is_Windows) {
      sdkScriptExtension = ".ps1";
      buildScriptExtension = ".cmd";
      serviceManifestFile = "ServiceManifest.xml";
    } else {
      sdkScriptExtension = ".sh";
      buildScriptExtension = ".sh";
    }
    if (is_Linux) serviceManifestFile = "ServiceManifest_Linux.xml";
    if (is_mac) serviceManifestFile = "ServiceManifest.xml";

    this.fs.copyTpl(
      this.templatePath(
        "service/app/appPackage/servicePackage/" + serviceManifestFile
      ),
      this.destinationPath(
        path.join(
          appPackage,
          appPackagePath,
          servicePackage,
          "ServiceManifest.xml"
        )
      ),
      {
        servicePackage: servicePackage,
        serviceTypeName: serviceTypeName,
        serviceName: serviceName,
        serviceProjName: serviceProjName
      }
    );
    if (this.isAddNewService == false) {
      this.fs.copyTpl(
        this.templatePath("service/app/appPackage/ApplicationManifest.xml"),
        this.destinationPath(
          path.join(appPackage, appPackagePath, "ApplicationManifest.xml")
        ),
        {
          appTypeName: appTypeName,
          servicePackage: servicePackage,
          serviceName: serviceName,
          serviceTypeName: serviceTypeName
        }
      );
    } else {
      var fs = require("fs");
      var xml2js = require("xml2js");
      var parser = new xml2js.Parser();
      fs.readFile(
        path.join(appPackage, appPackagePath, "ApplicationManifest.xml"),
        function(err, data) {
          parser.parseString(data, function(err, result) {
            if (err) {
              return console.log(err);
            }
            result["ApplicationManifest"]["ServiceManifestImport"][
              result["ApplicationManifest"]["ServiceManifestImport"].length
            ] = {
              ServiceManifestRef: [
                {
                  $: {
                    ServiceManifestName: servicePackage,
                    ServiceManifestVersion: "1.0.0"
                  }
                }
              ]
            };
            result["ApplicationManifest"]["DefaultServices"][0]["Service"][
              result["ApplicationManifest"]["DefaultServices"][0][
                "Service"
              ].length
            ] = {
              $: { Name: serviceName },
              StatelessService: [
                {
                  $: { ServiceTypeName: serviceTypeName, InstanceCount: "1" },
                  SingletonPartition: [""]
                }
              ]
            };

            var builder = new xml2js.Builder();
            var xml = builder.buildObject(result);
            fs.writeFile(
              path.join(appPackage, appPackagePath, "ApplicationManifest.xml"),
              xml,
              function(err) {
                if (err) {
                  return console.log(err);
                }
              }
            );
          });
        }
      );
    }

    if (this.isAddNewService == false) {
      this.fs.copyTpl(
        this.templatePath("main/deploy/deploy" + sdkScriptExtension),
        this.destinationPath(
          path.join(appPackage, "install" + sdkScriptExtension)
        ),
        {
          appPackage: appPackage,
          appName: appName,
          appTypeName: appTypeName
        }
      );
    }
    if (this.isAddNewService == false) {
      this.fs.copyTpl(
        this.templatePath("main/deploy/un-deploy" + sdkScriptExtension),
        this.destinationPath(
          path.join(appPackage, "uninstall" + sdkScriptExtension)
        ),
        {
          appPackage: appPackage,
          appName: appName,
          appTypeName: appTypeName
        }
      );
    }
    if (this.isAddNewService == false) {
      this.fs.copyTpl(
        this.templatePath("main/deploy/upgrade" + sdkScriptExtension),
        this.destinationPath(
          path.join(appPackage, "upgrade" + sdkScriptExtension)
        ),
        {
          appPackage: appPackage,
          appName: appName,
          appTypeName: appTypeName
        }
      );
    }

    if (this.isAddNewService == false) {
      this.fs.copyTpl(
        this.templatePath("main/build/build" + buildScriptExtension),
        this.destinationPath(
          path.join(appPackage, "build" + buildScriptExtension)
        ),
        {
          serviceProject: serviceProject,
          codePath: codePath
        }
      );
    } else {
      var nodeFs = require("fs");
      var appendToSettings = null;
      if (is_Linux || is_mac) {
        var appendToSettings =
          "\n\
          \ndotnet restore $DIR/../" +
          serviceProject +
          " -s https://api.nuget.org/v3/index.json \
          \ndotnet build $DIR/../" +
          serviceProject +
          " -v normal\
          \ncd " +
          "`" +
          "dirname $DIR/../" +
          serviceProject +
          "`" +
          "\ndotnet publish -o ../../../../" +
          appName +
          "/" +
          appName +
          "/" +
          servicePackage +
          "/Code\
          \ncd -";
      } else if (is_Windows) {
        var appendToSettings =
          "\n\
          \ndotnet restore %~dp0\\..\\" +
          serviceProject +
          " -s https://api.nuget.org/v3/index.json \
          \ndotnet build %~dp0\\..\\" +
          serviceProject +
          ' -v normal\
          \nfor %%F in ("' +
          serviceProject +
          '") do cd %%~dpF\
          \ndotnet publish -o %~dp0\\..\\' +
          appName +
          "\\" +
          appName +
          "\\" +
          servicePackage +
          "\\Code";
      }
      nodeFs.appendFile(
        path.join(appPackage, "build" + buildScriptExtension),
        appendToSettings,
        function(err) {
          if (err) {
            return console.log(err);
          }
        }
      );
    }
    if (is_Linux) {
      this.fs.copyTpl(
        this.templatePath("main/common/dotnet-include.sh"),
        this.destinationPath(
          path.join(
            appPackage,
            appPackagePath,
            servicePackage,
            "Code",
            "dotnet-include.sh"
          )
        ),
        {}
      );
      if (this.isAddNewService == false) {
        this.fs.copyTpl(
          this.templatePath("main/common/dotnet-include.sh"),
          this.destinationPath(path.join(appPackage, "dotnet-include.sh")),
          {}
        );
      }
      this.fs.copyTpl(
        this.templatePath(
          "service/app/appPackage/servicePackage/Code/entryPoint.sh"
        ),
        this.destinationPath(
          path.join(
            appPackage,
            appPackagePath,
            servicePackage,
            "Code",
            "entryPoint.sh"
          )
        ),
        {
          serviceProjName: serviceProjName
        }
      );
    }

    this.fs.copyTpl(
      this.templatePath(
        "service/app/appPackage/servicePackage/Config/Settings.xml"
      ),
      this.destinationPath(
        path.join(
          appPackage,
          appPackagePath,
          servicePackage,
          "Config",
          "Settings.xml"
        )
      ),
      {
        serviceName: serviceName
      }
    );

    this.fs.copyTpl(
      this.templatePath("service/class/ServiceImpl.cs"),
      this.destinationPath(
        path.join(appPackage, "src", serviceSrcPath, this.serviceName + ".cs")
      ),
      {
        serviceName: serviceName,
        serviceName: this.serviceName,
        appName: appName
      }
    );
    this.fs.copyTpl(
      this.templatePath("service/class/project.csproj"),
      this.destinationPath(
        path.join(
          appPackage,
          "src",
          serviceSrcPath,
          this.serviceName + ".csproj"
        )
      ),
      {
        serviceName: this.serviceName,
        authorName: this.props.authorName
      }
    );
    this.fs.copyTpl(
      this.templatePath("service/class/Program.cs"),
      this.destinationPath(
        path.join(appPackage, "src", serviceSrcPath, "Program.cs")
      ),
      {
        serviceName: this.serviceName,
        authorName: this.props.authorName,
        appName: appName,
        serviceTypeName: serviceTypeName
      }
    );
    this.fs.copyTpl(
      this.templatePath("service/class/ServiceEventListener.cs"),
      this.destinationPath(
        path.join(appPackage, "src", serviceSrcPath, "ServiceEventListener.cs")
      ),
      {
        serviceName: this.serviceName,
        authorName: this.props.authorName,
        appName: appName,
        serviceTypeName: serviceTypeName
      }
    );
    this.fs.copyTpl(
      this.templatePath("service/class/ServiceEventSource.cs"),
      this.destinationPath(
        path.join(appPackage, "src", serviceSrcPath, "ServiceEventSource.cs")
      ),
      {
        serviceName: this.serviceName,
        authorName: this.props.authorName,
        appName: appName,
        serviceTypeName: serviceTypeName
      }
    );

    this.fs.copyTpl(
      this.templatePath("service/app/appPackage/servicePackage/Config/_readme.txt"),
      this.destinationPath(
        path.join(
          appPackage,
          appPackagePath,
          servicePackage,
          "Config",
          "_readme.txt"
        )
      )
    );

    this.fs.copyTpl(
      this.templatePath("service/app/appPackage/servicePackage/Data/_readme.txt"),
      this.destinationPath(
        path.join(
          appPackage,
          appPackagePath,
          servicePackage,
          "Data",
          "_readme.txt"
        )
      )
    );
  }