/*
* Copyright 2010 The WicketForge-Team
*
* 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 wicketforge.facet;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.FacetType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import wicketforge.Constants;
import wicketforge.search.WicketSearchScope;
import wicketforge.util.WicketFileUtil;
import java.util.ArrayList;
import java.util.List;
/**
* WicketForgeFacet
*/
public class WicketForgeFacet extends Facet<WicketForgeFacetConfiguration> {
private List<VirtualFilePointer> resourcePaths;
public WicketForgeFacet(@NotNull FacetType facetType, @NotNull Module module, String name, @NotNull WicketForgeFacetConfiguration configuration, Facet underlyingFacet) {
super(facetType, module, name, configuration, underlyingFacet);
}
@NotNull
public List<VirtualFilePointer> getResourcePaths() {
if (resourcePaths == null) {
resourcePaths = new ArrayList<VirtualFilePointer>();
for (String resourceUrl : getConfiguration().resourceUrls) {
resourcePaths.add(VirtualFilePointerManager.getInstance().create(resourceUrl, getModule(), null));
}
}
return resourcePaths;
}
public void setResourcePaths(@NotNull List<VirtualFilePointer> resourcePaths) {
this.resourcePaths = resourcePaths;
WicketForgeFacetConfiguration configuration = getConfiguration();
configuration.resourceUrls.clear();
for (VirtualFilePointer virtualFilePointer : resourcePaths) {
configuration.resourceUrls.add(FileUtil.toSystemIndependentName(virtualFilePointer.getUrl()));
}
}
@Nullable
public static WicketForgeFacet getInstance(@NotNull final Module module) {
return FacetManager.getInstance(module).getFacetByType(WicketForgeFacetType.ID);
}
/**
* Returns true if the passed Module contains the Wicket's Component class.
* This method works with Wicket version 1.3 and higher.
*
* @param module Module
* @return boolean
*/
public static boolean isLibraryPresent(@Nullable Module module) {
if (module == null) {
return false;
}
JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(module.getProject());
return psiFacade.findClass(Constants.WICKET_COMPONENT, WicketSearchScope.classInModuleWithDependenciesAndLibraries(module)) != null;
}
/**
* @param element
* @return true if element has WicketForgeFacet or is from library
*/
public static boolean hasFacetOrIsFromLibrary(@Nullable PsiElement element) {
if (element != null) {
VirtualFile vf = PsiUtil.getVirtualFile(element);
if (vf != null) {
Project project = element.getProject();
Module module = ModuleUtil.findModuleForFile(vf, project);
// if we got a module -> check if WicketForgeFacet available
if (module != null) {
return getInstance(module) != null;
}
// else check if file from lib
return WicketFileUtil.isInLibrary(vf, project);
}
}
return false;
}
}