2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com
.intellij
.facet
.impl
;
19 import com
.intellij
.facet
.*;
20 import com
.intellij
.openapi
.components
.PersistentStateComponent
;
21 import com
.intellij
.openapi
.components
.State
;
22 import com
.intellij
.openapi
.components
.Storage
;
23 import com
.intellij
.openapi
.diagnostic
.Logger
;
24 import com
.intellij
.openapi
.module
.Module
;
25 import com
.intellij
.openapi
.module
.ModuleManager
;
26 import com
.intellij
.openapi
.project
.Project
;
27 import com
.intellij
.openapi
.util
.InvalidDataException
;
28 import com
.intellij
.openapi
.util
.WriteExternalException
;
29 import com
.intellij
.util
.xmlb
.annotations
.MapAnnotation
;
30 import com
.intellij
.util
.xmlb
.annotations
.Tag
;
31 import org
.jdom
.Element
;
32 import org
.jetbrains
.annotations
.NonNls
;
33 import org
.jetbrains
.annotations
.NotNull
;
41 name
= ProjectFacetManagerImpl
.COMPONENT_NAME
,
49 public class ProjectFacetManagerImpl
extends ProjectFacetManagerEx
implements PersistentStateComponent
<ProjectFacetManagerImpl
.ProjectFacetManagerState
> {
50 @NonNls public static final String COMPONENT_NAME
= "ProjectFacetManager";
51 private static final Logger LOG
= Logger
.getInstance("#com.intellij.facet.impl.ProjectFacetManagerImpl");
52 private ProjectFacetManagerState myState
= new ProjectFacetManagerState();
53 private Project myProject
;
55 public ProjectFacetManagerImpl(Project project
) {
59 public ProjectFacetManagerState
getState() {
63 public void loadState(final ProjectFacetManagerState state
) {
68 public <F
extends Facet
> List
<F
> getFacets(@NotNull FacetTypeId
<F
> typeId
) {
69 return getFacets(typeId
, ModuleManager
.getInstance(myProject
).getModules());
73 public <F
extends Facet
> List
<F
> getFacets(@NotNull FacetTypeId
<F
> typeId
, final Module
[] modules
) {
74 final List
<F
> result
= new ArrayList
<F
>();
75 for (Module module
: modules
) {
76 result
.addAll(FacetManager
.getInstance(module
).getFacetsByType(typeId
));
81 public <C
extends FacetConfiguration
> C
createDefaultConfiguration(@NotNull final FacetType
<?
, C
> facetType
) {
82 C configuration
= facetType
.createDefaultConfiguration();
83 DefaultFacetConfigurationState state
= myState
.getDefaultConfigurations().get(facetType
.getStringId());
85 Element defaultConfiguration
= state
.getDefaultConfiguration();
87 FacetUtil
.loadFacetConfiguration(configuration
, defaultConfiguration
);
89 catch (InvalidDataException e
) {
96 public <C
extends FacetConfiguration
> void setDefaultConfiguration(@NotNull final FacetType
<?
, C
> facetType
, @NotNull final C configuration
) {
97 Map
<String
, DefaultFacetConfigurationState
> defaultConfigurations
= myState
.getDefaultConfigurations();
98 DefaultFacetConfigurationState state
= defaultConfigurations
.get(facetType
.getStringId());
100 state
= new DefaultFacetConfigurationState();
101 defaultConfigurations
.put(facetType
.getStringId(), state
);
104 Element element
= FacetUtil
.saveFacetConfiguration(configuration
);
105 state
.setDefaultConfiguration(element
);
107 catch (WriteExternalException e
) {
112 @Tag("default-facet-configuration")
113 public static class DefaultFacetConfigurationState
{
114 private Element myDefaultConfiguration
;
116 @Tag("configuration")
117 public Element
getDefaultConfiguration() {
118 return myDefaultConfiguration
;
121 public void setDefaultConfiguration(final Element defaultConfiguration
) {
122 myDefaultConfiguration
= defaultConfiguration
;
126 public static class ProjectFacetManagerState
{
127 private Map
<String
, DefaultFacetConfigurationState
> myDefaultConfigurations
= new HashMap
<String
, DefaultFacetConfigurationState
>();
129 @Tag("default-configurations")
130 @MapAnnotation(surroundWithTag
= false, surroundKeyWithTag
= false, surroundValueWithTag
= false, //entryTagName = "default-configuration",
131 keyAttributeName
= "facet-type")
132 public Map
<String
, DefaultFacetConfigurationState
> getDefaultConfigurations() {
133 return myDefaultConfigurations
;
136 public void setDefaultConfigurations(final Map
<String
, DefaultFacetConfigurationState
> defaultConfigurations
) {
137 myDefaultConfigurations
= defaultConfigurations
;