/* * Copyright 2013 Vladimir Rudev * * 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 ru.crazyproger.plugins.webtoper.nls; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Sets; import com.intellij.lang.properties.PropertiesFileType; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScopes; import org.apache.commons.lang.ArrayUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import ru.crazyproger.plugins.webtoper.Utils; import ru.crazyproger.plugins.webtoper.config.WebtoperFacet; import ru.crazyproger.plugins.webtoper.config.WebtoperFacetConfiguration; import ru.crazyproger.plugins.webtoper.nls.psi.NlsFileImpl; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; public class NlsUtils { @Nullable public static GlobalSearchScope getNlsScope(@NotNull Project project) { GlobalSearchScope scope = null; for (VirtualFile folder : getAllNlsRoots(project)) { GlobalSearchScope folderScope = GlobalSearchScopes.directoryScope(project, folder, true); if (scope == null) { scope = folderScope; } else { scope = scope.union(folderScope); } } return scope; } @NotNull public static String[] nlsNameToPathChunks(@NotNull String nlsName) { String[] chunks = nlsName.trim().split("\\."); chunks[chunks.length - 1] += PropertiesFileType.DOT_DEFAULT_EXTENSION; return chunks; } @NotNull public static String nlsNameToPath(@NotNull String name, @NotNull String separator) { return name.replaceAll("\\.", separator) + PropertiesFileType.DOT_DEFAULT_EXTENSION; } @NotNull public static VirtualFile[] getAllNlsRoots(Project project) { List<WebtoperFacet> facets = Utils.getWebtoperFacets(project); return getNlsRoots(facets); } @NotNull private static VirtualFile[] getNlsRoots(Collection<WebtoperFacet> facets) { List<VirtualFile> nlsRoots = new ArrayList<VirtualFile>(facets.size()); for (WebtoperFacet facet : facets) { WebtoperFacetConfiguration configuration = facet.getConfiguration(); if (!configuration.getNlsRoots().isEmpty()) { Collection<VirtualFile> filtered = Collections2.filter(configuration.getNlsRoots(), Predicates.notNull()); nlsRoots.addAll(filtered); } } return nlsRoots.toArray(new VirtualFile[nlsRoots.size()]); } @NotNull public static VirtualFile[] getNlsRoots(Module module) { Collection<WebtoperFacet> facets = Utils.getWebtoperFacets(module); return getNlsRoots(facets); } @NotNull public static Set<NlsFileImpl> getNlsFiles(String nlsName, Module module) { Project project = module.getProject(); VirtualFile[] nlsRoots = getAllNlsRoots(project); String[] pathChunks = nlsNameToPathChunks(nlsName); if (ArrayUtils.isEmpty(pathChunks)) return Collections.emptySet(); Set<NlsFileImpl> nlsFiles = Sets.newHashSet(); for (VirtualFile nlsRoot : nlsRoots) { VirtualFile relativeFile = VfsUtil.findRelativeFile(nlsRoot, pathChunks); if (relativeFile != null && !relativeFile.isDirectory()) { PsiFile file = PsiManager.getInstance(project).findFile(relativeFile); nlsFiles.add((NlsFileImpl) file); } } return nlsFiles; } }