migrated to artifacts
[fedora-idea.git] / platform / lang-impl / src / com / intellij / facet / impl / ProjectFacetManagerImpl.java
blob6e0d0b57b6eeb4ea0cf8239ddacdab25db2887d7
1 package com.intellij.facet.impl;
3 import com.intellij.facet.*;
4 import com.intellij.openapi.components.PersistentStateComponent;
5 import com.intellij.openapi.components.State;
6 import com.intellij.openapi.components.Storage;
7 import com.intellij.openapi.diagnostic.Logger;
8 import com.intellij.openapi.module.Module;
9 import com.intellij.openapi.module.ModuleManager;
10 import com.intellij.openapi.project.Project;
11 import com.intellij.openapi.util.InvalidDataException;
12 import com.intellij.openapi.util.WriteExternalException;
13 import com.intellij.util.xmlb.annotations.MapAnnotation;
14 import com.intellij.util.xmlb.annotations.Tag;
15 import org.jdom.Element;
16 import org.jetbrains.annotations.NonNls;
17 import org.jetbrains.annotations.NotNull;
19 import java.util.*;
21 /**
22 * @author nik
24 @State(
25 name = ProjectFacetManagerImpl.COMPONENT_NAME,
26 storages = {
27 @Storage(
28 id="other",
29 file="$PROJECT_FILE$"
33 public class ProjectFacetManagerImpl extends ProjectFacetManagerEx implements PersistentStateComponent<ProjectFacetManagerImpl.ProjectFacetManagerState> {
34 @NonNls public static final String COMPONENT_NAME = "ProjectFacetManager";
35 private static final Logger LOG = Logger.getInstance("#com.intellij.facet.impl.ProjectFacetManagerImpl");
36 private ProjectFacetManagerState myState = new ProjectFacetManagerState();
37 private Project myProject;
39 public ProjectFacetManagerImpl(Project project) {
40 myProject = project;
43 public ProjectFacetManagerState getState() {
44 return myState;
47 public void loadState(final ProjectFacetManagerState state) {
48 myState = state;
51 @Override
52 public <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId) {
53 return getFacets(typeId, ModuleManager.getInstance(myProject).getModules());
56 @Override
57 public <F extends Facet> List<F> getFacets(@NotNull FacetTypeId<F> typeId, final Module[] modules) {
58 final List<F> result = new ArrayList<F>();
59 for (Module module : modules) {
60 result.addAll(FacetManager.getInstance(module).getFacetsByType(typeId));
62 return result;
65 public <C extends FacetConfiguration> C createDefaultConfiguration(@NotNull final FacetType<?, C> facetType) {
66 C configuration = facetType.createDefaultConfiguration();
67 DefaultFacetConfigurationState state = myState.getDefaultConfigurations().get(facetType.getStringId());
68 if (state != null) {
69 Element defaultConfiguration = state.getDefaultConfiguration();
70 try {
71 FacetUtil.loadFacetConfiguration(configuration, defaultConfiguration);
73 catch (InvalidDataException e) {
74 LOG.info(e);
77 return configuration;
80 public <C extends FacetConfiguration> void setDefaultConfiguration(@NotNull final FacetType<?, C> facetType, @NotNull final C configuration) {
81 Map<String, DefaultFacetConfigurationState> defaultConfigurations = myState.getDefaultConfigurations();
82 DefaultFacetConfigurationState state = defaultConfigurations.get(facetType.getStringId());
83 if (state == null) {
84 state = new DefaultFacetConfigurationState();
85 defaultConfigurations.put(facetType.getStringId(), state);
87 try {
88 Element element = FacetUtil.saveFacetConfiguration(configuration);
89 state.setDefaultConfiguration(element);
91 catch (WriteExternalException e) {
92 LOG.info(e);
96 @Tag("default-facet-configuration")
97 public static class DefaultFacetConfigurationState {
98 private Element myDefaultConfiguration;
100 @Tag("configuration")
101 public Element getDefaultConfiguration() {
102 return myDefaultConfiguration;
105 public void setDefaultConfiguration(final Element defaultConfiguration) {
106 myDefaultConfiguration = defaultConfiguration;
110 public static class ProjectFacetManagerState {
111 private Map<String, DefaultFacetConfigurationState> myDefaultConfigurations = new HashMap<String, DefaultFacetConfigurationState>();
113 @Tag("default-configurations")
114 @MapAnnotation(surroundWithTag = false, surroundKeyWithTag = false, surroundValueWithTag = false, //entryTagName = "default-configuration",
115 keyAttributeName = "facet-type")
116 public Map<String, DefaultFacetConfigurationState> getDefaultConfigurations() {
117 return myDefaultConfigurations;
120 public void setDefaultConfigurations(final Map<String, DefaultFacetConfigurationState> defaultConfigurations) {
121 myDefaultConfigurations = defaultConfigurations;