// Copyright 2015 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.settings;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.util.ExternalSystemSettingsControl;
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil;
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.updateSettings.impl.UpdateChecker;
import com.intellij.openapi.updateSettings.impl.UpdateSettings;
import com.intellij.ui.components.JBCheckBox;
import com.twitter.intellij.pants.PantsBundle;
import org.jetbrains.annotations.NotNull;
public class PantsSystemSettingsControl implements ExternalSystemSettingsControl<PantsSettings> {
private static final Logger LOG = Logger.getInstance(PantsSystemSettingsControl.class);
private static final String UPDATE_URL = "https://raw.githubusercontent.com/pantsbuild/intellij-pants-plugin/master/pants-beta-updates.xml";
private JBCheckBox myUpdateChannel;
public boolean updaterContainsBetaChannel() {
final UpdateSettings updateSettings = UpdateSettings.getInstance();
return updateSettings.getStoredPluginHosts().contains(UPDATE_URL);
}
public void addBetaChannel() {
LOG.info("Enabled BETA update channel for Pants Plugin!");
final UpdateSettings updateSettings = UpdateSettings.getInstance();
updateSettings.getStoredPluginHosts().add(UPDATE_URL);
UpdateChecker.updateAndShowResult();
}
public void removeBetaChannel() {
LOG.info("Disabled BETA update channel for Pants Plugin!");
final UpdateSettings updateSettings = UpdateSettings.getInstance();
updateSettings.getStoredPluginHosts().remove(UPDATE_URL);
}
@Override
public void fillUi(@NotNull PaintAwarePanel content, int indentLevel) {
myUpdateChannel = new JBCheckBox(PantsBundle.message("pants.settings.text.update.channel"));
content.add(myUpdateChannel, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
}
@Override
public boolean isModified() {
return myUpdateChannel.isSelected() != updaterContainsBetaChannel();
}
@Override
public void reset() {
myUpdateChannel.setSelected(updaterContainsBetaChannel());
}
@Override
public void apply(@NotNull PantsSettings settings) {
if (myUpdateChannel.isSelected() && !updaterContainsBetaChannel()) {
addBetaChannel();
}
if (!myUpdateChannel.isSelected() && updaterContainsBetaChannel()) {
removeBetaChannel();
}
}
@Override
public boolean validate(@NotNull PantsSettings settings) throws ConfigurationException {
return true;
}
public void disposeUIResources() {
ExternalSystemUiUtil.disposeUi(this);
}
@Override
public void showUi(boolean show) {
ExternalSystemUiUtil.showUi(this, show);
}
}