package org.plantuml.idea.lang.settings; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.util.xmlb.XmlSerializerUtil; import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.jetbrains.annotations.Nullable; import org.plantuml.idea.toolwindow.PlantUmlToolWindow; import org.plantuml.idea.util.UIUtils; import org.plantuml.idea.util.Utils; /** * @author Max Gorbunov * @author Eugene Steinberg */ @State(name = "PlantUmlSettings", storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/plantuml.cfg")}) public class PlantUmlSettings implements PersistentStateComponent<PlantUmlSettings> { private static final int CACHE_SIZE_DEFAULT_VALUE = 5; private static final int RENDER_DELAY_DEFAULT_VALUE = 100; private String dotExecutable = ""; private boolean errorAnnotationEnabled = true; private boolean autoHide = true; private boolean renderUrlLinks = false; private String renderDelay = String.valueOf(RENDER_DELAY_DEFAULT_VALUE); private String cacheSize = String.valueOf(CACHE_SIZE_DEFAULT_VALUE); private boolean autoRender = true; public static PlantUmlSettings getInstance() { return ServiceManager.getService(PlantUmlSettings.class); } public boolean isRenderUrlLinks() { return renderUrlLinks; } public void setRenderUrlLinks(boolean renderUrlLinks) { this.renderUrlLinks = renderUrlLinks; } public String getDotExecutable() { return dotExecutable; } public void setDotExecutable(String dotExecutable) { this.dotExecutable = dotExecutable; } public boolean isErrorAnnotationEnabled() { return errorAnnotationEnabled; } public void setErrorAnnotationEnabled(boolean errorAnnotationEnabled) { this.errorAnnotationEnabled = errorAnnotationEnabled; } public boolean isAutoHide() { return autoHide; } public void setAutoHide(boolean autoHide) { this.autoHide = autoHide; } public String getCacheSize() { return cacheSize; } public int getCacheSizeAsInt() { return Utils.asInt(cacheSize, CACHE_SIZE_DEFAULT_VALUE); } public void setCacheSize(String cacheSize) { this.cacheSize = String.valueOf(Math.max(0, Utils.asInt(cacheSize, CACHE_SIZE_DEFAULT_VALUE))); } public String getRenderDelay() { return renderDelay; } public int getRenderDelayAsInt() { return Utils.asInt(renderDelay, RENDER_DELAY_DEFAULT_VALUE); } public void setRenderDelay(String renderDelay) { this.renderDelay = String.valueOf(Math.max(0, Utils.asInt(renderDelay, RENDER_DELAY_DEFAULT_VALUE))); } public void setAutoRender(boolean autoRender) { this.autoRender = autoRender; } public boolean isAutoRender() { return autoRender; } @Nullable @Override public PlantUmlSettings getState() { return this; } @Override public void loadState(PlantUmlSettings state) { XmlSerializerUtil.copyBean(state, this); applyState(); } @Override public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(o, this); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } public void applyState() { applyPlantumlOptions(); for (Project project : ProjectManager.getInstance().getOpenProjects()) { PlantUmlToolWindow toolWindow = UIUtils.getPlantUmlToolWindow(project); if (toolWindow != null) { toolWindow.applyNewSettings(this); } } } public void applyPlantumlOptions() { if (String.valueOf(dotExecutable).isEmpty()) { GraphvizUtils.setDotExecutable(null); } else { GraphvizUtils.setDotExecutable(dotExecutable); } } }