cleanup: remove useless '@author nik' from javadoc comments
[idea/community.git] / java / idea-ui / src / com / intellij / facet / impl / ui / FacetEditorsStateManagerImpl.java
1 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.facet.impl.ui;
3
4 import com.intellij.facet.FacetType;
5 import com.intellij.openapi.components.PersistentStateComponent;
6 import com.intellij.openapi.components.State;
7 import com.intellij.openapi.components.Storage;
8 import com.intellij.openapi.components.StoragePathMacros;
9 import com.intellij.util.xmlb.XmlSerializer;
10 import com.intellij.util.xmlb.annotations.Property;
11 import com.intellij.util.xmlb.annotations.Tag;
12 import com.intellij.util.xmlb.annotations.XMap;
13 import org.jdom.Element;
14 import org.jetbrains.annotations.NotNull;
15 import org.jetbrains.annotations.Nullable;
16
17 import java.util.HashMap;
18 import java.util.Map;
19
20 @State(name = "FacetEditorsStateManager", storages = @Storage(StoragePathMacros.WORKSPACE_FILE))
21 public class FacetEditorsStateManagerImpl extends FacetEditorsStateManager implements PersistentStateComponent<FacetEditorsStateManagerImpl.FacetEditorsStateBean>{
22   private final Map<String, Object> myFacetTypeStates = new HashMap<>();
23   private FacetEditorsStateBean myBean = new FacetEditorsStateBean();
24
25   @Override
26   public <T> void saveState(@NotNull final FacetType<?, ?> type, final T state) {
27     String id = type.getStringId();
28     if (state != null) {
29       myFacetTypeStates.put(id, state);
30     }
31     else {
32       myFacetTypeStates.remove(id);
33       myBean.getFacetTypeElements().remove(id);
34     }
35   }
36
37   @Override
38   @Nullable
39   public <T> T getState(@NotNull final FacetType<?, ?> type, @NotNull final Class<T> aClass) {
40     String id = type.getStringId();
41     //noinspection unchecked
42     T state = (T)myFacetTypeStates.get(id);
43     if (state == null) {
44       FacetTypeStateBean bean = myBean.getFacetTypeElements().get(id);
45       if (bean != null) {
46         Element element = bean.getState();
47         if (element != null) {
48           state = XmlSerializer.deserialize(element, aClass);
49         }
50       }
51     }
52     return state;
53   }
54
55   @Override
56   public FacetEditorsStateBean getState() {
57     for (Map.Entry<String, Object> entry : myFacetTypeStates.entrySet()) {
58       FacetTypeStateBean bean = new FacetTypeStateBean();
59       bean.setState(XmlSerializer.serialize(entry.getValue()));
60       myBean.getFacetTypeElements().put(entry.getKey(), bean);
61     }
62     return myBean;
63   }
64
65   @Override
66   public void loadState(@NotNull FacetEditorsStateBean state) {
67     myBean = state;
68   }
69
70   public static class FacetEditorsStateBean {
71     private Map<String, FacetTypeStateBean> myFacetTypeElements = new HashMap<>();
72
73     @Property(surroundWithTag = false)
74     @XMap(entryTagName = "facet-type-state", keyAttributeName = "type")
75     public Map<String, FacetTypeStateBean> getFacetTypeElements() {
76       return myFacetTypeElements;
77     }
78
79     public void setFacetTypeElements(final Map<String, FacetTypeStateBean> elements) {
80       myFacetTypeElements = elements;
81     }
82   }
83
84   @Tag("facet-type")
85   public static class FacetTypeStateBean {
86     private Element myState;
87
88     @Tag("state")
89     public Element getState() {
90       return myState;
91     }
92
93     public void setState(final Element state) {
94       myState = state;
95     }
96   }
97 }