package com.intellij.javascript.karma.execution; import com.intellij.execution.configuration.EnvironmentVariablesData; import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter; import com.intellij.javascript.nodejs.util.NodePackage; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import java.io.File; public class KarmaServerSettings { private final boolean myWithCoverage; private final boolean myDebug; private final NodeJsLocalInterpreter myNodeInterpreter; private final NodePackage myKarmaPackage; private final String myConfigFilePath; private final String myBrowsers; private final EnvironmentVariablesData myEnvData; private KarmaServerSettings(@NotNull Builder builder) { myWithCoverage = builder.myWithCoverage; myDebug = builder.myDebug; myNodeInterpreter = builder.myNodeInterpreter; myKarmaPackage = builder.myKarmaPackage; myConfigFilePath = FileUtil.toSystemDependentName(builder.myRunSettings.getConfigPath()); myBrowsers = builder.myRunSettings.getBrowsers(); myEnvData = builder.myRunSettings.getEnvData(); } @NotNull public NodeJsLocalInterpreter getNodeInterpreter() { return myNodeInterpreter; } @NotNull public NodePackage getKarmaPackage() { return myKarmaPackage; } public boolean isWithCoverage() { return myWithCoverage; } public boolean isDebug() { return myDebug; } @NotNull public File getConfigurationFile() { return new File(myConfigFilePath); } @NotNull public String getConfigurationFilePath() { return myConfigFilePath; } @NotNull public String getBrowsers() { return myBrowsers; } @NotNull public EnvironmentVariablesData getEnvData() { return myEnvData; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; KarmaServerSettings that = (KarmaServerSettings)o; return myWithCoverage == that.myWithCoverage && myDebug == that.myDebug && myNodeInterpreter.getInterpreterSystemIndependentPath().equals(that.myNodeInterpreter.getInterpreterSystemIndependentPath()) && myKarmaPackage.equals(that.myKarmaPackage) && myConfigFilePath.equals(that.myConfigFilePath) && myBrowsers.equals(that.myBrowsers) && myEnvData.equals(that.myEnvData); } @Override public int hashCode() { int result = myWithCoverage ? 1 : 0; result = 31 * result + (myDebug ? 1 : 0); result = 31 * result + myNodeInterpreter.getInterpreterSystemIndependentPath().hashCode(); result = 31 * result + myKarmaPackage.hashCode(); result = 31 * result + myConfigFilePath.hashCode(); result = 31 * result + myBrowsers.hashCode(); result = 31 * result + myEnvData.hashCode(); return result; } public static class Builder { private NodeJsLocalInterpreter myNodeInterpreter; private NodePackage myKarmaPackage; private KarmaRunSettings myRunSettings; private boolean myWithCoverage; private boolean myDebug; @NotNull public Builder setNodeInterpreter(@NotNull NodeJsLocalInterpreter interpreter) { myNodeInterpreter = interpreter; return this; } @NotNull public Builder setKarmaPackage(@NotNull NodePackage karmaPackage) { myKarmaPackage = karmaPackage; return this; } @NotNull public Builder setRunSettings(@NotNull KarmaRunSettings runSettings) { myRunSettings = runSettings; return this; } @NotNull public Builder setWithCoverage(boolean withCoverage) { myWithCoverage = withCoverage; return this; } @NotNull public Builder setDebug(boolean debug) { myDebug = debug; return this; } @NotNull public KarmaServerSettings build() { if (myNodeInterpreter == null) { throw new RuntimeException("Unspecified Node.js interpreter"); } if (myKarmaPackage == null) { throw new RuntimeException("Unspecified karma package"); } if (myRunSettings == null) { throw new RuntimeException("Unspecified run settings"); } return new KarmaServerSettings(this); } } }