blob: f3c20e26ad8fa7b38a03d62f28ad56699aaccc2a [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.facet.impl.ui;
import com.intellij.facet.Facet;
import com.intellij.facet.impl.DefaultFacetsProvider;
import com.intellij.facet.ui.FacetEditorContext;
import com.intellij.openapi.roots.ModuleRootModel;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.roots.ui.configuration.artifacts.ArtifactsStructureConfigurableContext;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author nik
*/
public abstract class FacetEditorContextBase extends UserDataHolderBase implements FacetEditorContext {
private final FacetsProvider myFacetsProvider;
@Nullable private final FacetEditorContext myParentContext;
private final ModulesProvider myModulesProvider;
private final Facet myFacet;
private final UserDataHolder mySharedModuleData;
private final UserDataHolder mySharedProjectData;
public FacetEditorContextBase(@NotNull Facet facet, final @Nullable FacetEditorContext parentContext, final @Nullable FacetsProvider facetsProvider,
final @NotNull ModulesProvider modulesProvider,
final UserDataHolder sharedModuleData,
final UserDataHolder sharedProjectData) {
myFacet = facet;
mySharedProjectData = sharedProjectData;
mySharedModuleData = sharedModuleData;
myParentContext = parentContext;
myModulesProvider = modulesProvider;
myFacetsProvider = facetsProvider != null ? facetsProvider : DefaultFacetsProvider.INSTANCE;
}
public Library[] getLibraries() {
return LibraryTablesRegistrar.getInstance().getLibraryTable(getProject()).getLibraries();
}
@NotNull
public String getFacetName() {
return myFacet.getName();
}
public VirtualFile[] getLibraryFiles(final Library library, final OrderRootType rootType) {
return library.getFiles(rootType);
}
@Nullable
public Library findLibrary(@NotNull String name) {
for (Library library : getLibraries()) {
if (name.equals(library.getName())) {
return library;
}
}
return null;
}
public UserDataHolder getSharedProjectData() {
return mySharedProjectData;
}
//todo[nik] pull up to open API?
public UserDataHolder getSharedModuleData() {
return mySharedModuleData;
}
@NotNull
public abstract ArtifactsStructureConfigurableContext getArtifactsStructureContext();
@Nullable
public <T> T getUserData(@NotNull final Key<T> key) {
T t = super.getUserData(key);
if (t == null && myParentContext != null) {
t = myParentContext.getUserData(key);
}
return t;
}
@NotNull
public FacetsProvider getFacetsProvider() {
return myFacetsProvider;
}
@NotNull
public ModulesProvider getModulesProvider() {
return myModulesProvider;
}
@NotNull
public ModuleRootModel getRootModel() {
return getModifiableRootModel();
}
public abstract LibrariesContainer getContainer();
@NotNull
public Facet getFacet() {
return myFacet;
}
@Nullable
public Facet getParentFacet() {
return myFacet.getUnderlyingFacet();
}
}