package com.demandware.studio.settings; import com.intellij.ide.passwordSafe.PasswordSafe; import com.intellij.ide.passwordSafe.PasswordSafeException; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleServiceManager; import com.intellij.openapi.util.text.StringUtil; import java.util.UUID; @State( name = "DWSettingsProvider", storages = { @Storage(file = StoragePathMacros.MODULE_FILE) } ) public class DWSettingsProvider implements PersistentStateComponent<DWSettingsProvider.State> { public static final Logger LOG = Logger.getInstance(DWSettingsProvider.class); private State myState = new State(); public static DWSettingsProvider getInstance(Module module) { return ModuleServiceManager.getService(module, DWSettingsProvider.class); } public String getHostname() { return myState.hostname; } public void setHostname(String hostname) { myState.hostname = hostname; } public String getUsername() { return myState.username; } public void setUsername(String username) { myState.username = username; } public String getPassword() { String password; try { password = PasswordSafe.getInstance().getPassword(null, DWSettingsProvider.class, myState.passwordKey); } catch (PasswordSafeException e) { LOG.info("Couldn't get password for key " + myState.passwordKey, e); password = ""; } return StringUtil.notNullize(password); } public void setPassword(String password) { try { PasswordSafe.getInstance().storePassword(null, DWSettingsProvider.class, myState.passwordKey, password != null ? password : ""); } catch (PasswordSafeException e) { LOG.info("Couldn't set password for key " + myState.passwordKey, e); } } public String getVersion() { return myState.version; } public void setVersion(String version) { myState.version = version; } public boolean getAutoUploadEnabled() { return myState.autoUploadEnabled; } public void setAutoUploadEnabled(boolean autoUploadEnabled) { myState.autoUploadEnabled = autoUploadEnabled; } public String getPasswordKey() { return myState.passwordKey; } public void setPasswordKey(String passwordKey) { myState.passwordKey = passwordKey; } @Override public State getState() { return myState; } @Override public void loadState(State state) { myState.hostname = state.hostname; myState.username = state.username; myState.passwordKey = state.passwordKey; myState.version = state.version; myState.autoUploadEnabled = state.autoUploadEnabled; } public static class State { public String hostname; public String username; public String passwordKey = UUID.randomUUID().toString(); public String version; public boolean autoUploadEnabled; } }