diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelper.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelper.java index 15a3589457e5..c4bf602d5ea8 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelper.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelper.java @@ -62,11 +62,16 @@ public class CommonAnnotationHelper { // see JSR250 private static final Set RESOURCE_REF_TYPES = new HashSet(Arrays.asList( "javax.sql.DataSource", + "jakarta.jms.ConnectionFactory", "javax.jms.ConnectionFactory", + "jakarta.jms.QueueConnectionFactory", "javax.jms.QueueConnectionFactory", + "jakarta.jms.TopicConnectionFactory", "javax.jms.TopicConnectionFactory", + "jakarta.mail.Session", "javax.mail.Session", "java.net.URL", + "jakarta.resource.cci.ConnectionFactory", "javax.resource.cci.ConnectionFactory", "org.omg.CORBA_2_3.ORB" // any other connection factory defined by a resource adapter @@ -82,12 +87,19 @@ public class CommonAnnotationHelper { "java.lang.Long", "java.lang.Float")); private static final Set SERVICE_REF_TYPES = new HashSet(Arrays.asList( + "jakarta.xml.rpc.Service", + "jakarta.xml.ws.Service", + "jakarta.jws.WebService", "javax.xml.rpc.Service", "javax.xml.ws.Service", - "javax.jws.WebService")); + "javax.jws.WebService" + )); private static final Set MESSAGE_DESTINATION_TYPES = new HashSet(Arrays.asList( + "jakarta.jms.Queue", + "jakarta.jms.Topic", "javax.jms.Queue", - "javax.jms.Topic")); + "javax.jms.Topic" + )); private CommonAnnotationHelper() { } @@ -105,6 +117,11 @@ public Object handleArray(List arrayMembers) { } }, null); try { + helper.getAnnotationScanner().findAnnotations("jakarta.annotation.security.DeclareRoles", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + parser.parse(annotation); + } + }); helper.getAnnotationScanner().findAnnotations("javax.annotation.security.DeclareRoles", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { parser.parse(annotation); @@ -280,7 +297,10 @@ public static String getServiceEndpoint(final AnnotationModelHelper helper, fina } Map ans = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror wsMirror = ans.get("javax.jws.WebService"); //NOI18N + AnnotationMirror wsMirror = ans.get("jakarta.jws.WebService"); //NOI18N + if (wsMirror == null) { + wsMirror = ans.get("javax.jws.WebService"); //NOI18N + } if (wsMirror != null) { for (Map.Entry entry : wsMirror.getElementValues().entrySet()) { ExecutableElement key = entry.getKey(); @@ -302,14 +322,18 @@ private static List getResources(final AnnotationModelHelper helpe // fields for (VariableElement field : ElementFilter.fieldsIn(typeElement.getEnclosedElements())) { - if (helper.hasAnnotation(field.getAnnotationMirrors(), "javax.annotation.Resource")) { //NOI18N + if (helper.hasAnnotation(field.getAnnotationMirrors(), "jakarta.annotation.Resource") //NOI18N + || helper.hasAnnotation(field.getAnnotationMirrors(), "javax.annotation.Resource") //NOI18N + ) { ResourceImpl resource = new ResourceImpl(field, typeElement, helper); result.add(resource); } } // methods for (ExecutableElement method : ElementFilter.methodsIn(typeElement.getEnclosedElements())) { - if (helper.hasAnnotation(method.getAnnotationMirrors(), "javax.annotation.Resource")) { //NOI18N + if (helper.hasAnnotation(method.getAnnotationMirrors(), "jakarta.annotation.Resource") //NOI18N + || helper.hasAnnotation(method.getAnnotationMirrors(), "javax.annotation.Resource") //NOI18N + ) { ResourceImpl resource = new ResourceImpl(method, typeElement, helper); result.add(resource); } @@ -321,6 +345,14 @@ private static List getResources(final AnnotationModelHelper helpe final List result = new ArrayList(); try { + helper.getAnnotationScanner().findAnnotations( + "jakarta.annotation.Resource", // NOI18N + EnumSet.of(ElementKind.CLASS, ElementKind.METHOD, ElementKind.FIELD),new AnnotationHandler() { + public void handleAnnotation(TypeElement typeElement, Element element, AnnotationMirror annotation) { + ResourceImpl resource = new ResourceImpl(element, typeElement, helper); + result.add(resource); + } + }); helper.getAnnotationScanner().findAnnotations( "javax.annotation.Resource", // NOI18N EnumSet.of(ElementKind.CLASS, ElementKind.METHOD, ElementKind.FIELD),new AnnotationHandler() { @@ -341,7 +373,9 @@ private static List getWebServiceRefs(final AnnotationModelHelper he // fields for (VariableElement field : ElementFilter.fieldsIn(typeElement.getEnclosedElements())) { - if (helper.hasAnnotation(field.getAnnotationMirrors(), "javax.xml.ws.WebServiceRef")) { //NOI18N + if (helper.hasAnnotation(field.getAnnotationMirrors(), "jakarta.xml.ws.WebServiceRef") //NOI18N + || helper.hasAnnotation(field.getAnnotationMirrors(), "javax.xml.ws.WebServiceRef") //NOI18N + ) { //NOI18N addServiceReference(result, field, typeElement, helper); } } @@ -352,6 +386,13 @@ private static List getWebServiceRefs(final AnnotationModelHelper he final List result = new ArrayList(); try { + helper.getAnnotationScanner().findAnnotations( + "jakarta.xml.ws.WebServiceRef", // NOI18N + EnumSet.of(ElementKind.FIELD),new AnnotationHandler() { + public void handleAnnotation(TypeElement typeElement, Element element, AnnotationMirror annotation) { + addServiceReference(result, element, typeElement, helper); + } + }); helper.getAnnotationScanner().findAnnotations( "javax.xml.ws.WebServiceRef", // NOI18N EnumSet.of(ElementKind.FIELD),new AnnotationHandler() { diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/EjbRefHelper.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/EjbRefHelper.java index c519a75b0bb7..962f6f924827 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/EjbRefHelper.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/EjbRefHelper.java @@ -48,7 +48,9 @@ public class EjbRefHelper { private static final String EJB_ANN = "javax.ejb.EJB"; // NOI18N + private static final String EJB_ANN_JAKARTA = "jakarta.ejb.EJB"; // NOI18N private static final String EJBS_ANN = "javax.ejb.EJBs"; // NOI18N + private static final String EJBS_ANN_JAKARTA = "jakarta.ejb.EJBs"; // NOI18N private EjbRefHelper() { } @@ -60,6 +62,22 @@ private EjbRefHelper() { */ public static void setEjbRefs(final AnnotationModelHelper helper, final List resultEjbRefs, final List resultEjbLocalRefs) { try { + helper.getAnnotationScanner().findAnnotations( + EJBS_ANN_JAKARTA, + EnumSet.of(ElementKind.CLASS), + new AnnotationHandler() { + public void handleAnnotation(TypeElement typeElement, Element element, AnnotationMirror annotation) { + parseEJBsAnnotation(helper, typeElement, resultEjbRefs, resultEjbLocalRefs); + } + }); + helper.getAnnotationScanner().findAnnotations( + EJB_ANN_JAKARTA, + EnumSet.of(ElementKind.CLASS, ElementKind.METHOD, ElementKind.FIELD), + new AnnotationHandler() { + public void handleAnnotation(TypeElement typeElement, Element element, AnnotationMirror annotation) { + parseElement(helper, typeElement, element, resultEjbRefs, resultEjbLocalRefs, EJB_ANN_JAKARTA); + } + }); helper.getAnnotationScanner().findAnnotations( EJBS_ANN, EnumSet.of(ElementKind.CLASS), @@ -73,7 +91,7 @@ public void handleAnnotation(TypeElement typeElement, Element element, Annotatio EnumSet.of(ElementKind.CLASS, ElementKind.METHOD, ElementKind.FIELD), new AnnotationHandler() { public void handleAnnotation(TypeElement typeElement, Element element, AnnotationMirror annotation) { - parseElement(helper, typeElement, element, resultEjbRefs, resultEjbLocalRefs); + parseElement(helper, typeElement, element, resultEjbRefs, resultEjbLocalRefs, EJB_ANN); } }); } catch (InterruptedException ie) { @@ -91,19 +109,25 @@ public static void setEjbRefsForClass(final AnnotationModelHelper helper, TypeEl parseEJBsAnnotation(helper, typeElement, resultEjbRefs, resultEjbLocalRefs); // @EJB at class - if (helper.hasAnnotation(typeElement.getAnnotationMirrors(), EJB_ANN)) { - parseElement(helper, typeElement, typeElement, resultEjbRefs, resultEjbLocalRefs); + if (helper.hasAnnotation(typeElement.getAnnotationMirrors(), EJB_ANN_JAKARTA)) { + parseElement(helper, typeElement, typeElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN_JAKARTA); + } else if (helper.hasAnnotation(typeElement.getAnnotationMirrors(), EJB_ANN)) { + parseElement(helper, typeElement, typeElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN); } // @EJB at field for (VariableElement variableElement : ElementFilter.fieldsIn(typeElement.getEnclosedElements())) { - if (helper.hasAnnotation(variableElement.getAnnotationMirrors(), EJB_ANN)) { - parseElement(helper, typeElement, variableElement, resultEjbRefs, resultEjbLocalRefs); + if (helper.hasAnnotation(variableElement.getAnnotationMirrors(), EJB_ANN_JAKARTA)) { + parseElement(helper, typeElement, variableElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN_JAKARTA); + } else if (helper.hasAnnotation(variableElement.getAnnotationMirrors(), EJB_ANN)) { + parseElement(helper, typeElement, variableElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN); } } // @EJB at method for (ExecutableElement executableElement : ElementFilter.methodsIn(typeElement.getEnclosedElements())) { - if (helper.hasAnnotation(executableElement.getAnnotationMirrors(), EJB_ANN)) { - parseElement(helper, typeElement, executableElement, resultEjbRefs, resultEjbLocalRefs); + if (helper.hasAnnotation(executableElement.getAnnotationMirrors(), EJB_ANN_JAKARTA)) { + parseElement(helper, typeElement, executableElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN_JAKARTA); + } else if (helper.hasAnnotation(executableElement.getAnnotationMirrors(), EJB_ANN)) { + parseElement(helper, typeElement, executableElement, resultEjbRefs, resultEjbLocalRefs, EJB_ANN); } } @@ -112,9 +136,14 @@ public static void setEjbRefsForClass(final AnnotationModelHelper helper, TypeEl private static void parseEJBsAnnotation(final AnnotationModelHelper helper, TypeElement typeElement, final List resultEjbRefs, final List resultEjbLocalRefs) { Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror ejbsAnnotation = annByType.get(EJBS_ANN); // NOI18N + AnnotationMirror ejbsAnnotation = annByType.get(EJBS_ANN_JAKARTA); + String typeName = EJB_ANN_JAKARTA; + if(ejbsAnnotation == null) { + ejbsAnnotation = annByType.get(EJBS_ANN); + typeName = EJB_ANN; + } AnnotationParser parser = AnnotationParser.create(helper); - parser.expectAnnotationArray("value", helper.resolveType(EJB_ANN), new ArrayValueHandler() { // NOI18N + parser.expectAnnotationArray("value", helper.resolveType(typeName), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { for (AnnotationValue arrayMember : arrayMembers) { Object arrayMemberValue = arrayMember.getValue(); @@ -131,7 +160,7 @@ public Object handleArray(List arrayMembers) { /** * Parses element */ - private static void parseElement(AnnotationModelHelper helper, TypeElement ownerClass, Element element, List resultEjbRefs, List resultEjbLocalRefs) { + private static void parseElement(AnnotationModelHelper helper, TypeElement ownerClass, Element element, List resultEjbRefs, List resultEjbLocalRefs, String ejbAnnotation) { String name = null; String beanInterface = null; @@ -151,7 +180,7 @@ private static void parseElement(AnnotationModelHelper helper, TypeElement owner parser.expectString("beanName", null); // NOI18N parser.expectString("mappedName", null); // NOI18N parser.expectString("description", null); // NOI18N - ParseResult parseResult = parser.parse(annByType.get(EJB_ANN)); + ParseResult parseResult = parser.parse(annByType.get(ejbAnnotation)); name = parseResult.get("name", String.class); // NOI18N beanInterface = parseResult.get("beanInterface", String.class); // NOI18N @@ -193,7 +222,7 @@ private static void parseElement(AnnotationModelHelper helper, TypeElement owner } } - ParseResult parseResult = parser.parse(annByType.get(EJB_ANN)); + ParseResult parseResult = parser.parse(annByType.get(ejbAnnotation)); name = parseResult.get("name", String.class); // NOI18N } else { return; @@ -243,7 +272,7 @@ private static void createReference(AnnotationModelHelper helper, TypeElement in // this one just checks if there is @Remote annotation; if not, it is local boolean isLocal = true; Map memberAnnByType = helper.getAnnotationsByType(interfaceTypeElement.getAnnotationMirrors()); - if (memberAnnByType.get("javax.ejb.Remote") != null) { // NOI18N + if (memberAnnByType.get("jakarta.ejb.Remote") != null || memberAnnByType.get("javax.ejb.Remote") != null) { // NOI18N isLocal = false; } diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ResourceImpl.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ResourceImpl.java index a33cc93652bd..8b1a7cc4ecc9 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ResourceImpl.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ResourceImpl.java @@ -45,7 +45,8 @@ public class ResourceImpl { // package private because of unit tests - static final String DEFAULT_AUTHENTICATION_TYPE = AuthenticationType.CONTAINER.name(); + static final String DEFAULT_AUTHENTICATION_TYPE = "javax.annotation.Resource.AuthenticationType.CONTAINER"; + static final String DEFAULT_AUTHENTICATION_TYPE_JAKARTA = "jakarta.annotation.Resource.AuthenticationType.CONTAINER"; static final String DEFAULT_SHAREABLE = Boolean.TRUE.toString(); static final String DEFAULT_MAPPED_NAME = ""; static final String DEFAULT_DESCRIPTION = ""; @@ -70,8 +71,12 @@ public ResourceImpl(Element element, TypeElement typeElement, AnnotationModelHel this.element = element; Map annByType = annotationModelHelper.getAnnotationsByType(element.getAnnotationMirrors()); - - parseResult = parseAnnotation(annByType.get(javax.annotation.Resource.class.getName())); + + AnnotationMirror annotationMirror = annByType.get("jakarta.annotation.Resource"); //NOI18N + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.annotation.Resource"); //NOI18N + } + parseResult = parseAnnotation(annotationMirror); } private ParseResult parseAnnotation(AnnotationMirror resourceAnnotation) { @@ -116,12 +121,20 @@ public Object getDefaultValue() { return Object.class.getName(); } }); - - // The authentication type to use for the resource, default AuthenticationType.CONTAINER - parser.expectEnumConstant( - "authenticationType", // NOI18N - annotationModelHelper.resolveType("javax.annotation.Resource.AuthenticationType"), - parser.defaultValue(DEFAULT_AUTHENTICATION_TYPE)); + + if(((TypeElement) resourceAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + // The authentication type to use for the resource, default AuthenticationType.CONTAINER + parser.expectEnumConstant( + "authenticationType", // NOI18N + annotationModelHelper.resolveType("jakarta.annotation.Resource.AuthenticationType"), + parser.defaultValue(DEFAULT_AUTHENTICATION_TYPE_JAKARTA)); + } else { + // The authentication type to use for the resource, default AuthenticationType.CONTAINER + parser.expectEnumConstant( + "authenticationType", // NOI18N + annotationModelHelper.resolveType("javax.annotation.Resource.AuthenticationType"), + parser.defaultValue(DEFAULT_AUTHENTICATION_TYPE)); + } // Indicates whether the resource can be shared, default true parser.expectPrimitive("shareable", Boolean.class, parser.defaultValue(Boolean.parseBoolean(DEFAULT_SHAREABLE))); // NOI18N diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ServiceRefImpl.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ServiceRefImpl.java index 21454f9b4a2f..8ace7c652dcf 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ServiceRefImpl.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/ServiceRefImpl.java @@ -67,7 +67,11 @@ public ServiceRefImpl(Element element, TypeElement typeElement, TypeElement pare parser.expectString("wsdlLocation",null); parser.expectClass("value",null); parser.expectClass("type",null); - ParseResult parseResult = parser.parse(annByType.get("javax.xml.ws.WebServiceRef")); //NOI18N + AnnotationMirror annotationMirror = annByType.get("jakarta.xml.ws.WebServiceRef"); //NOI18N + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.xml.ws.WebServiceRef"); //NOI18N + } + ParseResult parseResult = parser.parse(annotationMirror); serviceRefName = parseResult.get("name", String.class); // NOI18N wsdlFile = parseResult.get("wsdlLocation", String.class); // NOI18N value = parseResult.get("value", String.class); // NOI18N diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/EnterpriseBeansImpl.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/EnterpriseBeansImpl.java index 450c01105897..50f1bb7d6ad7 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/EnterpriseBeansImpl.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/EnterpriseBeansImpl.java @@ -44,7 +44,6 @@ import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.ObjectProvider; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.PersistentObjectManager; -// @todo: Support JakartaEE public class EnterpriseBeansImpl implements EnterpriseBeans { private final AnnotationModelHelper helper; @@ -121,6 +120,21 @@ private final class SessionProvider implements ObjectProvider { public List createInitialObjects() throws InterruptedException { final List result = new ArrayList(); + helper.getAnnotationScanner().findAnnotations("jakarta.ejb.Stateless", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new SessionImpl(SessionImpl.Kind.STATELESS, helper, type)); + } + }); + helper.getAnnotationScanner().findAnnotations("jakarta.ejb.Stateful", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new SessionImpl(SessionImpl.Kind.STATEFUL, helper, type)); + } + }); + helper.getAnnotationScanner().findAnnotations("jakarta.ejb.Singleton", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new SessionImpl(SessionImpl.Kind.SINGLETON, helper, type)); + } + }); helper.getAnnotationScanner().findAnnotations("javax.ejb.Stateless", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { result.add(new SessionImpl(SessionImpl.Kind.STATELESS, helper, type)); @@ -141,6 +155,15 @@ public void handleAnnotation(TypeElement type, Element element, AnnotationMirror public List createObjects(TypeElement type) { final List result = new ArrayList(); + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.ejb.Stateless")) { // NOI18N + result.add(new SessionImpl(SessionImpl.Kind.STATELESS, helper, type)); + } + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.ejb.Stateful")) { // NOI18N + result.add(new SessionImpl(SessionImpl.Kind.STATEFUL, helper, type)); + } + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.ejb.Singleton")) { // NOI18N + result.add(new SessionImpl(SessionImpl.Kind.SINGLETON, helper, type)); + } if (helper.hasAnnotation(type.getAnnotationMirrors(), "javax.ejb.Stateless")) { // NOI18N result.add(new SessionImpl(SessionImpl.Kind.STATELESS, helper, type)); } @@ -171,6 +194,11 @@ private final class MessageDrivenProvider implements ObjectProvider createInitialObjects() throws InterruptedException { final List result = new ArrayList(); + helper.getAnnotationScanner().findAnnotations("jakarta.ejb.MessageDriven", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new MessageDrivenImpl(helper, type)); + } + }); helper.getAnnotationScanner().findAnnotations("javax.ejb.MessageDriven", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { result.add(new MessageDrivenImpl(helper, type)); @@ -181,6 +209,9 @@ public void handleAnnotation(TypeElement type, Element element, AnnotationMirror public List createObjects(TypeElement type) { final List result = new ArrayList(); + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.ejb.MessageDriven")) { // NOI18N + result.add(new MessageDrivenImpl(helper, type)); + } if (helper.hasAnnotation(type.getAnnotationMirrors(), "javax.ejb.MessageDriven")) { // NOI18N result.add(new MessageDrivenImpl(helper, type)); } diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/MessageDrivenImpl.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/MessageDrivenImpl.java index 476ea8b8573d..8fd4185dc459 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/MessageDrivenImpl.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/MessageDrivenImpl.java @@ -82,7 +82,12 @@ public MessageDrivenImpl(AnnotationModelHelper helper, TypeElement typeElement) boolean refresh(TypeElement typeElement) { Map annByType = getHelper().getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror annotationMirror = annByType.get("javax.ejb.MessageDriven"); // NOI18N + AnnotationMirror annotationMirror = annByType.get("jakarta.ejb.MessageDriven"); // NOI18N + String activationConfigClass = "jakarta.ejb.ActivationConfigProperty"; + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.ejb.MessageDriven"); // NOI18N + activationConfigClass = "javax.ejb.ActivationConfigProperty"; + } if (annotationMirror == null) { return false; } @@ -92,7 +97,7 @@ boolean refresh(TypeElement typeElement) { parser.expectString("mappedName", null); // NOI18N activationConfig = new ActivationConfigImpl(); - TypeMirror acpType = getHelper().resolveType("javax.ejb.ActivationConfigProperty"); + TypeMirror acpType = getHelper().resolveType(activationConfigClass); ActivationConfigPropertyHandler handler = new ActivationConfigPropertyHandler(getHelper(), activationConfig); if (acpType != null) { parser.expectAnnotationArray("activationConfig", acpType, handler, null); //NOI18N diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImpl.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImpl.java index bb790ab2b983..3042cef63c9a 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImpl.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImpl.java @@ -108,15 +108,24 @@ boolean refresh(TypeElement typeElement) { AnnotationMirror annotationMirror = null; switch(kind){ case STATELESS: - annotationMirror = annByType.get("javax.ejb.Stateless"); //NOI18N + annotationMirror = annByType.get("jakarta.ejb.Stateless"); //NOI18N + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.ejb.Stateless"); //NOI18N + } sessionType = Session.SESSION_TYPE_STATELESS; break; case STATEFUL: - annotationMirror = annByType.get("javax.ejb.Stateful"); //NOI18N + annotationMirror = annByType.get("jakarta.ejb.Stateful"); //NOI18N + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.ejb.Stateful"); //NOI18N + } sessionType = Session.SESSION_TYPE_STATEFUL; break; case SINGLETON: - annotationMirror = annByType.get("javax.ejb.Singleton"); //NOI18N + annotationMirror = annByType.get("jakarta.ejb.Singleton"); //NOI18N + if (annotationMirror == null) { + annotationMirror = annByType.get("javax.ejb.Singleton"); //NOI18N + } sessionType = Session.SESSION_TYPE_SINGLETON; break; } @@ -136,7 +145,7 @@ boolean refresh(TypeElement typeElement) { initBusinessInterfaces(); - localBean = annByType.get("javax.ejb.LocalBean") != null; + localBean = annByType.get("jakarta.ejb.LocalBean") != null || annByType.get("javax.ejb.LocalBean") != null; return true; } @@ -201,7 +210,7 @@ If an interface is changed from Local to Remote (or vice versa) TypeElement interfaceTypeElement = (TypeElement) element; String fqn = interfaceTypeElement.getQualifiedName().toString(); interfacesSet.add(fqn); - if (!"java.io.Serializable".equals(fqn) && !"java.io.Externalizable".equals(fqn) && !fqn.startsWith("javax.ejb")) { + if (!"java.io.Serializable".equals(fqn) && !"java.io.Externalizable".equals(fqn) && !fqn.startsWith("javax.ejb") && !fqn.startsWith("jakarta.ejb")) { interfaces.add(interfaceTypeElement); } } @@ -210,9 +219,15 @@ If an interface is changed from Local to Remote (or vice versa) Map annByType = getHelper().getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror beanLocalAnnotation = annByType.get("javax.ejb.Local"); // @Local at bean class + AnnotationMirror beanLocalAnnotation = annByType.get("jakarta.ejb.Local"); // @Local at bean class + if (beanLocalAnnotation == null) { + beanLocalAnnotation = annByType.get("javax.ejb.Local"); // @Local at bean class + } boolean isEmptyBeanLocalAnnotation = beanLocalAnnotation != null && beanLocalAnnotation.getElementValues().isEmpty(); - AnnotationMirror beanRemoteAnnotation = annByType.get("javax.ejb.Remote"); // @Remote at beans class + AnnotationMirror beanRemoteAnnotation = annByType.get("jakarta.ejb.Remote"); // @Remote at beans class + if (beanRemoteAnnotation == null) { + beanRemoteAnnotation = annByType.get("javax.ejb.Remote"); // @Remote at beans class + } boolean isEmptyBeanRemoteAnnotation = beanRemoteAnnotation != null && beanRemoteAnnotation.getElementValues().isEmpty(); List annotatedLocalInterfaces = new ArrayList(); @@ -221,16 +236,16 @@ If an interface is changed from Local to Remote (or vice versa) for (TypeElement interfaceTypeElement : interfaces) { Map ifaceAnnByType = getHelper().getAnnotationsByType(interfaceTypeElement.getAnnotationMirrors()); - if (ifaceAnnByType.get("javax.ejb.Local") != null) { + if (ifaceAnnByType.get("jakarta.ejb.Local") != null || ifaceAnnByType.get("javax.ejb.Local") != null) { annotatedLocalInterfaces.add(interfaceTypeElement.getQualifiedName().toString()); } - if (ifaceAnnByType.get("javax.ejb.Remote") != null) { + if (ifaceAnnByType.get("jakarta.ejb.Remote") != null || ifaceAnnByType.get("javax.ejb.Remote") != null) { annotatedRemoteInterfaces.add(interfaceTypeElement.getQualifiedName().toString()); } allInterfaces.add(interfaceTypeElement.getQualifiedName().toString()); } - boolean isNoIfaceView = annByType.get("javax.ejb.LocalBean") != null; //NOI18N + boolean isNoIfaceView = annByType.get("javax.ejb.LocalBean") != null || annByType.get("jakarta.ejb.LocalBean") != null; //NOI18N // any interface is explicitly specified boolean isAnyIfaceExplicit = !annotatedRemoteInterfaces.isEmpty() || !annotatedLocalInterfaces.isEmpty() // annotated class with non-empty value diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/AnnotationHelpers.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/AnnotationHelpers.java index ac425be9fec9..08ac9e558f82 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/AnnotationHelpers.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/AnnotationHelpers.java @@ -33,7 +33,6 @@ /** * @author Petr Slechta */ -// @todo: Support JakartaEE public class AnnotationHelpers { private AnnotationModelHelper helper; @@ -52,7 +51,7 @@ public AnnotationModelHelper getHelper() { public PersistentObjectManager getWebServletPOM() { if (webServletsPOM == null) - webServletsPOM = helper.createPersistentObjectManager(new AnnotationProvider("javax.servlet.annotation.WebServlet") { + webServletsPOM = helper.createPersistentObjectManager(new AnnotationProvider("jakarta.servlet.annotation.WebServlet", "javax.servlet.annotation.WebServlet") { @Override WebServlet newItem(AnnotationModelHelper helper, TypeElement typeElement) { return new WebServlet(helper, typeElement); @@ -63,7 +62,7 @@ WebServlet newItem(AnnotationModelHelper helper, TypeElement typeElement) { public PersistentObjectManager getWebFilterPOM() { if (webFiltersPOM == null) - webFiltersPOM = helper.createPersistentObjectManager(new AnnotationProvider("javax.servlet.annotation.WebFilter") { + webFiltersPOM = helper.createPersistentObjectManager(new AnnotationProvider("jakarta.servlet.annotation.WebFilter", "javax.servlet.annotation.WebFilter") { @Override WebFilter newItem(AnnotationModelHelper helper, TypeElement typeElement) { return new WebFilter(helper, typeElement); @@ -74,7 +73,7 @@ WebFilter newItem(AnnotationModelHelper helper, TypeElement typeElement) { public PersistentObjectManager getSecurityRolesPOM() { if (securityRolesPOM == null) - securityRolesPOM = helper.createPersistentObjectManager(new AnnotationProvider("javax.annotation.security.DeclareRoles") { + securityRolesPOM = helper.createPersistentObjectManager(new AnnotationProvider("jakarta.annotation.security.DeclareRoles", "javax.annotation.security.DeclareRoles") { @Override SecurityRoles newItem(AnnotationModelHelper helper, TypeElement typeElement) { return new SecurityRoles(helper, typeElement); @@ -86,26 +85,30 @@ SecurityRoles newItem(AnnotationModelHelper helper, TypeElement typeElement) { // ------------------------------------------------------------------------- private abstract class AnnotationProvider implements ObjectProvider { - private String annotationName; + private String[] annotationNames; - AnnotationProvider(String annotationName) { - this.annotationName = annotationName; + AnnotationProvider(String... annotationNames) { + this.annotationNames = annotationNames; } public List createInitialObjects() throws InterruptedException { final List result = new ArrayList(); - helper.getAnnotationScanner().findAnnotations(annotationName, AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { - public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { - result.add(newItem(helper, type)); - } - }); + for (String annotationName : annotationNames) { + helper.getAnnotationScanner().findAnnotations(annotationName, AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(newItem(helper, type)); + } + }); + } return result; } public List createObjects(TypeElement type) { final List result = new ArrayList(); - if (helper.hasAnnotation(type.getAnnotationMirrors(), annotationName)) { - result.add(newItem(helper, type)); + for (String annotationName : annotationNames) { + if (helper.hasAnnotation(type.getAnnotationMirrors(), annotationName)) { + result.add(newItem(helper, type)); + } } return result; } diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/SecurityRoles.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/SecurityRoles.java index 3fddf4905fc9..670475750df7 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/SecurityRoles.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/SecurityRoles.java @@ -46,7 +46,10 @@ public SecurityRoles(AnnotationModelHelper helper, TypeElement typeElement) { public boolean refresh(TypeElement typeElement) { Map annByType = getHelper().getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror annotationMirror = annByType.get("javax.annotation.security.DeclareRoles"); // NOI18N + AnnotationMirror annotationMirror = annByType.get("jakarta.annotation.security.DeclareRoles"); // NOI18N + if(annotationMirror == null) { + annotationMirror = annByType.get("javax.annotation.security.DeclareRoles"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebFilter.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebFilter.java index bea9c51b4245..90547784ef5b 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebFilter.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebFilter.java @@ -48,7 +48,10 @@ public WebFilter(AnnotationModelHelper helper, TypeElement typeElement) { public boolean refresh(TypeElement typeElement) { Map annByType = getHelper().getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror annotationMirror = annByType.get("javax.servlet.annotation.WebFilter"); // NOI18N + AnnotationMirror annotationMirror = annByType.get("jakarta.servlet.annotation.WebFilter"); // NOI18N + if(annotationMirror == null) { + annotationMirror = annByType.get("javax.servlet.annotation.WebFilter"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebServlet.java b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebServlet.java index 28da3d01329d..e11aa07b0bfe 100644 --- a/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebServlet.java +++ b/enterprise/j2ee.dd/src/org/netbeans/modules/j2ee/dd/impl/web/annotation/WebServlet.java @@ -48,7 +48,10 @@ public WebServlet(AnnotationModelHelper helper, TypeElement typeElement) { public boolean refresh(TypeElement typeElement) { Map annByType = getHelper().getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror annotationMirror = annByType.get("javax.servlet.annotation.WebServlet"); // NOI18N + AnnotationMirror annotationMirror = annByType.get("jakarta.servlet.annotation.WebServlet"); // NOI18N + if(annotationMirror == null) { + annotationMirror = annByType.get("javax.servlet.annotation.WebServlet"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelperTest.java b/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelperTest.java index 8e943aa6687d..9eb9b33fbb67 100644 --- a/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelperTest.java +++ b/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/common/annotation/CommonAnnotationHelperTest.java @@ -326,14 +326,14 @@ private void initClasses() throws IOException { "import javax.annotation.Resource;" + "import javax.sql.DataSource;" + "" + - "@Resource(name=\"yourClass\", type=javax.transaction.UserTransaction)" + + "@Resource(name=\"yourClass\", type=javax.transaction.UserTransaction.class)" + "public class YourClass {" + " @Resource" + " private void setYourDataSource(DataSource ds) {" + " }" + "" + " @Resource" + - " private void setYourLong(Long long) {" + + " private void setYourLong(Long value) {" + " }" + "" + " @Resource" + diff --git a/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImplTest.java b/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImplTest.java index a4b3d39a6134..7cde7cea63bc 100644 --- a/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImplTest.java +++ b/enterprise/j2ee.dd/test/unit/src/org/netbeans/modules/j2ee/dd/impl/ejb/annotation/SessionImplTest.java @@ -21,7 +21,9 @@ import java.io.IOException; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.netbeans.modules.j2ee.dd.api.common.PortComponentRef; import org.netbeans.modules.j2ee.dd.api.common.ServiceRef; import org.netbeans.modules.j2ee.dd.api.common.VersionNotSupportedException; @@ -180,8 +182,9 @@ public Void run(EjbJarMetadata metadata) throws VersionNotSupportedException { Session session = (Session) getEjbByEjbName(metadata.getRoot().getEnterpriseBeans().getSession(), "Customer"); assertEquals(Session.SESSION_TYPE_STATELESS, session.getSessionType()); assertEquals(2, session.getBusinessLocal().length); - assertEquals("foo.CustomerLocalA", session.getBusinessLocal()[0]); - assertEquals("foo.CustomerLocalB", session.getBusinessLocal()[1]); + Set ref = new HashSet<>(Arrays.asList("foo.CustomerLocalA", "foo.CustomerLocalB")); + Set toCheck = new HashSet<>(Arrays.asList(session.getBusinessLocal())); + assertEquals(ref, toCheck); // test Employee session = (Session) getEjbByEjbName(metadata.getRoot().getEnterpriseBeans().getSession(), "SatisfiedEmployee"); assertEquals(Session.SESSION_TYPE_STATEFUL, session.getSessionType()); diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/action/SendJMSGenerator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/action/SendJMSGenerator.java index 50d0a1501255..a6854365295b 100644 --- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/action/SendJMSGenerator.java +++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/action/SendJMSGenerator.java @@ -79,7 +79,6 @@ * * @author Martin Adamek */ -// @todo: Support JakartaEE public final class SendJMSGenerator { private static final Logger LOG = Logger.getLogger(SendJMSGenerator.class.getName()); @@ -121,6 +120,7 @@ public void run(CompilationController controller) throws IOException { } }, true); InjectionStrategy injectionStrategy = getInjectionStrategy(project, isInjectionTarget[0]); + boolean jakartaPackageNamespace = isJakartaPackageNamespace(project); String destinationFieldName = null; String connectionFactoryFieldName = null; String factoryName = connectionFactoryName; @@ -137,32 +137,49 @@ public void run(CompilationController controller) throws IOException { } switch (injectionStrategy) { case NO_INJECT: - factoryName = generateConnectionFactoryReference(container, factoryName, fileObject, className); - destinationName = generateDestinationReference(container, fileObject, className); + factoryName = generateConnectionFactoryReference(container, factoryName, fileObject, className, jakartaPackageNamespace); + destinationName = generateDestinationReference(container, fileObject, className, jakartaPackageNamespace); break; case INJ_EE7_SOURCES: case INJ_COMMON: destinationName = messageDestination.getName(); - connectionFactoryFieldName = createInjectedResource(fileObject, className, factoryName, "javax.jms.ConnectionFactory"); // NO18N - destinationFieldName = createInjectedResource(fileObject, className, destinationName, - messageDestination.getType() == Type.QUEUE ? "javax.jms.Queue" : "javax.jms.Topic"); //NOI18N + if (jakartaPackageNamespace) { + connectionFactoryFieldName = createInjectedResource(fileObject, className, factoryName, "jakarta.jms.ConnectionFactory", jakartaPackageNamespace); // NO18N + destinationFieldName = createInjectedResource(fileObject, className, destinationName, + messageDestination.getType() == Type.QUEUE ? "jakarta.jms.Queue" : "jakarta.jms.Topic", + jakartaPackageNamespace); //NOI18N + } else { + connectionFactoryFieldName = createInjectedResource(fileObject, className, factoryName, "javax.jms.ConnectionFactory", jakartaPackageNamespace); // NO18N + destinationFieldName = createInjectedResource(fileObject, className, destinationName, + messageDestination.getType() == Type.QUEUE ? "javax.jms.Queue" : "javax.jms.Topic", //NOI18N + jakartaPackageNamespace); + } break; case INJ_EE7_CDI: - destinationName = messageDestination.getName(); - connectionFactoryFieldName = createInjectedFactory(fileObject, className, factoryName, "javax.jms.JMSContext"); // NO18N - destinationFieldName = createInjectedResource(fileObject, className, destinationName, - messageDestination.getType() == Type.QUEUE ? "javax.jms.Queue" : "javax.jms.Topic"); //NOI18N + if (jakartaPackageNamespace) { + destinationName = messageDestination.getName(); + connectionFactoryFieldName = createInjectedFactory(fileObject, className, factoryName, "jakarta.jms.JMSContext", jakartaPackageNamespace); // NO18N + destinationFieldName = createInjectedResource(fileObject, className, destinationName, + messageDestination.getType() == Type.QUEUE ? "jakarta.jms.Queue" : "jakarta.jms.Topic", //NOI18N + jakartaPackageNamespace); + } else { + destinationName = messageDestination.getName(); + connectionFactoryFieldName = createInjectedFactory(fileObject, className, factoryName, "javax.jms.JMSContext", jakartaPackageNamespace); // NO18N + destinationFieldName = createInjectedResource(fileObject, className, destinationName, + messageDestination.getType() == Type.QUEUE ? "javax.jms.Queue" : "javax.jms.Topic", //NOI18N + jakartaPackageNamespace); + } break; } String sendMethodName = ""; //NOI18N if (injectionStrategy != InjectionStrategy.INJ_EE7_CDI && injectionStrategy != InjectionStrategy.INJ_EE7_SOURCES) { - sendMethodName = createSendMethod(fileObject, className, messageDestination.getName()); + sendMethodName = createSendMethod(fileObject, className, messageDestination.getName(), jakartaPackageNamespace); } createJMSProducer(fileObject, className, factoryName, connectionFactoryFieldName, destinationName, - destinationFieldName, sendMethodName, slStrategy, injectionStrategy); + destinationFieldName, sendMethodName, slStrategy, injectionStrategy, jakartaPackageNamespace); if (messageDestination != null && injectionStrategy != InjectionStrategy.INJ_EE7_CDI && injectionStrategy != InjectionStrategy.INJ_EE7_SOURCES ) { @@ -217,10 +234,10 @@ public Void run(EjbJarMetadata metadata) throws Exception { } } - private String generateConnectionFactoryReference(EnterpriseReferenceContainer container, String referenceName, FileObject referencingFile, String referencingClass) throws IOException { + private String generateConnectionFactoryReference(EnterpriseReferenceContainer container, String referenceName, FileObject referencingFile, String referencingClass, boolean jakartaPackageNamespace) throws IOException { ResourceReference ref = ResourceReference.create( referenceName, - "javax.jms.ConnectionFactory", + jakartaPackageNamespace ? "jakarta.jms.ConnectionFactory": "javax.jms.ConnectionFactory", ResourceRef.RES_AUTH_CONTAINER, ResourceRef.RES_SHARING_SCOPE_SHAREABLE, null @@ -228,7 +245,7 @@ private String generateConnectionFactoryReference(EnterpriseReferenceContainer c return container.addResourceRef(ref, referencingFile, referencingClass); } - private String generateDestinationReference(EnterpriseReferenceContainer container, FileObject referencingFile, String referencingClass) throws IOException { + private String generateDestinationReference(EnterpriseReferenceContainer container, FileObject referencingFile, String referencingClass, boolean jakartaPackageNamespace) throws IOException { // this may need to generalized later if jms producers are expected // in web modules ProjectInformation projectInformation = ProjectUtils.getInformation(mdbHolderProject); @@ -237,9 +254,15 @@ private String generateDestinationReference(EnterpriseReferenceContainer contain if (mdbHolderProject.equals(referenceingProject)) { link = link.substring(link.indexOf('#') + 1); } + String queueClass = "jakarta.jms.Queue"; + String topicClass = "jakarta.jms.Topic"; + if (!jakartaPackageNamespace) { + queueClass = "javax.jms.Queue"; + topicClass = "javax.jms.Topic"; + } MessageDestinationReference ref = MessageDestinationReference.create( messageDestination.getName(), - messageDestination.getType() == MessageDestination.Type.QUEUE ? "javax.jms.Queue" : "javax.jms.Topic", + messageDestination.getType() == MessageDestination.Type.QUEUE ? queueClass : topicClass, PRODUCES, link ); @@ -254,12 +277,12 @@ private String generateDestinationReference(EnterpriseReferenceContainer contain * @param fieldType the class of the field. * @return name of the created field. */ - private String createInjectedResource(FileObject fileObject, String className, String destinationName, String fieldType) throws IOException { + private String createInjectedResource(FileObject fileObject, String className, String destinationName, String fieldType, boolean jakartaPackageNamespace) throws IOException { String fieldName = Utils.makeJavaIdentifierPart(Utils.jndiNameToCamelCase(destinationName, true, "jms")); //NOI18N _RetoucheUtil.generateAnnotatedField( fileObject, className, - "javax.annotation.Resource", //NOI18N + jakartaPackageNamespace ? "jakarta.annotation.Resource" : "javax.annotation.Resource", //NOI18N fieldName, fieldType, Collections.singletonMap("mappedName", destinationName), //NOI18N @@ -276,12 +299,12 @@ private String createInjectedResource(FileObject fileObject, String className, S * @param fieldType the class of the field. * @return name of the created field. */ - private String createInjectedFactory(FileObject fileObject, String className, String destinationName, String fieldType) throws IOException { + private String createInjectedFactory(FileObject fileObject, String className, String destinationName, String fieldType, boolean jakartaPackageNamespace) throws IOException { String fieldName = "context"; //NOI18N final ElementHandle field = _RetoucheUtil.generateAnnotatedField( fileObject, className, - "javax.jms.JMSConnectionFactory", //NOI18N + jakartaPackageNamespace ? "jakarta.jms.JMSConnectionFactory" : "javax.jms.JMSConnectionFactory", //NOI18N fieldName, fieldType, Collections.singletonMap("", destinationName), //NOI18N @@ -291,13 +314,15 @@ private String createInjectedFactory(FileObject fileObject, String className, St javaSource.runModificationTask(new Task() { @Override public void run(WorkingCopy parameter) throws Exception { - parameter.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); + parameter.toPhase(JavaSource.Phase.RESOLVED); GenerationUtils genUtils = GenerationUtils.newInstance(parameter); TreePath fieldTree = parameter.getTrees().getPath(field.resolve(parameter)); VariableTree originalTree = (VariableTree) fieldTree.getLeaf(); ModifiersTree modifiers = originalTree.getModifiers(); List annotations = new ArrayList(modifiers.getAnnotations()); - annotations.add(0, genUtils.createAnnotation("javax.inject.Inject")); //NOI18N + annotations.add(0, genUtils.createAnnotation( + jakartaPackageNamespace ? "jakarta.inject.Inject" : "javax.inject.Inject" //NOI18N + )); ModifiersTree nueMods = parameter.getTreeMaker().Modifiers(modifiers, annotations); parameter.rewrite(modifiers, nueMods); } @@ -305,21 +330,22 @@ public void run(WorkingCopy parameter) throws Exception { return fieldName; } - private String createSendMethod(FileObject fileObject, final String className, String destination) throws IOException { + private String createSendMethod(FileObject fileObject, final String className, String destination, boolean jakartaPackageNamespace) throws IOException { final MethodModel.Variable[] parameters = new MethodModel.Variable[] { - MethodModel.Variable.create("javax.jms.Session", "session"), + MethodModel.Variable.create(jakartaPackageNamespace ? "jakarta.jms.Session" : "javax.jms.Session", "session"), MethodModel.Variable.create(Object.class.getName(), "messageData") }; String methodName = "createJMSMessageFor" + Utils.makeJavaIdentifierPart(Utils.jndiNameToCamelCase(destination, true, null)); final MethodModel methodModel = MethodModel.create( methodName, - "javax.jms.Message", + jakartaPackageNamespace ? "jakarta.jms.Message" : "javax.jms.Message", "// TODO create and populate message to send\n" + - "javax.jms.TextMessage tm = session.createTextMessage();\n" + + (jakartaPackageNamespace ? "jakarta" : "javax") + + ".jms.TextMessage tm = session.createTextMessage();\n" + "tm.setText(messageData.toString());\n"+ "return tm;\n", Arrays.asList(parameters), - Collections.singletonList("javax.jms.JMSException"), + Collections.singletonList(jakartaPackageNamespace ? "jakarta.jms.JMSException" : "javax.jms.JMSException"), Collections.singleton(Modifier.PRIVATE) ); JavaSource javaSource = JavaSource.forFileObject(fileObject); @@ -346,7 +372,8 @@ private void createJMSProducer( String destinationFieldName, String sendMethodName, ServiceLocatorStrategy slStrategy, - InjectionStrategy injectionStrategy) throws IOException { + InjectionStrategy injectionStrategy, + boolean jakartaPackageNamespace) throws IOException { String destName = Utils.makeJavaIdentifierPart(destinationName.substring(destinationName.lastIndexOf('/') + 1)); StringBuffer destBuff = new StringBuffer(destName); destBuff.setCharAt(0, Character.toUpperCase(destBuff.charAt(0))); @@ -361,23 +388,23 @@ private void createJMSProducer( break; case INJ_EE7_SOURCES: - body = getSendJMSCodeForCreatedJMSContext(connectionFactoryFieldName, destinationFieldName); + body = getSendJMSCodeForCreatedJMSContext(connectionFactoryFieldName, destinationFieldName, jakartaPackageNamespace); parameterType = String.class.getName(); break; case INJ_COMMON: - throwsClause.add("javax.jms.JMSException"); - body = getSendJMSCodeWithInjectedFields(connectionFactoryFieldName, destinationFieldName, sendMethodName); + throwsClause.add(jakartaPackageNamespace ? "jakarta.jms.JMSException" : "javax.jms.JMSException"); + body = getSendJMSCodeWithInjectedFields(connectionFactoryFieldName, destinationFieldName, sendMethodName, jakartaPackageNamespace); break; case NO_INJECT: default: - throwsClause.add("javax.jms.JMSException"); + throwsClause.add(jakartaPackageNamespace ? "jakarta.jms.JMSException" : "javax.jms.JMSException"); if (slStrategy == null) { - body = getSendJMSCode(connectionFactoryName, destinationName, sendMethodName); + body = getSendJMSCode(connectionFactoryName, destinationName, sendMethodName, jakartaPackageNamespace); throwsClause.add("javax.naming.NamingException"); } else { - body = getSendJMSCode(connectionFactoryName, destinationName, sendMethodName, slStrategy, fileObject, className); + body = getSendJMSCode(connectionFactoryName, destinationName, sendMethodName, slStrategy, fileObject, className, jakartaPackageNamespace); } break; } @@ -409,15 +436,16 @@ public void run(WorkingCopy workingCopy) throws IOException { */ private String getSendJMSCodeWithInjectedFields(String connectionFactoryFieldName, String destinationFieldName, - String messageMethodName){ + String messageMethodName, + boolean jakartaPackageNamespace){ return MessageFormat.format( - "javax.jms.Connection connection = null;\n" + - "javax.jms.Session session = null;\n" + + "{3}.jms.Connection connection = null;\n" + + "{3}.jms.Session session = null;\n" + "try '{' \n" + "connection = {0}.createConnection();\n" + - "session = connection.createSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);\n" + - "javax.jms.MessageProducer messageProducer = session.createProducer({1});\n" + + "session = connection.createSession(false,{3}.jms.Session.AUTO_ACKNOWLEDGE);\n" + + "{3}.jms.MessageProducer messageProducer = session.createProducer({1});\n" + "messageProducer.send({2}(session, messageData));\n" + " '}' finally '{'\n" + "if (session != null) '{'\n" + @@ -431,7 +459,7 @@ private String getSendJMSCodeWithInjectedFields(String connectionFactoryFieldNam "connection.close();\n" + "'}'\n" + "'}'\n", - connectionFactoryFieldName, destinationFieldName, messageMethodName); + connectionFactoryFieldName, destinationFieldName, messageMethodName, jakartaPackageNamespace ? "jakarta" : "javax"); } /** @@ -449,28 +477,29 @@ private String getSendJMSCodeForJMSContext(String contextFieldName, * creates AutoCloseable JMSContext. */ private String getSendJMSCodeForCreatedJMSContext(String connectionFactoryFieldName, - String destinationFieldName){ + String destinationFieldName, + boolean jakartaPackageNamespace){ return MessageFormat.format( - "try (javax.jms.JMSContext context = {0}.createContext()) '{'\n" + //NOI18N + "try ({2}.jms.JMSContext context = {0}.createContext()) '{'\n" + //NOI18N "context.createProducer().send({1}, messageData);\n" + //NOI18N "'}'\n", //NOI18N - connectionFactoryFieldName, destinationFieldName); + connectionFactoryFieldName, destinationFieldName, jakartaPackageNamespace ? "jakarta" : "javax"); } private String getSendJMSCode(String connectionName, String destinationName, String messageMethodName, ServiceLocatorStrategy sls, - FileObject fileObject, String className) { + FileObject fileObject, String className, boolean jakartaPackageNamespace) { String connectionFactory = sls.genJMSFactory(connectionName, fileObject, className); String destination = sls.genDestinationLookup(destinationName, fileObject, className); return MessageFormat.format( - "javax.jms.ConnectionFactory cf = (javax.jms.ConnectionFactory) " + connectionFactory + ";\n" + - "javax.jms.Connection conn = null;\n" + - "javax.jms.Session s = null;\n" + + "{3}.jms.ConnectionFactory cf = ({3}.jms.ConnectionFactory) " + connectionFactory + ";\n" + + "{3}.jms.Connection conn = null;\n" + + "{3}.jms.Session s = null;\n" + "try '{' \n" + "conn = cf.createConnection();\n" + "s = conn.createSession(false,s.AUTO_ACKNOWLEDGE);\n" + - "javax.jms.Destination destination = (javax.jms.Destination) " + destination + ";\n" + - "javax.jms.MessageProducer mp = s.createProducer(destination);\n" + + "{3}.jms.Destination destination = ({3}.jms.Destination) " + destination + ";\n" + + "{3}.jms.MessageProducer mp = s.createProducer(destination);\n" + "mp.send({2}(s,messageData));\n" + " '}' finally '{'\n" + "if (s != null) '{'\n"+ @@ -484,21 +513,21 @@ private String getSendJMSCode(String connectionName, String destinationName, "conn.close();\n" + "'}'\n" + "'}'\n", - new Object[] {connectionName, destinationName, messageMethodName}); + new Object[] {connectionName, destinationName, messageMethodName, jakartaPackageNamespace ? "jakarta" : "javax"}); } private String getSendJMSCode(String connectionName, String destinationName, - String messageMethodName) { + String messageMethodName, boolean jakartaPackageNamespace) { return MessageFormat.format( "javax.naming.Context c = new javax.naming.InitialContext();\n" + - "javax.jms.ConnectionFactory cf = (javax.jms.ConnectionFactory) c.lookup(\"java:comp/env/{0}\");\n" + - "javax.jms.Connection conn = null;\n" + - "javax.jms.Session s = null;\n" + + "{3}.jms.ConnectionFactory cf = ({3}.jms.ConnectionFactory) c.lookup(\"java:comp/env/{0}\");\n" + + "{3}.jms.Connection conn = null;\n" + + "{3}.jms.Session s = null;\n" + "try '{' \n" + "conn = cf.createConnection();\n" + "s = conn.createSession(false,s.AUTO_ACKNOWLEDGE);\n" + - "javax.jms.Destination destination = (javax.jms.Destination) c.lookup(\"java:comp/env/{1}\");\n" + - "javax.jms.MessageProducer mp = s.createProducer(destination);\n" + + "{3}.jms.Destination destination = ({3}.jms.Destination) c.lookup(\"java:comp/env/{1}\");\n" + + "{3}.jms.MessageProducer mp = s.createProducer(destination);\n" + "mp.send({2}(s,messageData));\n" + " '}' finally '{'\n" + "if (s != null) '{'\n"+ @@ -512,7 +541,7 @@ private String getSendJMSCode(String connectionName, String destinationName, "conn.close();\n" + "'}'\n" + "'}'\n", - new Object[] {connectionName, destinationName, messageMethodName}); + new Object[] {connectionName, destinationName, messageMethodName, jakartaPackageNamespace ? "jakarta" : "javax"}); } public static InjectionStrategy getInjectionStrategy(Project project, boolean injectable) { @@ -521,7 +550,7 @@ public static InjectionStrategy getInjectionStrategy(Project project, boolean in } J2eeProjectCapabilities capabilities = J2eeProjectCapabilities.forProject(project); - if (!capabilities.isEjb32LiteSupported()) { + if (! (capabilities.isEjb32LiteSupported() || capabilities.isEjb40LiteSupported())) { return InjectionStrategy.INJ_COMMON; } else { CdiUtil cdiUtil = project.getLookup().lookup(CdiUtil.class); @@ -533,6 +562,11 @@ public static InjectionStrategy getInjectionStrategy(Project project, boolean in } } + public static boolean isJakartaPackageNamespace(Project project) { + J2eeProjectCapabilities capabilities = J2eeProjectCapabilities.forProject(project); + return capabilities.isEjb40LiteSupported(); + } + public static enum InjectionStrategy { INJ_EE7_CDI, INJ_EE7_SOURCES, diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbPropertiesPanelVisual.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbPropertiesPanelVisual.java index 181a1459098d..0ca6984618d2 100644 --- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbPropertiesPanelVisual.java +++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbPropertiesPanelVisual.java @@ -40,7 +40,6 @@ import javax.swing.table.TableModel; import org.netbeans.modules.j2ee.common.J2eeProjectCapabilities; import org.netbeans.modules.j2ee.deployment.common.api.MessageDestination; -import org.netbeans.modules.j2ee.ejbcore.api.codegeneration.JmsDestinationDefinition; import org.netbeans.modules.j2ee.ejbcore.ejb.wizard.mdb.ActivationConfigProperties.AcknowledgeMode; import org.netbeans.modules.j2ee.ejbcore.ejb.wizard.mdb.ActivationConfigProperties.ActivationConfigProperty; import org.netbeans.modules.j2ee.ejbcore.ejb.wizard.mdb.ActivationConfigProperties.DestinationType; @@ -53,7 +52,6 @@ * * @author Martin Fousek */ -// @todo: Support JakartaEE @SuppressWarnings("serial") // not used to be serialized public class MdbPropertiesPanelVisual extends javax.swing.JPanel { diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java index 1bf690eb7e5b..bc3642ec5160 100644 --- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java +++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageDestinationUiSupport.java @@ -64,7 +64,6 @@ * This class contains only static methods. * @author Tomas Mysik */ -// @todo: Support JakartaEE public abstract class MessageDestinationUiSupport { /** @@ -248,7 +247,13 @@ public static Set getProjectMessageDestinations(Project p, J @Override public Void run(JndiResourcesModel metadata) throws Exception { for (final JmsDestination jmsDestination : metadata.getJmsDestinations()) { - Type type = "javax.ejb.Topic".equals(jmsDestination.getClassName()) ? Type.TOPIC : Type.QUEUE; //NOI18N + Type type; + if ("jakarta.ejb.Topic".equals(jmsDestination.getClassName()) //NOI18N + || "javax.ejb.Topic".equals(jmsDestination.getClassName())) { //NOI18N + type = Type.TOPIC; + } else { + type = Type.QUEUE; + } allDestinations.add(new JmsDestinationDefinition(jmsDestination.getName(), type, false)); } return null; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmp.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmp.java index f64c3c38267b..ecb9c94efc41 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmp.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmp.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/BmpEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocal.java index 896ed30419db..65c8b40d667d 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/BmpLocal.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocalHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocalHome.java index c9d0d07beac0..cacc07909e81 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocalHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestBmpLocalHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/BmpLocalHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmp.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmp.java index e084f683dec3..0328d81d22f7 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmp.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmp.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/CmpEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocal.java index 2406db1034c4..eb6c9c7e5aa8 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/CmpLocal.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocalHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocalHome.java index 3afabc7a9268..44240dc5a5a6 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocalHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpLocalHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/CmpLocalHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemote.java index cc01e03c6d6b..b58e1858def2 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/CmpRemote.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemoteHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemoteHome.java index 6d7d75de2b08..a2cfe16068c5 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemoteHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/EntityGeneratorTest/testGenerateJavaEE14/TestCmpRemoteHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/CmpRemoteHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBQueueBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBQueueBean.java index 2b39a253de6f..e3c1cf825b30 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBQueueBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBQueueBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/MessageDrivenEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBTopicBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBTopicBean.java index eeb6948f5e3e..1497ea936672 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBTopicBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE14/TestMDBTopicBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/MessageDrivenEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBQueueBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBQueueBean.java index d871282b84ea..e9d9e26ef134 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBQueueBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBQueueBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBTopicBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBTopicBean.java index a854a712e2d8..c0b75908f357 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBTopicBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE50/TestMDBTopicBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template */ package testGenerateJavaEE50; @@ -15,17 +14,18 @@ * * @author {user} */ -@MessageDriven(mappedName = "TestMessageDestination", activationConfig = { - @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), - @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), +@MessageDriven(mappedName = "TestMDBTopicBean", activationConfig = { @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TestMDBTopicBean"), - @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TestMDBTopicBean") + @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), + @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TestMDBTopicBean"), + @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") }) public class TestMDBTopicBean implements MessageListener { public TestMDBTopicBean() { } + @Override public void onMessage(Message message) { } diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean.java index ae2f56fe6524..37a5de8beba5 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template */ package testGenerateJavaEE70; @@ -16,8 +15,8 @@ * @author {user} */ @MessageDriven(activationConfig = { - @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), - @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "TestMessageDestination") + @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "TestMessageDestination"), + @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class TestMDBQueueBean implements MessageListener { diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean2.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean2.java index 2995744fd961..b6db5e6c98ee 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean2.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBQueueBean2.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template */ package testGenerateJavaEE70; @@ -16,8 +15,8 @@ * @author {user} */ @MessageDriven(activationConfig = { - @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), - @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "TestMessageDestination2") + @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "TestMessageDestination2"), + @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class TestMDBQueueBean2 implements MessageListener { diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBTopicBean.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBTopicBean.java index 7906f5339030..2ed4d1af1290 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBTopicBean.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest/testGenerateJavaEE70/TestMDBTopicBean.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template */ package testGenerateJavaEE70; @@ -16,13 +15,13 @@ * @author {user} */ @MessageDriven(activationConfig = { - @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), + @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TestMessageDestination"), @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "TestMessageDestination"), @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Dups-ok-acknowledge"), - @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "factoryLookup"), - @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TestMessageDestination"), @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TestMessageDestination"), + @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), + @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "factoryLookup"), @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "selector") }) public class TestMDBTopicBean implements MessageListener { diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLR.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLR.java index f25e373d2122..fc2645079239 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLR.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLR.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocal.java index b82dbd958c12..7514e5d4e5d5 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionLocal.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocalHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocalHome.java index d20878738162..0ee98774eb93 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocalHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatefulLRLocalHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionLocalHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLR.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLR.java index b0254515ecee..da4e50b97c40 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLR.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLR.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionEjbClass.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocal.java index ea932eed329a..ff17d5d90ff9 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionLocal.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocalHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocalHome.java index 1d0805a7b26a..6dd3dbb1c9f4 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocalHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRLocalHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionLocalHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemote.java index a500aad92338..ee1afcecde8b 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionRemote.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemoteHome.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemoteHome.java index 3a6344c7db85..d22ef8477485 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemoteHome.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE14/TestStatelessLRRemoteHome.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB21/SessionRemoteHome.java to edit this template */ package testGenerateJavaEE14; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateful.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateful.java index c9b05cf72681..1644db31b7c0 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateful.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateful.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/StatefulEjbClass.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatefulRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatefulRemote.java index 034847f2c73e..f52896dbfe8e 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatefulRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatefulRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionRemote.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateless.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateless.java index 8603752a12ce..648a9a9385fc 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateless.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStateless.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/StatelessEjbClass.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessLocal.java index cf9009141b0c..d2257f6165a6 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionLocal.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessRemote.java index 0f77566d6d6b..ee620bf3c7c1 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE50/TestStatelessRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionRemote.java to edit this template */ package testGenerateJavaEE50; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestSingleton.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestSingleton.java index be4d31889e77..3cebded05d72 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestSingleton.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestSingleton.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB31/SingletonEjbClass.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateful.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateful.java index 06c9347266bf..1f24e76d13ac 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateful.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateful.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/StatefulEjbClass.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatefulRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatefulRemote.java index 6d7a174650ef..469317b02ca2 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatefulRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatefulRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionRemote.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateless.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateless.java index 4b4715f1a88d..64d614e67f0c 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateless.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStateless.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/StatelessEjbClass.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessLocal.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessLocal.java index f4ab0be12ce7..dfa49c73e26f 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessLocal.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessLocal.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionLocal.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessRemote.java b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessRemote.java index c1546a07c85c..9f736885c212 100644 --- a/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessRemote.java +++ b/enterprise/j2ee.ejbcore/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/SessionGeneratorTest/testGenerateJavaEE60/TestStatelessRemote.java @@ -1,7 +1,6 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/SessionRemote.java to edit this template */ package testGenerateJavaEE60; diff --git a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/CallEjbGeneratorTest.java b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/CallEjbGeneratorTest.java index 9d7dd2aa033f..ade413d5dd44 100644 --- a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/CallEjbGeneratorTest.java +++ b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/CallEjbGeneratorTest.java @@ -137,7 +137,7 @@ public void testAddReference_LocalEE14FromEjbEE5() throws IOException { assertNull(erc.getLocalReferencingClass()); final String generatedHome = - "@EJB()" + newline + + "@EJB" + newline + "private StatelessLRLocalHome2 statelessLRLocalHome2"; final String generatedComponent = @@ -147,7 +147,7 @@ public void testAddReference_LocalEE14FromEjbEE5() throws IOException { final String generatedMethod = newline + - "@PostConstruct()" + newline + + "@PostConstruct" + newline + "private void initialize() {" + newline + " try {" + newline + " statelessLRBean2 = statelessLRLocalHome2.create();" + newline + diff --git a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest.java b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest.java index 86103ae00d67..7c2dec82de43 100644 --- a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest.java +++ b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/api/codegeneration/MessageGeneratorTest.java @@ -170,16 +170,16 @@ public void testGenerateJavaEE50() throws IOException { ); // Topic based MessageDriven EJB in Java EE 5 defined in annotation - messageDestination = new MessageDestinationImpl("TestMessageDestination", MessageDestination.Type.TOPIC); + messageDestination = new MessageDestinationImpl("TestMDBTopicBean", MessageDestination.Type.TOPIC); panel.setDefaultProperties(messageDestination); properties = panel.getProperties(); - generator = new MessageGenerator(Profile.JAVA_EE_5, "TestMDBTopic", packageFileObject, messageDestination, + generator = new MessageGenerator(Profile.JAVA_EE_5, "TestMDBTopicBean", packageFileObject, messageDestination, true, properties, JmsSupport.getInstance(null), true); generator.generate(); assertFile( - FileUtil.toFile(packageFileObject.getFileObject("TestMDBQueueBean.java")), - getGoldenFile("testGenerateJavaEE50/TestMDBQueueBean.java"), + FileUtil.toFile(packageFileObject.getFileObject("TestMDBTopicBean.java")), + getGoldenFile("testGenerateJavaEE50/TestMDBTopicBean.java"), FileUtil.toFile(packageFileObject) ); } diff --git a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/EjbFacadeWizardIteratorTest.java b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/EjbFacadeWizardIteratorTest.java index 5e5a65ab266c..900886963aff 100644 --- a/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/EjbFacadeWizardIteratorTest.java +++ b/enterprise/j2ee.ejbcore/test/unit/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/EjbFacadeWizardIteratorTest.java @@ -76,9 +76,8 @@ public void testCreateInterface() throws Exception { String golden = "/*\n"+ - " * To change this license header, choose License Headers in Project Properties.\n"+ - " * To change this template file, choose Tools | Templates\n"+ - " * and open the template in the editor.\n"+ + " * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license\n" + + " * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template\n"+ " */\n"+ "\n"+ "package " + pkgName + ";\n"+ diff --git a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/EJBAPIAnnotations.java b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/EJBAPIAnnotations.java index 5883fad9e25a..3e2883b8d803 100644 --- a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/EJBAPIAnnotations.java +++ b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/EJBAPIAnnotations.java @@ -25,6 +25,7 @@ * * @author Sanjeeb.Sahoo@Sun.COM */ +// @todo: Support JakartaEE public interface EJBAPIAnnotations { String ASYNCHRONOUS = "javax.ejb.Asynchronous"; //NOI18N diff --git a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/AnnotationPostContruct.java b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/AnnotationPostContruct.java index 69cbad35efaf..6786d89dd225 100644 --- a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/AnnotationPostContruct.java +++ b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/AnnotationPostContruct.java @@ -46,6 +46,7 @@ * * @author Martin Fousek */ +// @todo: Support JakartaEE @Hint(displayName = "#AnnotationPostContruct.display.name", description = "#AnnotationPostContruct.description", id = "o.n.m.j2ee.ejbverification.AnnotationPostContruct", diff --git a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/api/JndiResourcesDefinition.java b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/api/JndiResourcesDefinition.java index 03d35023db16..1ab0cdb6cbb6 100644 --- a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/api/JndiResourcesDefinition.java +++ b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/api/JndiResourcesDefinition.java @@ -34,5 +34,7 @@ private JndiResourcesDefinition() { //public static final String ANN_MAIL_SESSION = ".MailSessionDefinition"; //NOI18N public static final String ANN_CONNECTION_RESOURCE = "javax.resource.ConnectorResourceDefinition"; //NOI18N public static final String ANN_ADMINISTRED_OBJECT = "javax.resource.AdministeredObjectDefinition"; //NOI18N + public static final String ANN_JMS_DESTINATION_JAKARTA = "jakarta.jms.JMSDestinationDefinition"; //NOI18N + public static final String ANN_JMS_DESTINATIONS_JAKARTA = "jakarta.jms.JMSDestinationDefinitions"; //NOI18N } diff --git a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationImpl.java b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationImpl.java index ecbe86e8d79c..4d725a4e3a0b 100644 --- a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationImpl.java +++ b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationImpl.java @@ -126,7 +126,10 @@ protected static SimpleImpl parseAnnotation(AnnotationModelHelper helper, Annota } private static AnnotationMirror getSpecificAnnotationMirror(Map types) { - AnnotationMirror annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATION); + AnnotationMirror annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATION_JAKARTA); + if (annotationMirror == null) { + annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATION); + } return annotationMirror; } diff --git a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationsImpl.java b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationsImpl.java index 2aedfdbc9246..b474ef7451e8 100644 --- a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationsImpl.java +++ b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JmsDestinationsImpl.java @@ -73,6 +73,18 @@ public boolean refresh(TypeElement type) { private void parseAnnotation(AnnotationMirror annotationMirror) { destinations = new ArrayList(); AnnotationParser parser = AnnotationParser.create(getHelper()); + parser.expectAnnotationArray("value", getHelper().resolveType(JndiResourcesDefinition.ANN_JMS_DESTINATION_JAKARTA), new ArrayValueHandler() { //NOI18N + @Override + public Object handleArray(List arrayMembers) { + for (AnnotationValue arrayMember : arrayMembers) { + Object arrayMemberValue = arrayMember.getValue(); + if (arrayMemberValue instanceof AnnotationMirror) { + destinations.add(JmsDestinationImpl.parseAnnotation(getHelper(), (AnnotationMirror) arrayMemberValue)); + } + } + return null; + } + }, null); parser.expectAnnotationArray("value", getHelper().resolveType(JndiResourcesDefinition.ANN_JMS_DESTINATION), new ArrayValueHandler() { //NOI18N @Override public Object handleArray(List arrayMembers) { @@ -93,7 +105,10 @@ public Object handleArray(List arrayMembers) { } private static AnnotationMirror getSpecificAnnotationMirror(Map types) { - AnnotationMirror annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATIONS); + AnnotationMirror annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATIONS_JAKARTA); + if (annotationMirror == null) { + annotationMirror = types.get(JndiResourcesDefinition.ANN_JMS_DESTINATIONS); + } return annotationMirror; } diff --git a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JndiResourcesObjectProviders.java b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JndiResourcesObjectProviders.java index e5f450de53d5..117046a3da3e 100644 --- a/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JndiResourcesObjectProviders.java +++ b/enterprise/javaee.resources/src/org/netbeans/modules/javaee/resources/impl/model/JndiResourcesObjectProviders.java @@ -43,7 +43,7 @@ public class JndiResourcesObjectProviders { static final class JmsDestinationProvider extends AbstractProvider { JmsDestinationProvider(AnnotationModelHelper helper) { - super(helper, JndiResourcesDefinition.ANN_JMS_DESTINATION); + super(helper, JndiResourcesDefinition.ANN_JMS_DESTINATION, JndiResourcesDefinition.ANN_JMS_DESTINATION_JAKARTA); } @Override @@ -55,7 +55,7 @@ public JmsDestinationImpl createObject(AnnotationModelHelper helper, TypeElement static final class JmsDestinationsProvider extends AbstractProvider { public JmsDestinationsProvider(AnnotationModelHelper helper) { - super(helper, JndiResourcesDefinition.ANN_JMS_DESTINATIONS); + super(helper, JndiResourcesDefinition.ANN_JMS_DESTINATIONS, JndiResourcesDefinition.ANN_JMS_DESTINATIONS_JAKARTA); } @Override @@ -66,33 +66,37 @@ JmsDestinationsImpl createObject(AnnotationModelHelper helper, TypeElement typeE private abstract static class AbstractProvider implements ObjectProvider { - private String annotationType; + private String[] annotationTypes; private AnnotationModelHelper helper; - AbstractProvider(AnnotationModelHelper helper, String annotationType) { - this.annotationType = annotationType; + AbstractProvider(AnnotationModelHelper helper, String... annotationTypes) { + this.annotationTypes = annotationTypes; this.helper = helper; } @Override public List createInitialObjects() throws InterruptedException { final List result = new LinkedList(); - helper.getAnnotationScanner().findAnnotations(annotationType, AnnotationScanner.TYPE_KINDS, - new AnnotationHandler() { - @Override - public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { - result.add(createObject(helper, type)); - } - }); + for (String annotationType : annotationTypes) { + helper.getAnnotationScanner().findAnnotations(annotationType, AnnotationScanner.TYPE_KINDS, + new AnnotationHandler() { + @Override + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(createObject(helper, type)); + } + }); + } return result; } @Override public List createObjects(TypeElement type) { final List result = new ArrayList(); - if (type.getKind() == ElementKind.CLASS || type.getKind() == ElementKind.INTERFACE || type.getKind() == ElementKind.ENUM) { - if (helper.hasAnyAnnotation(type.getAnnotationMirrors(), Collections.singleton(annotationType))) { - result.add(createObject(helper, type)); + for (String annotationType : annotationTypes) { + if (type.getKind() == ElementKind.CLASS || type.getKind() == ElementKind.INTERFACE || type.getKind() == ElementKind.ENUM) { + if (helper.hasAnyAnnotation(type.getAnnotationMirrors(), Collections.singleton(annotationType))) { + result.add(createObject(helper, type)); + } } } return result; diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorFactory.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorFactory.java index 5d7126c08ae7..95a67511f681 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorFactory.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorFactory.java @@ -43,6 +43,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class InterceptorFactory implements Factory { static final String INTERCEPTOR_BINDING = "InterceptorBinding"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorGenerator.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorGenerator.java index 033c339c3f07..b395904490e2 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorGenerator.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/actions/InterceptorGenerator.java @@ -67,6 +67,7 @@ * @author ads * */ +// @todo: Support JakartaEE class InterceptorGenerator implements CodeGenerator { private static final Logger LOG = Logger.getLogger( diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/AnnotationUtil.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/AnnotationUtil.java index c6d2cff05a3f..13815f93d0c9 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/AnnotationUtil.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/AnnotationUtil.java @@ -36,6 +36,7 @@ * @author ads * */ +// @todo: Support JakartaEE public final class AnnotationUtil { public static final String ANY = "javax.enterprise.inject.Any"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/type/ManagedBeansAnalizer.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/type/ManagedBeansAnalizer.java index 74b303850ac8..c40f1ce8f495 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/type/ManagedBeansAnalizer.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/analysis/analyzer/type/ManagedBeansAnalizer.java @@ -44,6 +44,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class ManagedBeansAnalizer implements ClassAnalyzer { private static final String EXTENSION = "javax.enterprise.inject.spi.Extension"; //NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/hints/CreateQualifier.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/hints/CreateQualifier.java index 196391de166a..691f70c759a0 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/hints/CreateQualifier.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/hints/CreateQualifier.java @@ -63,6 +63,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class CreateQualifier implements ErrorRule { private static final String INJECT_ANNOTATION = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/AnnotationObjectProvider.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/AnnotationObjectProvider.java index 69cdde6a2206..00e1137c340f 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/AnnotationObjectProvider.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/AnnotationObjectProvider.java @@ -61,6 +61,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class AnnotationObjectProvider implements ObjectProvider { private static final String SPECILIZES_ANNOTATION = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/BeansFilter.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/BeansFilter.java index 2e6b958a0a55..f9179a4e3951 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/BeansFilter.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/BeansFilter.java @@ -28,6 +28,7 @@ * @author ads * */ +// @todo: Support JakartaEE class BeansFilter extends Filter { static BeansFilter get() { diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EnableBeansFilter.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EnableBeansFilter.java index 999dd770febb..232884e74a59 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EnableBeansFilter.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EnableBeansFilter.java @@ -59,6 +59,7 @@ * @author ads * */ +// @todo: Support JakartaEE class EnableBeansFilter { static final String DECORATOR = "javax.decorator.Decorator"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EventInjectionPointLogic.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EventInjectionPointLogic.java index e5b25092ab8b..f91cd0e441a6 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EventInjectionPointLogic.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/EventInjectionPointLogic.java @@ -58,6 +58,7 @@ * @author ads * */ +// @todo: Support JakartaEE abstract class EventInjectionPointLogic extends ParameterInjectionPointLogic { public static final String EVENT_INTERFACE = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/FieldInjectionPointLogic.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/FieldInjectionPointLogic.java index 67b53a3861ac..3037df73eb7d 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/FieldInjectionPointLogic.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/FieldInjectionPointLogic.java @@ -67,6 +67,7 @@ /** * @author ads */ +// @todo: Support JakartaEE abstract class FieldInjectionPointLogic { static final String PRODUCER_ANNOTATION = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorBindingChecker.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorBindingChecker.java index 1e8e88b5ffca..6518aedee433 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorBindingChecker.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorBindingChecker.java @@ -35,6 +35,7 @@ * @author ads * */ +// @todo: Support JakartaEE class InterceptorBindingChecker extends RuntimeAnnotationChecker { static final String INTERCEPTOR_BINDING = "javax.interceptor.InterceptorBinding"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorObject.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorObject.java index b84b6e352535..3c4a75ddfbf3 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorObject.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/InterceptorObject.java @@ -33,6 +33,7 @@ * @author ads * */ +// @todo: Support JakartaEE class InterceptorObject extends PersistentObject implements Refreshable { static final String INTERCEPTOR = "javax.interceptor.Interceptor"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/MemberBindingFilter.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/MemberBindingFilter.java index 9c163975a922..648e774d6835 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/MemberBindingFilter.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/MemberBindingFilter.java @@ -37,6 +37,7 @@ * @author ads * */ +// @todo: Support JakartaEE class MemberBindingFilter extends Filter { private static final String NON_BINDING_MEMBER_ANNOTATION = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ParameterInjectionPointLogic.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ParameterInjectionPointLogic.java index 24c80843390c..e6bc84ecd67f 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ParameterInjectionPointLogic.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ParameterInjectionPointLogic.java @@ -49,6 +49,7 @@ * @author ads * */ +// @todo: Support JakartaEE abstract class ParameterInjectionPointLogic extends FieldInjectionPointLogic implements WebBeansModelProvider { diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ScopeChecker.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ScopeChecker.java index 09817bd52024..3dd2cf41bc93 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ScopeChecker.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/ScopeChecker.java @@ -33,6 +33,7 @@ * @author ads * */ +// @todo: Support JakartaEE class ScopeChecker extends RuntimeAnnotationChecker { static String SCOPE = "javax.inject.Scope"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/StereotypeChecker.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/StereotypeChecker.java index 8df2e1dc7171..fb1eff3afa67 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/StereotypeChecker.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/StereotypeChecker.java @@ -35,6 +35,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class StereotypeChecker extends RuntimeAnnotationChecker { static final String STEREOTYPE = "javax.enterprise.inject.Stereotype"; //NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/InterceptorsResultImpl.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/InterceptorsResultImpl.java index ad958eb7fe5d..dc43f43516e4 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/InterceptorsResultImpl.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/InterceptorsResultImpl.java @@ -45,6 +45,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class InterceptorsResultImpl implements InterceptorsResult { static final String INTERCEPTORS = "javax.interceptor.Interceptors"; // NOI18N diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/ResultImpl.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/ResultImpl.java index 96db3523432f..ed68c0346bcf 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/ResultImpl.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/impl/model/results/ResultImpl.java @@ -39,6 +39,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class ResultImpl extends BaseResult implements DependencyInjectionResult.ResolutionResult { private static final String ALTERNATIVE = diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/BindingsPanel.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/BindingsPanel.java index 2a796fd597af..3490b6962aa4 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/BindingsPanel.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/BindingsPanel.java @@ -54,6 +54,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class BindingsPanel extends CDIPanel { private static final long serialVersionUID = 1230555367053797509L; diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/DecoratorsPanel.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/DecoratorsPanel.java index 94e445ddc755..d35d059835bc 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/DecoratorsPanel.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/DecoratorsPanel.java @@ -40,6 +40,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class DecoratorsPanel extends BindingsPanel { private static final long serialVersionUID = -5097678699872215262L; diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/ObserversPanel.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/ObserversPanel.java index 8bb507a3fbd7..d5d56b22e097 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/ObserversPanel.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/ObserversPanel.java @@ -37,6 +37,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class ObserversPanel extends BindingsPanel { private static final long serialVersionUID = -5038408349629504998L; diff --git a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/actions/WebBeansActionHelper.java b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/actions/WebBeansActionHelper.java index d2e7860c450f..751985ab1117 100644 --- a/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/actions/WebBeansActionHelper.java +++ b/enterprise/web.beans/src/org/netbeans/modules/web/beans/navigation/actions/WebBeansActionHelper.java @@ -104,6 +104,7 @@ * @author ads * */ +// @todo: Support JakartaEE public class WebBeansActionHelper { private static final String WAIT_NODE = "LBL_WaitNode"; // NOI18N diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/WebInjectionTargetQueryImplementation.java b/enterprise/web.core/src/org/netbeans/modules/web/core/WebInjectionTargetQueryImplementation.java index 25baef0802a8..4993ac1fa66f 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/core/WebInjectionTargetQueryImplementation.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/core/WebInjectionTargetQueryImplementation.java @@ -46,8 +46,11 @@ public boolean isInjectionTarget(CompilationController controller, TypeElement t if (webModule != null && !Profile.J2EE_13.equals(webModule.getJ2eeProfile()) && // NOI18N !Profile.J2EE_14.equals(webModule.getJ2eeProfile())) { // NOI18N - - ret = SourceUtils.isSubtype(controller, typeElement, "javax.servlet.Servlet"); // NOI18N + if(webModule.getJ2eeProfile().isAtLeast(Profile.JAKARTA_EE_9_WEB)) { + ret = SourceUtils.isSubtype(controller, typeElement, "jakarta.servlet.Servlet"); // NOI18N + } else { + ret = SourceUtils.isSubtype(controller, typeElement, "javax.servlet.Servlet"); // NOI18N + } } return ret; } diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java b/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java index 150efed28caa..539fba4d3dff 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/core/api/JspColoringData.java @@ -34,6 +34,7 @@ * * @author Petr Jiricka */ +// @todo: Support JakartaEE public final class JspColoringData extends PropertyChangeSupport { /** An property whose change is fired every time the tag library diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java index 4250009ab209..2b888b1ef236 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/JspPaletteUtilities.java @@ -50,6 +50,7 @@ * * @author Libor Kotouc */ +// @todo: Support JakartaEE public final class JspPaletteUtilities { public static final String CARET = "&CARET&";// NOI18N diff --git a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/items/GetProperty.java b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/items/GetProperty.java index ff1777746f39..068bf090bbd2 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/core/palette/items/GetProperty.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/core/palette/items/GetProperty.java @@ -33,6 +33,7 @@ * * @author Libor Kotouc */ +// @todo: Support JakartaEE public class GetProperty implements ActiveEditorDrop { public static final String[] implicitBeans = new String[] { // NOI18N diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerGenerator.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerGenerator.java index 773c6bb1719b..cc76d2a72fa9 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerGenerator.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerGenerator.java @@ -45,6 +45,7 @@ * @author milan.kuchtiak@sun.com * Created on March, 2004 */ +// @todo: Support JakartaEE public class ListenerGenerator { boolean isContext; diff --git a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerPanel.java b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerPanel.java index 03be56654a0a..a986696ec62c 100644 --- a/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerPanel.java +++ b/enterprise/web.core/src/org/netbeans/modules/web/wizards/ListenerPanel.java @@ -43,6 +43,7 @@ * * @author Milan Kuchtiak */ +// @todo: Support JakartaEE public class ListenerPanel implements WizardDescriptor.Panel { /** The visual component that displays this panel. diff --git a/enterprise/web.jsf/licenseinfo.xml b/enterprise/web.jsf/licenseinfo.xml index 998fba1956a8..e04457198e5f 100644 --- a/enterprise/web.jsf/licenseinfo.xml +++ b/enterprise/web.jsf/licenseinfo.xml @@ -49,8 +49,11 @@ src/org/netbeans/modules/web/jsf/facelets/resources/templates/template-table-8.template src/org/netbeans/modules/web/jsf/resources/AjaxScripts.jspf src/org/netbeans/modules/web/jsf/resources/JsfCrudELResolver.java.txt + src/org/netbeans/modules/web/jsf/resources/JsfCrudELResolver.jakarta.java.txt src/org/netbeans/modules/web/jsf/resources/JsfUtil.java.txt + src/org/netbeans/modules/web/jsf/resources/JsfUtil.jakarta.java.txt src/org/netbeans/modules/web/jsf/resources/PagingInfo.java.txt + src/org/netbeans/modules/web/jsf/resources/PagingInfo.jakarta.java.txt src/org/netbeans/modules/web/jsf/resources/jsfcrud.css src/org/netbeans/modules/web/jsf/resources/jsfcrud.js src/org/netbeans/modules/web/jsf/resources/templates/JSFManagedBean.template diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFConfigUtilities.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFConfigUtilities.java index f5d8b7d81397..18b65abcd541 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFConfigUtilities.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFConfigUtilities.java @@ -96,7 +96,15 @@ public class JSFConfigUtilities { "javax.faces.validator.FacesValidator", //NOI18N "javax.faces.render.FacesBehaviorRenderer", //NOI18N "javax.faces.render.FacesRenderer", //NOI18N - "javax.faces.event.ListenerFor" //NOI18N + "javax.faces.event.ListenerFor", //NOI18N + "jakarta.faces.bean.ManagedBean", //NOI18N + "jakarta.faces.component.behavior.FacesBehavior", //NOI18N + "jakarta.faces.convert.FacesConverter", //NOI18N + "jakarta.faces.component.FacesComponent", //NOI18N + "jakarta.faces.validator.FacesValidator", //NOI18N + "jakarta.faces.render.FacesBehaviorRenderer", //NOI18N + "jakarta.faces.render.FacesRenderer", //NOI18N + "jakarta.faces.event.ListenerFor" //NOI18N )); private static List jsfResourcesElementHandles; diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java index 58a8d24d72af..d6be7f7c4847 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/editor/JspJsfELPlugin.java @@ -33,6 +33,8 @@ import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Types; +import org.netbeans.api.project.FileOwnerQuery; +import org.netbeans.api.project.Project; import org.netbeans.modules.csl.api.CodeCompletionContext; import org.netbeans.modules.csl.spi.ParserResult; import org.netbeans.modules.html.editor.api.gsf.HtmlParserResult; @@ -56,8 +58,10 @@ import org.netbeans.modules.web.el.spi.ResourceBundle; import static org.netbeans.modules.web.el.spi.ImplicitObjectType.*; import org.netbeans.modules.web.el.spi.ResolverContext; +import org.netbeans.modules.web.jsf.api.facesmodel.JsfVersionUtils; import org.netbeans.modules.web.jsfapi.api.Attribute; import org.netbeans.modules.web.jsfapi.api.JsfSupport; +import org.netbeans.modules.web.jsfapi.api.JsfVersion; import org.netbeans.modules.web.jsfapi.api.Library; import org.netbeans.modules.web.jsfapi.api.LibraryComponent; import org.netbeans.modules.web.jsfapi.api.Tag; @@ -78,6 +82,7 @@ public class JspJsfELPlugin extends ELPlugin { private static final String VOID_RETURN_TYPE = "void"; private Collection MIMETYPES = Arrays.asList(new String[]{"text/x-jsp", "text/x-tag"}); private Collection implicitObjects; + private Collection implicitObjectsJakarta; @Override public String getName() { @@ -91,9 +96,15 @@ public Collection getMimeTypes() { @Override public Collection getImplicitObjects(FileObject file) { - return MIMETYPES.contains(file.getMIMEType()) - ? getImplicitObjects() - : Collections.emptyList(); + if (!MIMETYPES.contains(file.getMIMEType())) { + return Collections.emptyList(); + } + final Project project = FileOwnerQuery.getOwner(file); + if (project == null || JsfVersionUtils.forProject(project).isAtLeast(JsfVersion.JSF_3_0)) { + return getImplicitObjectsJakarta(); + } else { + return getImplicitObjects(); + } } @Override @@ -318,15 +329,15 @@ public void run(ResultIterator resultIterator) throws Exception { static class FacesContextObject extends JsfImplicitObject { - public FacesContextObject() { - super("facesContext", "javax.faces.context.FacesContext", OBJECT_TYPE); //NOI18N + public FacesContextObject(String name) { + super("facesContext", name, OBJECT_TYPE); //NOI18N } } static class ViewObject extends JsfImplicitObject { - public ViewObject() { - super("view", "javax.faces.component.UIViewRoot", OBJECT_TYPE); //NOI18N + public ViewObject(String name) { + super("view", name, OBJECT_TYPE); //NOI18N } } @@ -340,8 +351,22 @@ private synchronized Collection getImplicitObjects() { private synchronized void initImplicitObjects() { implicitObjects = new ArrayList(2); // implicitObjects.addAll(getScopeObjects()); - implicitObjects.add(new ViewObject()); - implicitObjects.add(new FacesContextObject()); + implicitObjects.add(new ViewObject("javax.faces.component.UIViewRoot")); + implicitObjects.add(new FacesContextObject("javax.faces.context.FacesContext")); + } + + private synchronized Collection getImplicitObjectsJakarta() { + if (implicitObjectsJakarta == null) { + initImplicitObjectsJakarta(); + } + return implicitObjectsJakarta; + } + + private synchronized void initImplicitObjectsJakarta() { + implicitObjectsJakarta = new ArrayList(2); +// implicitObjects.addAll(getScopeObjects()); + implicitObjectsJakarta.add(new ViewObject("jakarta.faces.component.UIViewRoot")); + implicitObjectsJakarta.add(new FacesContextObject("jakarta.faces.context.FacesContext")); } @Override diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/hints/rules/JakartaFacesBeanIsGonnaBeDeprecated.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/hints/rules/JakartaFacesBeanIsGonnaBeDeprecated.java new file mode 100644 index 000000000000..987e2d884f18 --- /dev/null +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/hints/rules/JakartaFacesBeanIsGonnaBeDeprecated.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.netbeans.modules.web.jsf.hints.rules; + +import com.sun.source.tree.AnnotationTree; +import com.sun.source.tree.AssignmentTree; +import com.sun.source.tree.ClassTree; +import com.sun.source.tree.ExpressionTree; +import com.sun.source.tree.IdentifierTree; +import com.sun.source.tree.ImportTree; +import com.sun.source.tree.ModifiersTree; +import com.sun.source.tree.Tree; +import com.sun.source.util.TreePath; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.TypeElement; +import org.netbeans.api.java.source.CompilationInfo; +import org.netbeans.api.java.source.JavaSource; +import org.netbeans.api.java.source.TreeMaker; +import org.netbeans.api.java.source.WorkingCopy; +import org.netbeans.modules.j2ee.core.api.support.java.GenerationUtils; +import org.netbeans.modules.web.jsf.hints.JsfHintsContext; +import org.netbeans.modules.web.jsf.hints.JsfHintsUtils; +import org.netbeans.modules.web.jsfapi.api.JsfVersion; +import org.netbeans.spi.editor.hints.ErrorDescription; +import org.netbeans.spi.editor.hints.Fix; +import org.netbeans.spi.editor.hints.Severity; +import org.netbeans.spi.java.hints.Hint; +import org.netbeans.spi.java.hints.HintContext; +import org.netbeans.spi.java.hints.JavaFix; +import org.netbeans.spi.java.hints.TriggerTreeKind; +import org.openide.util.NbBundle; + +/** + * Checks usage of the deprecated package jakarta.faces.bean. + * + * @author Martin Fousek + */ +@Hint(displayName = "#JakartaFacesBeanIsGonnaBeDeprecated.display.name", + description = "#JakartaFacesBeanIsGonnaBeDeprecated.err", + id = "o.n.m.web.jsf.hints.JakartaFacesBeanIsGonnaBeDeprecated", + category = "javaee/jsf", + enabled = true, + suppressWarnings = "JakartaFacesBeanIsGonnaBeDeprecated") +@NbBundle.Messages({ + "JakartaFacesBeanIsGonnaBeDeprecated.display.name=Classes of jakarta.faces.bean are deprecated", + "JakartaFacesBeanIsGonnaBeDeprecated.err=Annotations from the package jakarta.faces.bean are deprecated. CDI and Java EE ones are recommended instead." +}) +public class JakartaFacesBeanIsGonnaBeDeprecated { + + private static final Logger LOG = Logger.getLogger(JakartaFacesBeanIsGonnaBeDeprecated.class.getName()); + + private static final String JAKARTA_FACES_BEAN = "jakarta.faces.bean"; //NOI18N + private static final String MANAGED_BEAN = JAKARTA_FACES_BEAN + ".ManagedBean"; //NOI18N + + /** Classes which can be switched to Java EE or CDI ones. */ + private static final Map DEPRECATED_TO_FIX = new HashMap<>(); + static { + // scopes + DEPRECATED_TO_FIX.put(JAKARTA_FACES_BEAN + ".RequestScoped", "jakarta.enterprise.context.RequestScoped"); //NOI18N + DEPRECATED_TO_FIX.put(JAKARTA_FACES_BEAN + ".SessionScoped", "jakarta.enterprise.context.SessionScoped"); //NOI18N + DEPRECATED_TO_FIX.put(JAKARTA_FACES_BEAN + ".ApplicationScoped", "jakarta.enterprise.context.ApplicationScoped"); //NOI18N + DEPRECATED_TO_FIX.put(JAKARTA_FACES_BEAN + ".ViewScoped", "jakarta.faces.view.ViewScoped"); //NOI18N + // beans + DEPRECATED_TO_FIX.put(MANAGED_BEAN, "jakarta.inject.Named"); //NOI18N + } + + @TriggerTreeKind(Tree.Kind.CLASS) + public static Collection run(HintContext hintContext) { + List problems = new ArrayList<>(); + final JsfHintsContext ctx = JsfHintsUtils.getOrCacheContext(hintContext); + + if (ctx.getJsfVersion() == null || !ctx.getJsfVersion().isAtLeast(JsfVersion.JSF_2_2)) { + return problems; + } + + CompilationInfo info = hintContext.getInfo(); + for (TypeElement typeElement : info.getTopLevelElements()) { + for (AnnotationMirror annotationMirror : typeElement.getAnnotationMirrors()) { + if (annotationMirror.getAnnotationType().toString().startsWith(JAKARTA_FACES_BEAN)) { + // it's jakarta.faces.bean annotation + Tree tree = info.getTrees().getTree(typeElement, annotationMirror); + List fixes = getFixesForType(info, typeElement, annotationMirror); + problems.add(JsfHintsUtils.createProblem( + tree, + info, + Bundle.JakartaFacesBeanIsGonnaBeDeprecated_display_name(), + Severity.HINT, + fixes)); + } + } + } + return problems; + } + + private static List getFixesForType(CompilationInfo info, TypeElement typeElement, AnnotationMirror am) { + List fixes = new ArrayList<>(); + String annotationType = am.getAnnotationType().toString(); + if (DEPRECATED_TO_FIX.containsKey(annotationType)) { + TreePath path = info.getTrees().getPath(typeElement, am); + fixes.add(new ChangeClassFix(info, path, typeElement, am, annotationType, DEPRECATED_TO_FIX.get(annotationType)).toEditorFix()); + } + return fixes; + } + + private static final class ChangeClassFix extends JavaFix { + + private final TypeElement element; + private final AnnotationMirror annotation; + private final String deprecatedClass; + private final String replacingClass; + + public ChangeClassFix(CompilationInfo info, TreePath path, TypeElement element, AnnotationMirror annotation, String deprecatedClass, String replacingClass) { + super(info, path); + this.element = element; + this.annotation = annotation; + this.deprecatedClass = deprecatedClass; + this.replacingClass = replacingClass; + } + + @NbBundle.Messages({ + "JakartaChangeClassFix.lbl.change.class.fix=Change {0} to the {1}" + }) + @Override + public String getText() { + return Bundle.JakartaChangeClassFix_lbl_change_class_fix(deprecatedClass, replacingClass); + } + + @Override + protected void performRewrite(TransformationContext ctx) throws Exception { + WorkingCopy wc = ctx.getWorkingCopy(); + wc.toPhase(JavaSource.Phase.RESOLVED); + TreeMaker make = wc.getTreeMaker(); + + // rewrite annotations in case of ManagedBean + if (MANAGED_BEAN.equals(annotation.getAnnotationType().toString())) { + ModifiersTree modifiers = ((ClassTree) wc.getTrees().getTree(element)).getModifiers(); + AnnotationTree annotationTree = (AnnotationTree) wc.getTrees().getTree(element, annotation); + List arguments = new ArrayList<>(); + for (ExpressionTree expressionTree : annotationTree.getArguments()) { + if (expressionTree.getKind() == Tree.Kind.ASSIGNMENT) { + AssignmentTree at = (AssignmentTree) expressionTree; + String varName = ((IdentifierTree) at.getVariable()).getName().toString(); + if (varName.equals("name")) { //NOI18N + ExpressionTree valueTree = make.Identifier(at.getExpression().toString()); + arguments.add(valueTree); + } + } + } + ModifiersTree newModifiersTree = make.removeModifiersAnnotation(modifiers, (AnnotationTree) wc.getTrees().getTree(element, annotation)); + AnnotationTree newTree = GenerationUtils.newInstance(wc).createAnnotation(replacingClass, arguments); + newModifiersTree = make.addModifiersAnnotation(newModifiersTree, newTree); + wc.rewrite(modifiers, newModifiersTree); + } + + // rewrite imports + List imports = wc.getCompilationUnit().getImports(); + ImportTree newImportTree = make.Import(make.QualIdent(replacingClass), false); + for (ImportTree importTree : imports) { + if (deprecatedClass.equals(importTree.getQualifiedIdentifier().toString())) { + wc.rewrite(importTree, newImportTree); + } + } + + } + } +} diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/BehaviorImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/BehaviorImpl.java index dfc3413e12e0..1cfc0a9744e5 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/BehaviorImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/BehaviorImpl.java @@ -64,8 +64,10 @@ public boolean refresh( TypeElement type ) { Map types = getHelper().getAnnotationsByType(getHelper().getCompilationController(). getElements().getAllAnnotationMirrors(type)); - AnnotationMirror annotationMirror = types.get( - "javax.faces.component.behavior.FacesBehavior"); // NOI18N + AnnotationMirror annotationMirror = types.get("jakarta.faces.component.behavior.FacesBehavior"); //NOI18N + if (annotationMirror == null) { + annotationMirror = types.get("javax.faces.component.behavior.FacesBehavior"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ClientBehaviorRendererImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ClientBehaviorRendererImpl.java index c8b56b73e7c3..e4f5d0f5d295 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ClientBehaviorRendererImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ClientBehaviorRendererImpl.java @@ -74,8 +74,10 @@ public boolean refresh( TypeElement type ) { Map types = getHelper().getAnnotationsByType(getHelper().getCompilationController(). getElements().getAllAnnotationMirrors( type )); - AnnotationMirror annotationMirror = types.get( - "javax.faces.render.FacesBehaviorRenderer"); // NOI18N + AnnotationMirror annotationMirror = types.get("jakarta.faces.render.FacesBehaviorRenderer"); //NOI18N + if (annotationMirror == null) { + annotationMirror = types.get("javax.faces.render.FacesBehaviorRenderer"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ComponentImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ComponentImpl.java index 35df89904fba..64cfacab0d0d 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ComponentImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ComponentImpl.java @@ -90,7 +90,10 @@ public boolean isCreateTag() { public boolean refresh(TypeElement typeElement) { Map types = getHelper().getAnnotationsByType( getHelper().getCompilationController().getElements().getAllAnnotationMirrors(typeElement)); - AnnotationMirror annotationMirror = types.get("javax.faces.component.FacesComponent"); //NOI18N + AnnotationMirror annotationMirror = types.get("jakarta.faces.component.FacesComponent"); //NOI18N + if (annotationMirror == null) { + annotationMirror = types.get("javax.faces.component.FacesComponent"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ConverterImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ConverterImpl.java index 4bdead21add9..90430d9c604b 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ConverterImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ConverterImpl.java @@ -58,7 +58,11 @@ public boolean refresh( TypeElement type ) { getHelper().getAnnotationsByType(getHelper().getCompilationController(). getElements().getAllAnnotationMirrors(type)); AnnotationMirror annotationMirror = types.get( - "javax.faces.convert.FacesConverter"); // NOI18N + "jakarta.faces.convert.FacesConverter"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types.get( + "javax.faces.convert.FacesConverter"); // NOI18N + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ManagedBeanImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ManagedBeanImpl.java index 9a0f44fef621..e05e8caed6c7 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ManagedBeanImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ManagedBeanImpl.java @@ -73,8 +73,10 @@ public boolean refresh( TypeElement type ) { Map types = getHelper().getAnnotationsByType(getHelper().getCompilationController() .getElements().getAllAnnotationMirrors(type)); - AnnotationMirror annotationMirror = types.get( - "javax.faces.bean.ManagedBean"); // NOI18N + AnnotationMirror annotationMirror = types.get("jakarta.faces.bean.ManagedBean"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types.get("javax.faces.bean.ManagedBean"); // NOI18N + } if (annotationMirror == null) { return false; } @@ -134,11 +136,16 @@ public List getManagedProperties() { private void setScope( Map types, TypeElement type ) { - boolean isCustom = getHelper().hasAnnotation(type.getAnnotationMirrors(), - "javax.faces.bean.CustomScoped"); // NOI18N + boolean isCustom + = getHelper().hasAnnotation(type.getAnnotationMirrors(), "jakarta.faces.bean.CustomScoped") // NOI18N + || getHelper().hasAnnotation(type.getAnnotationMirrors(), "javax.faces.bean.CustomScoped"); // NOI18N if ( isCustom ){ AnnotationMirror annotationMirror = types - .get("javax.faces.bean.CustomScoped"); // NOI18N + .get("jakarta.faces.bean.CustomScoped"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types + .get("javax.faces.bean.CustomScoped"); // NOI18N + } AnnotationParser parser = AnnotationParser.create(getHelper()); parser.expectString("value", AnnotationParser.defaultValue("")); ParseResult parseResult = parser.parse(annotationMirror); @@ -199,6 +206,16 @@ public static String getConvertedClassName( String className ){ ManagedBean.Scope.SESSION); SCOPES.put("javax.faces.bean.ViewScoped", // NOI18N ManagedBean.Scope.VIEW); + SCOPES.put("jakarta.faces.bean.ApplicationScoped", // NOI18N + ManagedBean.Scope.APPLICATION); + SCOPES.put("jakarta.faces.bean.NoneScoped", // NOI18N + ManagedBean.Scope.NONE); + SCOPES.put("jakarta.faces.bean.RequestScoped", // NOI18N + ManagedBean.Scope.REQUEST); + SCOPES.put("jakarta.faces.bean.SessionScoped", // NOI18N + ManagedBean.Scope.SESSION); + SCOPES.put("jakarta.faces.bean.ViewScoped", // NOI18N + ManagedBean.Scope.VIEW); } private Boolean eager; diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ObjectProviders.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ObjectProviders.java index fee74c140e83..0f12e1110ab8 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ObjectProviders.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ObjectProviders.java @@ -46,7 +46,6 @@ * @author ads * */ -// @todo: Support JakartaEE class ObjectProviders { /** @@ -86,6 +85,30 @@ public void handleAnnotation(TypeElement typeElement, parser.parse( annotation ); } }); + helper.getAnnotationScanner().findAnnotations( + "jakarta.faces.event.ListenersFor", // NOI18N + EnumSet.of(ElementKind.CLASS), + new AnnotationHandler() { + public void handleAnnotation(TypeElement typeElement, + Element element, AnnotationMirror annotation) + { + if ( !SystemEventListenerProvider. + isApplicationSystemEventListener(typeElement, + helper)) + { + return; + } + AnnotationParser parser = AnnotationParser.create( + helper ); + parser.expectAnnotationArray("value" , // NOI18N + helper.resolveType( + "jakarta.faces.event.ListenerFor"),// NOI18N + new ListenerForHandler( helper , typeElement, + result ), + null); + parser.parse( annotation ); + } + }); } catch (InterruptedException e) { // do nothing @@ -141,7 +164,7 @@ static final class ComponentProvider extends AbstractProvider ComponentProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.component.FacesComponent"); + super(helper, "javax.faces.component.FacesComponent", "jakarta.faces.component.FacesComponent"); } /* (non-Javadoc) @@ -159,7 +182,7 @@ ComponentImpl createObject( AnnotationModelHelper helper, static final class BehaviorProvider extends AbstractProvider { BehaviorProvider( AnnotationModelHelper helper ) { - super( helper , "javax.faces.component.behavior.FacesBehavior"); + super( helper, "javax.faces.component.behavior.FacesBehavior", "jakarta.faces.component.behavior.FacesBehavior"); } /* (non-Javadoc) @@ -180,7 +203,7 @@ static final class ConverterProvider extends AbstractProvider ConverterProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.convert.FacesConverter"); + super(helper, "javax.faces.convert.FacesConverter", "jakarta.faces.convert.FacesConverter"); } /* (non-Javadoc) @@ -202,7 +225,7 @@ static final class ManagedBeanProvider extends AbstractProvider ManagedBeanProvider( AnnotationModelHelper helper) { - super(helper, "javax.faces.bean.ManagedBean"); + super(helper, "javax.faces.bean.ManagedBean", "jakarta.faces.bean.ManagedBean"); } /* (non-Javadoc) @@ -223,7 +246,7 @@ static final class ValidatorProvider extends AbstractProvider ValidatorProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.validator.FacesValidator"); + super(helper, "javax.faces.validator.FacesValidator", "jakarta.faces.validator.FacesValidator"); } /* (non-Javadoc) @@ -243,7 +266,7 @@ static final class RendererProvider extends AbstractProvider { RendererProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.render.FacesRenderer"); + super(helper, "javax.faces.render.FacesRenderer", "jakarta.faces.render.FacesRenderer"); } /* (non-Javadoc) @@ -264,7 +287,7 @@ static final class ClientBehaviorProvider extends { ClientBehaviorProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.render.FacesBehaviorRenderer"); + super(helper, "javax.faces.render.FacesBehaviorRenderer", "jakarta.faces.render.FacesBehaviorRenderer"); } /* (non-Javadoc) @@ -286,7 +309,7 @@ static final class SystemEventListenerProvider extends SystemEventListenerProvider( AnnotationModelHelper helper ) { - super(helper, "javax.faces.event.ListenerFor"); // NOI18N + super(helper, "javax.faces.event.ListenerFor", "jakarta.faces.event.ListenerFor"); // NOI18N } /* (non-Javadoc) @@ -320,12 +343,16 @@ static boolean isApplicationSystemEventListener( TypeElement type , boolean isComponentSystemEventListener = false; for (TypeElement typeElement : interfaces) { if ( typeElement.getQualifiedName().contentEquals( - "javax.faces.event.SystemEventListener") ) // NOI18N + "jakarta.faces.event.SystemEventListener") // NOI18N + || typeElement.getQualifiedName().contentEquals( + "javax.faces.event.SystemEventListener") ) // NOI18N { isSystemEventListener = true; } - else if ( typeElement.getQualifiedName().contentEquals( - "javax.faces.event.ComponentSystemEventListener")) + else if ( typeElement.getQualifiedName().contentEquals( + "jakarta.faces.event.ComponentSystemEventListener") // NOI18N + || typeElement.getQualifiedName().contentEquals( + "javax.faces.event.ComponentSystemEventListener")) // NOI18N { isComponentSystemEventListener = true; } @@ -365,35 +392,38 @@ static List getImplementedInterfaces( TypeElement type , private abstract static class AbstractProvider implements ObjectProvider { - AbstractProvider(AnnotationModelHelper helper, String annotationName) { - myAnnotationName = annotationName; + AbstractProvider(AnnotationModelHelper helper, String... annotationNames) { + myAnnotationNames = annotationNames; myHelper = helper; } public List createInitialObjects() throws InterruptedException { final List result = new LinkedList(); - getHelper().getAnnotationScanner().findAnnotations(getAnnotationName(), - EnumSet.of( ElementKind.CLASS ), - new AnnotationHandler() { - public void handleAnnotation(TypeElement type, - Element element, AnnotationMirror annotation) - { - if ( checkType ( type )){ - result.add(createObject(getHelper(), type)); - } + for (String annotationName : myAnnotationNames) { + getHelper().getAnnotationScanner().findAnnotations(annotationName, + EnumSet.of(ElementKind.CLASS), + new AnnotationHandler() { + public void handleAnnotation(TypeElement type, + Element element, AnnotationMirror annotation) { + if (checkType(type)) { + result.add(createObject(getHelper(), type)); } - }); + } + }); + } return result; } public List createObjects(TypeElement type) { final List result = new ArrayList(); - if (getHelper().hasAnnotation(getHelper().getCompilationController(). - getElements().getAllAnnotationMirrors( type ), - getAnnotationName())) - { - if ( checkType ( type )){ - result.add(createObject(getHelper(), type)); + for (String annotationName : myAnnotationNames) { + if (getHelper().hasAnnotation(getHelper().getCompilationController(). + getElements().getAllAnnotationMirrors( type ), + annotationName)) + { + if ( checkType ( type )){ + result.add(createObject(getHelper(), type)); + } } } return result; @@ -421,11 +451,7 @@ protected AnnotationModelHelper getHelper(){ return myHelper; } - private String getAnnotationName(){ - return myAnnotationName; - } - - private String myAnnotationName; + private String[] myAnnotationNames; private AnnotationModelHelper myHelper; } } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/RendererImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/RendererImpl.java index e66940a6b39f..fbbc4de296b3 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/RendererImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/RendererImpl.java @@ -58,7 +58,12 @@ public boolean refresh( TypeElement type ) { getHelper().getAnnotationsByType(getHelper().getCompilationController() .getElements().getAllAnnotationMirrors(type)); AnnotationMirror annotationMirror = types.get( - "javax.faces.render.FacesRenderer"); // NOI18N + "jakarta.faces.render.FacesRenderer"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types.get( + "javax.faces.render.FacesRenderer"); // NOI18N + + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/SystemEventListenerImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/SystemEventListenerImpl.java index c5b935b173a0..f77ce89d40d4 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/SystemEventListenerImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/SystemEventListenerImpl.java @@ -51,7 +51,12 @@ public boolean refresh( TypeElement type ) { getHelper().getAnnotationsByType(getHelper().getCompilationController() .getElements().getAllAnnotationMirrors(type)); AnnotationMirror annotationMirror = types.get( - "javax.faces.event.ListenerFor"); // NOI18N + "jakarta.faces.event.ListenerFor"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types.get( + "javax.faces.event.ListenerFor"); // NOI18N + + } if (annotationMirror == null || !ObjectProviders.SystemEventListenerProvider. isApplicationSystemEventListener(type, getHelper())) diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ValidatorImpl.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ValidatorImpl.java index ed0cc7971884..6b4e57e9b50c 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ValidatorImpl.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/impl/metamodel/ValidatorImpl.java @@ -65,7 +65,12 @@ public boolean refresh( TypeElement type ) { getHelper().getAnnotationsByType(getHelper().getCompilationController() .getElements().getAllAnnotationMirrors( type)); AnnotationMirror annotationMirror = types.get( - "javax.faces.validator.FacesValidator"); // NOI18N + "jakarta.faces.validator.FacesValidator"); // NOI18N + if (annotationMirror == null) { + annotationMirror = types.get( + "javax.faces.validator.FacesValidator"); // NOI18N + + } if (annotationMirror == null) { return false; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/EntityClass.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/EntityClass.java index 66d5ffc110d0..85d34516bcab 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/EntityClass.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/EntityClass.java @@ -122,7 +122,11 @@ public boolean handleTransfer(JTextComponent targetComponent) { static boolean isId(ExecutableElement method, boolean isFieldAccess) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId")) { // NOI18N + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.EmbeddedId") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId") + ) { // NOI18N return true; } } @@ -132,7 +136,10 @@ static boolean isId(ExecutableElement method, boolean isFieldAccess) { static String getTemporal(ExecutableElement method, boolean isFieldAccess) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - AnnotationMirror annotationMirror = JpaControllerUtil.findAnnotation(element, "javax.persistence.Temporal"); // NOI18N + AnnotationMirror annotationMirror = JpaControllerUtil.findAnnotation(element, "jakarta.persistence.Temporal"); // NOI18N + if(annotationMirror == null) { + annotationMirror = JpaControllerUtil.findAnnotation(element, "javax.persistence.Temporal"); // NOI18N + } if (annotationMirror != null) { Collection attributes = annotationMirror.getElementValues().values(); if (attributes.iterator().hasNext()) { @@ -163,7 +170,8 @@ static ClasspathInfo createClasspathInfo(FileObject fileObject) { } public static boolean isEntityClass(TypeElement typeElement) { - if (JpaControllerUtil.isAnnotatedWith(typeElement, "javax.persistence.Entity")) { + if (JpaControllerUtil.isAnnotatedWith(typeElement, "jakarta.persistence.Entity") + || JpaControllerUtil.isAnnotatedWith(typeElement, "javax.persistence.Entity")) { return true; } return false; diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/FromEntityBase.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/FromEntityBase.java index d7263296ffa0..98f7bd801758 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/FromEntityBase.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/FromEntityBase.java @@ -215,7 +215,8 @@ private static void enumerateEntityFields(Map params, Compilatio JpaControllerUtil.EmbeddedPkSupport embeddedPkSupport = null; for (ExecutableElement method : methods) { // filter out @Transient methods - if (JpaControllerUtil.findAnnotation(method, "javax.persistence.Transient") != null) { //NOI18N + if (JpaControllerUtil.findAnnotation(method, "jakarta.persistence.Transient") != null //NOI18N + || JpaControllerUtil.findAnnotation(method, "javax.persistence.Transient") != null) { //NOI18N continue; } @@ -593,7 +594,8 @@ private boolean isBlob() { if (fieldElement == null) { fieldElement = method; } - return JpaControllerUtil.isAnnotatedWith(fieldElement, "javax.persistence.Lob"); // NOI18N + return JpaControllerUtil.isAnnotatedWith(fieldElement, "jakarta.persistence.Lob") // NOI18N + || JpaControllerUtil.isAnnotatedWith(fieldElement, "javax.persistence.Lob"); // NOI18N } @Override diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/JsfForm.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/JsfForm.java index a32876d09578..d11d234f73c5 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/JsfForm.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/palette/items/JsfForm.java @@ -257,7 +257,8 @@ private static void createFormInternal(ExecutableElement method, TypeElement bea String temporal = controller.getTypes().isSameType(dateTypeMirror, method.getReturnType()) ? getTemporal(method, fieldAccess) : null; String template = temporal == null ? "\n" : "\n"; Element fieldElement = fieldAccess ? JpaControllerUtil.guessField(method) : method; - boolean isLob = JpaControllerUtil.isAnnotatedWith(fieldElement, "javax.persistence.Lob"); + boolean isLob = JpaControllerUtil.isAnnotatedWith(fieldElement, "jakarta.persistence.Lob") + || JpaControllerUtil.isAnnotatedWith(fieldElement, "javax.persistence.Lob"); template += isLob ? " getPropertyNames(final Project project, final String entityC } try { //check web beans - if(JsfVersionUtils.forProject(project) == JsfVersion.JSF_4_0){ + if(JsfVersionUtils.forProject(project).isAtLeast(JsfVersion.JSF_3_0)) { jakartaMetaModelSupport.getMetaModel().runReadAction(new MetadataModelAction() { @Override public Void run(org.netbeans.modules.jakarta.web.beans.api.model.WebBeansModel metadata) throws Exception { diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfCrudELResolver.jakarta.java.txt b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfCrudELResolver.jakarta.java.txt new file mode 100644 index 000000000000..c5a3294391ff --- /dev/null +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfCrudELResolver.jakarta.java.txt @@ -0,0 +1,614 @@ +package __PACKAGE__; + +import java.beans.BeanInfo; +import java.beans.FeatureDescriptor; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import jakarta.el.ELContext; +import jakarta.el.ELException; +import jakarta.el.ELResolver; + +public class JsfCrudELResolver extends ELResolver { + public static final String JSFCRUD_CLASS = "jsfcrud_class"; + public static final String JSFCRUD_METHOD = "jsfcrud_method"; + public static final String JSFCRUD_PARAMS = "jsfcrud_params"; + public static final String JSFCRUD_INVOKE = "jsfcrud_invoke"; + public static final String JSFCRUD_TRANSFORM = "jsfcrud_transform"; + public static final String JSFCRUD_NULL = "jsfcrud_null"; + + /** + * {@inheritDoc} + */ + public Object getValue(ELContext context, Object base, Object property) { + if(context == null) { + throw new NullPointerException(); + } + + String propertyName = null; + if (property != null) { + propertyName = property.toString(); + } + + if (JSFCRUD_NULL.equals(propertyName) && + base == null) { + context.setPropertyResolved(true); + return JSFCRUD_NULL; + } + + if (JSFCRUD_NULL.equals(propertyName) && + ! (base instanceof JsfCrudMethod) && + ! (base instanceof JsfCrudParameterizedMethod) && + ! (base instanceof JsfCrudTransform) ) { + throw new ELException(JSFCRUD_NULL + " expects a base of type JsfCrudMethod, JsfCrudParameterizedMethod, or JsfCrudTransform; received " + base); + } + + Object result = null; + + if (JSFCRUD_CLASS.equals(propertyName)) { + if (base != null) { + throw new ELException(JSFCRUD_CLASS + " expects a null base; received " + base); + } + result = new JsfCrudClass(); + context.setPropertyResolved(true); + return result; + } else if (JSFCRUD_METHOD.equals(propertyName)) { + if (base == null) { + throw new ELException(JSFCRUD_METHOD + " expects a non-null (possibly JsfCrudClass) base; received null"); + } + result = new JsfCrudMethod(base); + context.setPropertyResolved(true); + return result; + } else if (JSFCRUD_PARAMS.equals(propertyName)) { + if (! (base instanceof JsfCrudMethod)) { + throw new ELException(JSFCRUD_PARAMS + " expects a base of type JsfCrudMethod; received " + base); + } + result = new JsfCrudParameterizedMethod((JsfCrudMethod)base); + context.setPropertyResolved(true); + return result; + } else if (JSFCRUD_INVOKE.equals(propertyName)) { + JsfCrudParameterizedMethod parameterizedMethod = getParameterizedMethodToInvoke(base); + result = parameterizedMethod.invoke(); + context.setPropertyResolved(true); + return result; + } else if (JSFCRUD_TRANSFORM.equals(propertyName)) { + if (base == null) { + throw new ELException(JSFCRUD_TRANSFORM + " expects a non-null base; received null"); + } + result = new JsfCrudTransform(base); + context.setPropertyResolved(true); + return result; + } else if (base instanceof JsfCrudClass) { + ((JsfCrudClass)base).setType(propertyName); + result = base; + context.setPropertyResolved(true); + return result; + } else if (base instanceof JsfCrudMethod) { + JsfCrudMethod baseAsMethod = (JsfCrudMethod)base; + if (baseAsMethod.getMethodName() == null) { + baseAsMethod.setMethodName(propertyName); + result = base; + context.setPropertyResolved(true); + return result; + } + else { + //already have a method name. start adding parameters. + JsfCrudParameterizedMethod pMethod = new JsfCrudParameterizedMethod(baseAsMethod); + pMethod.addParameter(property); + result = pMethod; + context.setPropertyResolved(true); + return result; + } + } else if (base instanceof JsfCrudParameterizedMethod) { + ((JsfCrudParameterizedMethod)base).addParameter(property); + result = base; + context.setPropertyResolved(true); + return result; + } else if (base instanceof JsfCrudTransform) { + if (JSFCRUD_NULL.equals(propertyName)) { + ((JsfCrudTransform)base).addNullMethod(); + result = base; + context.setPropertyResolved(true); + return result; + } else if (property instanceof JsfCrudMethod) { + ((JsfCrudTransform)base).addMethod((JsfCrudMethod)property); + result = base; + context.setPropertyResolved(true); + return result; + } + else { + result = ((JsfCrudTransform)base).getProperty(propertyName); + context.setPropertyResolved(true); + return result; + } + } + + return null; + } + + private JsfCrudParameterizedMethod getParameterizedMethodToInvoke(Object base) { + JsfCrudParameterizedMethod parameterizedMethod = null; + if (base instanceof JsfCrudParameterizedMethod) { + parameterizedMethod = (JsfCrudParameterizedMethod)base; + } else if (base instanceof JsfCrudMethod) { + parameterizedMethod = new JsfCrudParameterizedMethod((JsfCrudMethod)base); + } + if (parameterizedMethod == null) { + throw new ELException(JSFCRUD_INVOKE + " expects a base of type JsfCrudParameterizedMethod or JsfCrudMethod; received " + base); + } + return parameterizedMethod; + } + + /** + * {@inheritDoc} + */ + public void setValue(ELContext context, Object base, Object property, Object value) { + if(context == null) { + throw new NullPointerException(); + } + + String propertyName = null; + if (property != null) { + propertyName = property.toString(); + } + + if ( base instanceof JsfCrudClass || + base instanceof JsfCrudMethod || + base instanceof JsfCrudParameterizedMethod || + (base instanceof JsfCrudTransform && property instanceof JsfCrudMethod) || + JSFCRUD_CLASS.equals(propertyName) || + JSFCRUD_METHOD.equals(propertyName) || + JSFCRUD_PARAMS.equals(propertyName) || + JSFCRUD_INVOKE.equals(propertyName) || + JSFCRUD_TRANSFORM.equals(propertyName) || + JSFCRUD_NULL.equals(propertyName) || + property == null ) { + throw new ELException("setValue was called with base " + base + ", property " + property + ", and value " + value + "; expected a base of type JsfCrudTransform and a valid property of the JsfCrudTransform's own base"); + } + + if (base instanceof JsfCrudTransform) { + ((JsfCrudTransform)base).setProperty(propertyName, value); + context.setPropertyResolved(true); + } + } + + /** + * {@inheritDoc} + */ + public boolean isReadOnly(ELContext context, Object base, Object property) { + if(context == null) { + throw new NullPointerException(); + } + + String propertyName = null; + if (property != null) { + propertyName = property.toString(); + } + + if (JSFCRUD_CLASS.equals(propertyName) && base == null) { + context.setPropertyResolved(true); + } else if (JSFCRUD_METHOD.equals(propertyName) && base != null) { + context.setPropertyResolved(true); + } else if (JSFCRUD_PARAMS.equals(propertyName) && (base instanceof JsfCrudMethod)) { + context.setPropertyResolved(true); + } else if (JSFCRUD_INVOKE.equals(propertyName) && (base instanceof JsfCrudParameterizedMethod || base instanceof JsfCrudMethod)) { + context.setPropertyResolved(true); + } else if (JSFCRUD_TRANSFORM.equals(propertyName) && base != null) { + context.setPropertyResolved(true); + } else if (base instanceof JsfCrudClass) { + context.setPropertyResolved(true); + } else if (base instanceof JsfCrudMethod) { + context.setPropertyResolved(true); + } else if (base instanceof JsfCrudParameterizedMethod) { + context.setPropertyResolved(true); + } else if (base instanceof JsfCrudTransform) { + if (property instanceof JsfCrudMethod) { + context.setPropertyResolved(true); + } + else { + context.setPropertyResolved(true); + return false; + } + } else { + return false; + } + + return true; + } + + /** + * {@inheritDoc} + */ + public Class getType(ELContext context, Object base, Object property) { + if(context == null) { + throw new NullPointerException(); + } + + String propertyName = null; + if (property != null) { + propertyName = property.toString(); + } + + if (JSFCRUD_CLASS.equals(propertyName) && base == null) { + context.setPropertyResolved(true); + return JsfCrudClass.class; + } else if (JSFCRUD_METHOD.equals(propertyName) && base != null) { + context.setPropertyResolved(true); + return JsfCrudMethod.class; + } else if (JSFCRUD_PARAMS.equals(propertyName) && (base instanceof JsfCrudMethod)) { + context.setPropertyResolved(true); + return JsfCrudParameterizedMethod.class; + } else if (JSFCRUD_INVOKE.equals(propertyName) && (base instanceof JsfCrudParameterizedMethod || base instanceof JsfCrudMethod)) { + JsfCrudParameterizedMethod parameterizedMethod = getParameterizedMethodToInvoke(base); + Class result = parameterizedMethod.getReturnType(); + context.setPropertyResolved(true); + return result; + } else if (JSFCRUD_TRANSFORM.equals(propertyName) && base != null) { + context.setPropertyResolved(true); + return JsfCrudTransform.class; + } else if (base instanceof JsfCrudClass) { + context.setPropertyResolved(true); + return JsfCrudClass.class; + } else if (base instanceof JsfCrudMethod) { + JsfCrudMethod baseAsMethod = (JsfCrudMethod)base; + if (baseAsMethod.getMethodName() == null) { + context.setPropertyResolved(true); + return JsfCrudMethod.class; + } + else { + context.setPropertyResolved(true); + return JsfCrudParameterizedMethod.class; + } + } else if (base instanceof JsfCrudParameterizedMethod) { + context.setPropertyResolved(true); + return JsfCrudParameterizedMethod.class; + } else if (base instanceof JsfCrudTransform) { + if (property instanceof JsfCrudMethod) { + context.setPropertyResolved(true); + return JsfCrudTransform.class; + } + else { + Class result = ((JsfCrudTransform)base).getPropertyType(propertyName); + context.setPropertyResolved(true); + return result; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public Iterator getFeatureDescriptors(ELContext context, Object base) { + //todo: implement + return null; + } + + /** + * {@inheritDoc} + */ + public Class getCommonPropertyType(ELContext context, + Object base) { + if (context == null) { + throw new NullPointerException(); + } + + if (base == null || base instanceof JsfCrudClass) { + return String.class; + } else if (base instanceof JsfCrudMethod) { + JsfCrudMethod baseAsMethod = (JsfCrudMethod)base; + if (baseAsMethod.getMethodName() == null) { + return String.class; + } + else { + return Object.class; //could be a param Object, JSFCRUD_NULL, or JSFCRUD_INVOKE + } + } else if (base instanceof JsfCrudParameterizedMethod) { + return Object.class; //could be a param Object, JSFCRUD_NULL, or JSFCRUD_INVOKE + } else if (base instanceof JsfCrudTransform) { + JsfCrudTransform baseAsTransform = (JsfCrudTransform)base; + boolean[] tma = baseAsTransform.transformMethodsAssigned; + if (!tma[0] || !tma[1]) { + return Object.class; //could be a JsfCrudMethod or JSFCRUD_NULL + } + else { + return String.class; //the tailing propertyName + } + } else if (base != null) { + return String.class; //a catch-all + } + + return null; + } + + private class JsfCrudClass { + private Class type; + public Class getType() { + return type; + } + public void setType(String typeName) { + try { + type = Class.forName(typeName); + } catch (ClassNotFoundException e){ + throw new ELException(e); + } + } + @Override + public String toString() { + return "JsfCrudClass[" + type + "]"; + } + } + + private class JsfCrudMethod { + private Object base; //can be an JsfCrudClass instance, or an arbitrary Object + private String methodName; + public JsfCrudMethod(Object base) { + this.base = base; + } + public Object getBase() { + return base; + } + public String getMethodName() { + return methodName; + } + public void setMethodName(String methodName) { + this.methodName = methodName; + } + @Override + public String toString() { + return "JsfCrudMethod[base=" + base + ",methodName=" + methodName + "]"; + } + } + + private class JsfCrudParameterizedMethod { + private JsfCrudMethod method; + private List actualParams; + private Method methodToInvoke; + + public JsfCrudParameterizedMethod(JsfCrudMethod method) { + this.method = method; + actualParams = new ArrayList(); + } + public JsfCrudMethod getMethod() { + return method; + } + public void addParameter(Object param) { + if (JsfCrudELResolver.JSFCRUD_NULL.equals(param)) { + param = null; + } + actualParams.add(param); + } + @Override + public String toString() { + StringBuffer sb = new StringBuffer("JsfCrudParameterizedMethod[method="); + sb.append(method); + sb.append(",params=List["); + int i = 0; + for (Object param : actualParams) { + if (i > 0) { + sb.append(","); + } + sb.append(param); + i++; + } + sb.append("]]"); + return sb.toString(); + } + public Object invoke() { + findMethodToInvoke(); + Object methodBase = method.getBase(); + Object instance = methodBase instanceof JsfCrudClass ? null : methodBase; + Object[] paramArray = actualParams.toArray(); + try { + return methodToInvoke.invoke(instance, paramArray); + } catch (IllegalAccessException e) { + throw new ELException(e); + } catch (InvocationTargetException e) { + throw new ELException(e); + } + } + + public Class getReturnType() { + findMethodToInvoke(); + return methodToInvoke.getReturnType(); + } + + private void findMethodToInvoke() { + if (methodToInvoke != null) { + return; + } + + Object methodBase = method.getBase(); + JsfCrudClass staticMethodBase = null; + if (methodBase instanceof JsfCrudClass) { + staticMethodBase = (JsfCrudClass)methodBase; + } + Class type; + Method[] methodsOfType; + if (staticMethodBase == null) { + type = methodBase.getClass(); + methodsOfType = type.getMethods(); + } + else { + type = staticMethodBase.getType(); + methodsOfType = type.getDeclaredMethods(); + } + methodsOfTypeLoop: + for (Method methodOfType : methodsOfType) { + String methodName = method.getMethodName(); + String methodOfTypeName = methodOfType.getName(); + if (!methodName.equals(methodOfTypeName)) { + continue; + } + if (staticMethodBase == null) { + if (Modifier.isStatic(methodOfType.getModifiers())) { + continue; + } + } + else { + if (!Modifier.isStatic(methodOfType.getModifiers())) { + continue; + } + } + Class[] methodOfTypeFormalParams = methodOfType.getParameterTypes(); + if (methodOfTypeFormalParams.length != actualParams.size()) { + continue; + } + for (int i = 0; i < methodOfTypeFormalParams.length; i++) { + Object param = actualParams.get(i); + if (param == null) { + if (methodOfTypeFormalParams[i].isPrimitive()) { + continue methodsOfTypeLoop; + } + } else { + Class paramType = param.getClass(); + if (!methodOfTypeFormalParams[i].isAssignableFrom(paramType)) { + continue methodsOfTypeLoop; + } + } + } + methodToInvoke = methodOfType; + break; + } + if (methodToInvoke == null) { + throw new ELException("could not find method to invoke; no appropriate method found in type " + type + ". JsfCrudParameterizedMethod was " + this); + } + } + } + + private class JsfCrudTransform { + private Object base; + private JsfCrudMethod[] transformMethods; + private boolean[] transformMethodsAssigned; + public JsfCrudTransform(Object base) { + this.base = base; + transformMethods = new JsfCrudMethod[2]; + transformMethodsAssigned = new boolean[2]; + } + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("JsfCrudTransform=[base="); + sb.append(base); + sb.append(",transformMethod0="); + sb.append(transformMethods[0]); + sb.append(",transformMethod1="); + sb.append(transformMethods[1]); + sb.append(",transformMethodsAssigned0="); + sb.append(transformMethodsAssigned[0]); + sb.append(",transformMethodsAssigned1="); + sb.append(transformMethodsAssigned[1]); + sb.append("]"); + return sb.toString(); + } + public Object getBase() { + return base; + } + public void addMethod(JsfCrudMethod method) { + if (!transformMethodsAssigned[0]) { + transformMethods[0] = method; + transformMethodsAssigned[0] = true; + } + else { + if (transformMethodsAssigned[1]) { + throw new ELException("attempt to add more than two methods to a JsfCrudTransform; additional JsfCrudMethod was " + method); + } + transformMethods[1] = method; + transformMethodsAssigned[1] = true; + } + } + public void addNullMethod() { + if (!transformMethodsAssigned[0]) { + transformMethodsAssigned[0] = true; + } + else { + if (transformMethodsAssigned[1]) { + throw new ELException("attempt to add more than two methods to a JsfCrudTransform; additional JsfCrudMethod was null"); + } + transformMethodsAssigned[1] = true; + } + } + public Class getPropertyType(String propertyName) { + if (transformMethods[0] == null) { + PropertyDescriptor pd = getPropertyDescriptor(propertyName); + return pd.getPropertyType(); + } + JsfCrudParameterizedMethod parameterizedMethod = getParameterizedTransformationMethod(propertyName); + return parameterizedMethod.getReturnType(); + } + private Object getUntransformedProperty(String propertyName) { + PropertyDescriptor pd = getPropertyDescriptor(propertyName); + if (pd == null) { + throw new ELException("could not get untransformed property " + propertyName + " of base object " + base + ": base object has no such property"); + } + Method readMethod = pd.getReadMethod(); + Object rawResult; + try { + rawResult = readMethod.invoke(base); + } catch (IllegalAccessException e) { + throw new ELException(e); + } catch (InvocationTargetException e) { + throw new ELException(e); + } + return rawResult; + } + private JsfCrudParameterizedMethod getParameterizedTransformationMethod(String propertyName) { + Object rawResult = getUntransformedProperty(propertyName); + JsfCrudParameterizedMethod parameterizedMethod = new JsfCrudParameterizedMethod(transformMethods[0]); + parameterizedMethod.addParameter(rawResult); + return parameterizedMethod; + } + public Object getProperty(String propertyName) { + if (transformMethods[0] == null) { + return getUntransformedProperty(propertyName); + } + JsfCrudParameterizedMethod parameterizedMethod = getParameterizedTransformationMethod(propertyName); + return parameterizedMethod.invoke(); + } + public void setProperty(String propertyName, Object value) { + PropertyDescriptor pd = getPropertyDescriptor(propertyName); + if (pd == null) { + throw new ELException("could not set property " + propertyName + " of base object " + base + " with raw value " + value + ": base object has no such property"); + } + Object transformedOrUntransformedValue = null; + if (transformMethods[1] == null) { + transformedOrUntransformedValue = value; + } + else { + JsfCrudParameterizedMethod parameterizedMethod = new JsfCrudParameterizedMethod(transformMethods[1]); + parameterizedMethod.addParameter(value); + transformedOrUntransformedValue = parameterizedMethod.invoke(); + } + Method writeMethod = pd.getWriteMethod(); + try { + writeMethod.invoke(base, transformedOrUntransformedValue); + } catch (IllegalAccessException e) { + throw new ELException(e); + } catch (InvocationTargetException e) { + throw new ELException(e); + } + } + private PropertyDescriptor getPropertyDescriptor(String propertyName) { + Class baseType = base.getClass(); + BeanInfo info; + try { + info = Introspector.getBeanInfo(baseType); + } catch (IntrospectionException ie) { + throw new ELException(ie); + } + for (PropertyDescriptor pd : info.getPropertyDescriptors()) { + if (propertyName.equals(pd.getName())) { + return pd; + } + } + return null; + } + } +} diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfUtil.jakarta.java.txt b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfUtil.jakarta.java.txt new file mode 100644 index 000000000000..3ebdcd035bbf --- /dev/null +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/JsfUtil.jakarta.java.txt @@ -0,0 +1,109 @@ +package __PACKAGE__; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.component.UIComponent; +import jakarta.faces.context.FacesContext; +import jakarta.faces.convert.Converter; +import jakarta.faces.model.SelectItem; + +public class JsfUtil { + + public static SelectItem[] getSelectItems(List entities, boolean selectOne) { + int size = selectOne ? entities.size() + 1 : entities.size(); + SelectItem[] items = new SelectItem[size]; + int i = 0; + if (selectOne) { + items[0] = new SelectItem("", "---"); + i++; + } + for (Object x : entities) { + items[i++] = new SelectItem(x, x.toString()); + } + return items; + } + + public static void ensureAddErrorMessage(Exception ex, String defaultMsg) { + String msg = ex.getLocalizedMessage(); + if (msg != null && msg.length() > 0) { + addErrorMessage(msg); + } else { + addErrorMessage(defaultMsg); + } + } + + public static void addErrorMessages(List messages) { + for (String message : messages) { + addErrorMessage(message); + } + } + + public static void addErrorMessage(String msg) { + FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg); + FacesContext.getCurrentInstance().addMessage(null, facesMsg); + } + + public static void addSuccessMessage(String msg) { + FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg); + FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg); + } + + public static String getRequestParameter(String key) { + return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key); + } + + public static Object getObjectFromRequestParameter(String requestParameterName, Converter converter, UIComponent component) { + String theId = JsfUtil.getRequestParameter(requestParameterName); + return converter.getAsObject(FacesContext.getCurrentInstance(), component, theId); + } + + public static List arrayToList(T[] arr) { + if (arr == null) { + return new ArrayList(); + } + return Arrays.asList(arr); + } + + public static Set arrayToSet(T[] arr) { + if (arr == null) { + return new HashSet(); + } + return new HashSet(Arrays.asList(arr)); + } + + public static Object[] collectionToArray(Collection c) { + if (c == null) { + return new Object[0]; + } + return c.toArray(); + } + + public static List setToList(Set set) { + return new ArrayList(set); + } + + public static String getAsConvertedString(Object object, Converter converter) { + return converter.getAsString(FacesContext.getCurrentInstance(), null, object); + } + + public static String getCollectionAsString(Collection collection) { + if (collection == null || collection.size() == 0) { + return "(No Items)"; + } + StringBuffer sb = new StringBuffer(); + int i = 0; + for (Object item : collection) { + if (i > 0) { + sb.append("
"); + } + sb.append(item); + i++; + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/PagingInfo.jakarta.java.txt b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/PagingInfo.jakarta.java.txt new file mode 100644 index 000000000000..3567bcd3a786 --- /dev/null +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/PagingInfo.jakarta.java.txt @@ -0,0 +1,60 @@ +package __PACKAGE__; + +public class PagingInfo { + private int batchSize = 5; + private int firstItem = 0; + private int itemCount = -1; + + public int getBatchSize() { + return batchSize; + } + + public int getItemCount() { + return itemCount; + } + + public void setItemCount(int itemCount) { + this.itemCount = itemCount; + } + + public int getFirstItem() { + if (itemCount == -1) { + throw new IllegalStateException("itemCount must be set before invoking getFirstItem"); + } + if (firstItem >= itemCount) { + if (itemCount == 0) { + firstItem = 0; + } else { + int zeroBasedItemCount = itemCount - 1; + double pageDouble = zeroBasedItemCount / batchSize; + int page = (int) Math.floor(pageDouble); + firstItem = page * batchSize; + } + } + return firstItem; + } + + public void setFirstItem(int firstItem) { + this.firstItem = firstItem; + } + + public int getLastItem() { + getFirstItem(); + return firstItem + batchSize > itemCount ? itemCount : firstItem + batchSize; + } + + public void nextPage() { + getFirstItem(); + if (firstItem + batchSize < itemCount) { + firstItem += batchSize; + } + } + + public void previousPage() { + getFirstItem(); + firstItem -= batchSize; + if (firstItem < 0) { + firstItem = 0; + } + } +} diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JSFManagedBean.template b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JSFManagedBean.template index 7f4ef25c3122..5964baeb1dea 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JSFManagedBean.template +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JSFManagedBean.template @@ -12,6 +12,7 @@ ScopeEntry#getClassName() - scope simple name (type: String) ScopeEntry#getImportEntry() - import entry for the scope (type: String) ScopeEntry#getParameters() - annotation parameters (type: String) + jakartaJsfPackages - true if jakarta JSF is used, false if not (type: Boolean) This template is accessible via top level menu Tools->Templates and can be found in category JavaServer Faces->JSF Managed Bean. @@ -26,6 +27,26 @@ package ${package}; +<#if jakartaJsfPackages?? && jakartaJsfPackages==true> +<#if cdiEnabled?? && cdiEnabled> + <#if classAnnotation??> +import jakarta.inject.Named; + + <#if scope??> +import ${scope.getImportEntry()}; + + <#if passivationCapable??> +import java.io.Serializable; + +<#else> + <#if classAnnotation??> +import jakarta.faces.bean.ManagedBean; + + <#if scope??> +import ${scope.getImportEntry()}; + + +<#else> <#if cdiEnabled?? && cdiEnabled> <#if classAnnotation??> import javax.inject.Named; @@ -44,6 +65,7 @@ import javax.faces.bean.ManagedBean; import ${scope.getImportEntry()}; + /** * diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JsfUtil.ftl b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JsfUtil.ftl index cd238ee0068e..124dd3be3eac 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JsfUtil.ftl +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/JsfUtil.ftl @@ -27,6 +27,7 @@ packageName - package name (String) comment - always (Boolean; always FALSE) + jakartaJsfPackages - true if jakarta JSF is used, false if not (type: Boolean) This template is accessible via top level menu Tools->Templates and can be found in category JavaServer Faces->JSF from Entity. @@ -36,11 +37,19 @@ package ${packageName}; import java.util.List; +<#if jakartaJsfPackages?? && jakartaJsfPackages==true> +import jakarta.faces.application.FacesMessage; +import jakarta.faces.component.UIComponent; +import jakarta.faces.context.FacesContext; +import jakarta.faces.convert.Converter; +import jakarta.faces.model.SelectItem; +<#else> import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.model.SelectItem; + public class JsfUtil { diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/PaginationHelper.ftl b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/PaginationHelper.ftl index e2aca390abb1..51d05225f88b 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/PaginationHelper.ftl +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/PaginationHelper.ftl @@ -27,6 +27,7 @@ packageName - package name (String) comment - always (Boolean; always FALSE) + jakartaJsfPackages - true if jakarta JSF is used, false if not (type: Boolean) This template is accessible via top level menu Tools->Templates and can be found in category JavaServer Faces->JSF from Entity. @@ -35,7 +36,11 @@ package ${packageName}; +<#if jakartaJsfPackages?? && jakartaJsfPackages==true> +import jakarta.faces.model.DataModel; +<#else> import javax.faces.model.DataModel; + public abstract class PaginationHelper { diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/controller.ftl b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/controller.ftl index 36ac7278adc0..d9af8b3c93a3 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/controller.ftl +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/controller.ftl @@ -43,6 +43,8 @@ embeddedIdFields - contains information about embedded primary IDs cdiEnabled - project contains beans.xml, so Named beans can be used bundle - name of the variable defined in the JSF config file for the resource bundle (type: String) + jakartaPersistencePackages - true if jakarta persistence is used, false if not (type: Boolean) + jakartaJsfPackages - true if jakarta JSF is used, false if not (type: Boolean) This template is accessible via top level menu Tools->Templates and can be found in category JavaServer Faces->JSF from Entity. @@ -65,6 +67,30 @@ import ${jpaControllerFullClassName}; import java.io.Serializable; import java.util.ResourceBundle; +<#if jakartaJsfPackages?? && jakartaJsfPackages==true> +<#if isInjected?? && isInjected==true> +import jakarta.annotation.Resource; + +<#if ejbClassName??> +import jakarta.ejb.EJB; + +<#if managedBeanName??> +<#if cdiEnabled?? && cdiEnabled> +import jakarta.inject.Named; +import jakarta.enterprise.context.SessionScoped; +<#else> +import jakarta.faces.bean.ManagedBean; +import jakarta.faces.bean.SessionScoped; + + +import jakarta.faces.component.UIComponent; +import jakarta.faces.context.FacesContext; +import jakarta.faces.convert.Converter; +import jakarta.faces.convert.FacesConverter; +import jakarta.faces.model.DataModel; +import jakarta.faces.model.ListDataModel; +import jakarta.faces.model.SelectItem; +<#else> <#if isInjected?? && isInjected==true> import javax.annotation.Resource; @@ -87,8 +113,18 @@ import javax.faces.convert.FacesConverter; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import javax.faces.model.SelectItem; + <#if jpaControllerClassName??> -<#if isInjected?? && isInjected==true> +<#if jakartaPersistencePackages?? && jakartaPersistencePackages==true > +<#if isInjected?? && isInjected==true > +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceUnit; +import jakarta.transaction.UserTransaction; +<#else> +import jakarta.persistence.Persistence; + +<#else> +<#if isInjected?? && isInjected==true > import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import javax.transaction.UserTransaction; @@ -96,6 +132,7 @@ import javax.transaction.UserTransaction; import javax.persistence.Persistence; + <#if managedBeanName??> diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/facesComponent.template b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/facesComponent.template index e9676834054f..11a24f87180f 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/facesComponent.template +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/resources/templates/facesComponent.template @@ -10,12 +10,21 @@ package ${package}; <#if sampleCode??> import java.io.IOException; +<#if jakartaJsfPackages?? && jakartaJsfPackages==true> +import jakarta.faces.component.FacesComponent; +import jakarta.faces.component.UIComponentBase; +<#if sampleCode??> +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.ResponseWriter; + +<#else> import javax.faces.component.FacesComponent; import javax.faces.component.UIComponentBase; <#if sampleCode??> import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; + /** * diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/Bundle.properties b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/Bundle.properties index 410aceb6bea5..cae41882147d 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/Bundle.properties +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/Bundle.properties @@ -170,7 +170,7 @@ ERR_NoJSFLibraryFound=No Facelets Libraries Found LBL_JsfComponentNotValid=JSF library {0} not set up properly: -ERR_UserTransactionUnavailable=The class javax.transaction.UserTransaction is unavailable. Add an appropriate JAR file in Project Properties > Libraries. +ERR_UserTransactionUnavailable=The class jakarta.transaction.UserTransaction/javax.transaction.UserTransaction is unavailable. Add an appropriate JAR file in Project Properties > Libraries. ERR_JsfTargetChooser_InvalidJsfFolder=The JSF pages folder name is invalid. ERR_JavaTargetChooser_CantUseDefaultPackage=Provide a package name. ERR_JavaTargetChooser_InvalidPackage=The package name is invalid. diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardPanel.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardPanel.java index f9d742af0a86..0deb025d170c 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardPanel.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/CompositeComponentWizardPanel.java @@ -66,6 +66,7 @@ public class CompositeComponentWizardPanel implements WizardDescriptor.Panel, Ch SourceGroup[] folders; private final ChangeSupport changeSupport = new ChangeSupport(this); private static final String WEBAPP_RESOURCES_DIRECTORY = "javax.faces.WEBAPP_RESOURCES_DIRECTORY"; + private static final String WEBAPP_RESOURCES_DIRECTORY_JAKARTA = "jakarta.faces.WEBAPP_RESOURCES_DIRECTORY"; private static final String RESOURCES_FOLDER = "resources"; //NOI18N //TODO how to add [,] to the regular expression? private static final Pattern INVALID_FILENAME_CHARACTERS = Pattern.compile("[`~!@#$%^&*()=+\\|{};:'\",<>/?]"); // NOI18N @@ -309,7 +310,8 @@ public void stateChanged(ChangeEvent e) { if (ddRoot != null) { InitParam[] parameters = ddRoot.getContextParam(); for (InitParam param : parameters) { - if (param.getParamName().contains(WEBAPP_RESOURCES_DIRECTORY)) { + if (param.getParamName().contains(WEBAPP_RESOURCES_DIRECTORY) + || param.getParamName().contains(WEBAPP_RESOURCES_DIRECTORY_JAKARTA)) { relPath = param.getParamValue().trim(); } } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java index fbc658d08fd5..eb3c3f68332b 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesComponentIterator.java @@ -33,6 +33,9 @@ import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; +import org.netbeans.modules.web.api.webmodule.WebModule; +import org.netbeans.modules.web.jsf.api.facesmodel.JsfVersionUtils; +import org.netbeans.modules.web.jsfapi.api.JsfVersion; import org.netbeans.spi.java.project.support.ui.templates.JavaTemplates; import org.netbeans.spi.project.ui.templates.support.Templates; import org.openide.WizardDescriptor; @@ -78,6 +81,18 @@ public Set instantiate(TemplateWizard wizard) throws IOException { if (createSampleCode) { templateProperties.put("sampleCode", Boolean.TRUE); //NOI18N } + Project project = Templates.getProject(wizard); + WebModule webModule = WebModule.getWebModule(project.getProjectDirectory()); + if (webModule != null) { + JsfVersion version = JsfVersionUtils.forWebModule(webModule); + if (version != null && version.isAtLeast(JsfVersion.JSF_3_0)) { + templateProperties.put("jakartaJsfPackages", true); //NOI18N + } else { + templateProperties.put("jakartaJsfPackages", false); //NOI18N + } + } else { + templateProperties.put("jakartaJsfPackages", true); //NOI18N + } DataObject result = dTemplate.createFromTemplate(dataFolder, targetName, templateProperties); return Collections.singleton(result); } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFClientGenerator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFClientGenerator.java index e13314d2c0c6..2422ef4b0423 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFClientGenerator.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFClientGenerator.java @@ -98,6 +98,8 @@ import org.netbeans.modules.j2ee.persistence.wizard.jpacontroller.JpaControllerUtil.TypeInfo; import org.netbeans.modules.j2ee.persistence.wizard.jpacontroller.JpaControllerUtil.MethodInfo; import org.netbeans.modules.web.jsf.api.facesmodel.Application; +import org.netbeans.modules.web.jsf.api.facesmodel.JsfVersionUtils; +import org.netbeans.modules.web.jsfapi.api.JsfVersion; import org.openide.cookies.SaveCookie; import org.openide.filesystems.FileLock; import org.openide.filesystems.FileObject; @@ -164,6 +166,7 @@ public class JSFClientGenerator { public static void generateJSFPages(ProgressContributor progressContributor, ProgressPanel progressPanel, final Project project, final String entityClass, String jsfFolderBase, String jsfFolderName, final String controllerPackage, final String controllerClass, FileObject pkg, FileObject controllerFileObject, final EmbeddedPkSupport embeddedPkSupport, final List entities, final boolean ajaxify, String jpaControllerPackage, FileObject jpaControllerFileObject, FileObject converterFileObject, final boolean genSessionBean, int progressIndex) throws IOException { final boolean isInjection = Util.isContainerManaged(project); //Util.isSupportedJavaEEVersion(project); + final boolean jakartaJsfPackages = JsfVersionUtils.forProject(project).isAtLeast(JsfVersion.JSF_3_0); String simpleControllerName = controllerFileObject.getName(); @@ -229,15 +232,24 @@ public void run(CompilationController controller) throws IOException { if (methodName.startsWith("get")) { Element f = fieldAccess[0] ? JpaControllerUtil.guessField(method) : method; if (f != null) { - if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.Id") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.EmbeddedId")) { + if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.EmbeddedId") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.EmbeddedId") + ) { idGetter.add(ElementHandle.create(method)); idProperty[0] = JpaControllerUtil.getPropNameFromMethod(methodName); - } else if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToOne") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToOne")) { + } else if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.ManyToOne") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToOne") + ) { toOneRelMethods.add(ElementHandle.create(method)); - } else if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToMany") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToMany")) { + } else if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.ManyToMany") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToMany") + ) { toManyRelMethods.add(ElementHandle.create(method)); } } @@ -344,8 +356,11 @@ public void run(CompilationController controller) throws IOException { progressContributor.progress(progressMsg, progressIndex++); progressPanel.setText(progressMsg); - controllerFileObject = generateControllerClass(fieldName, pkg, idGetter.get(0), persistenceUnit, controllerPackage, controllerClass, simpleConverterName, - entityClass, simpleEntityName, toOneRelMethods, toManyRelMethods, isInjection, fieldAccess[0], controllerFileObject, embeddedPkSupport, jpaControllerPackage, jpaControllerClass, genSessionBean, utilPackage); + controllerFileObject = generateControllerClass(fieldName, pkg, idGetter.get(0), + persistenceUnit, controllerPackage, controllerClass, simpleConverterName, + entityClass, simpleEntityName, toOneRelMethods, toManyRelMethods, isInjection, + fieldAccess[0], controllerFileObject, embeddedPkSupport, jpaControllerPackage, + jpaControllerClass, genSessionBean, utilPackage, jakartaJsfPackages); progressMsg = NbBundle.getMessage(JSFClientGenerator.class, "MSG_Progress_Jsf_Now_Generating", simpleConverterName + ".java"); //NOI18N progressContributor.progress(progressMsg, progressIndex++); @@ -353,7 +368,7 @@ public void run(CompilationController controller) throws IOException { final String managedBean = getManagedBeanName(simpleEntityName); converterFileObject = generateConverter(converterFileObject, controllerFileObject, pkg, controllerClass, simpleControllerName, entityClass, - simpleEntityName, idGetter.get(0), managedBean, jpaControllerClass, genSessionBean, isInjection); + simpleEntityName, idGetter.get(0), managedBean, jpaControllerClass, genSessionBean, isInjection, jakartaJsfPackages); final String styleAndScriptTags = "" + (ajaxify ? "<%@ include file=\"/" + JSPF_FOLDER + "/" + JSFCRUD_AJAX_JSPF + "\" %>" : ""); @@ -917,14 +932,29 @@ private static FileObject generateConverter( final String managedBeanName, final String jpaControllerClass, final boolean useSessionBean, - final boolean isInjection) throws IOException { + final boolean isInjection, + final boolean jakartaJsfPackages) throws IOException { final boolean[] embeddable = new boolean[] { false }; final String[] idClassSimpleName = new String[1]; final String[] idPropertyType = new String[1]; final ArrayList paramSetters = new ArrayList(); - final boolean[] isPrimitiveIdPropertyType = new boolean[] { false }; - + final boolean[] isPrimitiveIdPropertyType = new boolean[]{false}; + + final String converterFQN; + final String uiComponentFQN; + final String facesContextFQN; + + if (jakartaJsfPackages) { + converterFQN = "jakarta.faces.convert.Converter"; + uiComponentFQN = "jakarta.faces.component.UIComponent"; + facesContextFQN = "jakarta.faces.context.FacesContext"; + } else { + converterFQN = "javax.faces.convert.Converter"; + uiComponentFQN = "javax.faces.component.UIComponent"; + facesContextFQN = "javax.faces.context.FacesContext"; + } + final String[] idGetterName = new String[1]; JavaSource controllerJavaSource = JavaSource.forFileObject(controllerFileObject); controllerJavaSource.runUserActionTask(new Task() { @@ -994,18 +1024,16 @@ public void run(CompilationController compilationController) throws IOException getAsObjectBody.append(idPropertyType[0] + " id = getId(string);\n"); getAsObjectBody.append(controllerVariable + "\n return controller.getJpaController().find" + (useSessionBean ? "" : simpleEntityName) + "(id);"); } else { - getAsObjectBody.append(createIdFieldDeclaration(idPropertyType[0], "string") + "\n" + getAsObjectBody.append(createIdFieldDeclaration(idPropertyType[0], "string", jakartaJsfPackages) + "\n" + controllerVariable + "\n return controller.getJpaController().find" + (useSessionBean ? "" : simpleEntityName) + "(id);"); } - final MethodModel getAsObject = MethodModel.create( - "getAsObject", + final MethodModel getAsObject = MethodModel.create("getAsObject", "java.lang.Object", getAsObjectBody.toString(), - Arrays.asList( - MethodModel.Variable.create("javax.faces.context.FacesContext", "facesContext"), - MethodModel.Variable.create("javax.faces.component.UIComponent", "component"), + Arrays.asList(MethodModel.Variable.create(facesContextFQN, "facesContext"), + MethodModel.Variable.create(uiComponentFQN, "component"), MethodModel.Variable.create("java.lang.String", "string") ), Collections.emptyList(), @@ -1051,7 +1079,7 @@ public void run(CompilationController compilationController) throws IOException MethodModel setter = paramSetters.get(i); String type = setter.getParameters().get(0).getType(); getIdBody.append("id." + setter.getName() + "(" - + createIdFieldInitialization(type, "params[" + i + "]") + ");\n"); + + createIdFieldInitialization(type, "params[" + i + "]", jakartaJsfPackages) + ");\n"); } if( params==0) { @@ -1131,13 +1159,11 @@ else if (isPrimitive) { + "throw new IllegalArgumentException(\"object \" + object + \" is of type \" + object.getClass().getName() + \"; expected type: " + entityClass +"\");\n}"); - final MethodModel getAsString = MethodModel.create( - "getAsString", + final MethodModel getAsString = MethodModel.create("getAsString", "java.lang.String", getAsStringBody.toString(), - Arrays.asList( - MethodModel.Variable.create("javax.faces.context.FacesContext", "facesContext"), - MethodModel.Variable.create("javax.faces.component.UIComponent", "component"), + Arrays.asList(MethodModel.Variable.create(facesContextFQN, "facesContext"), + MethodModel.Variable.create(uiComponentFQN, "component"), MethodModel.Variable.create("java.lang.Object", "object") ), Collections.emptyList(), @@ -1152,7 +1178,7 @@ public void run(WorkingCopy workingCopy) throws IOException { GenerationUtils generationUtils = GenerationUtils.newInstance(workingCopy); TypeElement converterTypeElement = SourceUtils.getPublicTopLevelElement(workingCopy); ClassTree classTree = workingCopy.getTrees().getTree(converterTypeElement); - ClassTree modifiedClassTree = generationUtils.addImplementsClause(classTree, "javax.faces.convert.Converter"); + ClassTree modifiedClassTree = generationUtils.addImplementsClause(classTree, converterFQN); MethodTree getAsObjectTree = MethodModelSupport.createMethodTree(workingCopy, getAsObject); MethodTree getIdTree = embeddable[0] ? MethodModelSupport.createMethodTree(workingCopy, getId) : null; MethodTree getAsStringTree = MethodModelSupport.createMethodTree(workingCopy, getAsString); @@ -1197,12 +1223,52 @@ private static FileObject generateControllerClass( final String jpaControllerPackage, final String jpaControllerClass, final boolean useSessionBean, - final String utilPackage) throws IOException { + final String utilPackage, + final boolean jakartaJsfPackages + ) throws IOException { final String[] idPropertyType = new String[1]; final String[] idGetterName = new String[1]; final boolean[] embeddable = new boolean[] { false }; - + + final String persistenceFQN; + final String persistenceUnitFQN; + final String annotationResourceFQN; + final String selectItemArrayFQN; + final String facesExceptionFQN; + final String entityManagerFactoryFQN; + final String userTransationFQN; + final String converterFQN; + final String uiComponentFQN; + final String facesContextFQN; + final String rollbackExceptionFQN; + + if (jakartaJsfPackages) { + persistenceFQN = "jakarta.persistence.Persistence"; + persistenceUnitFQN = "jakarta.persistence.PersistenceUnit"; + annotationResourceFQN = "jakarta.annotation.Resource"; + selectItemArrayFQN = "jakarta.faces.model.SelectItem[]"; + facesExceptionFQN = "jakarta.faces.FacesException"; + entityManagerFactoryFQN = "jakarta.persistence.EntityManagerFactory"; + userTransationFQN = "jakarta.transaction.UserTransaction"; + converterFQN = "jakarta.faces.convert.Converter"; + uiComponentFQN = "jakarta.faces.component.UIComponent"; + facesContextFQN = "jakarta.faces.context.FacesContext"; + rollbackExceptionFQN = "jakarta.transaction.RollbackException"; + } else { + persistenceFQN = "javax.persistence.Persistence"; + persistenceUnitFQN = "javax.persistence.PersistenceUnit"; + annotationResourceFQN = "javax.annotation.Resource"; + selectItemArrayFQN = "javax.faces.model.SelectItem[]"; + facesExceptionFQN = "javax.faces.FacesException"; + entityManagerFactoryFQN = "javax.persistence.EntityManagerFactory"; + userTransationFQN = "javax.transaction.UserTransaction"; + converterFQN = "javax.faces.convert.Converter"; + uiComponentFQN = "javax.faces.component.UIComponent"; + facesContextFQN = "javax.faces.context.FacesContext"; + rollbackExceptionFQN = "javax.transaction.RollbackException"; + } + JavaSource controllerJavaSource = JavaSource.forFileObject(controllerFileObject); controllerJavaSource.runModificationTask(new Task() { public void run(WorkingCopy workingCopy) throws IOException { @@ -1262,15 +1328,15 @@ public void run(WorkingCopy workingCopy) throws IOException { AnnotationInfo[] annotations = null; if (isInjection) { annotations = new AnnotationInfo[1]; - annotations[0] = new AnnotationInfo("javax.annotation.Resource"); - modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "utx", "javax.transaction.UserTransaction", privateModifier, null, annotations); + annotations[0] = new AnnotationInfo(annotationResourceFQN); + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "utx", userTransationFQN, privateModifier, null, annotations); if (persistenceUnit == null) { - annotations[0] = new AnnotationInfo("javax.persistence.PersistenceUnit"); + annotations[0] = new AnnotationInfo(persistenceUnitFQN); } else { - annotations[0] = new AnnotationInfo("javax.persistence.PersistenceUnit", new String[]{"unitName"}, new Object[]{persistenceUnit}); + annotations[0] = new AnnotationInfo(persistenceUnitFQN, new String[]{"unitName"}, new Object[]{persistenceUnit}); } - modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "emf", "javax.persistence.EntityManagerFactory", privateModifier, null, annotations); + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "emf", entityManagerFactoryFQN, privateModifier, null, annotations); } @@ -1295,7 +1361,7 @@ public void run(WorkingCopy workingCopy) throws IOException { jpaControllerInit = "FacesContext facesContext = FacesContext.getCurrentInstance();\n" + "jpaController = ("+simpleEntityName+ FACADE_SUFFIX+")facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, \"" + managedBeanName + "Jpa\");\n"; } else { - String parameters = isInjection ? "utx, emf": "javax.persistence.Persistence.createEntityManagerFactory(\"" + persistenceUnit + "\")"; + String parameters = isInjection ? "utx, emf": persistenceFQN + ".createEntityManagerFactory(\"" + persistenceUnit + "\")"; jpaControllerInit = "jpaController = new "+simpleEntityName+"JpaController("+parameters+");\n"; } bodyText = "if (jpaController == null) {\n"+ @@ -1323,14 +1389,14 @@ public void run(WorkingCopy workingCopy) throws IOException { importFqs = (methodThrowsIllegalOrphanExceptionInCreate || methodThrowsIllegalOrphanExceptionInEdit || methodThrowsIllegalOrphanExceptionInDestroy) ? new String[]{ "java.lang.reflect.InvocationTargetException", "java.lang.reflect.Method", - "javax.faces.FacesException", + facesExceptionFQN, utilPackage + ".JsfUtil", jpaExceptionsPackage + ".NonexistentEntityException", illegalOrphanExceptionClass } : new String[]{ "java.lang.reflect.InvocationTargetException", "java.lang.reflect.Method", - "javax.faces.FacesException", + facesExceptionFQN, utilPackage + ".JsfUtil", jpaExceptionsPackage + ".NonexistentEntityException" }; @@ -1340,9 +1406,9 @@ public void run(WorkingCopy workingCopy) throws IOException { importFqs = new String[]{ "java.lang.reflect.InvocationTargetException", "java.lang.reflect.Method", - "javax.faces.FacesException", - "javax.annotation.Resource", - "javax.transaction.UserTransaction", + facesExceptionFQN, + annotationResourceFQN, + userTransationFQN, utilPackage + ".JsfUtil" }; @@ -1358,11 +1424,11 @@ public void run(WorkingCopy workingCopy) throws IOException { bodyText = "return JsfUtil.getSelectItems(getJpaController().find" + (useSessionBean ? "All()" : simpleEntityName + "Entities()")+", false);"; - methodInfo = new MethodInfo("get" + simpleEntityName + "ItemsAvailableSelectMany", publicModifier, "javax.faces.model.SelectItem[]", null, null, null, bodyText, null, null); + methodInfo = new MethodInfo("get" + simpleEntityName + "ItemsAvailableSelectMany", publicModifier, selectItemArrayFQN, null, null, null, bodyText, null, null); modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addMethod(modifiedClassTree, workingCopy, methodInfo); bodyText = "return JsfUtil.getSelectItems(getJpaController().find" + (useSessionBean ? "All()" : simpleEntityName + "Entities()")+", true);"; - methodInfo = new MethodInfo("get" + simpleEntityName + "ItemsAvailableSelectOne", publicModifier, "javax.faces.model.SelectItem[]", null, null, null, bodyText, null, null); + methodInfo = new MethodInfo("get" + simpleEntityName + "ItemsAvailableSelectOne", publicModifier, selectItemArrayFQN, null, null, null, bodyText, null, null); modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addMethod(modifiedClassTree, workingCopy, methodInfo); bodyText = "if (" + fieldName + " == null) {\n" + @@ -1418,7 +1484,7 @@ public void run(WorkingCopy workingCopy) throws IOException { "try {\n" + (useSessionBean ? "Exception transactionException = null;\n" : "")+ "getJpaController().create(" + fieldName + ");\n" + - (useSessionBean ? "try{utx.commit();} catch(javax.transaction.RollbackException ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ + (useSessionBean ? "try{utx.commit();} catch(" + rollbackExceptionFQN + " ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ (useSessionBean ? "if(transactionException==null)" : "") +"JsfUtil.addSuccessMessage(\"" + simpleEntityName + " was successfully created.\");\n" + //NOI18N (useSessionBean ? "else JsfUtil.ensureAddErrorMessage(transactionException, \"A persistence error occurred.\");\n" : "")+ (methodThrowsIllegalOrphanExceptionInCreate ? "} catch (IllegalOrphanException oe) {\n" + @@ -1473,7 +1539,7 @@ public void run(WorkingCopy workingCopy) throws IOException { "try {\n" + (useSessionBean ? "Exception transactionException = null;\n" : "")+ "getJpaController().edit(" + fieldName + ");\n" + - (useSessionBean ? "try{utx.commit();} catch(javax.transaction.RollbackException ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ + (useSessionBean ? "try{utx.commit();} catch(" + rollbackExceptionFQN + " ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ (useSessionBean ? "if(transactionException==null)" : "") +"JsfUtil.addSuccessMessage(\"" + simpleEntityName + " was successfully updated.\");\n" + //NOI18N (useSessionBean ? "else JsfUtil.ensureAddErrorMessage(transactionException, \"A persistence error occurred.\");\n" : "")+ (methodThrowsIllegalOrphanExceptionInEdit ? "} catch (IllegalOrphanException oe) {\n" + @@ -1496,14 +1562,14 @@ public void run(WorkingCopy workingCopy) throws IOException { bodyText = "String idAsString = JsfUtil.getRequestParameter(\"jsfcrud.current" + simpleEntityName + "\");\n" + - (embeddable[0] ? simpleIdPropertyType + " id = converter.getId(idAsString);" : createIdFieldDeclaration(idPropertyType[0], "idAsString")) + + (embeddable[0] ? simpleIdPropertyType + " id = converter.getId(idAsString);" : createIdFieldDeclaration(idPropertyType[0], "idAsString", jakartaJsfPackages)) + "\n"; bodyText += (useSessionBean ? "try{utx.begin();} catch( Exception ex ){}\n" : "")+ "try {\n" + (useSessionBean ? "Exception transactionException = null;\n" : "")+ "getJpaController()."+(useSessionBean ? "remove(getJpaController().find(id))" : "destroy(id)")+";\n" + - (useSessionBean ? "try{utx.commit();} catch(javax.transaction.RollbackException ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ + (useSessionBean ? "try{utx.commit();} catch(" + rollbackExceptionFQN + " ex){transactionException = ex;} catch( Exception ex ){}\n" : "")+ (useSessionBean ? "if(transactionException==null)" : "") +"JsfUtil.addSuccessMessage(\"" + simpleEntityName + " was successfully deleted.\");\n" + //NOI18N (useSessionBean ? "else JsfUtil.ensureAddErrorMessage(transactionException, \"A persistence error occurred.\");\n" : "")+ (methodThrowsIllegalOrphanExceptionInDestroy ? "} catch (IllegalOrphanException oe) {\n" + @@ -1600,10 +1666,10 @@ public void run(WorkingCopy workingCopy) throws IOException { "if (!" + newEntityStringVar + ".equals(" + entityStringVar + ")) {\n" + "createSetup();\n" + "}\n"; - methodInfo = new MethodInfo("validateCreate", publicModifier, "void", null, new String[]{"javax.faces.context.FacesContext", "javax.faces.component.UIComponent", "java.lang.Object"}, new String[]{"facesContext", "component", "value"}, bodyText, null, null); + methodInfo = new MethodInfo("validateCreate", publicModifier, "void", null, new String[]{facesContextFQN, uiComponentFQN, "java.lang.Object"}, new String[]{"facesContext", "component", "value"}, bodyText, null, null); modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addMethod(modifiedClassTree, workingCopy, methodInfo); - methodInfo = new MethodInfo("getConverter", publicModifier, "javax.faces.convert.Converter", null, null, null, "return converter;", null, null); + methodInfo = new MethodInfo("getConverter", publicModifier, converterFQN, null, null, null, "return converter;", null, null); modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addMethod(modifiedClassTree, workingCopy, methodInfo); workingCopy.rewrite(classTree, modifiedClassTree); @@ -1636,23 +1702,23 @@ public void run(WorkingCopy workingCopy) throws IOException { } /** @param valueVar is name of a String variable */ - private static String createIdFieldDeclaration(String idPropertyType, String valueVar) { + private static String createIdFieldDeclaration(String idPropertyType, String valueVar, boolean jakartaJsfPackages) { String idField; if (idPropertyType.startsWith("java.lang.")) { String shortName = idPropertyType.substring(10); - idField = shortName + " id = " + createIdFieldInitialization(idPropertyType, valueVar) + ";"; + idField = shortName + " id = " + createIdFieldInitialization(idPropertyType, valueVar, jakartaJsfPackages) + ";"; } else if (idPropertyType.equals("java.math.BigInteger") || "BigInteger".equals(idPropertyType)) { - idField = "java.math.BigInteger id = " + createIdFieldInitialization(idPropertyType, valueVar) + ";"; + idField = "java.math.BigInteger id = " + createIdFieldInitialization(idPropertyType, valueVar, jakartaJsfPackages) + ";"; } else if (idPropertyType.equals("java.math.BigDecimal") || "BigDecimal".equals(idPropertyType)) { - idField = "java.math.BigDecimal id = " + createIdFieldInitialization(idPropertyType, valueVar) + ";"; + idField = "java.math.BigDecimal id = " + createIdFieldInitialization(idPropertyType, valueVar, jakartaJsfPackages) + ";"; } else { - idField = idPropertyType + " id = " + createIdFieldInitialization(idPropertyType, valueVar) + ";"; + idField = idPropertyType + " id = " + createIdFieldInitialization(idPropertyType, valueVar, jakartaJsfPackages) + ";"; } return idField; } /** @param valueVar is name of a String variable */ - private static String createIdFieldInitialization(String idPropertyType, String valueVar) { + private static String createIdFieldInitialization(String idPropertyType, String valueVar, boolean jakartaJsfPackages) { String idField; //PENDING cannot assume that key type is Integer, Long, String, int or long if ("char".equals(idPropertyType)) { @@ -1675,9 +1741,15 @@ private static String createIdFieldInitialization(String idPropertyType, String } else if (CONVERTED_TYPES.contains(idPropertyType)) { idField = "new " + idPropertyType + "(" + valueVar + ")"; } else { - idField = "(" + idPropertyType + ") javax.faces.context.FacesContext.getCurrentInstance().getApplication().\n" - + "createConverter(" + idPropertyType + ".class).getAsObject(FacesContext.\n" - + "getCurrentInstance(), null, " + valueVar + ")"; + if(jakartaJsfPackages) { + idField = "(" + idPropertyType + ") jakarta.faces.context.FacesContext.getCurrentInstance().getApplication().\n" + + "createConverter(" + idPropertyType + ".class).getAsObject(FacesContext.\n" + + "getCurrentInstance(), null, " + valueVar + ")"; + } else { + idField = "(" + idPropertyType + ") javax.faces.context.FacesContext.getCurrentInstance().getApplication().\n" + + "createConverter(" + idPropertyType + ".class).getAsObject(FacesContext.\n" + + "getCurrentInstance(), null, " + valueVar + ")"; + } } return idField; } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java index 049c2e40fc9e..b52af6591c3c 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/ManagedBeanIterator.java @@ -165,21 +165,26 @@ public Set instantiate(TemplateWizard wizard) throws IOException { Map templateProperties = new HashMap(); String targetName = Templates.getTargetName(wizard); boolean isCdiEnabled = false; + boolean jakartaJsfPackages; if(JSFUtils.isJakartaEE9Plus(wizard)) { org.netbeans.modules.jakarta.web.beans.CdiUtil cdiUtil = project.getLookup().lookup(org.netbeans.modules.jakarta.web.beans.CdiUtil.class); if(cdiUtil != null && cdiUtil.isCdiEnabled()){ isCdiEnabled = true; } + templateProperties.put("jakartaJsfPackages", true); + jakartaJsfPackages = true; } else { org.netbeans.modules.web.beans.CdiUtil cdiUtil = project.getLookup().lookup(org.netbeans.modules.web.beans.CdiUtil.class); if(cdiUtil != null && cdiUtil.isCdiEnabled()){ isCdiEnabled = true; } + templateProperties.put("jakartaJsfPackages", false); + jakartaJsfPackages = false; } if (isCdiEnabled) { templateProperties.put("cdiEnabled", true); templateProperties.put("classAnnotation", "@Named(value=\"" + beanName + "\")"); //NOI18N - templateProperties.put("scope", ScopeEntry.getFor(scope)); //NOI18N + templateProperties.put("scope", ScopeEntry.getFor(scope, jakartaJsfPackages)); //NOI18N NamedScope namedScope = (NamedScope) scope; switch (namedScope) { case SESSION: @@ -196,7 +201,7 @@ public Set instantiate(TemplateWizard wizard) throws IOException { } else { templateProperties.put("classAnnotation", "@ManagedBean(name=\"" + beanName + "\")"); //NOI18N } - templateProperties.put("scope", ScopeEntry.getFor(scope)); //NOI18N + templateProperties.put("scope", ScopeEntry.getFor(scope, jakartaJsfPackages)); //NOI18N } dobj = dTemplate.createFromTemplate(df, targetName, templateProperties); } else { @@ -374,13 +379,13 @@ public String getParameters() { return parameters; } - private static ScopeEntry getFor(Object scope) { + private static ScopeEntry getFor(Object scope, boolean jakartaJsfPackages) { if (scope instanceof Scope) { Scope typedScope = (Scope) scope; - return new ScopeEntry(FACES_SCOPE.get(typedScope), getScopeImport(typedScope)); + return new ScopeEntry(FACES_SCOPE.get(typedScope), getScopeImport(typedScope, jakartaJsfPackages)); } else { NamedScope typedScope = (NamedScope) scope; - ScopeEntry se = new ScopeEntry(NAMED_SCOPE.get(typedScope), getScopeImport(typedScope)); + ScopeEntry se = new ScopeEntry(NAMED_SCOPE.get(typedScope), getScopeImport(typedScope, jakartaJsfPackages)); if (typedScope == NamedScope.FLOW) { se.parameters = "\"\""; //NOI18N } @@ -388,18 +393,32 @@ private static ScopeEntry getFor(Object scope) { } } - private static String getScopeImport(Scope scope) { - return "javax.faces.bean." + FACES_SCOPE.get(scope); //NOI18N + private static String getScopeImport(Scope scope, boolean jakartaJsfPackages) { + if(jakartaJsfPackages) { + return "jakarta.faces.bean." + FACES_SCOPE.get(scope); //NOI18N + } else { + return "javax.faces.bean." + FACES_SCOPE.get(scope); //NOI18N + } } - private static String getScopeImport(NamedScope scope) { + private static String getScopeImport(NamedScope scope, boolean jakartaJsfPackages) { String scopeSimpleName = NAMED_SCOPE.get(scope); - if (scope == NamedScope.FLOW) { - return "javax.faces.flow." + scopeSimpleName; //NOI18N - } else if (scope == NamedScope.VIEW) { - return "javax.faces.view." + scopeSimpleName; //NOI18N + if (jakartaJsfPackages) { + if (scope == NamedScope.FLOW) { + return "jakarta.faces.flow." + scopeSimpleName; //NOI18N + } else if (scope == NamedScope.VIEW) { + return "jakarta.faces.view." + scopeSimpleName; //NOI18N + } else { + return "jakarta.enterprise.context." + scopeSimpleName; //NOI18N + } } else { - return "javax.enterprise.context." + scopeSimpleName; //NOI18N + if (scope == NamedScope.FLOW) { + return "javax.faces.flow." + scopeSimpleName; //NOI18N + } else if (scope == NamedScope.VIEW) { + return "javax.faces.view." + scopeSimpleName; //NOI18N + } else { + return "javax.enterprise.context." + scopeSimpleName; //NOI18N + } } } } diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientIterator.java index aa0344849211..80601b48c4d4 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientIterator.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientIterator.java @@ -134,6 +134,7 @@ public Set instantiate(TemplateWizard wizard) throws IOException final FileObject resourcePackageRoot = (sgs.length > 0) ? sgs[0].getRootFolder() : javaPackageRoot; Boolean ajaxifyBoolean = (Boolean) wizard.getProperty(WizardProperties.AJAXIFY_JSF_CRUD); final boolean ajaxify = ajaxifyBoolean == null ? false : ajaxifyBoolean; + final boolean jakartaPersistencePackages = isJakartaPersistencePackages(javaPackageRoot); // add framework to project first: WebModule wm = WebModule.getWebModule(project.getProjectDirectory()); @@ -204,12 +205,12 @@ public void run() throws IOException { Sources srcs = ProjectUtils.getSources(project); SourceGroup sgWeb[] = srcs.getSourceGroups(WebProjectConstants.TYPE_DOC_ROOT); FileObject webRoot = sgWeb[0].getRootFolder(); - generateJsfControllers2(progressContributor, progressPanel, jsfControllerPackageFileObject, controllerPkg, jpaControllerPkg, entities, ajaxify, project, jsfFolder, jpaControllerPackageFileObject, embeddedPkSupport, genSessionBean, jpaProgressStepCount, webRoot, bundleName, javaPackageRoot, resourcePackageRoot, templateStyle); + generateJsfControllers2(progressContributor, progressPanel, jsfControllerPackageFileObject, controllerPkg, jpaControllerPkg, entities, ajaxify, project, jsfFolder, jpaControllerPackageFileObject, embeddedPkSupport, genSessionBean, jpaProgressStepCount, webRoot, bundleName, javaPackageRoot, resourcePackageRoot, templateStyle, jakartaPersistencePackages); PersistenceUtils.logUsage(PersistenceClientIterator.class, "USG_PERSISTENCE_JSF", new Object[]{entities.size(), preferredLanguage != null ? preferredLanguage.getName() : null}); } else { - generateJsfControllers(progressContributor, progressPanel, jsfControllerPackageFileObject, controllerPkg, jpaControllerPkg, entities, ajaxify, project, jsfFolder, jpaControllerPackageFileObject, embeddedPkSupport, genSessionBean, jpaProgressStepCount); + generateJsfControllers(progressContributor, progressPanel, jsfControllerPackageFileObject, controllerPkg, jpaControllerPkg, entities, ajaxify, project, jsfFolder, jpaControllerPackageFileObject, embeddedPkSupport, genSessionBean, jpaProgressStepCount, jakartaPersistencePackages); PersistenceUtils.logUsage(PersistenceClientIterator.class, "USG_PERSISTENCE_JSF", new Object[]{entities.size(), preferredLanguage != null ? preferredLanguage.getName() : null}); @@ -262,6 +263,15 @@ public void run() { return Collections.singleton(DataFolder.findFolder(javaPackageRoot)); } + private static boolean isJakartaPersistencePackages(final FileObject javaPackageRoot) { + for (ClassPath.Entry entry : ClassPath.getClassPath(javaPackageRoot, ClassPath.COMPILE).entries()) { + if(entry.includes("jakarta/persistence/Entity.class")) { + return true; + } + } + return false; + } + private static int getProgressStepCount(boolean ajaxify, boolean jsf2Generator) { int count = jsf2Generator ? UTIL_CLASS_NAMES2.length+1+1 : UTIL_CLASS_NAMES.length+2; //2 "pre" messages (see generateJsfControllers) before generating util classes and controller/converter classes if (ajaxify) { @@ -270,7 +280,14 @@ private static int getProgressStepCount(boolean ajaxify, boolean jsf2Generator) return count; } - private static void generateJsfControllers(ProgressContributor progressContributor, final ProgressPanel progressPanel, FileObject targetFolder, String controllerPkg, String jpaControllerPkg, List entities, boolean ajaxify, Project project, String jsfFolder, FileObject jpaControllerPackageFileObject, JpaControllerUtil.EmbeddedPkSupport embeddedPkSupport, boolean genSessionBean, int progressIndex) throws IOException { + private static void generateJsfControllers( + ProgressContributor progressContributor, final ProgressPanel progressPanel, + FileObject targetFolder, String controllerPkg, String jpaControllerPkg, + List entities, boolean ajaxify, Project project, String jsfFolder, + FileObject jpaControllerPackageFileObject, + JpaControllerUtil.EmbeddedPkSupport embeddedPkSupport, + boolean genSessionBean, int progressIndex, boolean jakartaPersistencePackages + ) throws IOException { String progressMsg = NbBundle.getMessage(PersistenceClientIterator.class, "MSG_Progress_Jsf_Util_Pre"); //NOI18N progressContributor.progress(progressMsg, progressIndex++); progressPanel.setText(progressMsg); @@ -286,7 +303,13 @@ private static void generateJsfControllers(ProgressContributor progressContribut progressMsg = NbBundle.getMessage(PersistenceClientIterator.class, "MSG_Progress_Jsf_Now_Generating", UTIL_CLASS_NAMES[i] + "."+JAVA_EXT); //NOI18N progressContributor.progress(progressMsg, progressIndex++); progressPanel.setText(progressMsg); - String content = JpaControllerUtil.readResource(PersistenceClientIterator.class.getClassLoader().getResourceAsStream(JSFClientGenerator.RESOURCE_FOLDER + UTIL_CLASS_NAMES[i] + ".java.txt"), "UTF-8"); //NOI18N + String suffix; + if(jakartaPersistencePackages) { + suffix = ".jakarta.java.txt"; + } else { + suffix = ".java.txt"; + } + String content = JpaControllerUtil.readResource(PersistenceClientIterator.class.getClassLoader().getResourceAsStream(JSFClientGenerator.RESOURCE_FOLDER + UTIL_CLASS_NAMES[i] + suffix), "UTF-8"); //NOI18N content = content.replace("__PACKAGE__", utilPackage); FileObject target = FileUtil.createData(utilFolder, UTIL_CLASS_NAMES[i] + "."+JAVA_EXT);//NOI18N String projectEncoding = JpaControllerUtil.getProjectEncodingAsString(project, target); @@ -420,7 +443,9 @@ private static void generateJsfControllers2( String bundleName, FileObject javaPackageRoot, FileObject resourcePackageRoot, - String templateStyle) throws IOException { + String templateStyle, + boolean jakartaPersistencePackages + ) throws IOException { String progressMsg; String bundleVar = generateBundleVarName(bundleName); @@ -443,6 +468,17 @@ private static void generateJsfControllers2( HashMap params = new HashMap(); params.put("packageName", utilPackage); params.put("comment", Boolean.FALSE); // NOI18N + WebModule webModule = WebModule.getWebModule(project.getProjectDirectory()); + if (webModule != null) { + JsfVersion version = JsfVersionUtils.forWebModule(webModule); + if (version != null && version.isAtLeast(JsfVersion.JSF_3_0)) { + params.put("jakartaJsfPackages", true); //NOI18N + } else { + params.put("jakartaJsfPackages", false); //NOI18N + } + } else { + params.put("jakartaJsfPackages", true); //NOI18N + } JSFPaletteUtilities.expandJSFTemplate(tableTemplate, params, target); } else { progressContributor.progress(progressIndex++); @@ -515,6 +551,15 @@ private static void generateJsfControllers2( params.put("entityClassName", simpleClassName); params.put("comment", Boolean.FALSE); // NOI18N params.put("bundle", bundleName); // NOI18N + params.put("jakartaPersistencePackages", jakartaPersistencePackages); // NOI18N + WebModule wm = WebModule.getWebModule(project.getProjectDirectory()); + JsfVersion jsfVersion = JsfVersionUtils.forWebModule(wm); + if(jsfVersion.isAtLeast(JsfVersion.JSF_3_0)) { + params.put("jakartaJsfPackages", true); // NOI18N + } else { + params.put("jakartaJsfPackages", false); // NOI18N + } + boolean isInjected = Util.isContainerManaged(project); if (!genSessionBean && isInjected) { params.put("isInjected", true); //NOI18N diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientSetupPanelVisual.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientSetupPanelVisual.java index a1c8b87206ff..700c3056edef 100644 --- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientSetupPanelVisual.java +++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/PersistenceClientSetupPanelVisual.java @@ -439,8 +439,12 @@ boolean valid(WizardDescriptor wizard) { Class.forName("javax.transaction.UserTransaction", false, cl); } catch (ClassNotFoundException cnfe) { - wizard.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, NbBundle.getMessage(PersistenceClientSetupPanelVisual.class, "ERR_UserTransactionUnavailable")); - return false; + try { + Class.forName("jakarta.transaction.UserTransaction", false, cl); + } catch (ClassNotFoundException cnfe2) { + wizard.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, NbBundle.getMessage(PersistenceClientSetupPanelVisual.class, "ERR_UserTransactionUnavailable")); + return false; + } } catch (UnsupportedClassVersionError ucve) { Logger.getLogger(PersistenceClientSetupPanelVisual.class.getName()).log(Level.WARNING, ucve.toString()); diff --git a/java/j2ee.persistence/nbproject/project.properties b/java/j2ee.persistence/nbproject/project.properties index 65812fbd2a42..a934d8f26bb3 100644 --- a/java/j2ee.persistence/nbproject/project.properties +++ b/java/j2ee.persistence/nbproject/project.properties @@ -27,6 +27,7 @@ test.unit.run.cp.extra=\ ${j2ee.persistence.dir}/modules/ext/eclipselink/org.eclipse.persistence.jpa.jpql-2.7.12.jar:\ ${j2ee.persistence.dir}/modules/ext/eclipselink/jakarta.persistence-2.2.3.jar:\ ${j2eeserver.dir}/modules/ext/jsr88javax.jar:\ + ${j2eeserver.dir}/modules/ext/javaee-api-8.0.jar:\ ${masterfs.dir}/modules/org-netbeans-modules-masterfs.jar sigtest.gen.fail.on.error=false diff --git a/java/j2ee.persistence/nbproject/project.xml b/java/j2ee.persistence/nbproject/project.xml index e1bff9937c4e..d29245e5fd01 100644 --- a/java/j2ee.persistence/nbproject/project.xml +++ b/java/j2ee.persistence/nbproject/project.xml @@ -580,6 +580,11 @@ org.netbeans.modules.java.editor + + org.netbeans.modules.java.j2seplatform + + + org.netbeans.modules.java.source @@ -593,6 +598,9 @@ + + org.netbeans.modules.parsing.nb + org.netbeans.modules.projectapi.nb @@ -603,18 +611,15 @@ org.openide.filesystems - org.openide.util.ui + org.openide.util.lookup - org.openide.util.lookup + org.openide.util.ui - - org.netbeans.modules.parsing.nb - diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/spi/entitymanagergenerator/EntityManagerGenerationStrategySupport.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/spi/entitymanagergenerator/EntityManagerGenerationStrategySupport.java index 062b750f78c9..05dbeb2a1ced 100644 --- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/spi/entitymanagergenerator/EntityManagerGenerationStrategySupport.java +++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/spi/entitymanagergenerator/EntityManagerGenerationStrategySupport.java @@ -261,14 +261,16 @@ protected String generateCallLines(String emName) { } protected VariableTree createUserTransaction(){ - return getTreeMaker().Variable( + VariableTree result = getTreeMaker().Variable( getTreeMaker().Modifiers( - Collections.singleton(Modifier.PRIVATE), - Collections.singletonList(getGenUtils().createAnnotation(RESOURCE_FQN)) + Collections.singleton(Modifier.PRIVATE), + Collections.singletonList(getGenUtils().createAnnotation(RESOURCE_FQN)) ), "utx", //NOI18N getTreeMaker().Identifier(USER_TX_FQN), null); + result = (VariableTree) importFQNs(result); + return result; } protected VariableTree createEntityManagerFactory(String name){ diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerGenerator.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerGenerator.java index 5944de106902..73bb90d728a5 100644 --- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerGenerator.java +++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerGenerator.java @@ -35,6 +35,7 @@ import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Types; +import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.source.ClasspathInfo; import org.netbeans.api.java.source.CompilationController; import org.netbeans.api.java.source.ElementHandle; @@ -75,7 +76,7 @@ public class JpaControllerGenerator { * @param embeddedPkSupport * @throws IOException */ - public static void generateJpaController(Project project, final String entityClass, final String controllerClass, String exceptionPackage, FileObject pkg, FileObject controllerFileObject, final EmbeddedPkSupport embeddedPkSupport) throws IOException { + public static void generateJpaController(Project project, final String entityClass, final String controllerClass, String exceptionPackage, FileObject pkg, FileObject controllerFileObject, final EmbeddedPkSupport embeddedPkSupport) throws IOException { final boolean isInjection = Util.isContainerManaged(project); final String simpleEntityName = JpaControllerUtil.simpleClassName(entityClass); String persistenceUnit = Util.getPersistenceUnitAsString(project, entityClass); @@ -86,6 +87,7 @@ public static void generateJpaController(Project project, final String entityCla final List> toOneRelMethods = new ArrayList<>(); final List> toManyRelMethods = new ArrayList<>(); final boolean[] fieldAccess = new boolean[] { false }; + final boolean jakartaPersistencePackages = isJakartaPersistenceNs(pkg); //detect access type final ClasspathInfo classpathInfo = ClasspathInfo.create(pkg); @@ -101,14 +103,23 @@ public static void generateJpaController(Project project, final String entityCla if (methodName.startsWith("get")) { Element f = fieldAccess[0] ? JpaControllerUtil.guessField(method) : method; if (f != null) { - if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.Id") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.EmbeddedId")) { + if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.EmbeddedId") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.Id") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.EmbeddedId") + ) { idGetter.add(ElementHandle.create(method)); - } else if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToOne") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToOne")) { + } else if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.ManyToOne") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToOne") + ) { toOneRelMethods.add(ElementHandle.create(method)); - } else if (JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToMany") || - JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToMany")) { + } else if (JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(f, "jakarta.persistence.ManyToMany") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(f, "javax.persistence.ManyToMany") + ) { toManyRelMethods.add(ElementHandle.create(method)); } } @@ -130,9 +141,21 @@ public static void generateJpaController(Project project, final String entityCla controllerFileObject = addImplementsClause(controllerFileObject, controllerClass, "java.io.Serializable"); //NOI18N generateJpaController(fieldName, pkg, idGetter.get(0), persistenceUnit, controllerClass, exceptionPackage, - entityClass, simpleEntityName, toOneRelMethods, toManyRelMethods, isInjection, fieldAccess[0], controllerFileObject, embeddedPkSupport, getPersistenceVersion(project, controllerFileObject)); + entityClass, simpleEntityName, toOneRelMethods, toManyRelMethods, isInjection, fieldAccess[0], + controllerFileObject, embeddedPkSupport, getPersistenceVersion(project, controllerFileObject), + jakartaPersistencePackages + ); } - + + private static boolean isJakartaPersistenceNs(final FileObject javaPackageRoot) { + for (ClassPath.Entry entry : ClassPath.getClassPath(javaPackageRoot, ClassPath.COMPILE).entries()) { + if(entry.includes("jakarta/persistence/Entity.class")) { + return true; + } + } + return false; + } + private static String getPersistenceVersion(Project project, FileObject fo) throws IOException { String version = Persistence.VERSION_1_0; PersistenceScope persistenceScopes[] = PersistenceUtils.getPersistenceScopes(project, fo); @@ -194,7 +217,9 @@ private static FileObject generateJpaController( final boolean isFieldAccess, FileObject controllerFileObject, final EmbeddedPkSupport embeddedPkSupport, - final String version) throws IOException { + final String version, + final boolean jakartaPersistencePackages + ) throws IOException { final String[] idPropertyType = new String[1]; final String[] derivedIdPropertyType = new String[1]; @@ -296,23 +321,40 @@ private static FileObject generateJpaController( List parameterTypes = new ArrayList<>(); List parameterNames = new ArrayList<>(); String body = ""; //NOI18N - boolean isUserTransaction = workingCopy.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.COMPILE).findResource("javax/transaction/UserTransaction.class")!=null; //NOI18N + boolean isUserTransaction = + workingCopy.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.COMPILE).findResource("jakarta/transaction/UserTransaction.class") != null //NOI18N + || workingCopy.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.COMPILE).findResource("javax/transaction/UserTransaction.class") != null; //NOI18N if (isUserTransaction && isInjection) { - modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "utx", "javax.transaction.UserTransaction", privateModifier, null, null); //NOI18N - parameterTypes.add("javax.transaction.UserTransaction"); //NOI18N + if (jakartaPersistencePackages) { + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "utx", "jakarta.transaction.UserTransaction", privateModifier, null, null); //NOI18N + parameterTypes.add("jakarta.transaction.UserTransaction"); //NOI18N + } else { + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "utx", "javax.transaction.UserTransaction", privateModifier, null, null); //NOI18N + parameterTypes.add("javax.transaction.UserTransaction"); //NOI18N + } parameterNames.add("utx"); //NOI18N body = "this.utx = utx;\n"; //NOI18N } - modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "emf", "javax.persistence.EntityManagerFactory", privateModifier, null, null); //NOI18N - parameterTypes.add("javax.persistence.EntityManagerFactory"); //NOI18N + if (jakartaPersistencePackages) { + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "emf", "jakarta.persistence.EntityManagerFactory", privateModifier, null, null); //NOI18N + parameterTypes.add("jakarta.persistence.EntityManagerFactory"); //NOI18N + } else { + modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addVariable(modifiedClassTree, workingCopy, "emf", "javax.persistence.EntityManagerFactory", privateModifier, null, null); //NOI18N + parameterTypes.add("javax.persistence.EntityManagerFactory"); //NOI18N + } parameterNames.add("emf"); //NOI18N body += "this.emf = emf;"; //NOI18N MethodInfo mi = new MethodInfo("", publicModifier, "void", null, parameterTypes.toArray(new String[0]), //NOI18N parameterNames.toArray(new String[0]), body, null, null); modifiedClassTree = JpaControllerUtil.TreeMakerUtils.modifyDefaultConstructor(classTree, modifiedClassTree, workingCopy, mi); - MethodInfo methodInfo = new MethodInfo("getEntityManager", publicModifier, "javax.persistence.EntityManager", null, null, null, "return emf.createEntityManager();", null, null); + MethodInfo methodInfo; + if (jakartaPersistencePackages) { + methodInfo = new MethodInfo("getEntityManager", publicModifier, "jakarta.persistence.EntityManager", null, null, null, "return emf.createEntityManager();", null, null); + } else { + methodInfo = new MethodInfo("getEntityManager", publicModifier, "javax.persistence.EntityManager", null, null, null, "return emf.createEntityManager();", null, null); + } modifiedClassTree = JpaControllerUtil.TreeMakerUtils.addMethod(modifiedClassTree, workingCopy, methodInfo); String bodyText; @@ -330,18 +372,26 @@ private static FileObject generateJpaController( List> allRelMethods = new ArrayList<>(toOneRelMethods); allRelMethods.addAll(toManyRelMethods); - String[] importFqs = {"javax.persistence.Query", - "javax.persistence.EntityNotFoundException" - }; - + List importFqs = new ArrayList<>(); + + if(jakartaPersistencePackages) { + importFqs.add("jakarta.persistence.Query"); + importFqs.add("jakarta.persistence.EntityNotFoundException"); + importFqs.add("jakarta.persistence.criteria.CriteriaQuery"); + importFqs.add("jakarta.persistence.criteria.Root"); + } else { + importFqs.add("javax.persistence.Query"); + importFqs.add("javax.persistence.EntityNotFoundException"); + if(version!=null && !Persistence.VERSION_1_0.equals(version)){//add criteria classes if appropriate + modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, "javax.persistence.criteria.CriteriaQuery"); + modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, "javax.persistence.criteria.Root"); + } + } + for (String importFq : importFqs) { modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, importFq); } - if(version!=null && !Persistence.VERSION_1_0.equals(version)){//add criteria classes if appropriate - modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, "javax.persistence.criteria.CriteriaQuery"); - modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, "javax.persistence.criteria.Root"); - } - + String oldMe = null; // @@ -618,12 +668,7 @@ private static FileObject generateJpaController( } if (collectionTypeClass != null) { //(multiplicity == JpaControllerUtil.REL_TO_MANY) { - importFqs = new String[]{ - collectionTypeClass //"java.util.Collection" - }; - for (String importFq : importFqs) { - modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, importFq); - } + modifiedImportCut = JpaControllerUtil.TreeMakerUtils.createImport(workingCopy, modifiedImportCut, collectionTypeClass); } } else { @@ -875,7 +920,11 @@ private static ExecutableElement findPrimaryKeyGetter(CompilationController cont static boolean isId(ExecutableElement method, boolean isFieldAccess) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId")) { // NOI18N + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.Id") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.EmbeddedId") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId") // NOI18N + ) { return true; } } diff --git a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerUtil.java b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerUtil.java index 7c4cfc01a6cb..95a6ec4a6ab2 100644 --- a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerUtil.java +++ b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/jpacontroller/JpaControllerUtil.java @@ -156,9 +156,17 @@ public static boolean isFieldAccess(TypeElement clazz) { Name qualifiedName = typeElement.getQualifiedName(); whileloop: while (typeElement != null) { - if (isAnnotatedWith(typeElement, "javax.persistence.Entity") || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass")) { // NOI18N + if (isAnnotatedWith(typeElement, "jakarta.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "jakarta.persistence.MappedSuperclass") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass") // NOI18N + ) { for (Element element : typeElement.getEnclosedElements()) { - if (isAnnotatedWith(element, "javax.persistence.Id") || isAnnotatedWith(element, "javax.persistence.EmbeddedId")) { + if (isAnnotatedWith(element, "jakarta.persistence.Id") + || isAnnotatedWith(element, "jakarta.persistence.EmbeddedId") + || isAnnotatedWith(element, "javax.persistence.Id") + || isAnnotatedWith(element, "javax.persistence.EmbeddedId") + ) { if (ElementKind.FIELD == element.getKind()) { fieldAccess = true; } @@ -277,16 +285,25 @@ public static String getPropNameFromMethod(String name) { } public static boolean isEmbeddableClass(TypeElement typeElement) { - return JpaControllerUtil.isAnnotatedWith(typeElement, "javax.persistence.Embeddable"); + return JpaControllerUtil.isAnnotatedWith(typeElement, "jakarta.persistence.Embeddable") + || JpaControllerUtil.isAnnotatedWith(typeElement, "javax.persistence.Embeddable"); } public static int isRelationship(ExecutableElement method, boolean isFieldAccess) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.OneToOne") || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.ManyToOne")) { + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.ManyToOne") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.OneToOne") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.ManyToOne") + ) { return REL_TO_ONE; } - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.OneToMany") || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.ManyToMany")) { + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.ManyToMany") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.OneToMany") + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.ManyToMany") + ) { return REL_TO_MANY; } } @@ -308,7 +325,19 @@ public static ExecutableElement getOtherSideOfRelation(CompilationController con //try to find a mappedBy annotation element on the possiblyAnnotatedElement Element possiblyAnnotatedElement = isFieldAccess ? JpaControllerUtil.guessField(executableElement) : executableElement; String mappedBy = null; - AnnotationMirror persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "javax.persistence.OneToOne"); //NOI18N" + AnnotationMirror persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "jakarta.persistence.OneToOne"); //NOI18N" + if (persistenceAnnotation == null) { + persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "jakarta.persistence.OneToMany"); //NOI18N" + } + if (persistenceAnnotation == null) { + persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "jakarta.persistence.ManyToOne"); //NOI18N" + } + if (persistenceAnnotation == null) { + persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "jakarta.persistence.ManyToMany"); //NOI18N" + } + if(persistenceAnnotation == null) { + persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "javax.persistence.OneToOne"); //NOI18N" + } if (persistenceAnnotation == null) { persistenceAnnotation = JpaControllerUtil.findAnnotation(possiblyAnnotatedElement, "javax.persistence.OneToMany"); //NOI18N" } @@ -374,7 +403,10 @@ public static boolean isFieldOptionalAndNullable(ExecutableElement method, boole if (fieldElement == null) { fieldElement = method; } - String[] fieldAnnotationFqns = {"javax.persistence.ManyToOne", "javax.persistence.OneToOne", "javax.persistence.Basic"}; + String[] fieldAnnotationFqns = { + "jakarta.persistence.ManyToOne", "jakarta.persistence.OneToOne", "jakarta.persistence.Basic", + "javax.persistence.ManyToOne", "javax.persistence.OneToOne", "javax.persistence.Basic" + }; Boolean isFieldOptionalBoolean = findAnnotationValueAsBoolean(fieldElement, fieldAnnotationFqns, "optional"); if (isFieldOptionalBoolean != null) { isFieldOptional = isFieldOptionalBoolean; @@ -383,17 +415,25 @@ public static boolean isFieldOptionalAndNullable(ExecutableElement method, boole return false; } //field is optional - fieldAnnotationFqns = new String[]{"javax.persistence.Column", "javax.persistence.JoinColumn"}; + fieldAnnotationFqns = new String[]{ + "jakarta.persistence.Column", "jakarta.persistence.JoinColumn", + "javax.persistence.Column", "javax.persistence.JoinColumn" + }; isFieldNullable = findAnnotationValueAsBoolean(fieldElement, fieldAnnotationFqns, "nullable"); if (isFieldNullable != null) { return isFieldNullable; } //new ballgame boolean result = true; - AnnotationMirror fieldAnnotation = JpaControllerUtil.findAnnotation(fieldElement, "javax.persistence.JoinColumns"); //NOI18N + AnnotationMirror fieldAnnotation = JpaControllerUtil.findAnnotation(fieldElement, "jakarta.persistence.JoinColumns"); //NOI18N + if(fieldAnnotation == null) { + fieldAnnotation = JpaControllerUtil.findAnnotation(fieldElement, "javax.persistence.JoinColumns"); //NOI18N + } if (fieldAnnotation != null) { //all joinColumn annotations must indicate nullable = false to return a false result - List joinColumnAnnotations = JpaControllerUtil.findNestedAnnotations(fieldAnnotation, "javax.persistence.JoinColumn"); + List joinColumnAnnotations = new ArrayList<>(); + joinColumnAnnotations.addAll(JpaControllerUtil.findNestedAnnotations(fieldAnnotation, "jakarta.persistence.JoinColumn")); + joinColumnAnnotations.addAll(JpaControllerUtil.findNestedAnnotations(fieldAnnotation, "javax.persistence.JoinColumn")); for (AnnotationMirror joinColumnAnnotation : joinColumnAnnotations) { String columnNullableValue = JpaControllerUtil.findAnnotationValueAsString(joinColumnAnnotation, "nullable"); //NOI18N if (columnNullableValue != null) { @@ -439,9 +479,17 @@ public static boolean haveId(final TypeElement clazz) { boolean idDetected = false; TypeElement typeElement = clazz; while (typeElement != null && !idDetected) { - if (isAnnotatedWith(typeElement, "javax.persistence.Entity") || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass")) { // NOI18N + if (isAnnotatedWith(typeElement, "jakarta.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "jakarta.persistence.MappedSuperclass") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass") // NOI18N + ) { for (Element element : typeElement.getEnclosedElements()) { - if (isAnnotatedWith(element, "javax.persistence.Id") || isAnnotatedWith(element, "javax.persistence.EmbeddedId")) { + if (isAnnotatedWith(element, "jakarta.persistence.Id") // NOI18N + || isAnnotatedWith(element, "jakarta.persistence.EmbeddedId") // NOI18N + || isAnnotatedWith(element, "javax.persistence.Id") // NOI18N + || isAnnotatedWith(element, "javax.persistence.EmbeddedId") // NOI18N + ) { idDetected = true; } } @@ -458,7 +506,11 @@ public static ExecutableElement getIdGetter(final boolean isFieldAccess, final T if (methodName.startsWith("get")) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId")) { + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.Id") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.EmbeddedId") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.Id") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.EmbeddedId") // NOI18N + ) { return method; } } @@ -471,7 +523,9 @@ public static ExecutableElement getIdGetter(final boolean isFieldAccess, final T public static boolean isGenerated(ExecutableElement method, boolean isFieldAccess) { Element element = isFieldAccess ? JpaControllerUtil.guessField(method) : method; if (element != null) { - if (JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.GeneratedValue")) { // NOI18N + if (JpaControllerUtil.isAnnotatedWith(element, "jakarta.persistence.GeneratedValue") // NOI18N + || JpaControllerUtil.isAnnotatedWith(element, "javax.persistence.GeneratedValue") // NOI18N + ) { return true; } } @@ -535,7 +589,11 @@ public static ExecutableElement[] getEntityMethods(TypeElement entityTypeElement List result = new LinkedList<>(); TypeElement typeElement = entityTypeElement; while (typeElement != null) { - if (isAnnotatedWith(typeElement, "javax.persistence.Entity") || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass")) { // NOI18N + if (isAnnotatedWith(typeElement, "jakarta.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "jakarta.persistence.MappedSuperclass") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.Entity") // NOI18N + || isAnnotatedWith(typeElement, "javax.persistence.MappedSuperclass") // NOI18N + ) { result.addAll(ElementFilter.methodsIn(typeElement.getEnclosedElements())); } typeElement = getSuperclassTypeElement(typeElement); @@ -714,7 +772,10 @@ public boolean isRedundantWithPkFields(ExecutableElement relationshipMethod) { if (f != null) { int a = -1; AnnotationMirror columnAnnotation = null; - String[] columnAnnotationFqns = {"javax.persistence.EmbeddedId", "javax.persistence.JoinColumns", "javax.persistence.JoinColumn", "javax.persistence.Column"}; //NOI18N + String[] columnAnnotationFqns = { + "jakarta.persistence.EmbeddedId", "jakarta.persistence.JoinColumns", "jakarta.persistence.JoinColumn", "jakarta.persistence.Column", //NOI18N + "javax.persistence.EmbeddedId", "javax.persistence.JoinColumns", "javax.persistence.JoinColumn", "javax.persistence.Column" //NOI18N + }; for (int i = 0; i < columnAnnotationFqns.length; i++) { String columnAnnotationFqn = columnAnnotationFqns[i]; AnnotationMirror columnAnnotationMirror = findAnnotation(f, columnAnnotationFqn); @@ -724,16 +785,21 @@ public boolean isRedundantWithPkFields(ExecutableElement relationshipMethod) { break; } } - if (a == 0) { + if (a == 0 || a == 4) { //populate pkAccessorMethodToColumnName and columnNameToAccessorString populateMapsForEmbedded(method); } else if ( (a == 1 || a == 2) && + (isAnnotatedWith(f, "jakarta.persistence.OneToOne") || + isAnnotatedWith(f, "jakarta.persistence.ManyToOne")) ) { + //populate joinColumnNameToRelationshipMethod, relationshipMethodToJoinColumnNames, and joinColumnNameToReferencedColumnName + populateJoinColumnNameMaps(method, columnAnnotationFqns[a], columnAnnotation); + } else if ( (a == 5 || a == 6) && (isAnnotatedWith(f, "javax.persistence.OneToOne") || isAnnotatedWith(f, "javax.persistence.ManyToOne")) ) { //populate joinColumnNameToRelationshipMethod, relationshipMethodToJoinColumnNames, and joinColumnNameToReferencedColumnName populateJoinColumnNameMaps(method, columnAnnotationFqns[a], columnAnnotation); } - else if (a == 3) { + else if (a == 3 || a == 7) { //populate columnNameToAccessorString String columnName = findAnnotationValueAsString(columnAnnotation, "name"); //NOI18N if (columnName != null) { @@ -788,7 +854,10 @@ private String guessColumnName(ExecutableElement pkMethod){ }//something is missed, may be getter name do not match variable name, see #190854 String pkMethodName = pkMethod.getSimpleName().toString(); String columnName = null; - AnnotationMirror columnAnnotation = findAnnotation(pkFieldElement, "javax.persistence.Column"); //NOI18N + AnnotationMirror columnAnnotation = findAnnotation(pkFieldElement, "jakarta.persistence.Column"); //NOI18N + if(columnAnnotation == null) { + columnAnnotation = findAnnotation(pkFieldElement, "javax.persistence.Column"); //NOI18N + } if (columnAnnotation != null) { columnName = findAnnotationValueAsString(columnAnnotation, "name"); //NOI18N } @@ -807,13 +876,21 @@ private String guessColumnName(ExecutableElement pkMethod){ } private void populateJoinColumnNameMaps(ExecutableElement m, String columnAnnotationFqn, AnnotationMirror columnAnnotation) { - List joinColumnAnnotations; - if ("javax.persistence.JoinColumn".equals(columnAnnotationFqn)) { - joinColumnAnnotations = new ArrayList(); + List joinColumnAnnotations = new ArrayList<>(); + if ("jakarta.persistence.JoinColumn".equals(columnAnnotationFqn)) { //NOI18N + joinColumnAnnotations.add(columnAnnotation); + } + else if ("javax.persistence.JoinColumn".equals(columnAnnotationFqn)) { //NOI18N joinColumnAnnotations.add(columnAnnotation); } - else { //columnAnnotation is a javax.persistence.JoinColumns - joinColumnAnnotations = findNestedAnnotations(columnAnnotation, "javax.persistence.JoinColumn"); //NOI18N + else if ("jakarta.persistence.JoinColumns".equals(columnAnnotationFqn)) { //NOI18N + joinColumnAnnotations.addAll(findNestedAnnotations(columnAnnotation, "jakarta.persistence.JoinColumn")); //NOI18N + } + else if ("javax.persistence.JoinColumns".equals(columnAnnotationFqn)) { + joinColumnAnnotations.addAll(findNestedAnnotations(columnAnnotation, "javax.persistence.JoinColumn")); //NOI18N + } + else { + throw new IllegalStateException("Unsupported annotation: " + columnAnnotationFqn); //NOI18N } for (AnnotationMirror joinColumnAnnotation : joinColumnAnnotations) { String columnName = findAnnotationValueAsString(joinColumnAnnotation, "name"); //NOI18N diff --git a/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerate.pass b/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerate.pass index c26eae8fa463..c993a2ee9fdf 100644 --- a/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerate.pass +++ b/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerate.pass @@ -6,6 +6,7 @@ import java.util.logging.Logger; import javax.naming.Context; import javax.naming.InitialContext; import javax.persistence.EntityManager; +import javax.transaction.UserTransaction; public class Test { @@ -22,7 +23,7 @@ public class Test { * */ try { Context ctx = new InitialContext(); - javax.transaction.UserTransaction utx = (javax.transaction.UserTransaction) ctx.lookup("java:comp/env/UserTransaction"); + UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction"); utx.begin(); EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/LogicalName"); em.persist(object); diff --git a/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerateWithExistingEM.pass b/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerateWithExistingEM.pass index 86e73f425ba2..b188222c2131 100644 --- a/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerateWithExistingEM.pass +++ b/java/j2ee.persistence/test/unit/data/goldenfiles/org/netbeans/modules/j2ee/persistence/action/ContainerManagedJTANonInjectableInWebTest/testGenerateWithExistingEM.pass @@ -7,6 +7,7 @@ import javax.naming.Context; import javax.naming.InitialContext; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import javax.transaction.UserTransaction; public class Test { @@ -25,7 +26,7 @@ public class Test { * */ try { Context ctx = new InitialContext(); - javax.transaction.UserTransaction utx = (javax.transaction.UserTransaction) ctx.lookup("java:comp/env/UserTransaction"); + UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction"); utx.begin(); myEm.joinTransaction(); myEm.persist(object); diff --git a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/sourcetestsupport/ClassPathProviderImpl.java b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/sourcetestsupport/ClassPathProviderImpl.java index 3bf477227396..2929f2749833 100644 --- a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/sourcetestsupport/ClassPathProviderImpl.java +++ b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/sourcetestsupport/ClassPathProviderImpl.java @@ -49,7 +49,11 @@ public ClassPath findClassPath(FileObject file, String type) { if (ClassPath.COMPILE.equals(type)){ try { URL eclipselinkJarUrl = Class.forName("javax.persistence.EntityManager").getProtectionDomain().getCodeSource().getLocation(); - return ClassPathSupport.createClassPath(new URL[]{FileUtil.getArchiveRoot(eclipselinkJarUrl)}); + URL javaEE8ApiJarUrl = Class.forName("javax.annotation.Resource").getProtectionDomain().getCodeSource().getLocation(); + return ClassPathSupport.createClassPath(new URL[]{ + FileUtil.getArchiveRoot(eclipselinkJarUrl), + FileUtil.getArchiveRoot(javaEE8ApiJarUrl) + }); } catch (Exception ex) { throw new RuntimeException(ex); } diff --git a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceUnitDataObjectTest.java b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceUnitDataObjectTest.java index f7b5af8d74df..a79018bcc6b5 100644 --- a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceUnitDataObjectTest.java +++ b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceUnitDataObjectTest.java @@ -52,8 +52,10 @@ public void testAddPersistenceUnit() throws Exception{ persistenceUnit = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_1.PersistenceUnit(); } else if(Persistence.VERSION_2_0.equals(version)) { persistenceUnit = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_0.PersistenceUnit(); - } else { + } else if(Persistence.VERSION_1_0.equals(version)) { persistenceUnit = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit(); + } else { + persistenceUnit = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_3_1.PersistenceUnit(); } persistenceUnit.setName("em3"); diff --git a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java index fa9f2e9be1e0..53d65de108dd 100644 --- a/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java +++ b/java/j2ee.persistence/test/unit/src/org/netbeans/modules/j2ee/persistence/unit/PersistenceValidatorTest.java @@ -55,8 +55,10 @@ public void testValidateNameIsUnique() { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_1.PersistenceUnit(); } else if(Persistence.VERSION_2_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_0.PersistenceUnit(); - } else { + } else if(Persistence.VERSION_1_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit(); + } else { + unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_3_1.PersistenceUnit(); } unit1.setName("name1"); dataObject.addPersistenceUnit(unit1); @@ -71,8 +73,10 @@ public void testValidateNameIsUnique() { unit2 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_1.PersistenceUnit(); } else if(Persistence.VERSION_2_0.equals(version)) { unit2 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_0.PersistenceUnit(); - } else { + } else if(Persistence.VERSION_1_0.equals(version)) { unit2 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit(); + } else { + unit2 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_3_1.PersistenceUnit(); } unit2.setName("name1"); dataObject.addPersistenceUnit(unit2); @@ -103,8 +107,10 @@ public void testValidateExcludeUnlistedClasses(){ unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_1.PersistenceUnit(); } else if(Persistence.VERSION_2_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_0.PersistenceUnit(); - } else { + } else if(Persistence.VERSION_1_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit(); + } else { + unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_3_1.PersistenceUnit(); } unit1.setName("unit1"); unit1.setExcludeUnlistedClasses(true); @@ -137,8 +143,10 @@ public void testValidateJarFiles(){ unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_1.PersistenceUnit(); } else if(Persistence.VERSION_2_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_2_0.PersistenceUnit(); - } else { + } else if(Persistence.VERSION_1_0.equals(version)) { unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit(); + } else { + unit1 = new org.netbeans.modules.j2ee.persistence.dd.persistence.model_3_1.PersistenceUnit(); } unit1.setName("unit1"); unit1.addJarFile("my-jar.jar"); diff --git a/java/j2ee.persistenceapi/nbproject/project.xml b/java/j2ee.persistenceapi/nbproject/project.xml index fac28e9b8173..10e6deac5bd5 100644 --- a/java/j2ee.persistenceapi/nbproject/project.xml +++ b/java/j2ee.persistenceapi/nbproject/project.xml @@ -158,6 +158,11 @@ + + org.netbeans.modules.java.j2seplatform + + + org.netbeans.modules.masterfs diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/AttributesImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/AttributesImpl.java index e89d6b833217..125cf5e02e06 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/AttributesImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/AttributesImpl.java @@ -68,7 +68,11 @@ private AttributesImpl(EntityMappingsImpl mappings, TypeElement typeElement) { break; } Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - if (annByType.get("javax.persistence.Entity") != null || annByType.get("javax.persistence.MappedSuperclass") != null) { // NOI18N + if (annByType.get("jakarta.persistence.Entity") != null // NOI18N + || annByType.get("jakarta.persistence.MappedSuperclass") != null // NOI18N + || annByType.get("javax.persistence.Entity") != null // NOI18N + || annByType.get("javax.persistence.MappedSuperclass") != null) // NOI18N + { hierarchy.add(typeElement); } } @@ -90,24 +94,46 @@ public void handleProperty(Element element, String propertyName) { return; } - AnnotationMirror oneToOneAnnotation = annByType.get("javax.persistence.OneToOne"); // NOI18N - AnnotationMirror oneToManyAnnotation = annByType.get("javax.persistence.OneToMany"); // NOI18N - AnnotationMirror manyToOneAnnotation = annByType.get("javax.persistence.ManyToOne"); // NOI18N - AnnotationMirror manyToManyAnnotation = annByType.get("javax.persistence.ManyToMany"); // NOI18N - AnnotationMirror embeddedIdAnnotation = annByType.get("javax.persistence.EmbeddedId"); // NOI18N + AnnotationMirror oneToOneAnnotation = annByType.get("jakarta.persistence.OneToOne"); // NOI18N + AnnotationMirror oneToManyAnnotation = annByType.get("jakarta.persistence.OneToMany"); // NOI18N + AnnotationMirror manyToOneAnnotation = annByType.get("jakarta.persistence.ManyToOne"); // NOI18N + AnnotationMirror manyToManyAnnotation = annByType.get("jakarta.persistence.ManyToMany"); // NOI18N + AnnotationMirror embeddedIdAnnotation = annByType.get("jakarta.persistence.EmbeddedId"); // NOI18N + + if(oneToManyAnnotation == null) { + oneToOneAnnotation = annByType.get("javax.persistence.OneToOne"); // NOI18N + } + if(oneToManyAnnotation == null) { + oneToManyAnnotation = annByType.get("javax.persistence.OneToMany"); // NOI18N + } + if(manyToOneAnnotation == null) { + manyToOneAnnotation = annByType.get("javax.persistence.ManyToOne"); // NOI18N + } + if(manyToManyAnnotation == null) { + manyToManyAnnotation = annByType.get("javax.persistence.ManyToMany"); // NOI18N + } + if(embeddedIdAnnotation == null) { + embeddedIdAnnotation = annByType.get("javax.persistence.EmbeddedId"); // NOI18N + } AnnotationMirror derivedIdAnnotation = null; if (oneToOneAnnotation != null) { oneToOneList.add(new OneToOneImpl(helper, element, oneToOneAnnotation, propertyName, annByType)); //it may also be part of derived id - derivedIdAnnotation = annByType.get("javax.persistence.Id"); // NOI18N + derivedIdAnnotation = annByType.get("jakarta.persistence.Id"); // NOI18N + if(derivedIdAnnotation == null) { + derivedIdAnnotation = annByType.get("javax.persistence.Id"); // NOI18N + } } else if (oneToManyAnnotation != null) { oneToManyList.add(new OneToManyImpl(helper, element, oneToManyAnnotation, propertyName, annByType)); } else if (manyToOneAnnotation != null) { manyToOneList.add(new ManyToOneImpl(helper, element, manyToOneAnnotation, propertyName, annByType)); //it may also be part of derived id - derivedIdAnnotation = annByType.get("javax.persistence.Id"); // NOI18N + derivedIdAnnotation = annByType.get("jakarta.persistence.Id"); // NOI18N + if(derivedIdAnnotation == null) { + derivedIdAnnotation = annByType.get("javax.persistence.Id"); // NOI18N + } } else if (manyToManyAnnotation != null) { manyToManyList.add(new ManyToManyImpl(helper, element, manyToManyAnnotation, propertyName, annByType)); } else { @@ -115,31 +141,58 @@ public void handleProperty(Element element, String propertyName) { if (embeddedIdAnnotation != null) { embeddedId = new EmbeddedIdImpl(propertyName); } else { - AnnotationMirror versionAnnotation = annByType.get("javax.persistence.Version"); // NOI18N - AnnotationMirror idAnnotation = annByType.get("javax.persistence.Id"); // NOI18N - AnnotationMirror columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N - AnnotationMirror temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + AnnotationMirror versionAnnotation = annByType.get("jakarta.persistence.Version"); // NOI18N + AnnotationMirror idAnnotation = annByType.get("jakarta.persistence.Id"); // NOI18N + AnnotationMirror columnAnnotation = annByType.get("jakarta.persistence.Column"); // NOI18N + AnnotationMirror temporalAnnotation = annByType.get("jakarta.persistence.Temporal"); // NOI18N + if (versionAnnotation == null) { + versionAnnotation = annByType.get("javax.persistence.Version"); // NOI18N + } + if (idAnnotation == null) { + idAnnotation = annByType.get("javax.persistence.Id"); // NOI18N + } + if (columnAnnotation == null) { + columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N + } + if (temporalAnnotation == null) { + temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + } String temporal = temporalAnnotation != null ? EntityMappingsUtilities.getTemporalType(helper, temporalAnnotation) : null; Column column = new ColumnImpl(helper, columnAnnotation, propertyName.toUpperCase()); // NOI18N if (idAnnotation != null) { - AnnotationMirror generatedValueAnnotation = annByType.get("javax.persistence.GeneratedValue"); // NOI18N + AnnotationMirror generatedValueAnnotation = annByType.get("jakarta.persistence.GeneratedValue"); // NOI18N + if(generatedValueAnnotation == null) { + generatedValueAnnotation = annByType.get("javax.persistence.GeneratedValue"); // NOI18N + } GeneratedValue genValue = generatedValueAnnotation != null ? new GeneratedValueImpl(helper, generatedValueAnnotation) : null; idList.add(new IdImpl(propertyName, genValue, column, temporal)); } else if (versionAnnotation != null) { versionList.add(new VersionImpl(propertyName, column, temporal)); } else { - AnnotationMirror basicAnnotation = annByType.get("javax.persistence.Basic"); // NOI18N + AnnotationMirror basicAnnotation = annByType.get("jakarta.persistence.Basic"); // NOI18N + if(basicAnnotation == null) { + basicAnnotation = annByType.get("javax.persistence.Basic"); // NOI18N + } basicList.add(new BasicImpl(helper, basicAnnotation, propertyName, column, temporal)); } } } // if (derivedIdAnnotation != null) { - AnnotationMirror columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N, TODO some annotations may not be valid for derived id and it may not be requires, also need to separate from usual id later(just like embedded ids) to find if exist - AnnotationMirror temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + AnnotationMirror columnAnnotation = annByType.get("jakarta.persistence.Column"); // NOI18N, TODO some annotations may not be valid for derived id and it may not be requires, also need to separate from usual id later(just like embedded ids) to find if exist + if (columnAnnotation == null) { + columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N, TODO some annotations may not be valid for derived id and it may not be requires, also need to separate from usual id later(just like embedded ids) to find if exist + } + AnnotationMirror temporalAnnotation = annByType.get("jakarta.persistence.Temporal"); // NOI18N + if(temporalAnnotation == null) { + temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + } String temporal = temporalAnnotation != null ? EntityMappingsUtilities.getTemporalType(helper, temporalAnnotation) : null; Column column = new ColumnImpl(helper, columnAnnotation, propertyName.toUpperCase()); // NOI18N - AnnotationMirror generatedValueAnnotation = annByType.get("javax.persistence.GeneratedValue"); // NOI18N + AnnotationMirror generatedValueAnnotation = annByType.get("jakarta.persistence.GeneratedValue"); // NOI18N + if(generatedValueAnnotation == null) { + generatedValueAnnotation = annByType.get("javax.persistence.GeneratedValue"); // NOI18N + } GeneratedValue genValue = generatedValueAnnotation != null ? new GeneratedValueImpl(helper, generatedValueAnnotation) : null; IdImpl id = new IdImpl(propertyName, genValue, column, temporal); idList.add(id); diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableAttributesImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableAttributesImpl.java index 1feac0e8fa92..0900578c0b3b 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableAttributesImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableAttributesImpl.java @@ -52,11 +52,20 @@ public void handleProperty(Element element, String propertyName) { return; } - AnnotationMirror columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N - AnnotationMirror temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + AnnotationMirror columnAnnotation = annByType.get("jakarta.persistence.Column"); // NOI18N + if (columnAnnotation == null) { + columnAnnotation = annByType.get("javax.persistence.Column"); // NOI18N + } + AnnotationMirror temporalAnnotation = annByType.get("jakarta.persistence.Temporal"); // NOI18N + if (temporalAnnotation == null) { + temporalAnnotation = annByType.get("javax.persistence.Temporal"); // NOI18N + } String temporal = temporalAnnotation != null ? EntityMappingsUtilities.getTemporalType(helper, temporalAnnotation) : null; Column column = new ColumnImpl(helper, columnAnnotation, propertyName.toUpperCase()); // NOI18N - AnnotationMirror basicAnnotation = annByType.get("javax.persistence.Basic"); // NOI18N + AnnotationMirror basicAnnotation = annByType.get("jakarta.persistence.Basic"); // NOI18N + if (basicAnnotation == null) { + basicAnnotation = annByType.get("javax.persistence.Basic"); // NOI18N + } basicList.add(new BasicImpl(helper, basicAnnotation, propertyName, column, temporal)); } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableImpl.java index edebcf2a7562..92a9c286a10a 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EmbeddableImpl.java @@ -49,7 +49,10 @@ boolean refresh(TypeElement typeElement) { class2 = typeElement.getQualifiedName().toString(); AnnotationModelHelper helper = getHelper(); Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror embeddableAnn = annByType.get("javax.persistence.Embeddable"); // NOI18N + AnnotationMirror embeddableAnn = annByType.get("jakarta.persistence.Embeddable"); // NOI18N + if (embeddableAnn == null) { + embeddableAnn = annByType.get("javax.persistence.Embeddable"); // NOI18N + } return embeddableAnn != null; } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityImpl.java index e1b4c56d5c63..538d14707f4e 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityImpl.java @@ -64,15 +64,21 @@ final boolean refresh(TypeElement typeElement) { class2 = typeElement.getQualifiedName().toString(); AnnotationModelHelper helper = getHelper(); Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror entityAnn = annByType.get("javax.persistence.Entity"); // NOI18N + AnnotationMirror entityAnn = annByType.get("jakarta.persistence.Entity"); // NOI18N if (entityAnn == null) { - return false; + entityAnn = annByType.get("javax.persistence.Entity"); // NOI18N + if(entityAnn == null) { + return false; + } } AnnotationParser parser = AnnotationParser.create(helper); parser.expectString("name", AnnotationParser.defaultValue(typeElement.getSimpleName().toString())); // NOI18N ParseResult parseResult = parser.parse(entityAnn); // NOI18N name = parseResult.get("name", String.class); // NOI18N - AnnotationMirror entityAcc = annByType.get("javax.persistence.Access"); // NOI18N + AnnotationMirror entityAcc = annByType.get("jakarta.persistence.Access"); // NOI18N + if(entityAcc == null) { + entityAcc = annByType.get("javax.persistence.Access"); // NOI18N + } if (entityAcc != null) { parser = AnnotationParser.create(helper); parser.expect("value", new ValueProvider() { @@ -93,14 +99,19 @@ public Object getDefaultValue() { // when a client looking the entity mapped to a specific table iterates // over all entities calling getTable(). // XXX locale? - AnnotationMirror tableAnn = annByType.get("javax.persistence.Table");//NOI18N + AnnotationMirror tableAnn = annByType.get("jakarta.persistence.Table"); //NOI18N + if(tableAnn == null) { + tableAnn = annByType.get("javax.persistence.Table"); //NOI18N + } if(tableAnn == null) { TypeMirror superclass = typeElement.getSuperclass(); while(superclass!=null && superclass.getKind() == TypeKind.DECLARED && tableAnn == null) { Element el = ((DeclaredType)superclass).asElement(); Map annotationsByType = helper.getAnnotationsByType( el.getAnnotationMirrors()); - if(annotationsByType.containsKey("javax.persistence.Entity") || annotationsByType.containsKey("javax.persistence.MappedSuperclass")) {//NOI18N - tableAnn = annotationsByType.get("javax.persistence.Table");//NOI18N + if(annotationsByType.containsKey("jakarta.persistence.Entity") || annotationsByType.containsKey("jakarta.persistence.MappedSuperclass")) {//NOI18N + tableAnn = annotationsByType.get("jakarta.persistence.Table"); //NOI18N + } else if(annotationsByType.containsKey("javax.persistence.Entity") || annotationsByType.containsKey("javax.persistence.MappedSuperclass")) {//NOI18N + tableAnn = annotationsByType.get("javax.persistence.Table"); //NOI18N } else { break; } @@ -113,10 +124,16 @@ public Object getDefaultValue() { } table = new TableImpl(helper, tableAnn, name.toUpperCase()); // NOI18N //fill named queries - AnnotationMirror nqsAnn = annByType.get("javax.persistence.NamedQueries");// NOI18N + AnnotationMirror nqsAnn = annByType.get("jakarta.persistence.NamedQueries"); // NOI18N + if(nqsAnn == null) { + nqsAnn = annByType.get("javax.persistence.NamedQueries"); // NOI18N + } ArrayList nqAnn = null; if (nqsAnn == null) { - nqsAnn = annByType.get("javax.persistence.NamedQuery");// NOI18N + nqsAnn = annByType.get("jakarta.persistence.NamedQuery"); // NOI18N + if(nqsAnn == null) { + nqsAnn = annByType.get("javax.persistence.NamedQuery"); // NOI18N + } if (nqsAnn != null) { nqAnn = new ArrayList(); nqAnn.add(nqsAnn); @@ -129,7 +146,9 @@ public Object getDefaultValue() { for (Object val : lst) { if (val instanceof AnnotationMirror) { AnnotationMirror am = (AnnotationMirror) val; - if ("javax.persistence.NamedQuery".equals(am.getAnnotationType().toString())) {//NOI18N + if ("jakarta.persistence.NamedQuery".equals(am.getAnnotationType().toString())) {//NOI18N + nqAnn.add(am); + } else if ("javax.persistence.NamedQuery".equals(am.getAnnotationType().toString())) {//NOI18N nqAnn.add(am); } } @@ -184,9 +203,14 @@ public void setAccess(String value) { } public String getAccess() { - if (accessType != null && accessType.length()>0) { + if (accessType != null && accessType.length() > 0) { //use access type specified by annotation by default, regardless of later fields/properties annitatons - return accessType.equals("javax.persistence.AccessType.PROPERTY") ? PROPERTY_ACCESS : FIELD_ACCESS; + if (accessType.equals("jakarta.persistence.AccessType.PROPERTY") + || accessType.equals("javax.persistence.AccessType.PROPERTY")) { + return PROPERTY_ACCESS; + } else { + return FIELD_ACCESS; + } } else { return getAttributes().hasFieldAccess() ? FIELD_ACCESS : PROPERTY_ACCESS; } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsImpl.java index 5d877ea768a4..bb059df5dc34 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsImpl.java @@ -33,7 +33,6 @@ import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.PersistentObjectManager; import org.netbeans.modules.j2ee.persistence.api.metadata.orm.*; -// @todo: Support JakartaEE public class EntityMappingsImpl implements EntityMappings { private final AnnotationModelHelper helper; @@ -380,6 +379,11 @@ public void handleAnnotation(TypeElement type, Element element, AnnotationMirror result.add(new EntityImpl(helper, EntityMappingsImpl.this, type)); } }); + helper.getAnnotationScanner().findAnnotations("jakarta.persistence.Entity", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new EntityImpl(helper, EntityMappingsImpl.this, type)); + } + }); return result; } @@ -387,6 +391,9 @@ public List createObjects(TypeElement type) { if (helper.hasAnnotation(type.getAnnotationMirrors(), "javax.persistence.Entity")) { // NOI18N return Collections.singletonList(new EntityImpl(helper, EntityMappingsImpl.this, type)); } + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.persistence.Entity")) { // NOI18N + return Collections.singletonList(new EntityImpl(helper, EntityMappingsImpl.this, type)); + } return Collections.emptyList(); } @@ -405,6 +412,11 @@ private final class EmbeddableProvider implements ObjectProvider createInitialObjects() throws InterruptedException { final List result = new ArrayList(); + helper.getAnnotationScanner().findAnnotations("jakarta.persistence.Embeddable", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new EmbeddableImpl(helper, EntityMappingsImpl.this, type)); + } + }); helper.getAnnotationScanner().findAnnotations("javax.persistence.Embeddable", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { result.add(new EmbeddableImpl(helper, EntityMappingsImpl.this, type)); @@ -414,6 +426,9 @@ public void handleAnnotation(TypeElement type, Element element, AnnotationMirror } public List createObjects(TypeElement type) { + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.persistence.Embeddable")) { // NOI18N + return Collections.singletonList(new EmbeddableImpl(helper, EntityMappingsImpl.this, type)); + } if (helper.hasAnnotation(type.getAnnotationMirrors(), "javax.persistence.Embeddable")) { // NOI18N return Collections.singletonList(new EmbeddableImpl(helper, EntityMappingsImpl.this, type)); } @@ -435,6 +450,11 @@ private final class MappedSuperclassProvider implements ObjectProvider createInitialObjects() throws InterruptedException { final List result = new ArrayList(); + helper.getAnnotationScanner().findAnnotations("jakarta.persistence.MappedSuperclass", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N + public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { + result.add(new MappedSuperclassImpl(helper, EntityMappingsImpl.this, type)); + } + }); helper.getAnnotationScanner().findAnnotations("javax.persistence.MappedSuperclass", AnnotationScanner.TYPE_KINDS, new AnnotationHandler() { // NOI18N public void handleAnnotation(TypeElement type, Element element, AnnotationMirror annotation) { result.add(new MappedSuperclassImpl(helper, EntityMappingsImpl.this, type)); @@ -444,6 +464,9 @@ public void handleAnnotation(TypeElement type, Element element, AnnotationMirror } public List createObjects(TypeElement type) { + if (helper.hasAnnotation(type.getAnnotationMirrors(), "jakarta.persistence.MappedSuperclass")) { // NOI18N + return Collections.singletonList(new MappedSuperclassImpl(helper, EntityMappingsImpl.this, type)); + } if (helper.hasAnnotation(type.getAnnotationMirrors(), "javax.persistence.MappedSuperclass")) { // NOI18N return Collections.singletonList(new MappedSuperclassImpl(helper, EntityMappingsImpl.this, type)); } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsUtilities.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsUtilities.java index c39ea61001ee..8e432d35b60a 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsUtilities.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/EntityMappingsUtilities.java @@ -54,6 +54,44 @@ public class EntityMappingsUtilities { private static final Set ORM_ANNOTATIONS = new HashSet(); static { + ORM_ANNOTATIONS.add("jakarta.persistence.AssociationOverride"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.AssociationOverrides"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.AttributeOverride"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.AttributeOverrides"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Basic"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Column"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.DiscriminatorColumn"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.DiscriminatorValue"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Embeddable"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Embedded"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.EmbeddedId"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Enumerated"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.GeneratedValue"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Id"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.IdClass"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Inheritance"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.JoinColumn"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.JoinColumns"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.JoinTable"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Lob"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.ManyToMany"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.ManyToOne"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.MapKey"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.MappedSuperclass"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.OneToMany"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.OneToOne"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.OrderBy"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.PrimaryKeyJoinColumn"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.PrimaryKeyJoinColumns"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.SecondaryTable"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.SecondaryTables"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.SequenceGenerator"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Table"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.TableGenerator"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Temporal"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Transient"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.UniqueConstraint"); // NOI18N + ORM_ANNOTATIONS.add("jakarta.persistence.Version"); // NOI18N ORM_ANNOTATIONS.add("javax.persistence.AssociationOverride"); // NOI18N ORM_ANNOTATIONS.add("javax.persistence.AssociationOverrides"); // NOI18N ORM_ANNOTATIONS.add("javax.persistence.AttributeOverride"); // NOI18N @@ -95,7 +133,9 @@ public class EntityMappingsUtilities { } public static boolean isTransient(Map annByType, Set modifiers) { - return annByType.containsKey("javax.persistence.Transient") || modifiers.contains(Modifier.TRANSIENT); // NOI18N + return annByType.containsKey("jakarta.persistence.Transient") + || annByType.containsKey("javax.persistence.Transient") + || modifiers.contains(Modifier.TRANSIENT); // NOI18N } public static boolean hasFieldAccess(AnnotationModelHelper helper, List elements) { @@ -153,13 +193,21 @@ public static String getCollectionArgumentTypeName(AnnotationModelHelper helper, public static List getJoinColumns(final AnnotationModelHelper helper, Map annByType) { final List result = new ArrayList(); AnnotationMirror joinColumnAnn = annByType.get("javax.persistence.JoinColumn"); // NOI18N + if (joinColumnAnn != null) { + joinColumnAnn = annByType.get("jakarta.persistence.JoinColumn"); // NOI18N + } if (joinColumnAnn != null) { result.add(new JoinColumnImpl(helper, joinColumnAnn)); } else { - AnnotationMirror joinColumnsAnnotation = annByType.get("javax.persistence.JoinColumns"); // NOI18N + AnnotationMirror joinColumnsAnnotation = annByType.get("jakarta.persistence.JoinColumns"); // NOI18N + String type = "jakarta.persistence.JoinColumn"; // NOI18N + if (joinColumnsAnnotation == null) { + joinColumnsAnnotation = annByType.get("javax.persistence.JoinColumns"); // NOI18N + type = "javax.persistence.JoinColumn"; // NOI18N + } if (joinColumnsAnnotation != null) { AnnotationParser jcParser = AnnotationParser.create(helper); - jcParser.expectAnnotationArray("value", helper.resolveType("javax.persistence.JoinColumn"), new ArrayValueHandler() { // NOI18N + jcParser.expectAnnotationArray("value", helper.resolveType(type), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { for (AnnotationValue arrayMember : arrayMembers) { AnnotationMirror joinColumnAnnotation = (AnnotationMirror)arrayMember.getValue(); @@ -176,14 +224,22 @@ public Object handleArray(List arrayMembers) { public static List getPrimaryKeyJoinColumns(final AnnotationModelHelper helper, Map annByType) { final List result = new ArrayList(); - AnnotationMirror pkJoinColumnAnn = annByType.get("javax.persistence.PrimaryKeyJoinColumn"); // NOI18N + AnnotationMirror pkJoinColumnAnn = annByType.get("jakarta.persistence.PrimaryKeyJoinColumn"); // NOI18N + if (pkJoinColumnAnn == null) { + pkJoinColumnAnn = annByType.get("javax.persistence.PrimaryKeyJoinColumn"); // NOI18N + } if (pkJoinColumnAnn != null) { result.add(new PrimaryKeyJoinColumnImpl(helper, pkJoinColumnAnn)); } else { AnnotationMirror pkJoinColumnsAnnotation = annByType.get("javax.persistence.PrimaryKeyJoinColumns"); // NOI18N + String type = "javax.persistence.PrimaryKeyJoinColumn"; + if (pkJoinColumnsAnnotation == null) { + pkJoinColumnsAnnotation = annByType.get("jakarta.persistence.PrimaryKeyJoinColumns"); // NOI18N + type = "jakarta.persistence.PrimaryKeyJoinColumn"; + } if (pkJoinColumnsAnnotation != null) { AnnotationParser pkjcParser = AnnotationParser.create(helper); - pkjcParser.expectAnnotationArray("value", helper.resolveType("javax.persistence.PrimaryKeyJoinColumn"), new ArrayValueHandler() { // NOI18N + pkjcParser.expectAnnotationArray("value", helper.resolveType(type), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { for (AnnotationValue arrayMember : arrayMembers) { AnnotationMirror joinColumnAnnotation = (AnnotationMirror)arrayMember.getValue(); @@ -199,13 +255,23 @@ public Object handleArray(List arrayMembers) { } public static String getTemporalType(AnnotationModelHelper helper, AnnotationMirror temporalAnnotation) { - AnnotationParser parser = AnnotationParser.create(helper); - parser.expectEnumConstant("value", helper.resolveType("javax.persistence.TemporalType"), null); // NOI18N - return parser.parse(temporalAnnotation).get("value", String.class); + if(((TypeElement) temporalAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + AnnotationParser parser = AnnotationParser.create(helper); + parser.expectEnumConstant("value", helper.resolveType("jakarta.persistence.TemporalType"), null); // NOI18N + return parser.parse(temporalAnnotation).get("value", String.class); + } else { + AnnotationParser parser = AnnotationParser.create(helper); + parser.expectEnumConstant("value", helper.resolveType("javax.persistence.TemporalType"), null); // NOI18N + return parser.parse(temporalAnnotation).get("value", String.class); + } } public static IdClassImpl getIdClass(AnnotationModelHelper helper, TypeElement typeElement) { - AnnotationMirror idClassAnn = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()).get("javax.persistence.IdClass"); // NOI18N + Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); + AnnotationMirror idClassAnn = annByType.get("jakarta.persistence.IdClass"); // NOI18N + if (idClassAnn == null) { + idClassAnn = annByType.get("javax.persistence.IdClass"); // NOI18N + } if (idClassAnn == null) { return null; } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/GeneratedValueImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/GeneratedValueImpl.java index 007779b21c8b..df26278a9f64 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/GeneratedValueImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/GeneratedValueImpl.java @@ -20,6 +20,7 @@ package org.netbeans.modules.j2ee.persistenceapi.metadata.orm.annotation; import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.TypeElement; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.AnnotationParser; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.ParseResult; @@ -30,10 +31,17 @@ public class GeneratedValueImpl implements GeneratedValue { private final ParseResult parseResult; public GeneratedValueImpl(AnnotationModelHelper helper, AnnotationMirror generatedValueAnnotation) { - AnnotationParser parser = AnnotationParser.create(helper); - parser.expectEnumConstant("strategy", helper.resolveType("javax.persistence.GenerationType"), parser.defaultValue("AUTO")); // NOI18N - parser.expectString("generator", parser.defaultValue("")); // NOI18N - parseResult = parser.parse(generatedValueAnnotation); + if (((TypeElement) generatedValueAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + AnnotationParser parser = AnnotationParser.create(helper); + parser.expectEnumConstant("strategy", helper.resolveType("jakarta.persistence.GenerationType"), parser.defaultValue("AUTO")); // NOI18N + parser.expectString("generator", parser.defaultValue("")); // NOI18N + parseResult = parser.parse(generatedValueAnnotation); + } else { + AnnotationParser parser = AnnotationParser.create(helper); + parser.expectEnumConstant("strategy", helper.resolveType("javax.persistence.GenerationType"), parser.defaultValue("AUTO")); // NOI18N + parser.expectString("generator", parser.defaultValue("")); // NOI18N + parseResult = parser.parse(generatedValueAnnotation); + } } public void setStrategy(String value) { diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/JoinTableImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/JoinTableImpl.java index 6e7fbb65b657..63c581ec05b4 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/JoinTableImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/JoinTableImpl.java @@ -47,7 +47,10 @@ public Object handleArray(List arrayMembers) { return result; } }; - TypeMirror joinColumnType = helper.resolveType("javax.persistence.JoinColumn"); // NOI18N + TypeMirror joinColumnType = helper.resolveType("jakarta.persistence.JoinColumn"); // NOI18N + if (joinColumnType == null) { + joinColumnType = helper.resolveType("javax.persistence.JoinColumn"); // NOI18N + } parser.expectAnnotationArray("joinColumn", joinColumnType, joinColumnHandler, parser.defaultValue(Collections.emptyList())); // NOI18N parser.expectAnnotationArray("inverseJoinColumn", joinColumnType, joinColumnHandler, parser.defaultValue(Collections.emptyList())); // NOI18N parseResult = parser.parse(annotation); diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToManyImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToManyImpl.java index 65b13a5dfdd0..944a4c23155c 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToManyImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToManyImpl.java @@ -24,6 +24,7 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.AnnotationParser; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.ArrayValueHandler; @@ -39,22 +40,37 @@ public class ManyToManyImpl implements ManyToMany { public ManyToManyImpl(final AnnotationModelHelper helper, final Element element, AnnotationMirror manyToManyAnnotation, String name, Map annByType) { this.name = name; + + String cascadeTypeName; + String fetchTypeName; + String joinTableName; + + if (((TypeElement) manyToManyAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + cascadeTypeName = "jakarta.persistence.CascadeType"; + fetchTypeName = "jakarta.persistence.FetchType"; + joinTableName = "jakarta.persistence.JoinTable"; + } else { + cascadeTypeName = "javax.persistence.CascadeType"; + fetchTypeName = "javax.persistence.FetchType"; + joinTableName = "javax.persistence.JoinTable"; + } + AnnotationParser parser = AnnotationParser.create(helper); parser.expectClass("targetEntity", new DefaultProvider() { // NOI18N public Object getDefaultValue() { return EntityMappingsUtilities.getCollectionArgumentTypeName(helper, element); } }); - parser.expectEnumConstantArray("cascade", helper.resolveType("javax.persistence.CascadeType"), new ArrayValueHandler() { // NOI18N + parser.expectEnumConstantArray("cascade", helper.resolveType(cascadeTypeName), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { return new CascadeTypeImpl(arrayMembers); } }, parser.defaultValue(new CascadeTypeImpl())); - parser.expectEnumConstant("fetch", helper.resolveType("javax.persistence.FetchType"), parser.defaultValue("LAZY")); // NOI18N + parser.expectEnumConstant("fetch", helper.resolveType(fetchTypeName), parser.defaultValue("LAZY")); // NOI18N parser.expectString("mappedBy", parser.defaultValue("")); // NOI18N parseResult = parser.parse(manyToManyAnnotation); - joinTable = new JoinTableImpl(helper, annByType.get("javax.persistence.JoinTable")); // NOI18N + joinTable = new JoinTableImpl(helper, annByType.get(joinTableName)); // NOI18N } public void setName(String value) { diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToOneImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToOneImpl.java index 358fdf13c156..dcc27801a1c2 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToOneImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/ManyToOneImpl.java @@ -24,6 +24,7 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.AnnotationParser; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.ArrayValueHandler; @@ -40,22 +41,37 @@ public class ManyToOneImpl implements ManyToOne { public ManyToOneImpl(final AnnotationModelHelper helper, final Element element, AnnotationMirror manyToOneAnnotation, String name, Map annByType) { this.name = name; + + String cascadeTypeName; + String fetchTypeName; + String joinTableName; + + if (((TypeElement) manyToOneAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + cascadeTypeName = "jakarta.persistence.CascadeType"; + fetchTypeName = "jakarta.persistence.FetchType"; + joinTableName = "jakarta.persistence.JoinTable"; + } else { + cascadeTypeName = "javax.persistence.CascadeType"; + fetchTypeName = "javax.persistence.FetchType"; + joinTableName = "javax.persistence.JoinTable"; + } + AnnotationParser parser = AnnotationParser.create(helper); parser.expectClass("targetEntity", new DefaultProvider() { // NOI18N public Object getDefaultValue() { return EntityMappingsUtilities.getElementTypeName(element); } }); - parser.expectEnumConstantArray("cascade", helper.resolveType("javax.persistence.CascadeType"), new ArrayValueHandler() { // NOI18N + parser.expectEnumConstantArray("cascade", helper.resolveType(cascadeTypeName), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { return new CascadeTypeImpl(arrayMembers); } }, parser.defaultValue(new CascadeTypeImpl())); - parser.expectEnumConstant("fetch", helper.resolveType("javax.persistence.FetchType"), parser.defaultValue("EAGER")); // NOI18N + parser.expectEnumConstant("fetch", helper.resolveType(fetchTypeName), parser.defaultValue("EAGER")); // NOI18N parser.expectPrimitive("optional", Boolean.class, parser.defaultValue(true)); // NOI18N parseResult = parser.parse(manyToOneAnnotation); - joinTable = new JoinTableImpl(helper, annByType.get("javax.persistence.JoinTable")); // NOI18N + joinTable = new JoinTableImpl(helper, annByType.get(joinTableName)); // NOI18N joinColumnList = EntityMappingsUtilities.getJoinColumns(helper, annByType); } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/MappedSuperclassImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/MappedSuperclassImpl.java index 34b904844bd2..eda6d7ddbbaf 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/MappedSuperclassImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/MappedSuperclassImpl.java @@ -55,8 +55,14 @@ boolean refresh(TypeElement typeElement) { class2 = typeElement.getQualifiedName().toString(); AnnotationModelHelper helper = getHelper(); Map annByType = helper.getAnnotationsByType(typeElement.getAnnotationMirrors()); - AnnotationMirror embeddableAnn = annByType.get("javax.persistence.MappedSuperclass"); // NOI18N - AnnotationMirror entityAcc = annByType.get("javax.persistence.Access"); // NOI18N + AnnotationMirror embeddableAnn = annByType.get("jakarta.persistence.MappedSuperclass"); // NOI18N + if (embeddableAnn == null) { + embeddableAnn = annByType.get("javax.persistence.MappedSuperclass"); // NOI18N + } + AnnotationMirror entityAcc = annByType.get("jakarta.persistence.Access"); // NOI18N + if (entityAcc == null) { + entityAcc = annByType.get("javax.persistence.Access"); // NOI18N + } if (entityAcc != null) { entityAcc.getElementValues(); AnnotationParser parser = AnnotationParser.create(helper); @@ -101,7 +107,12 @@ public void setAccess(String value) { public String getAccess() { if (accessType != null && accessType.length()>0) { //use access type specified by annotation by default, regardless of later fields/properties annitatons - return accessType.equals("javax.persistence.AccessType.PROPERTY") ? PROPERTY_ACCESS : FIELD_ACCESS; + if (accessType.equals("jakarta.persistence.AccessType.PROPERTY") + || accessType.equals("javax.persistence.AccessType.PROPERTY")) { + return PROPERTY_ACCESS; + } else { + return FIELD_ACCESS; + } } else { return getAttributes().hasFieldAccess() ? FIELD_ACCESS : PROPERTY_ACCESS; } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToManyImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToManyImpl.java index 74e21720be08..7bd013c48679 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToManyImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToManyImpl.java @@ -24,6 +24,7 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.AnnotationParser; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.ArrayValueHandler; @@ -40,22 +41,37 @@ public class OneToManyImpl implements OneToMany { public OneToManyImpl(final AnnotationModelHelper helper, final Element element, AnnotationMirror oneToManyAnnotation, String name, Map annByType) { this.name = name; + + String cascadeTypeName; + String fetchTypeName; + String joinTableName; + + if (((TypeElement) oneToManyAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + cascadeTypeName = "jakarta.persistence.CascadeType"; + fetchTypeName = "jakarta.persistence.FetchType"; + joinTableName = "jakarta.persistence.JoinTable"; + } else { + cascadeTypeName = "javax.persistence.CascadeType"; + fetchTypeName = "javax.persistence.FetchType"; + joinTableName = "javax.persistence.JoinTable"; + } + AnnotationParser parser = AnnotationParser.create(helper); parser.expectClass("targetEntity", new DefaultProvider() { // NOI18N public Object getDefaultValue() { return EntityMappingsUtilities.getCollectionArgumentTypeName(helper, element); } }); - parser.expectEnumConstantArray("cascade", helper.resolveType("javax.persistence.CascadeType"), new ArrayValueHandler() { // NOI18N + parser.expectEnumConstantArray("cascade", helper.resolveType(cascadeTypeName), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { return new CascadeTypeImpl(arrayMembers); } }, parser.defaultValue(new CascadeTypeImpl())); - parser.expectEnumConstant("fetch", helper.resolveType("javax.persistence.FetchType"), parser.defaultValue("LAZY")); // NOI18N + parser.expectEnumConstant("fetch", helper.resolveType(fetchTypeName), parser.defaultValue("LAZY")); // NOI18N parser.expectString("mappedBy", parser.defaultValue("")); // NOI18N parseResult = parser.parse(oneToManyAnnotation); - joinTable = new JoinTableImpl(helper, annByType.get("javax.persistence.JoinTable")); // NOI18N + joinTable = new JoinTableImpl(helper, annByType.get(joinTableName)); // NOI18N joinColumnList = EntityMappingsUtilities.getJoinColumns(helper, annByType); } diff --git a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToOneImpl.java b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToOneImpl.java index 2f02c25e584a..d5eeedd0cdca 100644 --- a/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToOneImpl.java +++ b/java/j2ee.persistenceapi/src/org/netbeans/modules/j2ee/persistenceapi/metadata/orm/annotation/OneToOneImpl.java @@ -24,6 +24,7 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.AnnotationParser; import org.netbeans.modules.j2ee.metadata.model.api.support.annotation.parser.ArrayValueHandler; @@ -41,23 +42,38 @@ public class OneToOneImpl implements OneToOne { public OneToOneImpl(final AnnotationModelHelper helper, final Element element, AnnotationMirror oneToOneAnnotation, String name, Map annByType) { this.name = name; + + String cascadeTypeName; + String fetchTypeName; + String joinTableName; + + if (((TypeElement) oneToOneAnnotation.getAnnotationType().asElement()).getQualifiedName().toString().startsWith("jakarta.")) { + cascadeTypeName = "jakarta.persistence.CascadeType"; + fetchTypeName = "jakarta.persistence.FetchType"; + joinTableName = "jakarta.persistence.JoinTable"; + } else { + cascadeTypeName = "javax.persistence.CascadeType"; + fetchTypeName = "javax.persistence.FetchType"; + joinTableName = "javax.persistence.JoinTable"; + } + AnnotationParser parser = AnnotationParser.create(helper); parser.expectClass("targetEntity", new DefaultProvider() { // NOI18N public Object getDefaultValue() { return EntityMappingsUtilities.getElementTypeName(element); } }); - parser.expectEnumConstantArray("cascade", helper.resolveType("javax.persistence.CascadeType"), new ArrayValueHandler() { // NOI18N + parser.expectEnumConstantArray("cascade", helper.resolveType(cascadeTypeName), new ArrayValueHandler() { // NOI18N public Object handleArray(List arrayMembers) { return new CascadeTypeImpl(arrayMembers); } }, parser.defaultValue(new CascadeTypeImpl())); - parser.expectEnumConstant("fetch", helper.resolveType("javax.persistence.FetchType"), parser.defaultValue("EAGER")); // NOI18N + parser.expectEnumConstant("fetch", helper.resolveType(fetchTypeName), parser.defaultValue("EAGER")); // NOI18N parser.expectPrimitive("optional", Boolean.class, parser.defaultValue(true)); // NOI18N parser.expectString("mappedBy", parser.defaultValue("")); // NOI18N parseResult = parser.parse(oneToOneAnnotation); - joinTable = new JoinTableImpl(helper, annByType.get("javax.persistence.JoinTable")); // NOI18N + joinTable = new JoinTableImpl(helper, annByType.get(joinTableName)); // NOI18N joinColumnList = EntityMappingsUtilities.getJoinColumns(helper, annByType); pkJoinColumnList = EntityMappingsUtilities.getPrimaryKeyJoinColumns(helper, annByType); } diff --git a/nbbuild/templates/projectized.xml b/nbbuild/templates/projectized.xml index d73a5ea0b6f8..748345363c13 100644 --- a/nbbuild/templates/projectized.xml +++ b/nbbuild/templates/projectized.xml @@ -123,7 +123,7 @@ - +