Package com.google.jstestdriver.idea.server

Source Code of com.google.jstestdriver.idea.server.JstdServerSettingsManager$Listener

package com.google.jstestdriver.idea.server;

import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class JstdServerSettingsManager {

  private static final String PREFIX = "JsTestDriver.server.settings.";
  private static final String PORT_TIMEOUT = PREFIX + "port";
  private static final String BROWSER_TIMEOUT = PREFIX + "browserTimeout";
  private static final String RUNNER_MODE = PREFIX + "runnerMode";

  private static final List<Listener> myListeners = ContainerUtil.createEmptyCOWList();
  private static volatile JstdServerSettings mySettings;

  @NotNull
  public static JstdServerSettings loadSettings() {
    JstdServerSettings settings = mySettings;
    if (settings != null) {
      return settings;
    }
    JstdServerSettings.Builder builder = new JstdServerSettings.Builder();
    Integer port = toInteger(loadApplicationSetting(PORT_TIMEOUT));
    if (port != null) {
      builder.setPort(port);
    }
    Integer browserTimeout = toInteger(loadApplicationSetting(BROWSER_TIMEOUT));
    if (browserTimeout != null) {
      builder.setBrowserTimeoutMillis(browserTimeout);
    }
    JstdServerSettings.RunnerMode runnerMode = loadRunnerMode();
    if (runnerMode != null) {
      builder.setRunnerMode(runnerMode);
    }
    settings = builder.build();
    mySettings = settings;
    return settings;
  }

  public static void saveSettings(@NotNull JstdServerSettings settings) {
    if (!settings.equals(mySettings)) {
      storeApplicationSetting(PORT_TIMEOUT, String.valueOf(settings.getPort()));
      storeApplicationSetting(BROWSER_TIMEOUT, String.valueOf(settings.getBrowserTimeoutMillis()));
      storeApplicationSetting(RUNNER_MODE, settings.getRunnerMode().name());
      mySettings = settings;
      fireOnChanged(settings);
    }
  }

  private static void fireOnChanged(@NotNull JstdServerSettings settings) {
    for (Listener listener : myListeners) {
      listener.onChanged(settings);
    }
  }

  public static void addListener(@NotNull final Listener listener, @NotNull Disposable disposable) {
    myListeners.add(listener);
    Disposer.register(disposable, new Disposable() {
      @Override
      public void dispose() {
        myListeners.remove(listener);
      }
    });
  }

  @Nullable
  private static JstdServerSettings.RunnerMode loadRunnerMode() {
    String str = loadApplicationSetting(RUNNER_MODE);
    if (str != null) {
      try {
        return JstdServerSettings.RunnerMode.valueOf(str);
      }
      catch (IllegalArgumentException ignored) {
      }
    }
    return null;
  }

  @Nullable
  private static Integer toInteger(@Nullable String str) {
    if (str != null) {
      try {
        return Integer.parseInt(str);
      }
      catch (NumberFormatException ignored) {
      }
    }
    return null;
  }

  @Nullable
  private static String loadApplicationSetting(@NotNull String key) {
    PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
    return propertiesComponent.getValue(key);
  }

  private static void storeApplicationSetting(@NotNull String key, @NotNull String value) {
    PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
    propertiesComponent.setValue(key, value);
  }

  public interface Listener {
    void onChanged(@NotNull JstdServerSettings settings);
  }
}
TOP

Related Classes of com.google.jstestdriver.idea.server.JstdServerSettingsManager$Listener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.