/** * Returns the configured tiles.xml file paths (if configured). * * @param webApp Web application. * @return File names. */ private static Set<String> findConfiguredTilesPaths(final WebApp webApp) { @NonNls final Set<String> tilesConfigNames = new THashSet<String>(); final ParamValue tilesParamValue = ContainerUtil.find(webApp.getContextParams(), TILES_CONTEXT_PARAM_CONDITION); if (tilesParamValue == null) { return tilesConfigNames; } final String paramValue = tilesParamValue.getParamValue().getStringValue(); if (paramValue == null) { return tilesConfigNames; } for (final String file : StringUtil.split(paramValue, ",")) { tilesConfigNames.add(file.trim()); } return tilesConfigNames; }
@NotNull public Collection<TilesModel> computeModels(@NotNull final Module module) { final Project project = module.getProject(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(project); final GlobalSearchScope moduleScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, false); // struts2-tiles plugin must be available final PsiClass strutsTilesListenerClass = facade.findClass(STRUTS_TILES_LISTENER_CLASS, moduleScope); if (strutsTilesListenerClass == null) { return Collections.emptyList(); } final PsiClass tilesListenerClass = facade.findClass(TilesConstants.TILES_LISTENER, moduleScope); final StrutsPluginDomFactory<TilesDefinitions, TilesModel> factory = StrutsProjectComponent.getInstance(project).getTilesFactory(); final Set<TilesModel> struts2TilesModels = new HashSet<TilesModel>(); final Consumer<Set<XmlFile>> consumer = definitions -> { final DomFileElement<TilesDefinitions> domFileElement = factory.createMergedModelRoot(definitions); if (domFileElement != null) { struts2TilesModels.add( new TilesModelImpl(definitions, domFileElement, STRUTS2_TILES_MODEL)); } }; final WebDirectoryUtil webDirectoryUtil = WebDirectoryUtil.getWebDirectoryUtil(project); final Collection<WebFacet> webFacets = WebFacet.getInstances(module); for (final WebFacet webFacet : webFacets) { final WebApp webApp = webFacet.getRoot(); if (webApp == null) { continue; } // determine configured tiles config files @NonNls final Set<String> tilesConfigNames = findConfiguredTilesPaths(webApp); // no configured paths? use default if (tilesConfigNames.isEmpty()) { tilesConfigNames.add(DEFAULT_TILES_XML); } // resolve to XmlFile final Set<XmlFile> tilesFileSet = new HashSet<XmlFile>(); for (final String tilesPath : tilesConfigNames) { final PsiElement tilesXmlFile = webDirectoryUtil.findFileByPath(tilesPath, webFacet); if (tilesXmlFile instanceof XmlFile) { tilesFileSet.add((XmlFile) tilesXmlFile); } } final List<Listener> listenerList = webApp.getListeners(); for (final Listener listener : listenerList) { final PsiClass listenerClass = listener.getListenerClass().getValue(); if (strutsTilesListenerClass.equals(listenerClass) || Comparing.equal(tilesListenerClass, listenerClass)) { consumer.consume(tilesFileSet); } } } return struts2TilesModels; }