Starting duplicate externalization session fix? + IDEADEV-38878 Don't use path variab...
[fedora-idea.git] / platform-impl / src / com / intellij / openapi / components / impl / stores / CompoundSaveSession.java
blob047fe8c89bc66cc7b9337be3fee05335e0721f4a
1 package com.intellij.openapi.components.impl.stores;
3 import com.intellij.openapi.components.StateStorage;
4 import com.intellij.util.io.fs.IFile;
6 import java.util.*;
8 /**
9 * @author mike
11 public class CompoundSaveSession {
12 private final Map<StateStorage, StateStorage.SaveSession> mySaveSessions = new HashMap<StateStorage, StateStorage.SaveSession>();
14 public CompoundSaveSession(final CompoundExternalizationSession compoundExternalizationSession) {
15 final Collection<StateStorage> stateStorages = compoundExternalizationSession.getStateStorages();
17 for (StateStorage stateStorage : stateStorages) {
18 mySaveSessions.put(stateStorage, stateStorage.startSave(compoundExternalizationSession.getExternalizationSession(stateStorage)));
22 public List<IFile> getAllStorageFilesToSave() throws StateStorage.StateStorageException {
23 List<IFile> result = new ArrayList<IFile>();
25 for (StateStorage stateStorage : mySaveSessions.keySet()) {
26 final StateStorage.SaveSession saveSession = mySaveSessions.get(stateStorage);
28 result.addAll(saveSession.getStorageFilesToSave());
31 return result;
34 public void save() throws StateStorage.StateStorageException {
35 for (StateStorage.SaveSession saveSession : mySaveSessions.values()) {
36 saveSession.save();
40 public Set<String> getUsedMacros() {
41 Set<String> usedMacros = new HashSet<String>();
43 for (StateStorage.SaveSession saveSession : mySaveSessions.values()) {
44 usedMacros.addAll(saveSession.getUsedMacros());
47 return usedMacros;
50 public void finishSave() {
51 RuntimeException re = null;
52 for (StateStorage stateStorage : mySaveSessions.keySet()) {
53 final StateStorage.SaveSession saveSession = mySaveSessions.get(stateStorage);
54 try {
55 stateStorage.finishSave(saveSession);
56 } catch(RuntimeException t) {
57 re = t;
61 if (re != null) {
62 throw re;
66 public StateStorage.SaveSession getSaveSession(final StateStorage storage) {
67 return mySaveSessions.get(storage);
70 public List<IFile> getAllStorageFiles() {
71 List<IFile> result = new ArrayList<IFile>();
72 for (StateStorage.SaveSession saveSession : mySaveSessions.values()) {
73 result.addAll(saveSession.getAllStorageFiles());
76 return result;
79 public Set<StateStorage> getStateStorages() {
80 return mySaveSessions.keySet();