This is an automated email from the ASF dual-hosted git repository.

pepness pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 69fbdedfba Add Jakarta EE/Java EE support for Tomcat and TomEE (#4822)
69fbdedfba is described below

commit 69fbdedfba7154249e1c74a92228eefa4411637e
Author: José Contreras <pepn...@apache.org>
AuthorDate: Wed Jan 11 11:12:29 2023 -0600

    Add Jakarta EE/Java EE support for Tomcat and TomEE (#4822)
    
    - Add support for Tomcat 10 and 10.1
    - Improve support for Tomcat versions from 5 to 10.1
    - Add initial support for Tomcat 11
    - Add support for TomEE versions from 1.5 to 9
    - Improve support for TomEE types and correctly identify them.
    - Improve logic for supported profiles and jvm platforms for Tomcat and 
TomEE
    - Add new helper method versionRange and use it to define valid ranges of 
supported java versions. Kudos to Michael Bien.
    - Improve logic for getJavadoc() method
    - Improve Tomcat/TomEE version enum
    - Improve support for Jakarta EE JaxRS
    - Fix the default jvm platform that is pre-selected
    - Move call of isTomEEJaxRS(), should be called only if isTomEE() is true
    - Remove redundant call to loadTomEEInfo(), isTomEE() was calling it already
    - Add missing validation for Tomcat 5.0
    - tomcat-coyote.jar location is different for tomcat 5.0 and 5.5
    - Add Tests for new TomEEtype logic
    - Add Tests for new Tomcat version comparison
    - Add Tests for new TomEE version comparison
    - Use generics
    - Use StandardCharsets
    - Use try-with-resources
    - Add @Override tags
    - Bump javac.source to 1.8
    - Add missing attributes to a dtd file
---
 .../modules/tomcat5/AntDeploymentProviderImpl.java |   7 +-
 .../netbeans/modules/tomcat5/TomcatFactory.java    | 112 ++++++++++---
 .../tomcat5/config/TomcatModuleConfiguration.java  |   6 +-
 .../tomcat5/customizer/CustomizerDataSupport.java  |  57 +++++--
 .../tomcat5/customizer/CustomizerGeneral.java      |   1 -
 .../modules/tomcat5/deploy/TomcatManager.java      |  86 ++++++++--
 .../tomcat5/j2ee/JaxRsStackSupportImpl.java        |   5 +-
 .../modules/tomcat5/j2ee/TomcatPlatformImpl.java   | 184 +++++++++++++++++----
 .../registration/AutomaticRegistration.java        |   8 +
 .../modules/tomcat5/resources/Bundle.properties    |   2 +-
 .../modules/tomcat5/resources/tomee_resources.dtd  |   3 +
 .../tomcat5/ui/wizard/InstallPanelVisual.java      |  13 +-
 .../netbeans/modules/tomcat5/util/LogSupport.java  |   2 +-
 .../netbeans/modules/tomcat5/util/LogViewer.java   |   2 +-
 .../modules/tomcat5/util/TomcatProperties.java     |  32 +++-
 .../netbeans/modules/tomcat5/util/TomcatUsers.java |   8 +-
 .../modules/tomcat5/TomcatFactoryTest.java         |  24 +++
 .../modules/tomcat5/TomcatManagerTest.java         |  27 +++
 .../modules/tomcat5/util/TomcatUsersTest.java      |  14 ++
 19 files changed, 488 insertions(+), 105 deletions(-)

diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
index 57c71c3f79..8ec3fa1ce4 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/AntDeploymentProviderImpl.java
@@ -39,7 +39,7 @@ public class AntDeploymentProviderImpl implements 
AntDeploymentProvider {
     
     private final TomcatManager tm;
     
-    private static final Logger LOGGER = 
Logger.getLogger("org.netbeans.modules.tomcat5"); // NOI18N
+    private static final Logger LOGGER = 
Logger.getLogger(AntDeploymentProviderImpl.class.getName()); // NOI18N
     
     public AntDeploymentProviderImpl(DeploymentManager dm) {
         tm = (TomcatManager)dm;
@@ -49,6 +49,11 @@ public class AntDeploymentProviderImpl implements 
AntDeploymentProvider {
     public void writeDeploymentScript(OutputStream os, Object moduleType) 
throws IOException {
         String name = null;
         switch (tm.getTomcatVersion()) {
+            case TOMCAT_110:
+            case TOMCAT_101:
+            case TOMCAT_100:
+            case TOMCAT_90:
+            case TOMCAT_80:
             case TOMCAT_70:
                 name = "resources/tomcat-ant-deploy70.xml";
                 break;
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
index d159961e6d..6aa05e729b 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/TomcatFactory.java
@@ -21,10 +21,7 @@ package org.netbeans.modules.tomcat5;
 
 import org.netbeans.modules.tomcat5.deploy.TomcatManager;
 import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -50,12 +47,13 @@ import 
org.netbeans.modules.tomcat5.deploy.TomcatManager.TomEEType;
 import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomEEVersion;
 import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomcatVersion;
 import org.openide.util.NbBundle;
+import org.openide.util.Utilities;
 
 /** 
- * Factory capable to create DeploymentManager that can deploy to Tomcat 5 and 
6.
+ * Factory capable to create DeploymentManager that can deploy to Tomcat and 
TomEE.
  *
  * Tomcat URI has following format:
- * 
<PRE><CODE>tomcat[55|60]:[home=&lt;home_path&gt;:[base=&lt;base_path&gt;:]]&lt;manager_app_url&gt;</CODE></PRE>
+ * 
<PRE><CODE>tomcat[90|100]:[home=&lt;home_path&gt;:[base=&lt;base_path&gt;:]]&lt;manager_app_url&gt;</CODE></PRE>
  * for example
  * <PRE><CODE>tomcat:http://localhost:8080/manager/</CODE></PRE>
  * where paths values will be used as CATALINA_HOME and CATALINA_BASE 
properties and manager_app_url
@@ -70,6 +68,9 @@ public final class TomcatFactory implements DeploymentFactory 
{
     public static final String SERVER_ID_70 = "Tomcat70";   // NOI18N
     public static final String SERVER_ID_80 = "Tomcat80";   // NOI18N
     public static final String SERVER_ID_90 = "Tomcat90";   // NOI18N
+    public static final String SERVER_ID_100 = "Tomcat100";   // NOI18N
+    public static final String SERVER_ID_101 = "Tomcat101";   // NOI18N
+    public static final String SERVER_ID_110 = "Tomcat110";   // NOI18N
     
     public static final String TOMCAT_URI_PREFIX_50 = "tomcat:";    // NOI18N
     public static final String TOMCAT_URI_PREFIX_55 = "tomcat55:";  // NOI18N
@@ -77,16 +78,25 @@ public final class TomcatFactory implements 
DeploymentFactory {
     public static final String TOMCAT_URI_PREFIX_70 = "tomcat70:";  // NOI18N
     public static final String TOMCAT_URI_PREFIX_80 = "tomcat80:";  // NOI18N
     public static final String TOMCAT_URI_PREFIX_90 = "tomcat90:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_100 = "tomcat100:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_101 = "tomcat101:";  // NOI18N
+    public static final String TOMCAT_URI_PREFIX_110 = "tomcat110:";  // NOI18N
     
     public static final String TOMCAT_URI_HOME_PREFIX = "home=";    // NOI18N
     public static final String TOMCAT_URI_BASE_PREFIX = ":base=";   // NOI18N
 
-    private static final Pattern TOMEE_JAR_PATTERN = 
Pattern.compile("tomee-common-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
-    private static final Pattern TOMEE_JAXRS_JAR_PATTERN = 
Pattern.compile("tomee-jaxrs-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
-    private static final Pattern TOMEE_GERONIMO_JAR_PATTERN = 
Pattern.compile("geronimo-connector-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
-
+    static final Pattern TOMEE_JAR_PATTERN = 
Pattern.compile("tomee-common-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_WEBPROFILE_JAR_PATTERN = 
Pattern.compile("openejb-api-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_JAXRS_JAR_PATTERN = 
Pattern.compile("jettison-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_MICROPROFILE_JAR_PATTERN = 
Pattern.compile("microprofile-config-api-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_PLUS_JAR_PATTERN = 
Pattern.compile("activemq-protobuf-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
+    static final Pattern TOMEE_PLUME_JAR_PATTERN = 
Pattern.compile("eclipselink-(\\d+(\\.\\d+)*).*\\.jar"); // NOI18N
+    
     private static final String GENERIC_DISCONNECTED_URI_PREFIX = 
"tomcat-any:"; // NOI18N
     private static final String GENERIC_DISCONNECTED_URI =
             GENERIC_DISCONNECTED_URI_PREFIX + "jakarta-tomcat-generic"; // 
NOI18N
@@ -96,19 +106,23 @@ public final class TomcatFactory implements 
DeploymentFactory {
     private static final String DISCONNECTED_URI_70 = TOMCAT_URI_PREFIX_70 + 
"apache-tomcat-7.0.x";   // NOI18N
     private static final String DISCONNECTED_URI_80 = TOMCAT_URI_PREFIX_80 + 
"apache-tomcat-8.0.x";   // NOI18N
     private static final String DISCONNECTED_URI_90 = TOMCAT_URI_PREFIX_90 + 
"apache-tomcat-9.0.x";   // NOI18N
+    private static final String DISCONNECTED_URI_100 = TOMCAT_URI_PREFIX_100 + 
"apache-tomcat-10.0.x";   // NOI18N
+    private static final String DISCONNECTED_URI_101 = TOMCAT_URI_PREFIX_101 + 
"apache-tomcat-10.1.x";   // NOI18N
+    private static final String DISCONNECTED_URI_110 = TOMCAT_URI_PREFIX_110 + 
"apache-tomcat-11.0.x";   // NOI18N
     
     private static final Set<String> DISCONNECTED_URIS = new HashSet<>();
     static {
         Collections.addAll(DISCONNECTED_URIS, DISCONNECTED_URI_50,
                 DISCONNECTED_URI_55, DISCONNECTED_URI_60, DISCONNECTED_URI_70,
-                DISCONNECTED_URI_80, DISCONNECTED_URI_90, 
GENERIC_DISCONNECTED_URI);
+                DISCONNECTED_URI_80, DISCONNECTED_URI_90, DISCONNECTED_URI_100,
+                DISCONNECTED_URI_101, DISCONNECTED_URI_110, 
GENERIC_DISCONNECTED_URI);
     }
     
     private static TomcatFactory instance;
     
     private static final WeakHashMap managerCache = new WeakHashMap();
     
-    private static final Logger LOGGER = 
Logger.getLogger("org.netbeans.modules.tomcat5");  // NOI18N
+    private static final Logger LOGGER = 
Logger.getLogger(TomcatFactory.class.getName());  // NOI18N
     
     private TomcatFactory() {
         super();
@@ -193,24 +207,30 @@ public final class TomcatFactory implements 
DeploymentFactory {
                 || str.startsWith(TOMCAT_URI_PREFIX_60)
                 || str.startsWith(TOMCAT_URI_PREFIX_70)
                 || str.startsWith(TOMCAT_URI_PREFIX_80)
-                || str.startsWith(TOMCAT_URI_PREFIX_90));
+                || str.startsWith(TOMCAT_URI_PREFIX_90)
+                || str.startsWith(TOMCAT_URI_PREFIX_100)
+                || str.startsWith(TOMCAT_URI_PREFIX_101)
+                || str.startsWith(TOMCAT_URI_PREFIX_110));
     }
     
     /** 
-     * Retrieve the tomcat version e.g. '6.0.10'
+     * Retrieve the tomcat version e.g. '9.0.70'
      * 
      * @throws IllegalStateException if the version information cannot be 
retrieved 
      */
     public static String getTomcatVersionString(File catalinaHome) throws 
IllegalStateException {
         File catalinaJar = new File(catalinaHome, "lib/catalina.jar"); // 
NOI18N
+        File coyoteJar = new File(catalinaHome, "lib/tomcat-coyote.jar"); // 
NOI18N
         if (!catalinaJar.exists()) {
+            // For Tomcat 5/5.5
             catalinaJar = new File(catalinaHome, "server/lib/catalina.jar"); 
// NOI18N
+            coyoteJar = new File(catalinaHome, 
"server/lib/tomcat-coyote.jar"); // NOI18N
         }
-        File coyoteJar = new File(catalinaHome, "lib/tomcat-coyote.jar"); // 
NOI18N
 
         try {
             URLClassLoader loader = new URLClassLoader(new URL[] {
-                catalinaJar.toURI().toURL(), coyoteJar.toURI().toURL() });
+                Utilities.toURI(catalinaJar).toURL(), 
Utilities.toURI(coyoteJar).toURL() });
+            
             Class serverInfo = 
loader.loadClass("org.apache.catalina.util.ServerInfo"); // NOI18N
             try {
                 Method method = serverInfo.getMethod("getServerNumber", new 
Class[] {}); // NOI18N
@@ -242,7 +262,7 @@ public final class TomcatFactory implements 
DeploymentFactory {
             LOGGER.log(Level.INFO, null, ex);
             return getTomcatVersionFallback(catalinaHome);
         }
-        return getTomcatVersion(version, TomcatVersion.TOMCAT_50);
+        return getTomcatVersion(version, TomcatVersion.TOMCAT_80);
     }
 
     private static TomcatVersion getTomcatVersionFallback(File catalinaHome) 
throws IllegalStateException {
@@ -280,7 +300,9 @@ public final class TomcatFactory implements 
DeploymentFactory {
     }
 
     private static TomcatVersion getTomcatVersion(String version, 
TomcatVersion defaultVersion) throws IllegalStateException {
-        if (version.startsWith("5.5.")) { // NOI18N
+        if (version.startsWith("5.0.")) { // NOI18N
+            return TomcatVersion.TOMCAT_50;
+        } else if (version.startsWith("5.5.")) { // NOI18N
             return TomcatVersion.TOMCAT_55;
         } else if (version.startsWith("6.")) { // NOI18N
             return TomcatVersion.TOMCAT_60;
@@ -290,6 +312,12 @@ public final class TomcatFactory implements 
DeploymentFactory {
             return TomcatVersion.TOMCAT_80;
         } else if (version.startsWith("9.")) { // NOI18N
             return TomcatVersion.TOMCAT_90;
+        } else if (version.startsWith("10.0")) { // NOI18N
+            return TomcatVersion.TOMCAT_100;
+        } else if (version.startsWith("10.1")) { // NOI18N
+            return TomcatVersion.TOMCAT_101;
+        } else if (version.startsWith("11.")) { // NOI18N
+            return TomcatVersion.TOMCAT_110;
         }
         int dotIndex = version.indexOf('.');
         if (dotIndex > 0) {
@@ -307,7 +335,13 @@ public final class TomcatFactory implements 
DeploymentFactory {
     }
 
     private static TomcatVersion getTomcatVersion(String uri) throws 
IllegalStateException {
-        if (uri.startsWith(TOMCAT_URI_PREFIX_90)) {
+        if (uri.startsWith(TOMCAT_URI_PREFIX_110)) {
+            return TomcatVersion.TOMCAT_110;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_101)) {
+            return TomcatVersion.TOMCAT_101;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_100)) {
+            return TomcatVersion.TOMCAT_100;
+        } else if (uri.startsWith(TOMCAT_URI_PREFIX_90)) {
             return TomcatVersion.TOMCAT_90;
         } else if (uri.startsWith(TOMCAT_URI_PREFIX_80)) {
             return TomcatVersion.TOMCAT_80;
@@ -336,17 +370,29 @@ public final class TomcatFactory implements 
DeploymentFactory {
     @NonNull
     public static TomEEType getTomEEType(@NonNull File libFolder) {
         File[] children = libFolder.listFiles();
-        TomEEType type = TomEEType.TOMEE_WEB;
+        TomEEType type = TomEEType.TOMEE_OPENEJB;
         if (children != null) {
             for (File file : children) {
-                if (TOMEE_JAXRS_JAR_PATTERN.matcher(file.getName()).matches()) 
{
-                    if (type.ordinal() < TomEEType.TOMEE_JAXRS.ordinal()) {
-                        type = TomEEType.TOMEE_JAXRS;
+                if (TOMEE_PLUME_JAR_PATTERN.matcher(file.getName()).matches()) 
{
+                    if(type.ordinal() < TomEEType.TOMEE_PLUME.ordinal()) {
+                        return TomEEType.TOMEE_PLUME;
                     }
-                } else if 
(TOMEE_GERONIMO_JAR_PATTERN.matcher(file.getName()).matches()) {
-                    if (type.ordinal() < TomEEType.TOMEE_PLUS.ordinal()) {
+                } else if 
(TOMEE_PLUS_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_PLUS.ordinal()) {
                         type = TomEEType.TOMEE_PLUS;
                     }
+                } else if 
(TOMEE_MICROPROFILE_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < 
TomEEType.TOMEE_MICROPROFILE.ordinal()) {
+                        type = TomEEType.TOMEE_MICROPROFILE;
+                    }
+                } else if 
(TOMEE_JAXRS_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_JAXRS.ordinal()) {
+                        type = TomEEType.TOMEE_JAXRS;
+                    }
+                } else if 
(TOMEE_JAR_PATTERN.matcher(file.getName()).matches()) {
+                    if(type.ordinal() < TomEEType.TOMEE_WEBPROFILE.ordinal()) {
+                        type = TomEEType.TOMEE_WEBPROFILE;
+                    }
                 }
             }
         }
@@ -411,6 +457,14 @@ public final class TomcatFactory implements 
DeploymentFactory {
             return TomcatManager.TomEEVersion.TOMEE_16;
         } else if (version.startsWith("1.7.")) { // NOI18N
             return TomcatManager.TomEEVersion.TOMEE_17;
+        } else if (version.startsWith("7.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_70;
+        } else if (version.startsWith("7.1.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_71;
+        } else if (version.startsWith("8.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_80;
+        } else if (version.startsWith("9.")) { // NOI18N
+            return TomcatManager.TomEEVersion.TOMEE_90;
         }
         return defaultVersion;
     }
@@ -420,6 +474,12 @@ public final class TomcatFactory implements 
DeploymentFactory {
             return uri.substring(GENERIC_DISCONNECTED_URI_PREFIX.length());
         }
         switch (tomcatVersion) {
+            case TOMCAT_110:
+                return 
uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_110.length());
+            case TOMCAT_101:
+                return 
uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_101.length());
+            case TOMCAT_100:
+                return 
uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_100.length());
             case TOMCAT_90:
                 return 
uri.substring(TomcatFactory.TOMCAT_URI_PREFIX_90.length());
             case TOMCAT_80:
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
index 275781fd41..1bd15ab2b1 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/config/TomcatModuleConfiguration.java
@@ -91,7 +91,7 @@ public class TomcatModuleConfiguration implements 
ModuleConfiguration, ContextRo
     
     private static final String ATTR_PATH = "path"; // NOI18N
     
-    private static final Logger LOGGER = 
Logger.getLogger("org.netbeans.modules.tomcat5"); // NOI18N
+    private static final Logger LOGGER = 
Logger.getLogger(TomcatModuleConfiguration.class.getName()); // NOI18N
     
     /** Creates a new instance of TomcatModuleConfiguration */
     public TomcatModuleConfiguration(J2eeModule j2eeModule, TomcatVersion 
tomcatVersion, TomEEVersion tomeeVersion) {
@@ -224,7 +224,7 @@ public class TomcatModuleConfiguration implements 
ModuleConfiguration, ContextRo
         Context context = getContext();
         Set<Datasource> result = new HashSet<>();
         int length = context.getResource().length;
-        if (tomcatVersion != TomcatVersion.TOMCAT_50) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_55)) {
             // Tomcat 5.5.x or Tomcat 6.0.x
             for (int i = 0; i < length; i++) {
                 String type = context.getResourceType(i);
@@ -292,7 +292,7 @@ public class TomcatModuleConfiguration implements 
ModuleConfiguration, ContextRo
         if (conflictingDS.size() > 0) {
             throw new DatasourceAlreadyExistsException(conflictingDS);
         }
-        if (tomcatVersion != TomcatVersion.TOMCAT_50) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_55)) {
             if (tomeeVersion != null) {
                 // we need to store it to resources.xml
                 TomeeResources resources = getResources(true);
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
index 2306c445fc..04036a323e 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerDataSupport.java
@@ -21,7 +21,9 @@ package org.netbeans.modules.tomcat5.customizer;
 
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.logging.Level;
 import javax.swing.ButtonGroup;
 import javax.swing.ButtonModel;
 import javax.swing.DefaultComboBoxModel;
@@ -39,6 +41,7 @@ import org.netbeans.api.java.platform.JavaPlatform;
 import org.netbeans.api.java.platform.JavaPlatformManager;
 import org.netbeans.api.java.platform.Specification;
 import org.netbeans.modules.tomcat5.deploy.TomcatManager;
+import org.netbeans.modules.tomcat5.j2ee.TomcatPlatformImpl;
 import org.netbeans.modules.tomcat5.util.TomcatProperties;
 import org.openide.util.Exceptions;
 
@@ -372,32 +375,54 @@ public class CustomizerDataSupport {
     public void loadJvmModel() {
         JavaPlatformManager jpm = JavaPlatformManager.getDefault();
         JavaPlatformAdapter curJvm = 
(JavaPlatformAdapter)jvmModel.getSelectedItem();
-        String curPlatformName = null;
+        final String curPlatformName;
         if (curJvm != null) {
             curPlatformName = curJvm.getName();
         } else {
             curPlatformName = 
(String)tp.getJavaPlatform().getProperties().get(TomcatProperties.PLAT_PROP_ANT_NAME);
         }
-
         jvmModel.removeAllElements();
         
-        // feed the combo with sorted platform list
+        // Supported jvm platforms for this version of Tomcat or TomEE
+        TomcatPlatformImpl tomcatPlatformImpl = new TomcatPlatformImpl(tm);
+        Set<String> tomcatPlatforms = 
tomcatPlatformImpl.getSupportedJavaPlatformVersions();
+        
+        // jvm platforms registered in NetBeans
         JavaPlatform[] j2sePlatforms = jpm.getPlatforms(null, new 
Specification("J2SE", null)); // NOI18N
-        JavaPlatformAdapter[] platformAdapters = new 
JavaPlatformAdapter[j2sePlatforms.length];
-        for (int i = 0; i < platformAdapters.length; i++) {
-            platformAdapters[i] = new JavaPlatformAdapter(j2sePlatforms[i]);
-        }
-        Arrays.sort(platformAdapters);
-        for (int i = 0; i < platformAdapters.length; i++) {
-            JavaPlatformAdapter platformAdapter = platformAdapters[i];
-            jvmModel.addElement(platformAdapter);
-            // try to set selected item
+        
+        Set<JavaPlatformAdapter> platformAdapters = new TreeSet<>();
+        
+        // Only add the jvm platforms that are supported from the registered 
set
+        for (JavaPlatform jp : j2sePlatforms) {
+            if 
(tomcatPlatforms.contains(jp.getSpecification().getVersion().toString())) {
+                platformAdapters.add(new JavaPlatformAdapter(jp));
+            }
+        }
+        
+        if (platformAdapters.isEmpty()) {
+            jvmModel.setSelectedItem(null);
+            return;
+        } else {
+            for (JavaPlatformAdapter platformAdapter : platformAdapters) {
+                jvmModel.addElement(platformAdapter);
+            }
+        }
+        
+        // try to set selected item
+        for (JavaPlatformAdapter j2sePlatform : platformAdapters) {
             if (curPlatformName != null) {
-                if (curPlatformName.equals(platformAdapter.getName())) {
-                    jvmModel.setSelectedItem(platformAdapter);
+                if (curPlatformName.equals(j2sePlatform.getName())) {
+                    jvmModel.setSelectedItem(j2sePlatform);
+                    // if we do not change the flag the jvm will not change
+                    jvmModelFlag = true;
+                    break;
+                } else {
+                    jvmModel.setSelectedItem(j2sePlatform);
+                    jvmModelFlag = true;
                 }
-            }   
+            } 
         }
+   
     }
     
     // model getters ----------------------------------------------------------
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
index 2df1518381..ef7b90852b 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/customizer/CustomizerGeneral.java
@@ -25,7 +25,6 @@ import javax.swing.JTextField;
 import javax.swing.JSpinner;
 import javax.accessibility.AccessibleContext;
 import java.awt.Font;
-import org.netbeans.modules.tomcat5.deploy.TomcatManager.TomcatVersion;
 
 /**
  * Customizer general (connection) tab.
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
index adc97d6224..c1d7fa0ff6 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/deploy/TomcatManager.java
@@ -71,11 +71,44 @@ import org.openide.util.NbBundle;
  */
 public class TomcatManager implements DeploymentManager {
 
-    public enum TomcatVersion {TOMCAT_50, TOMCAT_55, TOMCAT_60, TOMCAT_70, 
TOMCAT_80, TOMCAT_90};
+    public enum TomcatVersion {
+        TOMCAT_50(50), TOMCAT_55(55), TOMCAT_60(60), TOMCAT_70(70), 
+        TOMCAT_80(80), TOMCAT_90(90), TOMCAT_100(100), TOMCAT_101(101),
+        TOMCAT_110(110);
+        
+        TomcatVersion(int version) { this.version = version; }
+        private final int version;
+        public int version() { return version; }
+        /**
+         * 
+         * @param tv TomcatVersion
+         * @return true if the version is equal or greater, false otherwise
+         */
+        public boolean isAtLeast(TomcatVersion tv) {
+            int comparisonResult = this.compareTo(tv);
+            return (comparisonResult >= 0);
+        }
+    }
 
-    public enum TomEEVersion {TOMEE_15, TOMEE_16, TOMEE_17};
+    public enum TomEEVersion {
+        TOMEE_15(15), TOMEE_16(16), TOMEE_17(17), TOMEE_70(70), 
+        TOMEE_71(71), TOMEE_80(80), TOMEE_90(90);
+        
+        TomEEVersion(int version) { this.version = version; }
+        private final int version;
+        public int version() { return version; }
+        /**
+         * 
+         * @param tv TomEEVersion
+         * @return true if the version is equal or greater, false otherwise
+         */
+        public boolean isAtLeast(TomEEVersion teev) {
+            int comparisonResult = this.compareTo(teev);
+            return (comparisonResult >= 0);
+        }
+    };
 
-    public enum TomEEType {TOMEE_WEB, TOMEE_JAXRS, TOMEE_PLUS};
+    public enum TomEEType {TOMEE_OPENEJB, TOMEE_WEBPROFILE, TOMEE_JAXRS, 
TOMEE_MICROPROFILE, TOMEE_PLUS, TOMEE_PLUME};
 
     public static final String KEY_UUID = "NB_EXEC_TOMCAT_START_PROCESS_UUID"; 
//NOI18N
 
@@ -227,6 +260,12 @@ public class TomcatManager implements DeploymentManager {
      */
     public String getUri () {
         switch (tomcatVersion) {
+            case TOMCAT_110:
+                return TomcatFactory.TOMCAT_URI_PREFIX_110 + uri;
+            case TOMCAT_101:
+                return TomcatFactory.TOMCAT_URI_PREFIX_101 + uri;
+            case TOMCAT_100:
+                return TomcatFactory.TOMCAT_URI_PREFIX_100 + uri;
             case TOMCAT_90:
                 return TomcatFactory.TOMCAT_URI_PREFIX_90 + uri;
             case TOMCAT_80:
@@ -247,7 +286,7 @@ public class TomcatManager implements DeploymentManager {
      * @return URI without home and base specification
      */
     public String getPlainUri () {
-        if (isAboveTomcat70()) {
+        if (tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_70)) {
             return "http://"; + tp.getHost() + ":" + getCurrentServerPort() + 
"/manager/text/"; //NOI18N
         }
         return "http://"; + tp.getHost() + ":" + getCurrentServerPort() + 
"/manager/"; //NOI18N
@@ -401,11 +440,21 @@ public class TomcatManager implements DeploymentManager {
 
         return false;
     }
-
+   
     public boolean isAboveTomcat70() {
-        return tomcatVersion == TomcatVersion.TOMCAT_70
-                || tomcatVersion == TomcatVersion.TOMCAT_80
-                || tomcatVersion == TomcatVersion.TOMCAT_90;
+        return tomcatVersion .isAtLeast(TomcatVersion.TOMCAT_70);
+    }
+    
+    public boolean isTomcat110() {
+        return tomcatVersion == TomcatVersion.TOMCAT_110;
+    }
+    
+    public boolean isTomcat101() {
+        return tomcatVersion == TomcatVersion.TOMCAT_101;
+    }
+    
+    public boolean isTomcat100() {
+        return tomcatVersion == TomcatVersion.TOMCAT_100;
     }
     
     public boolean isTomcat90() {
@@ -438,14 +487,22 @@ public class TomcatManager implements DeploymentManager {
     }
 
     public synchronized boolean isTomEEJaxRS() {
-        loadTomEEInfo();
-        return TomEEType.TOMEE_JAXRS.equals(tomEEType) || 
TomEEType.TOMEE_PLUS.equals(tomEEType);
+        switch (tomEEType) {
+            case TOMEE_PLUME:
+            case TOMEE_PLUS:
+            case TOMEE_MICROPROFILE:
+            case TOMEE_WEBPROFILE:
+            case TOMEE_JAXRS:
+                return true;
+            default:
+                return false;
+        }
     }
 
-    /** Returns Tomcat lib folder: "lib" for  Tomcat 6.0 and "common/lib" for 
Tomcat 5.x */
+    /** Returns Tomcat lib folder: "lib" for  Tomcat 6.0 or greater and 
"common/lib" for Tomcat 5.x or less*/
     public String libFolder() {
         // Tomcat 5.x and 6.0 uses different lib folder
-        return isTomcat50() || isTomcat55() ? "common/lib" : "lib"; // NOI18N
+        return tomcatVersion.isAtLeast(TomcatVersion.TOMCAT_60) ? "lib" : 
"common/lib"; // NOI18N
     }
 
     public TomcatVersion getTomcatVersion() {
@@ -456,6 +513,11 @@ public class TomcatManager implements DeploymentManager {
         loadTomEEInfo();
         return tomEEVersion;
     }
+    
+    public synchronized TomEEType getTomEEType() {
+        loadTomEEInfo();
+        return tomEEType;
+    }
 
     public void loadTomEEInfo() {
         boolean fireListener = false;
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
index ee83e971e9..6ef627618f 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/JaxRsStackSupportImpl.java
@@ -37,6 +37,7 @@ import org.openide.filesystems.URLMapper;
 public class JaxRsStackSupportImpl implements JaxRsStackSupportImplementation {
 
     private static final String JAX_RS_APPLICATION_CLASS = 
"javax.ws.rs.core.Application"; //NOI18N
+    private static final String JAX_RS_APPLICATION_CLASS_JAKARTAEE = 
"jakarta.ws.rs.core.Application"; //NOI18N
 
     private final TomcatPlatformImpl j2eePlatform;
 
@@ -47,14 +48,14 @@ public class JaxRsStackSupportImpl implements 
JaxRsStackSupportImplementation {
     @Override
     public boolean addJsr311Api(Project project) {
         // return true (behaves like added) when JAX-RS is on classpath
-        return isBundled(JAX_RS_APPLICATION_CLASS);
+        return isBundled(JAX_RS_APPLICATION_CLASS) || 
isBundled(JAX_RS_APPLICATION_CLASS_JAKARTAEE);
     }
 
     @Override
     public boolean extendsJerseyProjectClasspath(Project project) {
         // declared as extended when JAX-RS is on classpath
         // suppose that TomEE has its own implementation of JAX-RS
-        return isBundled(JAX_RS_APPLICATION_CLASS);
+        return isBundled(JAX_RS_APPLICATION_CLASS) || 
isBundled(JAX_RS_APPLICATION_CLASS_JAKARTAEE);
     }
 
     @Override
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
index c4581f4c56..25a2d71f75 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/j2ee/TomcatPlatformImpl.java
@@ -26,6 +26,8 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import org.netbeans.api.j2ee.core.Profile;
 import org.netbeans.api.java.platform.JavaPlatform;
 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
@@ -456,43 +458,148 @@ public class TomcatPlatformImpl extends 
J2eePlatformImpl2 {
 
     @Override
     public Set<Profile> getSupportedProfiles() {
-        Set<Profile> profiles = new HashSet<>(5);
-        //if (!manager.isTomEE()) {
-            // TomEE is new and it actually does not support older specs 
(classloading separation etc).
-            // we will see if that's a problem for anybody
-            profiles.add(Profile.J2EE_13);
-            profiles.add(Profile.J2EE_14);
-            if (manager.isTomcat60() || manager.isAboveTomcat70()) {
-                profiles.add(Profile.JAVA_EE_5);
+        Set<Profile> profiles = new HashSet<>(10);
+
+        if (manager.isTomEE()) {
+            // Only TomEE versions 8/9 of type Plus/PluME support full profile
+            if (manager.getTomEEType().ordinal() >= 3 ) {
+                switch (manager.getTomEEVersion()) {
+                    case TOMEE_90:
+                        profiles.add(Profile.JAKARTA_EE_9_1_FULL);
+                        break;
+                    case TOMEE_80:
+                        profiles.add(Profile.JAKARTA_EE_8_FULL);
+                        profiles.add(Profile.JAVA_EE_8_FULL);
+                        profiles.add(Profile.JAVA_EE_7_FULL);
+                        profiles.add(Profile.JAVA_EE_6_FULL);
+                        break;
+                    default:
+                        break;
+                }
+            }
+            switch (manager.getTomEEVersion()) {
+                case TOMEE_90:
+                    profiles.add(Profile.JAKARTA_EE_9_1_WEB);
+                    break;
+                case TOMEE_80:
+                    profiles.add(Profile.JAKARTA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMEE_71:
+                case TOMEE_70:
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMEE_17:
+                case TOMEE_16:
+                case TOMEE_15:
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                default:
+                    break;
+            }
+        } else {
+            switch (manager.getTomcatVersion()) {
+//                case TOMCAT_110:
+//                    TODO: Add suport for Jakarta EE 10
+//                    profiles.add(Profile.JAKARTA_EE_10_WEB);
+//                    break;
+//                case TOMCAT_101:
+//                    TODO: Add suport for Jakarta EE 10
+//                    profiles.add(Profile.JAKARTA_EE_10_WEB);
+//                    break;
+                case TOMCAT_100:
+                    profiles.add(Profile.JAKARTA_EE_9_1_WEB);
+                    profiles.add(Profile.JAKARTA_EE_9_WEB);
+                    break;
+                case TOMCAT_90:
+                    profiles.add(Profile.JAKARTA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_8_WEB);
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                case TOMCAT_80:
+                    profiles.add(Profile.JAVA_EE_7_WEB);
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_70:
+                    profiles.add(Profile.JAVA_EE_6_WEB);
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_60:
+                    profiles.add(Profile.JAVA_EE_5);
+                    break;
+                case TOMCAT_55:
+                case TOMCAT_50:
+                    profiles.add(Profile.J2EE_14);
+                    break;
+                default:
+                    break;
             }
-        //}
-        if (manager.isAboveTomcat70()) {
-            profiles.add(Profile.JAVA_EE_6_WEB);
-        }
-        if (manager.isTomcat80() || manager.isTomcat90()) {
-            profiles.add(Profile.JAVA_EE_7_WEB);
         }
         return profiles;
     }
     
     @Override
     public Set<String> getSupportedJavaPlatformVersions() {
-        Set<String> versions = new HashSet<>(6);
+        Set<String> versions = new HashSet<>(16);
 
-        if (!manager.isTomcat90()) {
-            if (!manager.isTomcat80()) {
-                if (!manager.isTomcat70()) {
-                    if (!manager.isTomcat60()) {
-                        versions.add("1.4"); // NOI18N
-                        versions.add("1.5"); // NOI18N
-                    }
-                    versions.add("1.5"); // NOI18N
-                }
-                versions.add("1.6"); // NOI18N
+        // TomEE has different supported Java versions
+        if (manager.isTomEE()) {
+            switch (manager.getTomEEVersion()) {
+                case TOMEE_90:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMEE_80:
+                    versions = versionRange(8, 21);
+                    break;
+                case TOMEE_71:
+                case TOMEE_70:
+                    versions = versionRange(7, 8);
+                    break;
+                case TOMEE_17:
+                case TOMEE_16:
+                case TOMEE_15:
+                    versions = versionRange(6, 8);
+                    break;
+                default:
+                    break;
+            }
+        } else {
+            switch (manager.getTomcatVersion()) {
+                case TOMCAT_110:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMCAT_101:
+                    versions = versionRange(11, 21);
+                    break;
+                case TOMCAT_100:
+                case TOMCAT_90:
+                    versions = versionRange(8, 21);
+                    break;
+                case TOMCAT_80:
+                    versions = versionRange(7, 21);
+                    break;
+                case TOMCAT_70:
+                    versions = versionRange(6, 21);
+                    break;
+                case TOMCAT_60:
+                    versions = versionRange(5, 8);
+                    break;
+                case TOMCAT_55:
+                case TOMCAT_50:
+                    versions = versionRange(4, 8);
+                    break;
+                default:
+                    break;
             }
-            versions.add("1.7"); // NOI18N
         }
-        versions.add("1.8"); // NOI18N
         return versions;
     }
     
@@ -510,9 +617,9 @@ public class TomcatPlatformImpl extends J2eePlatformImpl2 {
                 new EjbSupportImpl(manager), wsStack);
         if (manager.isTomEE()) {
             content.add(new JpaSupportImpl());
-        }
-        if (manager.isTomEEJaxRS()) {
-            content.add(new JaxRsStackSupportImpl(this));
+            if (manager.isTomEEJaxRS()) {
+                content.add(new JaxRsStackSupportImpl(this));
+            }
         }
 
         Lookup baseLookup = Lookups.fixed(content.toArray());
@@ -527,4 +634,21 @@ public class TomcatPlatformImpl extends J2eePlatformImpl2 {
         lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_JAVADOC, 
tp.getJavadocs());
         lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_SRC, 
tp.getSources());        
     }
+    
+    /**
+     * Create Set containing desired java versions. e.g.
+     * <pre>{@code
+     *  Set<String> versions = versionRange(8, 11)
+     * }</pre>
+     * This Set will contain ["1.8", "9", "10", "11"]
+     * @param min minimum Java version {@code inclusive}
+     * @param max maximum Java version {@code inclusive}
+     * @return {@code Set<String>} of desired Java versions
+     */
+    private static Set<String> versionRange(int min, int max) {
+        return IntStream.range(min, max+1)
+                    .mapToObj((int v) ->  v > 8 ? Integer.toString(v) : "1." + 
v)
+                    .collect(Collectors.toSet());
+    }
+    
 }
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
index ca74d33ef9..fbf6673469 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/registration/AutomaticRegistration.java
@@ -143,6 +143,10 @@ public class AutomaticRegistration {
             urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_80);
         } else if (version.startsWith("9.")) { // NOI18N
             urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_90);
+        } else if (version.startsWith("10.")) { // NOI18N
+            urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_100);
+        } else if (version.startsWith("10.1")) { // NOI18N
+            urlTmp = new StringBuilder(TomcatFactory.TOMCAT_URI_PREFIX_101);
         } else {
             LOGGER.log(Level.INFO, "Cannot register the default Tomcat server. 
 The version {0} is not supported.", version); // NOI18N
             return 5;
@@ -192,6 +196,8 @@ public class AutomaticRegistration {
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_70) // 
NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_80) // 
NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_90) // 
NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_100) // 
NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_101) // 
NOI18N
                 + ")" + Pattern.quote(TomcatFactory.TOMCAT_URI_HOME_PREFIX) // 
NOI18N
                 + Pattern.quote(catalinaHomeValue)
                 + "(" + Pattern.quote(TomcatFactory.TOMCAT_URI_BASE_PREFIX) + 
".+)?$"); // NOI18N
@@ -233,6 +239,8 @@ public class AutomaticRegistration {
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_70)  // 
NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_80)  // 
NOI18N
                 + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_90)  // 
NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_100)  // 
NOI18N
+                + "|" + Pattern.quote(TomcatFactory.TOMCAT_URI_PREFIX_101)  // 
NOI18N
                 + ")" + Pattern.quote(TomcatFactory.TOMCAT_URI_HOME_PREFIX)  
// NOI18N
                 + "(.+)$"); // NOI18N
 
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
index 19a8c294ab..bf90d953c0 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/Bundle.properties
@@ -19,7 +19,7 @@
 
 # Module manifest localization
 OpenIDE-Module-Name=Tomcat (TomEE)
-OpenIDE-Module-Display-Category=Java Web and EE
+OpenIDE-Module-Display-Category=Java/Jakarta Web and EE
 OpenIDE-Module-Short-Description=Tomcat or TomEE server integration
 OpenIDE-Module-Long-Description=\
     Plugin that allows developing and executing web applications with a Apache 
Tomcat or TomEE server.
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
index 1db3099b5c..94c4fa8e3c 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/resources/tomee_resources.dtd
@@ -28,6 +28,9 @@ We didn't find a DTD or xml schema.
 <!ELEMENT Resource (#PCDATA) >
 <!ATTLIST Resource id CDATA #REQUIRED>
 <!ATTLIST Resource type CDATA #REQUIRED>
+<!ATTLIST Resource class-name CDATA #REQUIRED>
+<!ATTLIST Resource constructor CDATA #REQUIRED>
+<!ATTLIST Resource factory-name CDATA #REQUIRED>
 
 <!ELEMENT Container (#PCDATA) >
 <!ATTLIST Container id CDATA #REQUIRED>
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
index 11d94a1308..76d8fc71eb 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/ui/wizard/InstallPanelVisual.java
@@ -354,6 +354,15 @@ class InstallPanelVisual extends javax.swing.JPanel {
     public String getUrl() {
         String url;
         switch (getTomcatVersion()) {
+            case TOMCAT_110:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_110;
+                break;
+            case TOMCAT_101:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_101;
+                break;
+            case TOMCAT_100:
+                url = TomcatFactory.TOMCAT_URI_PREFIX_100;
+                break;
             case TOMCAT_90:
                 url = TomcatFactory.TOMCAT_URI_PREFIX_90;
                 break;
@@ -574,9 +583,7 @@ class InstallPanelVisual extends javax.swing.JPanel {
                     infoMessage = true;
                 } else if (!TomcatUsers.hasManagerRole(getTomcatVersion(), 
tomcatUsersXml, jTextFieldUsername.getText())) {
                     errorMessage = 
NbBundle.getMessage(InstallPanelVisual.class, "MSG_UserHasNotManagerRole",
-                            TomcatVersion.TOMCAT_70.equals(getTomcatVersion())
-                                    || 
TomcatVersion.TOMCAT_80.equals(getTomcatVersion())
-                                    || 
TomcatVersion.TOMCAT_90.equals(getTomcatVersion())
+                            
getTomcatVersion().isAtLeast(TomcatVersion.TOMCAT_70)
                                 ? "manager-script"
                                 : "manager");
                     infoMessage = true;
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
index afbd4723a2..ebfcb051ef 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogSupport.java
@@ -44,7 +44,7 @@ import org.openide.windows.*;
  * @author  Stepan Herold
  */
 public class LogSupport {
-    private Map/*<Link, Link>*/ links = Collections.synchronizedMap(new 
HashMap());
+    private Map<Link, Link> links = Collections.synchronizedMap(new HashMap());
     private Annotation errAnnot;
     
     /**
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
index 1bdb05d290..a427587476 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/LogViewer.java
@@ -76,7 +76,7 @@ public class LogViewer extends Thread {
     /**
      * List of listeners which are notified when the log viewer is stoped.
      */
-    private List/*<LogViewerStopListener>*/ stopListeners = 
Collections.synchronizedList(new LinkedList());
+    private List<LogViewerStopListener> stopListeners = 
Collections.synchronizedList(new LinkedList());
 
     private String displayName;
     
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
index e1adffb6b3..bac81694fa 100644
--- 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
+++ 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatProperties.java
@@ -261,6 +261,18 @@ public class TomcatProperties {
         String prefix;
         String serverID;
         switch (tm.getTomcatVersion()) {
+            case TOMCAT_110:
+                prefix = "tomcat110"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_110;
+                break;
+            case TOMCAT_101:
+                prefix = "tomcat101"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_101;
+                break;
+            case TOMCAT_100:
+                prefix = "tomcat100"; // NIO18N
+                serverID = TomcatFactory.SERVER_ID_100;
+                break;
             case TOMCAT_90:
                 prefix = "tomcat90"; // NIO18N
                 serverID = TomcatFactory.SERVER_ID_90;
@@ -663,7 +675,7 @@ public class TomcatProperties {
             }
         }
 
-        if (tm.isTomcat60()) {
+        if (tm.getTomcatVersion().isAtLeast(TomcatVersion.TOMCAT_60)) {
             try {
                 retValue.add(new File(homeDir, 
"bin/tomcat-juli.jar").toURI().toURL()); // NOI18N
             } catch (MalformedURLException e) {
@@ -722,7 +734,23 @@ public class TomcatProperties {
                     addFileToList(list, jspApiDoc);
                     addFileToList(list, servletApiDoc);
                 } else {
-                    File j2eeDoc = 
InstalledFileLocator.getDefault().locate("docs/javaee-doc-api.jar", null, 
false); // NOI18N
+                    String eeDocs;
+                    switch (tm.getTomcatVersion()) {
+//                      TODO: Add support for Jakarta EE 10
+//                      case TOMCAT_110:
+//                      case TOMCAT_101:
+//                           eeDocs = "docs/jakartaee10-doc-api.jar";
+//                           break;
+                        case TOMCAT_100:
+                            eeDocs = "docs/jakartaee9-doc-api.jar";
+                            break;
+                        case TOMCAT_90:
+                            eeDocs = "docs/jakartaee8-doc-api.jar";
+                            break;
+                        default:
+                            eeDocs = "docs/javaee-doc-api.jar";
+                    }
+                    File j2eeDoc = 
InstalledFileLocator.getDefault().locate(eeDocs, null, false); // NOI18N
                     if (j2eeDoc != null) {
                         addFileToList(list, j2eeDoc);
                     }
diff --git 
a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java 
b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
index a11033e029..4e250596ad 100644
--- a/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
+++ b/enterprise/tomcat5/src/org/netbeans/modules/tomcat5/util/TomcatUsers.java
@@ -79,9 +79,7 @@ public class TomcatUsers {
             roles = ""; // NOI18N
         }
         StringBuilder newRoles = new StringBuilder(roles.trim());
-        if (TomcatVersion.TOMCAT_70.equals(version)
-                || TomcatVersion.TOMCAT_80.equals(version)
-                || TomcatVersion.TOMCAT_90.equals(version)) {
+        if (version.isAtLeast(TomcatVersion.TOMCAT_70)) {
             if (!hasRole(roles, "manager-script")) { // NOI18N
                 if (newRoles.length() > 0 && 
!newRoles.toString().endsWith(",")) { // NOI18N
                     newRoles.append(',');
@@ -139,9 +137,7 @@ public class TomcatUsers {
             }
             if (username.equals(name)) { // NOI18N
                 String roles = user.getAttribute("roles"); // NOI18N
-                if (TomcatVersion.TOMCAT_70.equals(version)
-                        || TomcatVersion.TOMCAT_80.equals(version)
-                        || TomcatVersion.TOMCAT_90.equals(version)) {
+                if (version.isAtLeast(TomcatVersion.TOMCAT_70)) {
                     if (hasRole(roles, "manager-script")) { // NOI18N
                         return true;
                     }                    
diff --git 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
index e313421deb..3450d1ed17 100644
--- 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
+++ 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatFactoryTest.java
@@ -19,6 +19,7 @@
 package org.netbeans.modules.tomcat5;
 
 import org.netbeans.junit.NbTestCase;
+import org.netbeans.modules.tomcat5.deploy.TomcatManager;
 
 /**
  *
@@ -33,4 +34,27 @@ public class TomcatFactoryTest extends NbTestCase {
     public void testOldCreate50MethodForAutoupdateModule() {
         assertNotNull(TomcatFactory.create50());
     }
+    
+    public void testTomEEtype() {
+
+        TomcatManager.TomEEType type = 
TomcatManager.TomEEType.TOMEE_WEBPROFILE;
+        String file = "activemq-protobuf-1.1.jar";
+        
+        if (TomcatFactory.TOMEE_PLUME_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_PLUME;
+        } else if 
(TomcatFactory.TOMEE_PLUS_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_PLUS;
+        } else if 
(TomcatFactory.TOMEE_MICROPROFILE_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_MICROPROFILE;
+        } else if 
(TomcatFactory.TOMEE_WEBPROFILE_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_WEBPROFILE;
+        } else if 
(TomcatFactory.TOMEE_JAXRS_JAR_PATTERN.matcher(file).matches()) {
+            type = TomcatManager.TomEEType.TOMEE_JAXRS;
+        }
+        
+        assertEquals(TomcatManager.TomEEType.TOMEE_PLUS, type);
+        assertNotSame(TomcatManager.TomEEType.TOMEE_MICROPROFILE, type);
+        
+    }
+    
 }
diff --git 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
index eb3a0ebbeb..9736b20f69 100644
--- 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
+++ 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/TomcatManagerTest.java
@@ -75,4 +75,31 @@ public class TomcatManagerTest extends TestBase {
         TestRunner.run(suite());
     }
     
+    public void testIsHigherThanTomcat70() {
+        TomcatManager.TomcatVersion tomcatVersion = 
TomcatManager.TomcatVersion.TOMCAT_70;
+        
+        
assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_110));
+        
assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_101));
+        
assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_100));
+        
assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_90));
+        
assertFalse(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_80));
+        
assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_60));
+        
assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_55));
+        
assertTrue(tomcatVersion.isAtLeast(TomcatManager.TomcatVersion.TOMCAT_50));
+        
+    }
+    
+    public void testIsHigherThanTomee70() {
+        TomcatManager.TomEEVersion tomEEVersion = 
TomcatManager.TomEEVersion.TOMEE_70;
+        
+        
assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_90));
+        
assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_80));
+        
assertFalse(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_71));
+        
assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_70));
+        
assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_17));
+        
assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_16));
+        
assertTrue(tomEEVersion.isAtLeast(TomcatManager.TomEEVersion.TOMEE_15));
+        
+    }
+    
 }
diff --git 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
index 1a5191c103..51fb444d58 100644
--- 
a/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
+++ 
b/enterprise/tomcat5/test/unit/src/org/netbeans/modules/tomcat5/util/TomcatUsersTest.java
@@ -66,6 +66,11 @@ public class TomcatUsersTest extends NbTestCase {
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_70, file, 
"tomcat6"));
         assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_70, file, 
"tomcat7"));
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, 
"tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_80, file, 
"tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_90, file, 
"tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_100, file, 
"tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, 
"tomcat7"));
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_110, file, 
"tomcat7"));
     }
     
     public void testCreateUser() throws Exception {
@@ -84,6 +89,15 @@ public class TomcatUsersTest extends NbTestCase {
         assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, 
"nonexisting"));
         TomcatUsers.createUser(file, "new", "tomcat", TomcatVersion.TOMCAT_60);
         assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, 
"new"));
+        
+        file = createTomcatUsersXml("tomcat-users3.xml", CONTENT3);
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_110, file, 
"ide"));
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, 
"ide"));
+        TomcatUsers.createUser(file, "tomcat6", "tomcat", 
TomcatVersion.TOMCAT_101);
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, 
"tomcat7"));
+        assertFalse(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_60, file, 
"nonexisting"));
+        TomcatUsers.createUser(file, "new", "tomcat", 
TomcatVersion.TOMCAT_101);
+        assertTrue(TomcatUsers.hasManagerRole(TomcatVersion.TOMCAT_101, file, 
"new"));
     }
     
     public void testUserExists() throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to