This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch feature/WW-5445-struts6 in repository https://gitbox.apache.org/repos/asf/struts-intellij-plugin.git
commit 45d0f28e07f15206105fa4c7968a1deadfb3e4d5 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Mon Jul 15 08:26:17 2024 +0200 WW-5445 Adds support for Struts 6 --- build.gradle.kts | 6 ++--- .../java/com/intellij/struts2/StrutsConstants.java | 14 +++++++--- .../StrutsFileTemplateGroupDescriptorFactory.java | 7 +++++ .../struts2/StrutsFileTemplateProvider.java | 16 ++++++++---- .../intellij/struts2/facet/Struts2LibraryType.java | 2 +- .../facet/StrutsFrameworkSupportProvider.java | 8 +++--- .../java/com/intellij/struts2/facet/struts2.xml | 30 +++++++++++----------- .../resources/fileTemplates/j2ee/struts_6_0.xml.ft | 8 ++++++ .../fileTemplates/j2ee/struts_6_0.xml.html | 7 +++++ 9 files changed, 68 insertions(+), 30 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0345203..6a5fb7b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,11 @@ plugins { id("java") id("org.jetbrains.kotlin.jvm") version "1.8.21" - id("org.jetbrains.intellij") version "1.13.3" + id("org.jetbrains.intellij") version "1.17.2" } group = "com.intellij" -version = "2023.2" +version = "2024.4" repositories { mavenCentral() @@ -43,7 +43,7 @@ tasks { patchPluginXml { sinceBuild.set("231") - untilBuild.set("232.*") + untilBuild.set("241.*") } signPlugin { diff --git a/src/main/java/com/intellij/struts2/StrutsConstants.java b/src/main/java/com/intellij/struts2/StrutsConstants.java index 265e901..773aa03 100644 --- a/src/main/java/com/intellij/struts2/StrutsConstants.java +++ b/src/main/java/com/intellij/struts2/StrutsConstants.java @@ -34,6 +34,9 @@ public final class StrutsConstants { @NonNls public static final String STRUTS_2_1_FILTER_CLASS = "org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter"; + @NonNls + public static final String STRUTS_2_5_FILTER_CLASS = "org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter"; + @NonNls public static final String XWORK_ACTION_CLASS = "com.opensymphony.xwork2.Action"; @@ -97,12 +100,16 @@ public final class StrutsConstants { @NonNls public static final String STRUTS_2_3_DTD_ID = "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"; - @NonNls - public static final String STRUTS_2_5_DTD_URI = "http://struts.apache.org/dtds/struts-2.5.dtd"; + public static final String STRUTS_2_5_DTD_URI = "https://struts.apache.org/dtds/struts-2.5.dtd"; @NonNls public static final String STRUTS_2_5_DTD_ID = "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"; + @NonNls + public static final String STRUTS_6_0_DTD_URI = "https://struts.apache.org/dtds/struts-6.0.dtd"; + @NonNls + public static final String STRUTS_6_0_DTD_ID = "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN"; + /** * All struts.xml DTD-IDs/URIs. */ @@ -112,7 +119,8 @@ public final class StrutsConstants { STRUTS_2_1_DTD_URI, STRUTS_2_1_DTD_ID, STRUTS_2_1_7_DTD_URI, STRUTS_2_1_7_DTD_ID, STRUTS_2_3_DTD_URI, STRUTS_2_3_DTD_ID, - STRUTS_2_5_DTD_URI, STRUTS_2_5_DTD_ID + STRUTS_2_5_DTD_URI, STRUTS_2_5_DTD_ID, + STRUTS_6_0_DTD_URI, STRUTS_6_0_DTD_ID }; @NonNls diff --git a/src/main/java/com/intellij/struts2/StrutsFileTemplateGroupDescriptorFactory.java b/src/main/java/com/intellij/struts2/StrutsFileTemplateGroupDescriptorFactory.java index e8cbe92..a7a4f6a 100644 --- a/src/main/java/com/intellij/struts2/StrutsFileTemplateGroupDescriptorFactory.java +++ b/src/main/java/com/intellij/struts2/StrutsFileTemplateGroupDescriptorFactory.java @@ -55,6 +55,11 @@ public class StrutsFileTemplateGroupDescriptorFactory implements FileTemplateGro */ public static final String STRUTS_2_5_XML = "struts_2_5.xml"; + /** + * Template for {@code >=6.0}. + */ + public static final String STRUTS_6_0_XML = "struts_6_0.xml"; + /** * Template for {@code validation.xml}. TODO cannot name "validation.xml" due to SA using this template name. */ @@ -74,6 +79,8 @@ public class StrutsFileTemplateGroupDescriptorFactory implements FileTemplateGro StrutsIcons.STRUTS_CONFIG_FILE)); group.addTemplate(new FileTemplateDescriptor(STRUTS_2_5_XML, StrutsIcons.STRUTS_CONFIG_FILE)); + group.addTemplate(new FileTemplateDescriptor(STRUTS_6_0_XML, + StrutsIcons.STRUTS_CONFIG_FILE)); group.addTemplate(new FileTemplateDescriptor(VALIDATION_XML, StrutsIcons.VALIDATION_CONFIG_FILE)); diff --git a/src/main/java/com/intellij/struts2/StrutsFileTemplateProvider.java b/src/main/java/com/intellij/struts2/StrutsFileTemplateProvider.java index b641863..60e0d1b 100644 --- a/src/main/java/com/intellij/struts2/StrutsFileTemplateProvider.java +++ b/src/main/java/com/intellij/struts2/StrutsFileTemplateProvider.java @@ -29,22 +29,24 @@ public class StrutsFileTemplateProvider { private final String myVersionName; private final boolean my21orNewer; + private final boolean my25orNewer; public StrutsFileTemplateProvider(Module module) { myVersionName = StrutsVersionDetector.detectStrutsVersion(module); my21orNewer = isNewerThan("2.1"); + my25orNewer = isNewerThan("2.5"); } @NotNull public FileTemplate determineFileTemplate(Project project) { String template; - if (isNewerThan("2.5")) { + if (isNewerThan("6.0")) { + template = StrutsFileTemplateGroupDescriptorFactory.STRUTS_6_0_XML; + } else if (isNewerThan("2.5")) { template = StrutsFileTemplateGroupDescriptorFactory.STRUTS_2_5_XML; - } - else if (isNewerThan("2.3")) { + } else if (isNewerThan("2.3")) { template = StrutsFileTemplateGroupDescriptorFactory.STRUTS_2_3_XML; - } - else if (my21orNewer) { + } else if (my21orNewer) { template = isNewerThan("2.1.7") ? StrutsFileTemplateGroupDescriptorFactory.STRUTS_2_1_7_XML : StrutsFileTemplateGroupDescriptorFactory.STRUTS_2_1_XML; @@ -61,6 +63,10 @@ public class StrutsFileTemplateProvider { return my21orNewer; } + public boolean is25orNewer() { + return my25orNewer; + } + private boolean isNewerThan(String versionName) { return VersionComparatorUtil.compare(myVersionName, versionName) > 0; } diff --git a/src/main/java/com/intellij/struts2/facet/Struts2LibraryType.java b/src/main/java/com/intellij/struts2/facet/Struts2LibraryType.java index a543c9f..ca7be0f 100644 --- a/src/main/java/com/intellij/struts2/facet/Struts2LibraryType.java +++ b/src/main/java/com/intellij/struts2/facet/Struts2LibraryType.java @@ -33,7 +33,7 @@ public class Struts2LibraryType extends DownloadableLibraryType { private static final String GROUP_ID = "struts2"; public Struts2LibraryType() { - super("Struts 2", "struts2", GROUP_ID, Struts2LibraryType.class.getResource("struts2.xml")); + super("Struts 2", "struts2", GROUP_ID, Struts2LibraryType.class.getResource("struts.xml")); } @NotNull diff --git a/src/main/java/com/intellij/struts2/facet/StrutsFrameworkSupportProvider.java b/src/main/java/com/intellij/struts2/facet/StrutsFrameworkSupportProvider.java index 612ced5..622f262 100644 --- a/src/main/java/com/intellij/struts2/facet/StrutsFrameworkSupportProvider.java +++ b/src/main/java/com/intellij/struts2/facet/StrutsFrameworkSupportProvider.java @@ -164,9 +164,11 @@ public class StrutsFrameworkSupportProvider extends FacetBasedFrameworkSupportPr 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; + @NonNls final String filterClass = templateProvider.is21orNewer() + ? templateProvider.is25orNewer() + ? StrutsConstants.STRUTS_2_5_FILTER_CLASS + : StrutsConstants.STRUTS_2_1_FILTER_CLASS + : StrutsConstants.STRUTS_2_0_FILTER_CLASS; strutsFilter.getFilterClass().setStringValue(filterClass); final FilterMapping filterMapping = webApp.addFilterMapping(); diff --git a/src/main/java/com/intellij/struts2/facet/struts2.xml b/src/main/java/com/intellij/struts2/facet/struts2.xml index adb8111..8d6c9fd 100644 --- a/src/main/java/com/intellij/struts2/facet/struts2.xml +++ b/src/main/java/com/intellij/struts2/facet/struts2.xml @@ -1,31 +1,31 @@ <?xml version="1.0" encoding="UTF-8"?> <artifacts> - <artifact name="Struts 2" version="2.5.14.1"> - <item name="struts2-core.jar" version="2.5.14.1" - url="http://central.maven.org/maven2/org/apache/struts/struts2-core/2.5.14.1/struts2-core-2.5.14.1.jar"> + <artifact name="Struts 2" version="6.4.0"> + <item name="struts2-core.jar" version="6.4.0" + url="https://repo1.maven.org/maven2/org/apache/struts/struts2-core/6.4.0/struts2-core-6.4.0.jar"> <required-class fqn="org.apache.struts2.StrutsConstants"/> </item> - <item name="freemarker.jar" version="2.3.26-incubating" - url="http://central.maven.org/maven2/org/freemarker/freemarker/2.3.26-incubating/freemarker-2.3.26-incubating.jar"> + <item name="freemarker.jar" version="2.3.32" + url="https://repo1.maven.org/maven2/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar"> <required-class fqn="freemarker.core.TemplateElement"/> </item> - <item name="ognl.jar" version="3.1.15" - url="http://central.maven.org/maven2/ognl/ognl/3.1.15/ognl-3.1.15.jar"> + <item name="ognl.jar" version="3.3.5" + url="https://repo1.maven.org/maven2/ognl/ognl/3.3.5/ognl-3.3.5.jar"> <required-class fqn="ognl.Ognl"/> </item> - <item name="commons-fileupload.jar" version="1.3.3" - url="http://central.maven.org/maven2/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.jar"> + <item name="commons-fileupload.jar" version="1.5" + url="https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.5/commons-fileupload-1.5.jar"> <required-class fqn="org.apache.commons.fileupload.FileUpload"/> </item> - <item name="commons-lang.jar" version="3.6" - url="http://central.maven.org/maven2/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar"> + <item name="commons-lang.jar" version="3.14.0" + url="https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar"> <required-class fqn="org.apache.commons.lang3.ArrayUtils"/> </item> - <item name="commons-io.jar" version="2.5" - url="http://central.maven.org/maven2/commons-io/commons-io/2.5/commons-io-2.5.jar"> + <item name="commons-io.jar" version="2.15.1" + url="https://repo1.maven.org/maven2/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar"> <required-class fqn="org.apache.commons.io.FileUtils"/> </item> - <item name="log4j.jar" version="2.9.1" - url="http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar"/> + <item name="log4j.jar" version="2.23.1" + url="https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar"/> </artifact> </artifacts> \ No newline at end of file diff --git a/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.ft b/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.ft new file mode 100644 index 0000000..68dcfc1 --- /dev/null +++ b/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.ft @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN" + "https://struts.apache.org/dtds/struts-6.0.dtd"> + +<struts> +</struts> \ No newline at end of file diff --git a/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.html b/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.html new file mode 100644 index 0000000..3dc6cb4 --- /dev/null +++ b/src/main/resources/fileTemplates/j2ee/struts_6_0.xml.html @@ -0,0 +1,7 @@ +<html> +<body style="padding: 2px;"> +<span style="font-family: verdana,sans-serif; font-size: smaller;"> +This is a built-in template used each time you create a new struts.xml for Struts 6.x +</span> +</body> +</html> \ No newline at end of file