[565498] New Servlet/Filter/Listener wizards should account for Jakarta package names

Change-Id: I664ffdb40dc688d67408dc0ff65b759f4a713e8b
diff --git a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateFilterTemplateModel.java b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateFilterTemplateModel.java
index 0f0ec62..d815f2f 100644
--- a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateFilterTemplateModel.java
+++ b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateFilterTemplateModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2021 SAP AG and others.
+ * Copyright (c) 2007, 2022 SAP AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,18 +11,16 @@
 package org.eclipse.jst.j2ee.internal.web.operations;
 
 import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.ABSTRACT_METHODS;
+import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.ASYNC_SUPPORT;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.DESTROY;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.DO_FILTER;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.FILTER_MAPPINGS;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.INIT;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.INIT_PARAM;
-import static org.eclipse.jst.j2ee.internal.web.operations.INewFilterClassDataModelProperties.ASYNC_SUPPORT;
-import static org.eclipse.jst.j2ee.web.IServletConstants.DESTROY_SIGNATURE;
-import static org.eclipse.jst.j2ee.web.IServletConstants.DO_FILTER_SIGNATURE;
-import static org.eclipse.jst.j2ee.web.IServletConstants.FILTER_INIT_SIGNATURE;
 import static org.eclipse.jst.j2ee.web.IServletConstants.METHOD_DESTROY;
 import static org.eclipse.jst.j2ee.web.IServletConstants.METHOD_DO_FILTER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.METHOD_INIT;
+import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_ANNOTATION_DISPATCHER_TYPE;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_ANNOTATION_INIT_PARAM;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_FILTER_CHAIN;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_FILTER_CONFIG;
@@ -31,7 +29,6 @@
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_REQUEST;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_RESPONSE;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_WEB_FILTER;
-import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_ANNOTATION_DISPATCHER_TYPE;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -41,6 +38,7 @@
 import java.util.Map;
 
 import org.eclipse.jst.j2ee.internal.common.operations.Method;
+import org.eclipse.jst.j2ee.web.IServletConstants;
 import org.eclipse.jst.j2ee.webapplication.DispatcherType;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 
@@ -60,31 +58,58 @@
     
 	@Override
 	public Collection<String> getImports() {
-		Collection<String> collection = super.getImports();
+		Collection<String> imports = super.getImports();
 		
+		String javaEEVersion = getJavaEEVersion();
 		if (shouldGenInit()) {
-			collection.add(QUALIFIED_FILTER_CONFIG);
-			collection.add(QUALIFIED_SERVLET_EXCEPTION);
+			if (SERVLET_5_0.equals(javaEEVersion)) {
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_FILTER_CONFIG);
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_EXCEPTION);
+			}
+			else {
+				imports.add(QUALIFIED_FILTER_CONFIG);
+				imports.add(QUALIFIED_SERVLET_EXCEPTION);
+			}
 		}
 		
 		if (shouldGenDoFilter()) {
-			collection.add(QUALIFIED_SERVLET_REQUEST);
-			collection.add(QUALIFIED_SERVLET_RESPONSE);
-			collection.add(QUALIFIED_FILTER_CHAIN);
-			collection.add(QUALIFIED_IO_EXCEPTION);
-			collection.add(QUALIFIED_SERVLET_EXCEPTION);
-		}
-		if (SERVLET_3.equals(getJavaEEVersion()) || SERVLET_3_1.equals(getJavaEEVersion()) || SERVLET_4_0.equals(getJavaEEVersion())){
-			collection.add(QUALIFIED_WEB_FILTER);
-			if (getInitParams()!= null && getInitParams().size()>0){
-				collection.add(QUALIFIED_ANNOTATION_INIT_PARAM);
+			if (SERVLET_5_0.equals(javaEEVersion)) {
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_REQUEST);
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_RESPONSE);
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_FILTER_CHAIN);
+				imports.add(QUALIFIED_IO_EXCEPTION);
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_EXCEPTION);
 			}
-			if (hasDispatchers()){
-				collection.add(QUALIFIED_ANNOTATION_DISPATCHER_TYPE);
+			else {
+				imports.add(QUALIFIED_SERVLET_REQUEST);
+				imports.add(QUALIFIED_SERVLET_RESPONSE);
+				imports.add(QUALIFIED_FILTER_CHAIN);
+				imports.add(QUALIFIED_IO_EXCEPTION);
+				imports.add(QUALIFIED_SERVLET_EXCEPTION);
+			}
+		}
+		if (SERVLET_5_0.equals(javaEEVersion)) {
+			imports.add(IServletConstants.QUALIFIED_JAKARTA_WEB_FILTER);
+			if (getInitParams() != null && !getInitParams().isEmpty()) {
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_ANNOTATION_INIT_PARAM);
+			}
+			if (hasDispatchers()) {
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_ANNOTATION_DISPATCHER_TYPE);
+			}
+		}
+		else {
+			if (SERVLET_3.equals(javaEEVersion) || SERVLET_3_1.equals(javaEEVersion) || SERVLET_4_0.equals(javaEEVersion)) {
+				imports.add(QUALIFIED_WEB_FILTER);
+				if (getInitParams() != null && !getInitParams().isEmpty()) {
+					imports.add(QUALIFIED_ANNOTATION_INIT_PARAM);
+				}
+				if (hasDispatchers()) {
+					imports.add(QUALIFIED_ANNOTATION_DISPATCHER_TYPE);
+				}
 			}
 		}
 		
-		return collection;
+		return imports;
 	}
 
 	public String getFilterName() {
@@ -200,9 +225,16 @@
 		
 		while (iterator.hasNext()) {
 			Method method = iterator.next();
-			if ((METHOD_INIT.equals(method.getName()) && FILTER_INIT_SIGNATURE.equals(method.getSignature())) || 
-					(METHOD_DESTROY.equals(method.getName()) && DESTROY_SIGNATURE.equals(method.getSignature())) ||
-					(METHOD_DO_FILTER.equals(method.getName()) && DO_FILTER_SIGNATURE.equals(method.getSignature()))) {
+			String methodName = method.getName();
+			String methodSignature = method.getSignature();
+			if ((METHOD_INIT.equals(methodName) && (IServletConstants.FILTER_INIT_SIGNATURE.equals(methodSignature))) ||
+					(METHOD_DESTROY.equals(methodName) && (IServletConstants.DESTROY_SIGNATURE.equals(methodSignature))) ||
+					(METHOD_DO_FILTER.equals(methodName) && (IServletConstants.DO_FILTER_SIGNATURE.equals(methodSignature)))) {
+				iterator.remove();
+			}
+			else if ((METHOD_INIT.equals(methodName) && (IServletConstants.JAKARTA_FILTER_INIT_SIGNATURE.equals(methodSignature))) ||
+					(METHOD_DESTROY.equals(methodName) && (IServletConstants.JAKARTA_DESTROY_SIGNATURE.equals(methodSignature))) ||
+					(METHOD_DO_FILTER.equals(methodName) && (IServletConstants.JAKARTA_DO_FILTER_SIGNATURE.equals(methodSignature)))) {
 				iterator.remove();
 			}
 		}
diff --git a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateListenerTemplateModel.java b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateListenerTemplateModel.java
index 77cd5d4..78c8c02 100644
--- a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateListenerTemplateModel.java
+++ b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/CreateListenerTemplateModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2021 SAP AG and others.
+ * Copyright (c) 2007, 2022 SAP AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,59 +29,111 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.eclipse.jst.j2ee.web.IServletConstants;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 
 public class CreateListenerTemplateModel extends CreateWebClassTemplateModel {
 	
 	@Override
 	public Collection<String> getImports() {
-		Collection<String> collection = super.getImports();
+		Collection<String> imports = super.getImports();
 		
 		if (implementServletContextListener()) {
-			collection.add(QUALIFIED_SERVLET_CONTEXT_LISTENER);
-			collection.add(QUALIFIED_SERVLET_CONTEXT_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_CONTEXT_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_JAKARTA_SERVLET_CONTEXT_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_SERVLET_CONTEXT_LISTENER);
+				imports.add(QUALIFIED_SERVLET_CONTEXT_EVENT);
+			}
 		}
 		
 		if (implementServletContextAttributeListener()) {
-			collection.add(QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER);
-			collection.add(QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER);
+				imports.add(QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_EVENT);
+			}
 		}
 		
 		if (implementHttpSessionListener()) {
-			collection.add(QUALIFIED_HTTP_SESSION_LISTENER);
-			collection.add(QUALIFIED_HTTP_SESSION_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_HTTP_SESSION_LISTENER);
+				imports.add(QUALIFIED_HTTP_SESSION_EVENT);
+			}
 		}
 		
 		if (implementHttpSessionAttributeListener()) {
-			collection.add(QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER);
-			collection.add(QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER);
+				imports.add(QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			}
 		}
 		
 		if (implementHttpSessionActivationListener()) {
-			collection.add(QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER);
-			collection.add(QUALIFIED_HTTP_SESSION_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER);
+				imports.add(QUALIFIED_HTTP_SESSION_EVENT);
+			}
 		}
 		
 		if (implementHttpSessionBindingListener()) {
-			collection.add(QUALIFIED_HTTP_SESSION_BINDING_LISTENER);
-			collection.add(QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_BINDING_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_HTTP_SESSION_BINDING_LISTENER);
+				imports.add(QUALIFIED_HTTP_SESSION_BINDING_EVENT);
+			}
 		}
 		
 		if (implementServletRequestListener()) {
-			collection.add(QUALIFIED_SERVLET_REQUEST_LISTENER);
-			collection.add(QUALIFIED_SERVLET_REQUEST_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_SERVLET_REQUEST_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_SERVLET_REQUEST_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_SERVLET_REQUEST_LISTENER);
+				imports.add(QUALIFIED_SERVLET_REQUEST_EVENT);
+			}
 		}
 		
 		if (implementServletRequestAttributeListener()) {
-			collection.add(QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER);
-			collection.add(QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_EVENT);
+			if (SERVLET_5_0.equals(getJavaEEVersion())) {
+				imports.add(IServletConstants.QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER);
+				imports.add(IServletConstants.QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_EVENT);
+			}
+			else {
+				imports.add(QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER);
+				imports.add(QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_EVENT);
+			}
 		}
 		
-		if (SERVLET_3.equals(getJavaEEVersion()) || SERVLET_3_1.equals(getJavaEEVersion()) || SERVLET_4_0.equals(getJavaEEVersion())){
-			collection.add(QUALIFIED_WEB_LISTENER);
+		if (SERVLET_5_0.equals(getJavaEEVersion())) {
+			imports.add(IServletConstants.QUALIFIED_JAKARTA_WEB_LISTENER);
+		}
+		else if (SERVLET_3.equals(getJavaEEVersion()) || SERVLET_3_1.equals(getJavaEEVersion()) || SERVLET_4_0.equals(getJavaEEVersion())){
+			imports.add(QUALIFIED_WEB_LISTENER);
 		}
 		
-		return collection;
+		return imports;
 	}
 
 	public CreateListenerTemplateModel(IDataModel dataModel) {
diff --git a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/NewFilterClassDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/NewFilterClassDataModelProvider.java
index 21ef143..68e7a48 100644
--- a/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/NewFilterClassDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.web/web/org/eclipse/jst/j2ee/internal/web/operations/NewFilterClassDataModelProvider.java
@@ -328,7 +328,7 @@
 			}
 		}
 		// Return interface list
-		return interfaceList;
+		return jakartaInterfaceList;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddListenerWizardPage.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddListenerWizardPage.java
index 1681b8a..f99fbd5 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddListenerWizardPage.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddListenerWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 SAP AG and others.
+ * Copyright (c) 2008, 2022 SAP AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,22 +15,48 @@
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_BINDING_LISTENER;
+import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_ID_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_CONTEXT_LISTENER;
+import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER;
 import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_REQUEST_LISTENER;
-import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_HTTP_SESSION_ID_LISTENER;
-import static org.eclipse.jst.j2ee.web.IServletConstants.QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER;
-import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.*;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_ASYNC_EVENTS;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_C;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_G;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_H;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_HTTP_SESSION_EVENTS;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_LIFECYCLE_I;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_LIFECYCLE_L;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_LIFECYCLE_Y;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_OBJECT_BINDING;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_OBJECT_SESSION_ID;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_PAGE_DESC;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_PAGE_TITLE;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_SERVLET_CONTEXT_EVENTS;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_SERVLET_REQUEST_EVENTS;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.ADD_LISTENER_WIZARD_SESSION_MIGRATION;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.CLEAR_BUTTON;
+import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.SELECT_ALL_BUTTON;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jst.j2ee.internal.web.operations.INewServletClassDataModelProperties;
+import org.eclipse.jst.j2ee.internal.web.operations.NewListenerClassDataModelProvider;
+import org.eclipse.jst.j2ee.internal.web.plugin.WebPlugin;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.j2ee.web.IServletConstants;
+import org.eclipse.jst.j2ee.web.project.facet.WebFacetUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -41,9 +67,13 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.util.FacetedProjectUtilities;
 import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
+import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
 
 public class AddListenerWizardPage extends DataModelWizardPage  {
 	
@@ -99,62 +129,68 @@
 	private void createServletContextEvents(Composite parent) {
 		Group group = createGroup(parent, ADD_LISTENER_WIZARD_SERVLET_CONTEXT_EVENTS);
 
+		boolean useJakartaPackages = useJakartaPackages();
+
 		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_LIFECYCLE_L, 
-				QUALIFIED_SERVLET_CONTEXT_LISTENER,
+				ADD_LISTENER_WIZARD_LIFECYCLE_L,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_SERVLET_CONTEXT_LISTENER : QUALIFIED_SERVLET_CONTEXT_LISTENER,
 				INTERFACES);
 
 		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_C, 
-				QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER, 
+				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_C,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_SERVLET_CONTEXT_ATTRIBUTE_LISTENER : QUALIFIED_SERVLET_CONTEXT_ATTRIBUTE_LISTENER,
 				INTERFACES);
 	}
 	
 	private void createHttpSessionEvents(Composite parent) {
 		Group group = createGroup(parent, ADD_LISTENER_WIZARD_HTTP_SESSION_EVENTS);
 		
+		boolean useJakartaPackages = useJakartaPackages();
+
 		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_LIFECYCLE_I, 
-				QUALIFIED_HTTP_SESSION_LISTENER, 
+				ADD_LISTENER_WIZARD_LIFECYCLE_I,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_LISTENER : QUALIFIED_HTTP_SESSION_LISTENER,
 				INTERFACES);
 		
 		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_H, 
-				QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER, 
+				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_H,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_ATTRIBUTE_LISTENER : QUALIFIED_HTTP_SESSION_ATTRIBUTE_LISTENER,
 				INTERFACES);
 		
 		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_SESSION_MIGRATION, 
-				QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER, 
+				ADD_LISTENER_WIZARD_SESSION_MIGRATION,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_ACTIVATION_LISTENER : QUALIFIED_HTTP_SESSION_ACTIVATION_LISTENER,
 				INTERFACES);
 		
-		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_OBJECT_BINDING, 
-				QUALIFIED_HTTP_SESSION_BINDING_LISTENER, 
+		createEventListenerRow(group,
+				ADD_LISTENER_WIZARD_OBJECT_BINDING,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_BINDING_LISTENER : QUALIFIED_HTTP_SESSION_BINDING_LISTENER,
 				INTERFACES);
 		
-		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_OBJECT_SESSION_ID, 
-				QUALIFIED_HTTP_SESSION_ID_LISTENER, 
-				INTERFACES);		
+		createEventListenerRow(group,
+				ADD_LISTENER_WIZARD_OBJECT_SESSION_ID,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_ID_LISTENER : QUALIFIED_HTTP_SESSION_ID_LISTENER,
+				INTERFACES);
 	}
 	
 	private void createServletRequestEvents(Composite parent) {
 		Group group = createGroup(parent, ADD_LISTENER_WIZARD_SERVLET_REQUEST_EVENTS);
 		
-		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_LIFECYCLE_Y, 
-				QUALIFIED_SERVLET_REQUEST_LISTENER, 
+		boolean useJakartaPackages = useJakartaPackages();
+
+		createEventListenerRow(group,
+				ADD_LISTENER_WIZARD_LIFECYCLE_Y,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_SERVLET_REQUEST_LISTENER : QUALIFIED_SERVLET_REQUEST_LISTENER,
 				INTERFACES);
 
-		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_G, 
-				QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER, 
+		createEventListenerRow(group,
+				ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_G,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_SERVLET_REQUEST_ATTRIBUTE_LISTENER : QUALIFIED_SERVLET_REQUEST_ATTRIBUTE_LISTENER,
 				INTERFACES);
 		
-		createEventListenerRow(group, 
-				ADD_LISTENER_WIZARD_ASYNC_EVENTS, 
-				QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER, 
+		createEventListenerRow(group,
+				ADD_LISTENER_WIZARD_ASYNC_EVENTS,
+				useJakartaPackages ? IServletConstants.QUALIFIED_JAKARTA_SERVLET_REQUEST_ASYNC_EVENT_LISTENER : QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER,
 				INTERFACES);		
 	
 	}
@@ -171,12 +207,12 @@
 	}
 	
 	private void createEventListenerRow(Composite parent, String event, String listener, String property) {
-		if (listener.equals(QUALIFIED_HTTP_SESSION_ID_LISTENER)){
+		if (listener.equals(QUALIFIED_HTTP_SESSION_ID_LISTENER) || listener.equals(IServletConstants.QUALIFIED_JAKARTA_HTTP_SESSION_ID_LISTENER)){
 			changeSessionID = createCheckbox(parent, event, listener, property);
 			changeSessionIDIconLabel = createInterfaceIcon(parent);
 			changeSessionIDInterfaceLabel = createInterfaceLabel(parent, listener);
 		}
-		else if (listener.equals(QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER)){
+		else if (listener.equals(QUALIFIED_SERVLET_REQUEST_ASYNC_EVENT_LISTENER) || listener.equals(IServletConstants.QUALIFIED_JAKARTA_SERVLET_REQUEST_ASYNC_EVENT_LISTENER)){
 			asyncListener = createCheckbox(parent, event, listener, property);
 			asyncListenerIconLabel = createInterfaceIcon(parent);
 			asyncListenerInterfaceLabel = createInterfaceLabel(parent, listener);
@@ -247,10 +283,18 @@
 			interfaces = new ArrayList();
 			model.setProperty(INTERFACES, interfaces);
 		}
-		
-		for (String iface : LISTENER_INTERFACES) {
-			if (!interfaces.contains(iface)) {
-				interfaces.add(iface);
+		if (useJakartaPackages()) {
+			for (String iface : NewListenerClassDataModelProvider.JAKARTA_LISTENER_INTERFACES) {
+				if (!interfaces.contains(iface)) {
+					interfaces.add(iface);
+				}
+			}
+		}
+		else {
+			for (String iface : LISTENER_INTERFACES) {
+				if (!interfaces.contains(iface)) {
+					interfaces.add(iface);
+				}
 			}
 		}
 		
@@ -266,7 +310,8 @@
 		}
 		
 		interfaces.removeAll(Arrays.asList(LISTENER_INTERFACES));
-		
+		interfaces.removeAll(Arrays.asList(NewListenerClassDataModelProvider.JAKARTA_LISTENER_INTERFACES));
+
 		synchHelper2.synchUIWithModel(INTERFACES, DataModelEvent.VALUE_CHG);
 		model.notifyPropertyChange(INTERFACES, DataModelEvent.VALUE_CHG);
 	}
@@ -283,8 +328,65 @@
 			setServlet31ListenersVisible(false);
 		}
 	}
-	
-	
+
+	private boolean useJakartaPackages() {
+		Object nameValue = model.getProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);
+		if (nameValue != null) {
+			String projectName = nameValue.toString();
+
+			try {
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				String id = null;
+				if(JavaEEProjectUtilities.isDynamicWebProject(project)){
+					id = WebFacetUtils.WEB_FACET.getId();
+				}else {
+					id = WebFacetUtils.WEBFRAGMENT_FACET.getId();
+				}
+				String facetVersion = FacetedProjectUtilities.getProjectFacetVersion(project, id).getVersionString();
+				if (facetVersion != null && facetVersion.length() > 0) {
+					float f = Float.parseFloat(facetVersion);
+					return f >= 5;
+				}
+			}
+			catch (NullPointerException e) {
+				// not a faceted project, then
+			}
+			catch (NumberFormatException e) {
+				// this should never happen
+				WTPCommonPlugin.logError(e);
+			}
+
+			if (projectName != null && projectName.length() > 0) {
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				if (project != null && project.isAccessible()) {
+					// the default when otherwise indeterminate should be Jakarta
+					try {
+						IJavaProject javaProject = JavaCore.create(project);
+						if (javaProject != null && javaProject.exists()) {
+							if (javaProject.findType(IServletConstants.QUALIFIED_JAKARTA_GENERIC_SERVLET) != null) {
+								return true;
+							}
+						}
+					}
+					catch (CoreException e) {
+						WTPCommonPlugin.logError(e);
+					}
+					try {
+						// check to see if it is Jakarta Servlet 5 or newer
+						if (FacetedProjectFramework.hasProjectFacet(project, WebFacetUtils.WEB_FACET.getId(), WebFacetUtils.WEB_50.getVersionString())) {
+							return true;
+						}
+					}
+					catch (CoreException e) {
+						WebPlugin.log(e);
+					}
+				}
+			}
+			return false;
+		}
+		return false;
+	}
+
 	private void setServlet31ListenersVisible(boolean visible){
 		changeSessionID.setVisible(visible);
 		changeSessionIDIconLabel.setVisible(visible);