package org.intellij.sonar.persistence;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.openapi.components.StorageScheme;
import com.intellij.openapi.project.Project;
import com.intellij.util.xmlb.XmlSerializerUtil;
import org.intellij.sonar.index.SonarIssue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@State(
name = "issues",
storages = {
@Storage(id = "issues", file = StoragePathMacros.PROJECT_FILE),
@Storage(id = "issuesDir",
file = StoragePathMacros.PROJECT_CONFIG_DIR+"/sonarIssues.xml",
scheme = StorageScheme.DIRECTORY_BASED)
}
)
public class IssuesByFileIndexProjectComponent
implements ProjectComponent, PersistentStateComponent<IssuesByFileIndexProjectComponent> {
private Map<String,Set<SonarIssue>> index = new HashMap<String,Set<SonarIssue>>();
public IssuesByFileIndexProjectComponent() {
}
public static Optional<IssuesByFileIndexProjectComponent> getInstance(@NotNull Project project) {
if (project.isDisposed()) return Optional.empty();
return Optional.ofNullable(project.getComponent(IssuesByFileIndexProjectComponent.class));
}
@Nullable
@Override
public IssuesByFileIndexProjectComponent getState() {
return this;
}
@Override
public void loadState(IssuesByFileIndexProjectComponent state) {
XmlSerializerUtil.copyBean(state,this);
}
public Map<String,Set<SonarIssue>> getIndex() {
return index;
}
public void setIndex(Map<String,Set<SonarIssue>> index) {
this.index = index;
}
@Override
public void projectOpened() {
}
@Override
public void projectClosed() {
}
@Override
public void initComponent() {
}
@Override
public void disposeComponent() {
}
@NotNull
@Override
public String getComponentName() {
return "IssuesByFileIndexProjectComponent";
}
}