protected void onFacetCreated()

in struts2/src/main/java/com/intellij/struts2/facet/StrutsFrameworkSupportProvider.java [104:200]


  protected void onFacetCreated(final StrutsFacet strutsFacet,
                                final ModifiableRootModel modifiableRootModel,
                                final FrameworkVersion version) {
    final Module module = strutsFacet.getModule();
    StartupManager.getInstance(module.getProject()).runAfterOpened(() -> {
      DumbService.getInstance(module.getProject()).runWhenSmart(() -> {
          final VirtualFile[] sourceRoots = ModuleRootManager.getInstance(module).getSourceRoots();
          if (sourceRoots.length <= 0) {
            return;
          }

          final PsiDirectory directory = PsiManager.getInstance(module.getProject()).findDirectory(sourceRoots[0]);
          if (directory == null ||
              directory.findFile(StrutsConstants.STRUTS_XML_DEFAULT_FILENAME) != null) {
            return;
          }

          final StrutsFileTemplateProvider templateProvider = new StrutsFileTemplateProvider(module);
          final FileTemplate strutsXmlTemplate = templateProvider.determineFileTemplate(directory.getProject());

          try {
            final StrutsFacetConfiguration strutsFacetConfiguration = strutsFacet.getConfiguration();

            // create empty struts.xml & fileset with all found struts-*.xml files (struts2.jar, plugins)
            final PsiElement psiElement = FileTemplateUtil.createFromTemplate(strutsXmlTemplate,
                                                                              StrutsConstants.STRUTS_XML_DEFAULT_FILENAME,
                                                                              null,
                                                                              directory);
            final Set<StrutsFileSet> empty = Collections.emptySet();
            final StrutsFileSet fileSet = new StrutsFileSet(StrutsFileSet.getUniqueId(empty),
                                                            StrutsFileSet.getUniqueName("Default File Set", empty),
                                                            strutsFacetConfiguration);
            fileSet.addFile(((XmlFile)psiElement).getVirtualFile());

            final StrutsConfigsSearcher searcher = new StrutsConfigsSearcher(module);
            DumbService.getInstance(module.getProject()).runWhenSmart(() -> searcher.search());

            final MultiMap<VirtualFile, PsiFile> jarConfigFiles = searcher.getJars();
            for (final VirtualFile virtualFile : jarConfigFiles.keySet()) {
              final Collection<PsiFile> psiFiles = jarConfigFiles.get(virtualFile);
              for (final PsiFile psiFile : psiFiles) {
                fileSet.addFile(psiFile.getVirtualFile());
              }
            }
            strutsFacetConfiguration.getFileSets().add(fileSet);


            // create filter & mapping in web.xml (if present)
            WriteCommandAction.writeCommandAction(modifiableRootModel.getProject()).run(() -> {
              final WebFacet webFacet = strutsFacet.getWebFacet();
              if (null == webFacet) return;

              final ConfigFile configFile = webFacet.getWebXmlDescriptor();
              if (configFile == null) return;

              final XmlFile webXmlFile = configFile.getXmlFile();
              final WebApp webApp = JamCommonUtil.getRootElement(webXmlFile, WebApp.class);
              if (webApp == null) return;
              if (!FileModificationService.getInstance().prepareFileForWrite(webXmlFile)) return;

              final Filter strutsFilter = webApp.addFilter();
              strutsFilter.getFilterName().setStringValue("struts2");

              @NonNls final String filterClass = templateProvider.is21orNewer() ?
                                                 StrutsConstants.STRUTS_2_1_FILTER_CLASS :
                                                 StrutsConstants.STRUTS_2_0_FILTER_CLASS;
              strutsFilter.getFilterClass().setStringValue(filterClass);

              final FilterMapping filterMapping = webApp.addFilterMapping();
              filterMapping.getFilterName().setValue(strutsFilter);
              filterMapping.addUrlPattern().setStringValue("/*");
            });


            final NotificationListener showFacetSettingsListener = new NotificationListener() {
              @Override
              public void hyperlinkUpdate(@NotNull final Notification notification,
                                          @NotNull final HyperlinkEvent event) {
                if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                  notification.expire();
                  ModulesConfigurator.showFacetSettingsDialog(strutsFacet, null);
                }
              }
            };

            new Notification("Struts 2", "Struts 2 Setup",
                             "Struts 2 Facet has been created, please check <a href=\"more\">created fileset</a>",
                             NotificationType.INFORMATION)
              .setListener(showFacetSettingsListener)
              .notify(module.getProject());
          }
          catch (Exception e) {
            LOG.error("error creating struts.xml from template", e);
          }
        });
    });
  }