package org.jetbrains.android.database; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xmlb.annotations.AbstractCollection; import com.intellij.util.xmlb.annotations.Tag; import java.util.ArrayList; import java.util.List; /** * @author Eugene.Kudelevsky */ @State( name = "AndroidDataSourceStorage", storages = { @Storage(file = StoragePathMacros.WORKSPACE_FILE) }) public class AndroidDataSourceStorage implements PersistentStateComponent<AndroidDataSourceStorage.State> { private final List<AndroidDataSource> myDataSources = ContainerUtil.createLockFreeCopyOnWriteList(); public static AndroidDataSourceStorage getInstance(Project project) { return ServiceManager.getService(project, AndroidDataSourceStorage.class); } public State getState() { State state = new State(); for (AndroidDataSource dataSource : myDataSources) { state.myDataSources.add(dataSource.buildFullState()); } return state; } public void loadState(State state) { myDataSources.clear(); for (AndroidDataSource.State dataSourceState : state.myDataSources) { AndroidDataSource dataSource = new AndroidDataSource(); dataSource.loadState(dataSourceState); addDataSource(dataSource); } } public List<AndroidDataSource> getDataSources() { return new ArrayList<AndroidDataSource>(myDataSources); } public void removeDataSource(AndroidDataSource dataSource) { myDataSources.remove(dataSource); } public void addDataSource(AndroidDataSource dataSource) { dataSource.init(); myDataSources.add(dataSource); } public static class State { @Tag("data-sources") @AbstractCollection(surroundWithTag = false) public List<AndroidDataSource.State> myDataSources = new ArrayList<AndroidDataSource.State>(); } }