From 6227036bb00edf137ac168ca652f0b6ca589766f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Contreras?= Date: Wed, 11 Jan 2023 11:12:29 -0600 Subject: [PATCH] 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 --- .../tomcat5/AntDeploymentProviderImpl.java | 7 +- .../modules/tomcat5/TomcatFactory.java | 112 ++++++++--- .../config/TomcatModuleConfiguration.java | 6 +- .../customizer/CustomizerDataSupport.java | 57 ++++-- .../tomcat5/customizer/CustomizerGeneral.java | 1 - .../modules/tomcat5/deploy/TomcatManager.java | 86 ++++++-- .../tomcat5/j2ee/JaxRsStackSupportImpl.java | 5 +- .../tomcat5/j2ee/TomcatPlatformImpl.java | 184 +++++++++++++++--- .../registration/AutomaticRegistration.java | 8 + .../tomcat5/resources/Bundle.properties | 2 +- .../tomcat5/resources/tomee_resources.dtd | 3 + .../tomcat5/ui/wizard/InstallPanelVisual.java | 13 +- .../modules/tomcat5/util/LogSupport.java | 2 +- .../modules/tomcat5/util/LogViewer.java | 2 +- .../tomcat5/util/TomcatProperties.java | 32 ++- .../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 57c71c3f79b2..8ec3fa1ce45d 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 AntDeploymentProviderImpl(DeploymentManager dm) { 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 d159961e6d8a..6aa05e729b72 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 @@ 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.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: - *
tomcat[55|60]:[home=<home_path>:[base=<base_path>:]]<manager_app_url>
+ *
tomcat[90|100]:[home=<home_path>:[base=<base_path>:]]<manager_app_url>
* for example *
tomcat:http://localhost:8080/manager/
* 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 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 boolean handlesURI(String str) { || 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 static TomcatVersion getTomcatVersion(File catalinaHome) throws IllegalSt 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 @@ private static TomcatVersion getTomcatVersionFallback(File catalinaHome) throws } 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 @@ private static TomcatVersion getTomcatVersion(String version, TomcatVersion defa 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 @@ private static TomcatVersion getTomcatVersion(String version, TomcatVersion defa } 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 static TomEEType getTomEEType(File catalinaHome, File catalinaBase) @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 @@ private static TomEEVersion getTomEEVersion(String version, TomEEVersion default 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 @@ private static String stripUriPrefix(String uri, TomcatVersion tomcatVersion) { 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 275781fd410c..1bd15ab2b169 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 Set getDatasources() throws ConfigurationException { Context context = getContext(); Set 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 Datasource createDatasource(final String name, final String url, 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 2306c445fc9a..04036a323e24 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 @@ 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.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 boolean useManagerScript() { 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 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 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 2df151838199..ef7b90852bac 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.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 adc97d622487..c1d7fa0ff66b 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 @@ */ 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 boolean isRunning(int timeout, boolean checkResponse) { */ 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 String getUri () { * @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 boolean isSuspended() { 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 synchronized boolean isTomEE() { } 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 synchronized TomEEVersion getTomEEVersion() { 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 ee83e971e95c..6ef627618fd4 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 @@ 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 c4581f4c565a..25a2d71f75f2 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.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 Set getSupportedTypes() { @Override public Set getSupportedProfiles() { - Set 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 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 getSupportedJavaPlatformVersions() { - Set versions = new HashSet<>(6); + Set 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 Lookup getLookup() { 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 @@ private void loadLibraries(LibraryImplementation lib) { lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_JAVADOC, tp.getJavadocs()); lib.setContent(J2eeLibraryTypeProvider.VOLUME_TYPE_SRC, tp.getSources()); } + + /** + * Create Set containing desired java versions. e.g. + *
{@code
+     *  Set versions = versionRange(8, 11)
+     * }
+ * 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} of desired Java versions + */ + private static Set 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 ca74d33ef97d..fbf667346909 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 @@ private static int registerTomcatInstance(String clusterDirValue, String catalin 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 @@ private static int unregisterTomcatInstance(String clusterDirValue, String catal + "|" + 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 @@ private static int list(String clusterDirValue) { + "|" + 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 19a8c294abf1..bf90d953c033 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 1db3099b5c6f..94c4fa8e3c54 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. + + + 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 11d94a130864..76d8fc71eb6a 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 @@ public synchronized TomcatVersion getTomcatVersion() { 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 @@ private boolean isUsernamePasswordValid() { 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 afbd4723a206..ebfcb051ef9a 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 @@ * @author Stepan Herold */ public class LogSupport { - private Map/**/ links = Collections.synchronizedMap(new HashMap()); + private Map 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 1bdb05d29066..a427587476d4 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/**/ stopListeners = Collections.synchronizedList(new LinkedList()); + private List 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 e1adffb6b382..bac81694fa56 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 @@ private String getInstanceID() { 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 void setDriverDeployment(boolean enabled) { } } - 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 @@ private static void addFileToList(List list, File f) { 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 a11033e029e4..4e250596adfb 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 static void createUser(File tomcatUsersFile, String username, String pass 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 static boolean hasManagerRole(TomcatVersion version, } 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 e313421debd7..3450d1ed179a 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 TomcatFactoryTest(String name) { 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 eb3a0ebbeb4d..9736b20f69ac 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 static void main(java.lang.String[] args) { 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 1a5191c10397..51fb444d584f 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 void testHasRole() throws Exception { 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 void testCreateUser() throws Exception { 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 {