cleanup — extract private classes to file-level

This commit is contained in:
Vladimir Krivosheev
2017-12-22 11:53:09 +01:00
parent 7dadda1044
commit f86a5587fe
@@ -23,11 +23,31 @@ import org.jdom.Element
import java.nio.file.Path
import java.nio.file.Paths
internal class DefaultProjectStoreImpl(override val project: ProjectImpl, private val pathMacroManager: PathMacroManager) : ComponentStoreImpl() {
companion object {
const val FILE_SPEC = "${APP_CONFIG}/project.default.xml"
private const val FILE_SPEC = "${APP_CONFIG}/project.default.xml"
private class DefaultProjectStorage(file: Path, fileSpec: String, pathMacroManager: PathMacroManager) : FileBasedStorage(file, fileSpec, "defaultProject", pathMacroManager.createTrackingSubstitutor(), RoamingType.DISABLED) {
override public fun loadLocalData(): Element? {
val element = super.loadLocalData() ?: return null
try {
return element.getChild("component").getChild("defaultProject")
}
catch (e: NullPointerException) {
LOG.warn("Cannot read default project")
return null
}
}
override fun createSaveSession(states: StateMap) = object : FileBasedStorage.FileSaveSession(states, this) {
override fun saveLocally(element: Element?) {
super.saveLocally(element?.let {
Element("application")
.addContent(Element("component").setAttribute("name", "ProjectManager").addContent(it))
})
}
}
}
internal class DefaultProjectStoreImpl(override val project: ProjectImpl, private val pathMacroManager: PathMacroManager) : ComponentStoreImpl() {
// see note about default state in project store
override val loadPolicy: StateLoadPolicy
get() = if (ApplicationManager.getApplication().isUnitTestMode) StateLoadPolicy.NOT_LOAD else StateLoadPolicy.LOAD
@@ -38,25 +58,6 @@ internal class DefaultProjectStoreImpl(override val project: ProjectImpl, privat
private val storage by lazy { DefaultProjectStorage(Paths.get(ApplicationManager.getApplication().stateStore.stateStorageManager.expandMacros(FILE_SPEC)), FILE_SPEC, pathMacroManager) }
private class DefaultProjectStorage(file: Path, fileSpec: String, pathMacroManager: PathMacroManager) : FileBasedStorage(file, fileSpec, "defaultProject", pathMacroManager.createTrackingSubstitutor(), RoamingType.DISABLED) {
override public fun loadLocalData(): Element? {
val element = super.loadLocalData() ?: return null
try {
return element.getChild("component").getChild("defaultProject")
}
catch (e: NullPointerException) {
LOG.warn("Cannot read default project")
return null
}
}
override fun createSaveSession(states: StateMap) = object : FileBasedStorage.FileSaveSession(states, this) {
override fun saveLocally(element: Element?) {
super.saveLocally(element?.let { Element("application").addContent(Element("component").setAttribute("name", "ProjectManager").addContent(it))})
}
}
}
override val storageManager = object : StateStorageManager {
override fun addStreamProvider(provider: StreamProvider, first: Boolean) {
}
@@ -87,24 +88,25 @@ internal class DefaultProjectStoreImpl(override val project: ProjectImpl, privat
override fun setPath(path: String) {
}
}
private class MyExternalizationSession(val externalizationSession: StateStorage.ExternalizationSession) : StateStorageManager.ExternalizationSession {
override fun setState(storageSpecs: List<Storage>, component: Any, componentName: String, state: Any) {
externalizationSession.setState(component, componentName, state)
}
override fun setStateInOldStorage(component: Any, componentName: String, state: Any) {
externalizationSession.setState(component, componentName, state)
}
override fun createSaveSessions() = listOfNotNull(externalizationSession.createSaveSession())
private class MyExternalizationSession(val externalizationSession: StateStorage.ExternalizationSession) : StateStorageManager.ExternalizationSession {
override fun setState(storageSpecs: List<Storage>, component: Any, componentName: String, state: Any) {
externalizationSession.setState(component, componentName, state)
}
override fun setStateInOldStorage(component: Any, componentName: String, state: Any) {
externalizationSession.setState(component, componentName, state)
}
override fun createSaveSessions() = listOfNotNull(externalizationSession.createSaveSession())
}
// ExportSettingsAction checks only "State" annotation presence, but doesn't require PersistentStateComponent implementation, so, we can just specify annotation
@State(name = "ProjectManager", storages = arrayOf(Storage(DefaultProjectStoreImpl.FILE_SPEC)))
@State(name = "ProjectManager", storages = arrayOf(Storage(FILE_SPEC)))
private class DefaultProjectExportableAndSaveTrigger : SettingsSavingComponent {
@Volatile var project: Project? = null
@Volatile
var project: Project? = null
override fun save() {
// we must trigger save