This is an automated email from the ASF dual-hosted git repository.
matthiasblaesing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new bf55d4af21 Improve code REST code generation JavaEE 9+ environments
(jakarta namespace change)
new fc952e1f9c Merge pull request #6728 from matthiasblaesing/jakarta2
bf55d4af21 is described below
commit bf55d4af211feeaca77a493c5e2da678e7421010
Author: Matthias Bläsing <[email protected]>
AuthorDate: Fri Nov 3 21:33:03 2023 +0100
Improve code REST code generation JavaEE 9+ environments (jakarta namespace
change)
Manually tested were:
- RESTful Java Client
- RESTful Web Services from Entity Classes
- RESTful Web Services from Database
- RESTful Web Services from Pattern
---
.../netbeans/modules/websvc/rest/RestUtils.java | 41 +++++---
.../websvc/rest/client/ClientJavaSourceHelper.java | 14 +--
.../rest/client/JaxRsGenerationStrategy.java | 70 +++++++------
.../modules/websvc/rest/codegen/Constants.java | 70 ++++++++++---
.../rest/codegen/EntityResourcesGenerator.java | 49 ++++++---
.../rest/codegen/GenericResourceGenerator.java | 46 +++++----
.../websvc/rest/codegen/RestFacadeMethod.java | 22 ++--
.../modules/websvc/rest/codegen/RestMethod.java | 2 +-
.../codegen/SpringEntityResourcesGenerator.java | 17 ++--
.../websvc/rest/codegen/model/EntityClassInfo.java | 41 +++++---
.../websvc/rest/codegen/model/SourceModeler.java | 79 ++++++++++-----
.../codegen/resources/GenericResource.template | 5 +
.../websvc/rest/support/JavaSourceHelper.java | 16 ++-
.../netbeans/modules/websvc/rest/wizard/Util.java | 11 +-
.../rest/wizard/fromdb/EjbFacadeGenerator.java | 112 ++++++++++++++-------
.../websvc/rest/wizard/fromdb/Operation.java | 23 +++--
.../websvc/rest/model/api/RestConstants.java | 64 ++++++++++--
.../rest/model/impl/RestApplicationsImpl.java | 1 +
.../websvc/rest/model/impl/RestServicesImpl.java | 6 ++
.../modules/websvc/rest/model/impl/Utils.java | 84 +++++++++++-----
.../modules/websvc/rest/spi/RestSupport.java | 4 +-
.../j2ee/persistence/action/GenerationOptions.java | 68 ++++++++++---
.../wizard/fromdb/EntityClassesPanel.java | 7 +-
.../wizard/fromdb/JavaPersistenceGenerator.java | 8 +-
24 files changed, 594 insertions(+), 266 deletions(-)
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/RestUtils.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/RestUtils.java
index 740863c808..18d880bf33 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/RestUtils.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/RestUtils.java
@@ -244,7 +244,8 @@ public class RestUtils {
List<? extends AnnotationMirror> annotations =
JavaSourceHelper.getClassAnnotations(rSrc);
for (AnnotationMirror annotation : annotations) {
String cAnonType = annotation.getAnnotationType().toString();
- if (RestConstants.PATH.equals(cAnonType) ) {
+ if (RestConstants.PATH_JAKARTA.equals(cAnonType)
+ || RestConstants.PATH.equals(cAnonType)) {
path = getValueFromAnnotation(annotation);
}
}
@@ -253,12 +254,13 @@ public class RestUtils {
public static boolean isStaticResource(JavaSource src) {
List<? extends AnnotationMirror> annotations =
JavaSourceHelper.getClassAnnotations(src);
- if (annotations != null && annotations.size() > 0) {
+ if (annotations != null) {
for (AnnotationMirror annotation : annotations) {
String classAnonType =
annotation.getAnnotationType().toString();
- if (RestConstants.PATH.equals(classAnonType)) {
+ if (RestConstants.PATH_JAKARTA.equals(classAnonType)
+ || RestConstants.PATH.equals(classAnonType)) {
return true;
- }
+ }
}
}
return false;
@@ -266,10 +268,11 @@ public class RestUtils {
public static boolean isConverter(JavaSource src) {
List<? extends AnnotationMirror> annotations =
JavaSourceHelper.getClassAnnotations(src);
- if (annotations != null && annotations.size() > 0) {
+ if (annotations != null) {
for (AnnotationMirror annotation : annotations) {
String classAnonType =
annotation.getAnnotationType().toString();
- if (Constants.XML_ROOT_ELEMENT.equals(classAnonType)) {
+ if (Constants.XML_ROOT_ELEMENT.equals(classAnonType)
+ ||
Constants.XML_ROOT_ELEMENT_JAKARTA.equals(classAnonType)) {
return true;
}
}
@@ -281,12 +284,16 @@ public class RestUtils {
List<MethodTree> trees = JavaSourceHelper.getAllMethods(src);
for (MethodTree tree : trees) {
List<? extends AnnotationTree> mAnons =
tree.getModifiers().getAnnotations();
- if (mAnons != null && mAnons.size() > 0) {
+ if (mAnons != null) {
for (AnnotationTree mAnon : mAnons) {
String mAnonType = mAnon.getAnnotationType().toString();
- if (RestConstants.PATH_ANNOTATION.equals(mAnonType) ||
RestConstants.PATH.equals(mAnonType)) {
+ if (RestConstants.PATH_ANNOTATION.equals(mAnonType)
+ || RestConstants.PATH_JAKARTA.equals(mAnonType)
+ || RestConstants.PATH.equals(mAnonType)) {
return true;
- } else if (RestConstants.GET_ANNOTATION.equals(mAnonType)
|| RestConstants.GET.equals(mAnonType)) {
+ } else if (RestConstants.GET_ANNOTATION.equals(mAnonType)
+ || RestConstants.GET_JAKARTA.equals(mAnonType)
+ || RestConstants.GET.equals(mAnonType)) {
return true;
}
}
@@ -298,7 +305,7 @@ public class RestUtils {
public static String findElementName(MethodTree tree) {
String eName = "";
List<? extends AnnotationTree> mAnons =
tree.getModifiers().getAnnotations();
- if (mAnons != null && mAnons.size() > 0) {
+ if (mAnons != null) {
for (AnnotationTree mAnon : mAnons) {
eName = mAnon.toString();
if (eName.indexOf("\"") != -1) {
@@ -318,13 +325,16 @@ public class RestUtils {
boolean isHttpGetMethod = false;
boolean isXmlMime = false;
List<? extends AnnotationTree> mAnons =
tree.getModifiers().getAnnotations();
- if (mAnons != null && mAnons.size() > 0) {
+ if (mAnons != null) {
for (AnnotationTree mAnon : mAnons) {
String mAnonType = mAnon.getAnnotationType().toString();
- if (RestConstants.GET_ANNOTATION.equals(mAnonType) ||
RestConstants.GET.equals(mAnonType)) {
+ if (RestConstants.GET_ANNOTATION.equals(mAnonType)
+ || RestConstants.GET_JAKARTA.equals(mAnonType)
+ || RestConstants.GET.equals(mAnonType)) {
isHttpGetMethod = true;
- } else if
(RestConstants.PRODUCE_MIME_ANNOTATION.equals(mAnonType) ||
- RestConstants.PRODUCE_MIME.equals(mAnonType)) {
+ } else if
(RestConstants.PRODUCE_MIME_ANNOTATION.equals(mAnonType)
+ ||
RestConstants.PRODUCE_MIME_JAKARTA.equals(mAnonType)
+ || RestConstants.PRODUCE_MIME.equals(mAnonType)) {
List<String> mimes = getMimeAnnotationValue(mAnon);
if (mimes.contains(Constants.MimeType.JSON.value()) ||
mimes.contains(Constants.MimeType.XML.value())) {
@@ -437,7 +447,8 @@ public class RestUtils {
}
return false;
}
-
+
+ // @todo: Needs to be adjusted for jakartaEE
public static FileObject createApplicationConfigClass(final RestSupport
restSupport, FileObject packageFolder,
String name ) throws IOException
{
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/ClientJavaSourceHelper.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/ClientJavaSourceHelper.java
index 7331126053..1ba76dc168 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/ClientJavaSourceHelper.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/ClientJavaSourceHelper.java
@@ -121,6 +121,8 @@ public class ClientJavaSourceHelper {
cp.findResource("javax/ws/rs/core/Application.class") != null;
boolean jaxRs2Available = cp != null &&
cp.findResource("javax/ws/rs/client/Client.class") != null;
+ boolean jakartaRsClientAvailable = cp != null &&
+ cp.findResource("jakarta/ws/rs/client/Client.class") != null;
JaxRsStackSupport support = JaxRsStackSupport.getInstance(project);
boolean jersey1AvailableOnServer = support != null &&
support.isBundled("com.sun.jersey.api.client.WebResource");
@@ -128,25 +130,25 @@ public class ClientJavaSourceHelper {
support.isBundled("org.glassfish.jersey.spi.Contract");
ClientGenerationStrategy strategy = null;
if (jersey2Available || jersey2AvailableOnServer) {
- strategy = new JaxRsGenerationStrategy();
+ strategy = new JaxRsGenerationStrategy(jakartaRsClientAvailable);
} else if (jersey1Available || jersey1AvailableOnServer) {
strategy = new JerseyGenerationStrategy();
}
if (project != null && strategy == null) {
- if (jaxRs2Available) {
- strategy = new JaxRsGenerationStrategy();
+ if (jaxRs2Available || jakartaRsClientAvailable) {
+ strategy = new
JaxRsGenerationStrategy(jakartaRsClientAvailable);
} else if (jaxRs1Available) {
// JAX-RS 1.0 is on classpath but no Jersey; in this case
project
// classpath needs to be enhanced with Jersey library but IDE
has
// only Jersey 2.0. That's why JaxRsGenerationStrategy
strategy is
// going to be used here:
- strategy = new JaxRsGenerationStrategy();
+ strategy = new
JaxRsGenerationStrategy(jakartaRsClientAvailable);
}
}
// if all other tests were negative then generate the code using
JAX-RS 2:
if (strategy == null) {
- strategy = new JaxRsGenerationStrategy();
+ strategy = new JaxRsGenerationStrategy(jakartaRsClientAvailable);
}
ProgressHandle handle = null;
if (support == null) {
@@ -164,7 +166,7 @@ public class ClientJavaSourceHelper {
handle =
ProgressHandleFactory.createHandle(NbBundle.getMessage(ClientJavaSourceHelper.class,
"MSG_creatingRESTClient"));
handle.start();
// add REST and Jersey dependencies
- if (!jaxRs2Available && !jaxRs1Available) {
+ if (!jaxRs2Available && !jaxRs1Available &&
!jakartaRsClientAvailable) {
support.addJsr311Api(project);
support.extendsJerseyProjectClasspath(project);
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JaxRsGenerationStrategy.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JaxRsGenerationStrategy.java
index 0b9b716078..dfc0162cd4 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JaxRsGenerationStrategy.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/client/JaxRsGenerationStrategy.java
@@ -21,7 +21,6 @@ package org.netbeans.modules.websvc.rest.client;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -59,12 +58,21 @@ import java.util.EnumSet;
*
*/
class JaxRsGenerationStrategy extends ClientGenerationStrategy {
+
+ private final String packagePrefix;
+
+ public JaxRsGenerationStrategy(boolean jakarta) {
+ this.packagePrefix = jakarta ? "jakarta.ws.rs" : "javax.ws.rs";
+ }
@Override
protected void buildQueryFormParams(StringBuilder queryString){
- queryString.append(";\n javax.ws.rs.core.Form form =");
// NOI18N
+ queryString.append(";\n "); // NOI18N
+ queryString.append(packagePrefix);
+ queryString.append(".core.Form form ="); // NOI18N
queryString.append("getQueryOrFormParams(queryParamNames,
queryParamValues);\n");// NOI18N
- queryString.append("javax.ws.rs.core.MultivaluedMap<String,String> map
= form.asMap();\n");// NOI18N
+ queryString.append(packagePrefix);
+ queryString.append("core.MultivaluedMap<String,String> map =
form.asMap();\n");// NOI18N
queryString.append("for(java.util.Map.Entry<String,java.util.List<String>>
entry: "); // NOI18N
queryString.append("map.entrySet()){\n"); //
NOI18N
queryString.append("java.util.List<String> list =
entry.getValue();\n");// NOI18N
@@ -75,7 +83,8 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
@Override
protected void buildQParams(StringBuilder queryString){
- queryString.append("javax.ws.rs.core.MultivaluedMap<String,String>
mapOptionalParams = "); // NOI18N
+ queryString.append(packagePrefix);
+ queryString.append(".core.MultivaluedMap<String,String>
mapOptionalParams = "); // NOI18N
queryString.append("getQParams(optionalQueryParams);\n"); //
NOI18N
queryString.append("for(java.util.Map.Entry<String,java.util.List<String>>
entry: "); // NOI18N
queryString.append("mapOptionalParams.entrySet()){\n");
// NOI18N
@@ -94,12 +103,12 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
{
// add 3 fields
ModifiersTree fieldModif =
maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
- Tree typeTree = JavaSourceHelper.createTypeTree(copy,
"javax.ws.rs.client.WebTarget"); //NOI18N
+ Tree typeTree = JavaSourceHelper.createTypeTree(copy, packagePrefix +
".client.WebTarget"); //NOI18N
VariableTree fieldTree = maker.Variable(fieldModif, "webTarget",
typeTree, null); //NOI18N
ClassTree modifiedClass = maker.addClassMember(classTree, fieldTree);
fieldModif =
maker.Modifiers(Collections.<Modifier>singleton(Modifier.PRIVATE));
- typeTree = JavaSourceHelper.createTypeTree(copy,
"javax.ws.rs.client.Client"); //NOI18N
+ typeTree = JavaSourceHelper.createTypeTree(copy, packagePrefix +
".client.Client"); //NOI18N
fieldTree = maker.Variable(fieldModif, "client", typeTree, null);
//NOI18N
modifiedClass = maker.addClassMember(modifiedClass, fieldTree);
@@ -161,9 +170,9 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
resURI = getPathExpression(pf); //NOI18N
}
- String clientCreation = " client =
javax.ws.rs.client.ClientBuilder.newClient();";
+ String clientCreation = " client = " + packagePrefix +
".client.ClientBuilder.newClient();";
if (security.isSSL()) {
- clientCreation = "client =
javax.ws.rs.client.ClientBuilder.newBuilder().sslContext(getSSLContext()).build();";
// NOI18N
+ clientCreation = "client = " + packagePrefix +
".client.ClientBuilder.newBuilder().sslContext(getSSLContext()).build();"; //
NOI18N
}
String body =
@@ -291,20 +300,20 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
VariableTree objectParam = maker.Variable(paramModifier,
"requestEntity", maker.Identifier("Object"), null);
//NOI18N
paramList.add(objectParam);
- bodyParam= "javax.ws.rs.client.Entity.entity(requestEntity,"+
+ bodyParam= packagePrefix +
".client.Entity.entity(requestEntity,"+
requestMimeType.getMediaType()+")"; //NOI18N
}
}
- if ("javax.ws.rs.core.Response".equals(responseType)) {
//NOI18N
- TypeElement clientResponseEl = copy.getElements().getTypeElement(
- "javax.ws.rs.core.Response"); //NOI18N
+ if ((packagePrefix + ".core.Response").equals(responseType)) {
//NOI18N
+ TypeElement clientResponseEl = copy.getElements()
+ .getTypeElement(packagePrefix + ".core.Response"); //NOI18N
ret = "return "; //NOI18N
responseTree = (clientResponseEl == null ?
- copy.getTreeMaker().Identifier("javax.ws.rs.core.Response") :
// NOI18N
+ copy.getTreeMaker().Identifier(packagePrefix +
".core.Response") : // NOI18N
copy.getTreeMaker().QualIdent(clientResponseEl));
bodyParam1 = (clientResponseEl == null ?
- "javax.ws.rs.core.Response.class" : //NOI18N
+ (packagePrefix + ".core.Response.class") : //NOI18N
"Response.class"); //NOI18N
}
else if ("void".equals(responseType)) {
//NOI18N
@@ -335,8 +344,7 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
}
// throws
- ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
- "javax.ws.rs.ClientErrorException"); //NOI18N
+ ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
packagePrefix + ".ClientErrorException"); //NOI18N
if (path.length() == 0) {
// body
@@ -433,18 +441,17 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
paramList.add(classParam);
}
- ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
- "javax.ws.rs.ClientErrorException"); //NOI18N
+ ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
packagePrefix + ".ClientErrorException"); //NOI18N
StringBuilder body = new StringBuilder(
"{ WebTarget resource = webTarget;"); // NOI18N
StringBuilder resourceBuilder = new StringBuilder();
if (path.length() == 0) {
+ resourceBuilder.append(".request("); // NOI18N
if ( mimeType != null ){
- resourceBuilder.append(".request("); // NOI18N
resourceBuilder.append(mimeType.getMediaType());
- resourceBuilder.append(')');
}
+ resourceBuilder.append(')');
buildQueryParams( body , httpMethod, paramList , maker );
}
else {
@@ -544,8 +551,7 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
"}";
//NOI18N
List<ExpressionTree> throwsList = new ArrayList<ExpressionTree>();
- ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
- "javax.ws.rs.ClientErrorException"); //NOI18N
+ ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
packagePrefix + ".ClientErrorException"); //NOI18N
throwsList.add(throwsTree);
if (Security.Authentication.SESSION_KEY ==
security.getAuthentication())
{
@@ -631,14 +637,14 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
if (requestMimeType != null) {
if (requestMimeType == HttpMimeType.FORM &&
httpParams.hasFormParams()) {
- bodyParam="javax.ws.rs.client.Entity.form(" +
- "getQueryOrFormParams(formParamNames,
formParamValues))"; //NOI18N
+ bodyParam = packagePrefix + ".client.Entity.form("
+ + "getQueryOrFormParams(formParamNames,
formParamValues))"; //NOI18N
}
else {
VariableTree objectParam = maker.Variable(paramModifier,
"requestEntity", maker.Identifier("Object"), null);
//NOI18N
paramList.add(0, objectParam);
- bodyParam="javax.ws.rs.client.Entity.entity(requestEntity,
"+requestMimeType.getMediaType()+")"; //NOI18N
+ bodyParam = packagePrefix +
".client.Entity.entity(requestEntity, " + requestMimeType.getMediaType() + ")";
//NOI18N
commentBuffer.append("@param requestEntity request data");
}
}
@@ -647,7 +653,7 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
List<ExpressionTree> throwsList = new ArrayList<ExpressionTree>();
ExpressionTree throwsTree = JavaSourceHelper.createTypeTree(copy,
- "javax.ws.rs.ClientErrorException"); //NOI18N
+ packagePrefix + ".ClientErrorException"); //NOI18N
throwsList.add(throwsTree);
if (Security.Authentication.SESSION_KEY ==
security.getAuthentication()) {
@@ -693,13 +699,13 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
@Override
MethodTree generateFormMethod( TreeMaker maker, WorkingCopy copy ) {
- String form = "javax.ws.rs.core.Form"; //NOI18N
+ String form = packagePrefix + ".core.Form"; //NOI18N
TypeElement mvMapEl = copy.getElements().getTypeElement(form);
- String mvType = mvMapEl==null?"javax.ws.rs.core.Form":"Form"; //NOI18N
+ String mvType = mvMapEl==null? (packagePrefix + ".Form"):"Form";
//NOI18N
String body =
"{"+ //NOI18N
- mvType+" form = new javax.ws.rs.core.Form();"+ //NOI18N
+ mvType+" form = new " + packagePrefix + ".core.Form();"+ //NOI18N
"for (int i=0;i< paramNames.length;i++) {" + //NOI18N
" if (paramValues[i] != null) {"+ //NOI18N
" form = form.param(paramNames[i], paramValues[i]);"+
//NOI18N
@@ -711,7 +717,7 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
Collections.<Modifier>singleton(Modifier.PRIVATE));
ExpressionTree returnTree =
mvMapEl ==null ?
- copy.getTreeMaker().Identifier("javax.ws.rs.core.Form"):
//NOI18N
+ copy.getTreeMaker().Identifier(packagePrefix +
".core.Form"): //NOI18N
copy.getTreeMaker().QualIdent(mvMapEl);
List<VariableTree> paramList = new ArrayList<VariableTree>();
ModifiersTree paramModifier =
maker.Modifiers(Collections.<Modifier>emptySet());
@@ -730,13 +736,13 @@ class JaxRsGenerationStrategy extends
ClientGenerationStrategy {
@Override
MethodTree generateOptionalFormMethod( TreeMaker maker, WorkingCopy copy )
{
- String mvMapClass = "javax.ws.rs.core.MultivaluedMap"; //NOI18N
+ String mvMapClass = packagePrefix + ".core.MultivaluedMap"; //NOI18N
TypeElement mvMapEl = copy.getElements().getTypeElement(mvMapClass);
String mvType = mvMapEl == null ? mvMapClass : "MultivaluedMap";
//NOI18N
String body =
"{"+ //NOI18N
- mvType+"<String,String> qParams = new
javax.ws.rs.core.MultivaluedHashMap<String,String>();"+ //NOI18N
+ mvType+"<String,String> qParams = new " + packagePrefix +
".core.MultivaluedHashMap<String,String>();"+ //NOI18N
"for (String qParam : optionalParams) {" + //NOI18N
" String[] qPar = qParam.split(\"=\");"+ //NOI18N
" if (qPar.length > 1) qParams.add(qPar[0], qPar[1])"+ //NOI18N
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/Constants.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/Constants.java
index 7c3abf7d10..f2bb9358c6 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/Constants.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/Constants.java
@@ -47,34 +47,64 @@ public class Constants {
public static final String URI_TYPE = "java.net.URI"; //NOI18N
public static final String PERSISTENCE_PACKAGE = "javax.persistence.";
//NOI18N
+
+ public static final String PERSISTENCE_PACKAGE_JAKARTA =
"jakarta.persistence."; //NOI18N
public static final String QUERY_TYPE = PERSISTENCE_PACKAGE + "Query";
//NOI18N
+
+ public static final String QUERY_TYPE_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "Query"; //NOI18N
public static final String ENTITY_MANAGER_TYPE = PERSISTENCE_PACKAGE +
"EntityManager"; //NOI18N
+
+ public static final String ENTITY_MANAGER_TYPE_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "EntityManager"; //NOI18N
public static final String ENTITY_MANAGER_FACTORY = PERSISTENCE_PACKAGE +
"EntityManagerFactory"; //NOI18N
+
+ public static final String ENTITY_MANAGER_FACTORY_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "EntityManagerFactory"; //NOI18N
public static final String ENTITY_TRANSACTION = PERSISTENCE_PACKAGE +
"EntityTransaction"; //NOI18N
+
+ public static final String ENTITY_TRANSACTION_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "EntityTransaction"; //NOI18N
public static final String PERSISTENCE = PERSISTENCE_PACKAGE +
"Persistence"; //NOI18N
+
+ public static final String PERSISTENCE_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "Persistence"; //NOI18N
public static final String PERSISTENCE_CONTEXT = PERSISTENCE_PACKAGE +
PERSISTENCE_CONTEXT_ANNOTATION;
+
+ public static final String PERSISTENCE_CONTEXT_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + PERSISTENCE_CONTEXT_ANNOTATION;
public static final String PERSISTENCE_ENTITY = PERSISTENCE_PACKAGE +
"Entity"; //NOI18N
+ public static final String PERSISTENCE_ENTITY_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "Entity"; //NOI18N
+
public static final String PERSISTENCE_TABLE = PERSISTENCE_PACKAGE +
"Table"; //NOI18M
+
+ public static final String PERSISTENCE_TABLE_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "Table"; //NOI18M
public static final String NO_RESULT_EXCEPTION = PERSISTENCE_PACKAGE +
"NoResultException"; //NOI18N
+
+ public static final String NO_RESULT_EXCEPTION_JAKARTA =
PERSISTENCE_PACKAGE_JAKARTA + "NoResultException"; //NOI18N
public static final String XML_ANNOTATION_PACKAGE =
"javax.xml.bind.annotation."; //NOI18N
+
+ public static final String XML_ANNOTATION_PACKAGE_JAKARTA =
"jakarta.xml.bind.annotation."; //NOI18N
- public static final String XML_ROOT_ELEMENT = XML_ANNOTATION_PACKAGE +
XML_ROOT_ELEMENT_ANNOTATION;
+ public static final String XML_ROOT_ELEMENT = XML_ANNOTATION_PACKAGE +
XML_ROOT_ELEMENT_ANNOTATION;
+
+ public static final String XML_ROOT_ELEMENT_JAKARTA =
XML_ANNOTATION_PACKAGE_JAKARTA + XML_ROOT_ELEMENT_ANNOTATION;
public static final String XML_ELEMENT = XML_ANNOTATION_PACKAGE +
XML_ELEMENT_ANNOTATION;
+
+ public static final String XML_ELEMENT_JAKARTA =
XML_ANNOTATION_PACKAGE_JAKARTA + XML_ELEMENT_ANNOTATION;
- public static final String XML_ATTRIBUTE = XML_ANNOTATION_PACKAGE +
XML_ATTRIBUTE_ANNOTATION;
+ public static final String XML_ATTRIBUTE = XML_ANNOTATION_PACKAGE +
XML_ATTRIBUTE_ANNOTATION;
+
+ public static final String XML_ATTRIBUTE_JAKARTA =
XML_ANNOTATION_PACKAGE_JAKARTA + XML_ATTRIBUTE_ANNOTATION;
- public static final String XML_TRANSIENT = XML_ANNOTATION_PACKAGE +
XML_TRANSIENT_ANNOTATION;
+ public static final String XML_TRANSIENT = XML_ANNOTATION_PACKAGE +
XML_TRANSIENT_ANNOTATION;
+
+ public static final String XML_TRANSIENT_JAKARTA =
XML_ANNOTATION_PACKAGE_JAKARTA + XML_TRANSIENT_ANNOTATION;
public static final String VOID = "void"; //NOI18N
@@ -94,8 +124,9 @@ public class Constants {
public static final String REQUESTED_SCOPE = "RequestScoped"; //NOI18N
- public static final String FQN_REQUESTED_SCOPE
="javax.enterprise.context." // NOI18N
- +REQUESTED_SCOPE;
+ public static final String FQN_REQUESTED_SCOPE
="javax.enterprise.context." + REQUESTED_SCOPE; // NOI18N
+
+ public static final String FQN_REQUESTED_SCOPE_JAKARTA
="jakarta.enterprise.context." + REQUESTED_SCOPE; // NOI18N
static final Modifier[] PUBLIC = new Modifier[] { Modifier.PUBLIC };
@@ -132,13 +163,18 @@ public class Constants {
return suffix;
}
- public ExpressionTree expressionTree(TreeMaker maker) {
+ public ExpressionTree expressionTree(TreeMaker maker, boolean
jakartaNamespace) {
ExpressionTree tree;
if (mediaTypeField == null) {
tree = maker.Literal(value());
} else {
// Use a field of MediaType class if possible
- ExpressionTree typeTree =
maker.QualIdent("javax.ws.rs.core.MediaType"); // NOI18N
+ ExpressionTree typeTree;
+ if(jakartaNamespace) {
+ typeTree =
maker.QualIdent("jakarta.ws.rs.core.MediaType"); // NOI18N
+ } else {
+ typeTree = maker.QualIdent("javax.ws.rs.core.MediaType");
// NOI18N
+ }
tree = maker.MemberSelect(typeTree, mediaTypeField);
}
return tree;
@@ -160,17 +196,19 @@ public class Constants {
}
public enum HttpMethodType {
- GET("get", RestConstants.GET), //NOI18N
- PUT("put", RestConstants.PUT), //NOI18N
- POST("post", RestConstants.POST), //NOI18N
- DELETE("delete", RestConstants.DELETE); //NOI18N
+ GET("get", RestConstants.GET, RestConstants.GET_JAKARTA), //NOI18N
+ PUT("put", RestConstants.PUT, RestConstants.PUT_JAKARTA), //NOI18N
+ POST("post", RestConstants.POST, RestConstants.POST_JAKARTA), //NOI18N
+ DELETE("delete", RestConstants.DELETE, RestConstants.DELETE_JAKARTA);
//NOI18N
private final String prefix;
private final String annotationType;
+ private final String annotationTypeJakarta;
- HttpMethodType(String prefix, String annotationType) {
+ HttpMethodType(String prefix, String annotationType, String
annotationTypeJakarta) {
this.prefix = prefix;
this.annotationType = annotationType;
+ this.annotationTypeJakarta = annotationTypeJakarta;
}
public String value() {
@@ -181,8 +219,12 @@ public class Constants {
return prefix;
}
- public String getAnnotationType() {
- return annotationType;
+ public String getAnnotationType(Boolean jakartaVariant) {
+ if (jakartaVariant == null || jakartaVariant) {
+ return annotationTypeJakarta;
+ } else {
+ return annotationType;
+ }
}
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/EntityResourcesGenerator.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/EntityResourcesGenerator.java
index 878bd1b298..7e070c84ed 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/EntityResourcesGenerator.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/EntityResourcesGenerator.java
@@ -34,6 +34,7 @@ import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeKind;
+import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.JavaSource.Phase;
import org.netbeans.api.java.source.Task;
@@ -93,6 +94,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
private String controllerPackageName;
private EntityResourceBeanModel model;
private Project project;
+ private boolean jakartaNamespace;
/** Creates a new instance of EntityRESTServicesCodeGenerator */
public void initialize(EntityResourceBeanModel model, Project project,
@@ -117,6 +119,10 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
this.controllerPackageName = controllerPackage;
}
+ ClassPath cp = ClassPath.getClassPath(targetFolder, ClassPath.COMPILE);
+ boolean jakartaRSPresent = cp.findResource("jakarta/ws/rs/GET.class")
!= null;
+ boolean javaxRSPresent = cp.findResource("javax/ws/rs/GET.class") !=
null;
+ jakartaNamespace = jakartaRSPresent || (! javaxRSPresent);
}
/**
@@ -220,7 +226,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
TreeMaker maker, RestGenerationOptions option,
ModifiersTree modifiers )
{
- String method = option.getRestMethod().getMethod();
+ String method = option.getRestMethod().getMethod(isJakartaNamespace());
ModifiersTree modifiersTree = modifiers;
if ( method != null ){
modifiersTree = maker.addModifiersAnnotation(modifiers,
@@ -233,9 +239,9 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
ExpressionTree uriValue = maker.Literal(uriPath);
modifiersTree =
maker.addModifiersAnnotation(modifiersTree,
- genUtils.createAnnotation(RestConstants.PATH,
- Collections.<ExpressionTree>singletonList(
- uriValue)));
+ genUtils.createAnnotation(
+ isJakartaNamespace() ? RestConstants.PATH_JAKARTA
: RestConstants.PATH,
+
Collections.<ExpressionTree>singletonList(uriValue)));
}
@@ -249,11 +255,11 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
// add @Produces annotation
modifiersTree = addMimeHandlerAnnotation(genUtils, maker,
- modifiersTree, RestConstants.PRODUCE_MIME,
option.getProduces());
+ modifiersTree, isJakartaNamespace() ?
RestConstants.PRODUCE_MIME_JAKARTA : RestConstants.PRODUCE_MIME,
option.getProduces());
// add @Consumes annotation
modifiersTree = addMimeHandlerAnnotation(genUtils, maker,
- modifiersTree, RestConstants.CONSUME_MIME,
option.getConsumes());
+ modifiersTree, isJakartaNamespace() ?
RestConstants.CONSUME_MIME_JAKARTA : RestConstants.CONSUME_MIME,
option.getConsumes());
return modifiersTree;
}
@@ -303,7 +309,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
Collections.<Modifier>emptySet());
ModifiersTree modifiers ;
- if ( option.getRestMethod().getMethod() == null ){
+ if ( option.getRestMethod().getMethod(true) == null ){
modifiers = genUtils.createModifiers(
Modifier.PRIVATE);
}
@@ -359,7 +365,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
pathParamTree =
maker.addModifiersAnnotation(paramModifier,
genUtils.createAnnotation(
- RestConstants.PATH_PARAM,
+ isJakartaNamespace() ?
RestConstants.PATH_PARAM_JAKARTA : RestConstants.PATH_PARAM,
annArguments));
}
Tree paramTree = genUtils.createType(paramTypes[i],
@@ -413,11 +419,20 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
needPathSegment = idFieldInfo!= null &&
idFieldInfo.isEmbeddedId()&&
idFieldInfo.getType()!= null;
}
+ String httpResponseType;
+ String pathSegmentType;
+ if (isJakartaNamespace()) {
+ httpResponseType = RestConstants.HTTP_RESPONSE_JAKARTA;
+ pathSegmentType = "jakarta.ws.rs.core.PathSegment";
+ } else {
+ httpResponseType = RestConstants.HTTP_RESPONSE;
+ pathSegmentType = "javax.ws.rs.core.PathSegment";
+ }
RestGenerationOptions options = new RestGenerationOptions();
switch ( method ){
case CREATE:
options.setRestMethod(RestFacadeMethod.CREATE);
- options.setReturnType(RestConstants.HTTP_RESPONSE);
+ options.setReturnType(httpResponseType);
options.setParameterNames(new String[]{"entity"}); //NOI18N
options.setParameterTypes(new String[]{entityFQN});
options.setConsumes(new
String[]{Constants.MimeType.XML.value(),
@@ -425,7 +440,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
return options;
case EDIT:
options.setRestMethod(RestFacadeMethod.EDIT);
- options.setReturnType(RestConstants.HTTP_RESPONSE);
+ options.setReturnType(httpResponseType);
options.setParameterNames(new String[]{"entity"}); //NOI18N
options.setParameterTypes(new String[]{entityFQN}); //NOI18N
options.setConsumes(new
String[]{Constants.MimeType.XML.value(),
@@ -433,10 +448,10 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
return options;
case REMOVE:
options.setRestMethod(RestFacadeMethod.REMOVE);
- options.setReturnType(RestConstants.HTTP_RESPONSE);
+ options.setReturnType(httpResponseType);
options.setParameterNames(new String[]{"id"}); //NOI18N
if ( needPathSegment ){
- options.setParameterTypes(new
String[]{"javax.ws.rs.core.PathSegment"}); //NOI18N
+ options.setParameterTypes(new String[]{pathSegmentType});
//NOI18N
}
else {
options.setParameterTypes(new String[]{idType}); //NOI18N
@@ -450,7 +465,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
Constants.MimeType.JSON.value()});
options.setParameterNames(new String[]{"id"}); //NOI18N
if ( needPathSegment ){
- options.setParameterTypes(new
String[]{"javax.ws.rs.core.PathSegment"}); //NOI18N
+ options.setParameterTypes(new String[]{pathSegmentType});
//NOI18N
}
else {
options.setParameterTypes(new String[]{idType}); //NOI18N
@@ -560,7 +575,11 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
protected void createFolders() {
createFolders( true );
}
-
+
+ protected boolean isJakartaNamespace() {
+ return jakartaNamespace;
+ }
+
private void generateResourceMethods( FileObject fileObject ,
final String entityFQN, final String idClass) throws IOException
{
@@ -652,7 +671,7 @@ public abstract class EntityResourcesGenerator extends
AbstractGenerator
if (type == null) {
result = maker.Literal(mimeType);
} else {
- result = type.expressionTree(maker);
+ result = type.expressionTree(maker, isJakartaNamespace());
}
return result;
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/GenericResourceGenerator.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/GenericResourceGenerator.java
index 65fe9bc5ff..769912a462 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/GenericResourceGenerator.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/GenericResourceGenerator.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.lang.model.element.Modifier;
+import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.ModificationResult;
import org.netbeans.api.java.source.WorkingCopy;
@@ -64,6 +65,7 @@ public class GenericResourceGenerator extends
AbstractGenerator {
private final FileObject destDir;
private final GenericResourceBean bean;
+ private final boolean jakartaNamespace;
private String template;
public GenericResourceGenerator(FileObject destDir, GenericResourceBean
bean) {
@@ -74,6 +76,11 @@ public class GenericResourceGenerator extends
AbstractGenerator {
} else {
this.template = RESOURCE_ITEM_TEMPLATE;
}
+
+ ClassPath cp = ClassPath.getClassPath(destDir, ClassPath.COMPILE);
+ boolean jakartaRSPresent = cp.findResource("jakarta/ws/rs/GET.class")
!= null;
+ boolean javaxRSPresent = cp.findResource("javax/ws/rs/GET.class") !=
null;
+ jakartaNamespace = jakartaRSPresent || (! javaxRSPresent);
}
public FileObject getDestDir() {
@@ -95,15 +102,14 @@ public class GenericResourceGenerator extends
AbstractGenerator {
@Override
public Set<FileObject> generate(ProgressHandle pHandle) throws IOException
{
initProgressReporting(pHandle, false);
-
+
reportProgress(NbBundle.getMessage(GenericResourceGenerator.class,
"MSG_GeneratingClass", bean.getPackageName() + "." +
bean.getName())); //NOI18N
JavaSource source;
+ Map<String,Object> params = new HashMap<>();
if (bean.isRootResource()) {
- source = JavaSourceHelper.createJavaSource(
- getTemplate(), getDestDir(), bean.getPackageName(),
bean.getName());
+ params.put("jakartaNamespace", jakartaNamespace);
} else {
- Map<String,String> params = new HashMap<String,String>();
String[] uriParams = bean.getUriParams();
StringBuilder fieldList = new StringBuilder();
StringBuilder paramList = new StringBuilder();
@@ -131,9 +137,9 @@ public class GenericResourceGenerator extends
AbstractGenerator {
params.put(PARAM_LIST, paramList.toString());
params.put(ASSIGNMENT_LIST, assignmentList.toString());
params.put(ARGUMENT_LIST, argumentList.toString());
- source = JavaSourceHelper.createJavaSource(
- getTemplate(), params, getDestDir(),
bean.getPackageName(), bean.getName());
}
+ source = JavaSourceHelper.createJavaSource(
+ getTemplate(), params, getDestDir(), bean.getPackageName(),
bean.getName());
if (bean.getInputParameters().size() > 0) {
addInputParamFields(source);
addConstructorWithInputParams(source);
@@ -195,13 +201,17 @@ public class GenericResourceGenerator extends
AbstractGenerator {
@Override
public void run(WorkingCopy copy) throws IOException {
copy.toPhase(JavaSource.Phase.RESOLVED);
- String jsr311Imports[] = getJsr311AnnotationImports(bean);
+ String jsr311Imports[] = getJsr311AnnotationImports(bean,
jakartaNamespace);
String imports[] = jsr311Imports;
boolean cdiEnabled = Util.isCDIEnabled(getDestDir());
if ( cdiEnabled ){
imports = new String[jsr311Imports.length+1];
System.arraycopy(jsr311Imports, 0, imports, 0,
jsr311Imports.length);
- imports[jsr311Imports.length] =
Constants.FQN_REQUESTED_SCOPE;
+ if (jakartaNamespace) {
+ imports[jsr311Imports.length] =
Constants.FQN_REQUESTED_SCOPE_JAKARTA;
+ } else {
+ imports[jsr311Imports.length] =
Constants.FQN_REQUESTED_SCOPE;
+ }
}
JavaSourceHelper.addImports(copy, imports);
List<String> annotations= new ArrayList<String>(2);
@@ -236,25 +246,25 @@ public class GenericResourceGenerator extends
AbstractGenerator {
}
}
- public static String[] getJsr311AnnotationImports(GenericResourceBean
rbean) {
+ public static String[] getJsr311AnnotationImports(GenericResourceBean
rbean, boolean jakartaNamespace) {
HashSet<String> result = new HashSet<String>();
if (rbean.isGenerateUriTemplate()) {
- result.add(RestConstants.PATH);
+ result.add(jakartaNamespace ? RestConstants.PATH_JAKARTA :
RestConstants.PATH);
}
if (rbean.isRootResource() && !rbean.getSubResources().isEmpty()) {
- result.add(RestConstants.PATH_PARAM);
+ result.add(jakartaNamespace ? RestConstants.PATH_PARAM_JAKARTA :
RestConstants.PATH_PARAM);
}
for (HttpMethodType m : rbean.getMethodTypes()) {
- result.add(m.getAnnotationType());
+ result.add(m.getAnnotationType(jakartaNamespace));
if (m == HttpMethodType.GET) {
- result.add(RestConstants.PRODUCE_MIME);
+ result.add(jakartaNamespace ?
RestConstants.PRODUCE_MIME_JAKARTA : RestConstants.PRODUCE_MIME);
}
if (m == HttpMethodType.POST || m == HttpMethodType.PUT) {
- result.add(RestConstants.CONSUME_MIME);
+ result.add(jakartaNamespace ?
RestConstants.CONSUME_MIME_JAKARTA : RestConstants.CONSUME_MIME);
}
}
if (rbean.getQueryParameters().size() > 0) {
- result.add(RestConstants.QUERY_PARAM);
+ result.add(jakartaNamespace ? RestConstants.QUERY_PARAM_JAKARTA :
RestConstants.QUERY_PARAM);
}
return result.toArray(new String[result.size()]);
}
@@ -302,7 +312,7 @@ public class GenericResourceGenerator extends
AbstractGenerator {
Object[] annotationAttrs = new Object[] {
null,
- mime.expressionTree(copy.getTreeMaker())
+ mime.expressionTree(copy.getTreeMaker(), jakartaNamespace)
};
if (type == null) {
@@ -344,7 +354,7 @@ public class GenericResourceGenerator extends
AbstractGenerator {
RestConstants.PRODUCE_MIME_ANNOTATION
};
- ExpressionTree mimeTree = mime.expressionTree(copy.getTreeMaker());
+ ExpressionTree mimeTree = mime.expressionTree(copy.getTreeMaker(),
jakartaNamespace);
Object[] annotationAttrs = new Object[] {
null,
mimeTree,
@@ -389,7 +399,7 @@ public class GenericResourceGenerator extends
AbstractGenerator {
RestConstants.CONSUME_MIME_ANNOTATION
};
- ExpressionTree mimeTree = mime.expressionTree(copy.getTreeMaker());
+ ExpressionTree mimeTree = mime.expressionTree(copy.getTreeMaker(),
jakartaNamespace);
Object[] annotationAttrs = new Object[] {
null,
mimeTree,
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestFacadeMethod.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestFacadeMethod.java
index 4f91adb70c..3cc73f05cb 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestFacadeMethod.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestFacadeMethod.java
@@ -25,13 +25,13 @@ package org.netbeans.modules.websvc.rest.codegen;
*/
enum RestFacadeMethod implements RestMethod {
- CREATE("javax.ws.rs.POST", "create"),
- EDIT("javax.ws.rs.PUT", "edit"),
- REMOVE("javax.ws.rs.DELETE", "remove", "{id}"),
- FIND("javax.ws.rs.GET", "find", "{id}"),
- FIND_ALL("javax.ws.rs.GET", "findAll"),
- FIND_RANGE("javax.ws.rs.GET", "findRange", "{max}/{first}"),
- COUNT("javax.ws.rs.GET", "count", "count");
+ CREATE(".ws.rs.POST", "create"),
+ EDIT(".ws.rs.PUT", "edit"),
+ REMOVE(".ws.rs.DELETE", "remove", "{id}"),
+ FIND(".ws.rs.GET", "find", "{id}"),
+ FIND_ALL(".ws.rs.GET", "findAll"),
+ FIND_RANGE(".ws.rs.GET", "findRange", "{max}/{first}"),
+ COUNT(".ws.rs.GET", "count", "count");
private RestFacadeMethod(String method, String methodName) {
this.method = method;
@@ -44,8 +44,12 @@ enum RestFacadeMethod implements RestMethod {
this.uriPath = uriPath;
}
- public String getMethod() {
- return method;
+ public String getMethod(Boolean jakartaVariant) {
+ if(jakartaVariant == null && jakartaVariant) {
+ return "jakarta" + method;
+ } else {
+ return "javax" + method;
+ }
}
public String getMethodName() {
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestMethod.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestMethod.java
index b5164f5ef2..982504d300 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestMethod.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/RestMethod.java
@@ -25,7 +25,7 @@ package org.netbeans.modules.websvc.rest.codegen;
*/
public interface RestMethod {
- String getMethod();
+ String getMethod(Boolean jakartaVariant);
String getMethodName();
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/SpringEntityResourcesGenerator.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/SpringEntityResourcesGenerator.java
index 2d93dc8788..07dff1d3d7 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/SpringEntityResourcesGenerator.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/SpringEntityResourcesGenerator.java
@@ -110,8 +110,8 @@ public class SpringEntityResourcesGenerator extends
EntityResourcesGenerator {
ClassTree classTree = (ClassTree)tree.getTypeDecls().get(0);
ClassTree newTree = JavaSourceHelper.addField(workingCopy,
classTree,
new Modifier[]{Modifier.PROTECTED},
- annotations , values , "entityManager",
- Constants.ENTITY_MANAGER_TYPE); //NOI18N
+ annotations , values , "entityManager",
+ isJakartaNamespace() ?
Constants.ENTITY_MANAGER_TYPE_JAKARTA : Constants.ENTITY_MANAGER_TYPE);
//NOI18N
workingCopy.rewrite(classTree, newTree);
}
};
@@ -167,7 +167,7 @@ public class SpringEntityResourcesGenerator extends
EntityResourcesGenerator {
{
ModifiersTree tree = super.addRestMethodAnnotations(genUtils, maker,
option, modifiers);
- if ( option.getRestMethod().getMethod() != null ){
+ if ( option.getRestMethod().getMethod(true) != null ){
tree = maker.addModifiersAnnotation(tree,
genUtils.createAnnotation(
SpringConstants.TRANSACTIONAL));
}
@@ -182,8 +182,13 @@ public class SpringEntityResourcesGenerator extends
EntityResourcesGenerator {
List<String> original = super.getResourceImports(entityFqn);
List<String> result = new ArrayList<String>( original.size() +1 );
result.addAll( original );
- result.add("javax.persistence.Query"); // NOI18N
- result.add(Constants.PERSISTENCE_CONTEXT);
+ if(isJakartaNamespace()) {
+ result.add("javax.persistence.Query"); // NOI18N
+ result.add(Constants.PERSISTENCE_CONTEXT_JAKARTA);
+ } else {
+ result.add("javax.persistence.Query"); // NOI18N
+ result.add(Constants.PERSISTENCE_CONTEXT);
+ }
return result;
}
@@ -305,7 +310,7 @@ public class SpringEntityResourcesGenerator extends
EntityResourcesGenerator {
}
@Override
- public String getMethod() {
+ public String getMethod(Boolean jakartaVariant) {
return null;
}
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/EntityClassInfo.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/EntityClassInfo.java
index 475934dc37..efc8176fee 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/EntityClassInfo.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/EntityClassInfo.java
@@ -60,12 +60,19 @@ import org.openide.util.Exceptions;
public class EntityClassInfo {
private static final String JAVAX_PERSISTENCE =
"javax.persistence.";//NOI18N
-
- private static final String MAPPED_SUPERCLASS =
JAVAX_PERSISTENCE+"MappedSuperclass"; // NOI18N
-
- private static final String ENTITY = JAVAX_PERSISTENCE+"Entity"; //
NOI18N
-
+
+ private static final String JAKARTA_PERSISTENCE =
"jakarta.persistence.";//NOI18N
+
+ private static final String MAPPED_SUPERCLASS = JAVAX_PERSISTENCE +
"MappedSuperclass"; // NOI18N
+
+ private static final String MAPPED_SUPERCLASS_JAKARTA =
JAKARTA_PERSISTENCE + "MappedSuperclass"; // NOI18N
+
+ private static final String ENTITY = JAVAX_PERSISTENCE + "Entity"; //
NOI18N
+
+ private static final String ENTITY_JAKARTA = JAKARTA_PERSISTENCE +
"Entity"; // NOI18N
+
private static final Set<String> LIFECYCLE_ANNOTATIONS = new
HashSet<String>(7);
+
static {
LIFECYCLE_ANNOTATIONS.add("PrePersist"); // NOI18N
LIFECYCLE_ANNOTATIONS.add("PostPersist"); // NOI18N
@@ -74,7 +81,7 @@ public class EntityClassInfo {
LIFECYCLE_ANNOTATIONS.add("PreUpdate"); // NOI18N
LIFECYCLE_ANNOTATIONS.add("PostUpdate"); // NOI18N
LIFECYCLE_ANNOTATIONS.add("PostLoad"); // NOI18N
- };
+ }
private EntityResourceModelBuilder builder;
private final String entityFqn;
@@ -275,11 +282,9 @@ public class EntityClassInfo {
return null;
}
Element superElement = controller.getTypes().asElement( superclass );
- if ( superElement instanceof TypeElement ){
- if ( hasAnnotation( superElement, controller, MAPPED_SUPERCLASS,
- ENTITY))
- {
- return (TypeElement)superElement;
+ if (superElement instanceof TypeElement) {
+ if (hasAnnotation(superElement, controller,
MAPPED_SUPERCLASS_JAKARTA, ENTITY_JAKARTA, MAPPED_SUPERCLASS, ENTITY)) {
+ return (TypeElement) superElement;
}
}
return null;
@@ -519,12 +524,16 @@ public class EntityClassInfo {
public void parseAnnotations(List<? extends AnnotationMirror>
annotationMirrors) {
for (AnnotationMirror annotation : annotationMirrors) {
String annotationType =
annotation.getAnnotationType().toString();
-
- if (!annotationType.startsWith(JAVAX_PERSISTENCE)) {
- continue;
+
+ String simpleName;
+ if (annotationType.startsWith(JAKARTA_PERSISTENCE)) {
+ simpleName =
annotationType.substring(JAKARTA_PERSISTENCE.length());
+ } else if (annotationType.startsWith(JAVAX_PERSISTENCE)) {
+ simpleName =
annotationType.substring(JAVAX_PERSISTENCE.length());
+ } else {
+ continue;
}
- String simpleName = annotationType.substring(
- JAVAX_PERSISTENCE.length() );
+
if ( LIFECYCLE_ANNOTATIONS.contains( simpleName)){
continue;
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/SourceModeler.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/SourceModeler.java
index 13b96efc6e..965c07e830 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/SourceModeler.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/model/SourceModeler.java
@@ -206,13 +206,34 @@ public class SourceModeler extends ResourceModel {
ExecutableElement method , CompilationController controller ,
Collection<TypeMirror> boxedPrimitives)
{
- AnnotationMirror pathAnnotation =
restAnnotations.get(RestConstants.PATH);
- AnnotationMirror produceAnnotion =
restAnnotations.get(RestConstants.PRODUCE_MIME);
- AnnotationMirror consumeAnnotion =
restAnnotations.get(RestConstants.CONSUME_MIME);
- AnnotationMirror getAnnotion = restAnnotations.get(RestConstants.GET);
- AnnotationMirror postAnnotion =
restAnnotations.get(RestConstants.POST);
- AnnotationMirror putAnnotion = restAnnotations.get(RestConstants.PUT);
- AnnotationMirror deleteAnnotion =
restAnnotations.get(RestConstants.DELETE);
+ AnnotationMirror pathAnnotation =
restAnnotations.get(RestConstants.PATH_JAKARTA);
+ if (pathAnnotation == null) {
+ pathAnnotation = restAnnotations.get(RestConstants.PATH);
+ }
+ AnnotationMirror produceAnnotion =
restAnnotations.get(RestConstants.PRODUCE_MIME_JAKARTA);
+ if (produceAnnotion == null) {
+ produceAnnotion = restAnnotations.get(RestConstants.PRODUCE_MIME);
+ }
+ AnnotationMirror consumeAnnotion =
restAnnotations.get(RestConstants.CONSUME_MIME_JAKARTA);
+ if (produceAnnotion == null) {
+ consumeAnnotion = restAnnotations.get(RestConstants.CONSUME_MIME);
+ }
+ AnnotationMirror getAnnotion =
restAnnotations.get(RestConstants.GET_JAKARTA);
+ if (produceAnnotion == null) {
+ getAnnotion = restAnnotations.get(RestConstants.GET);
+ }
+ AnnotationMirror postAnnotion =
restAnnotations.get(RestConstants.POST_JAKARTA);
+ if (produceAnnotion == null) {
+ postAnnotion = restAnnotations.get(RestConstants.POST);
+ }
+ AnnotationMirror putAnnotion =
restAnnotations.get(RestConstants.PUT_JAKARTA);
+ if (produceAnnotion == null) {
+ putAnnotion = restAnnotations.get(RestConstants.PUT);
+ }
+ AnnotationMirror deleteAnnotion =
restAnnotations.get(RestConstants.DELETE_JAKARTA);
+ if (produceAnnotion == null) {
+ deleteAnnotion = restAnnotations.get(RestConstants.DELETE);
+ }
AnnotationMirror httpAnnotation = chooseNotNull( getAnnotion,
postAnnotion,
putAnnotion, deleteAnnotion);
@@ -301,7 +322,7 @@ public class SourceModeler extends ResourceModel {
{
String fqn =
((TypeElement)httpAnnotation.getAnnotationType().asElement()).
getQualifiedName().toString();
- if ( RestConstants.GET.equals( fqn ) ){
+ if ( RestConstants.GET.equals( fqn ) ||
RestConstants.GET_JAKARTA.equals( fqn ) ){
List<String> mimes = getAnnotationMimes(produceAnnotion );
if ( mimes != null ) {
restMethod.setResponseMimes( mimes );
@@ -327,9 +348,10 @@ public class SourceModeler extends ResourceModel {
methodElement, method);
restMethod.setParamType( paramEntity );
for( HttpMethodType type : HttpMethodType.values() ){
- String annotationType = type.getAnnotationType();
- if ( annotationType.equals( fqn )){
- restMethod.setType( type );
+ String annotationTypeJakarta = type.getAnnotationType(true);
+ String annotationTypeJavax = type.getAnnotationType(false);
+ if (annotationTypeJakarta.equals(fqn) ||
annotationTypeJavax.equals(fqn)) {
+ restMethod.setType(type);
break;
}
}
@@ -355,8 +377,11 @@ public class SourceModeler extends ResourceModel {
String fqn = ((TypeElement)annotationElement).
getQualifiedName().toString();
// skip arguments which are URI parameters ( query param
or path param )
- if ( fqn.equals(RestConstants.QUERY_PARAM) ||
- fqn.equals(RestConstants.PATH_PARAM))
+ if (fqn.equals(RestConstants.QUERY_PARAM_JAKARTA)
+ || fqn.equals(RestConstants.QUERY_PARAM)
+ || fqn.equals(RestConstants.PATH_PARAM_JAKARTA)
+ || fqn.equals(RestConstants.PATH_PARAM)
+ )
{
isUriParam = true;
break;
@@ -459,14 +484,22 @@ public class SourceModeler extends ResourceModel {
return null;
}
- private boolean isRestAnnotation( String annotation ){
- return annotation.equals(RestConstants.PATH) ||
- annotation.equals(RestConstants.PRODUCE_MIME) ||
- annotation.equals(RestConstants.CONSUME_MIME) ||
- annotation.equals(RestConstants.GET) ||
- annotation.equals(RestConstants.POST) ||
- annotation.equals(RestConstants.PUT) ||
- annotation.equals(RestConstants.DELETE) ;
+ private boolean isRestAnnotation(String annotation) {
+ return annotation.equals(RestConstants.PATH_JAKARTA)
+ || annotation.equals(RestConstants.PATH)
+ || annotation.equals(RestConstants.PRODUCE_MIME_JAKARTA)
+ || annotation.equals(RestConstants.PRODUCE_MIME)
+ || annotation.equals(RestConstants.CONSUME_MIME_JAKARTA)
+ || annotation.equals(RestConstants.CONSUME_MIME)
+ || annotation.equals(RestConstants.GET_JAKARTA)
+ || annotation.equals(RestConstants.GET)
+ || annotation.equals(RestConstants.POST_JAKARTA)
+ || annotation.equals(RestConstants.POST)
+ || annotation.equals(RestConstants.PUT_JAKARTA)
+ || annotation.equals(RestConstants.PUT)
+ || annotation.equals(RestConstants.DELETE_JAKARTA)
+ || annotation.equals(RestConstants.DELETE)
+ ;
}
private List<String> getAnnotationMimes( AnnotationMirror mirror ) {
@@ -502,11 +535,11 @@ public class SourceModeler extends ResourceModel {
if ( annotationElement instanceof TypeElement ){
TypeElement annotation = (TypeElement)annotationElement;
String name = annotation.getQualifiedName().toString();
- if ( RestConstants.PRODUCE_MIME.equals( name ) ){
+ if ( RestConstants.PRODUCE_MIME_JAKARTA.equals( name ) ||
RestConstants.PRODUCE_MIME.equals( name ) ){
List<String> mimes = getAnnotationMimes( annotationMirror
);
method.setResponseMimes( mimes );
}
- else if ( RestConstants.CONSUME_MIME.equals( name ) ){
+ else if ( RestConstants.CONSUME_MIME_JAKARTA.equals( name ) ||
RestConstants.CONSUME_MIME.equals( name ) ){
List<String> mimes = getAnnotationMimes( annotationMirror
);
method.setRequestMimes( mimes );
}
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/resources/GenericResource.template
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/resources/GenericResource.template
index 73ab5949a2..a7b7ddd2f1 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/resources/GenericResource.template
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/codegen/resources/GenericResource.template
@@ -27,8 +27,13 @@
package ${package};
</#if>
+<#if jakartaNamespace?? && jakartaNamespace>
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.UriInfo;
+<#else>
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
+</#if>
/**
* REST Web Service
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/support/JavaSourceHelper.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/support/JavaSourceHelper.java
index 8ed81b9718..5b4013c7fe 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/support/JavaSourceHelper.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/support/JavaSourceHelper.java
@@ -355,7 +355,7 @@ public class JavaSourceHelper {
return null;
}
- public static JavaSource createJavaSource(String template, Map<String,
String> params, FileObject targetFolder, String packageName, String className) {
+ public static JavaSource createJavaSource(String template, Map<String,
Object> params, FileObject targetFolder, String packageName, String className) {
try {
FileObject fobj = targetFolder.getFileObject(className,
Constants.JAVA_EXT);
if (fobj == null) {
@@ -369,9 +369,9 @@ public class JavaSourceHelper {
return null;
}
- private static DataObject createDataObjectFromTemplate(String template,
- FileObject targetFolder, String packageName, String targetName,
- Map<String, String> params) throws IOException {
+ private static DataObject createDataObjectFromTemplate(String template,
+ FileObject targetFolder, String packageName, String targetName,
+ Map<String, Object> params) throws IOException {
assert template != null;
assert targetFolder != null;
assert targetName != null && targetName.trim().length() > 0;
@@ -380,15 +380,13 @@ public class JavaSourceHelper {
DataObject templateDO = DataObject.find(templateFO);
DataFolder dataFolder = DataFolder.findFolder(targetFolder);
- Map<String, String> parameters = new HashMap<String, String>();
+ Map<String, Object> parameters = new HashMap<>();
parameters.put("package", packageName);
if (params != null) {
- for(Entry<String, String> entry: params.entrySet()){
- parameters.put(entry.getKey(), entry.getValue());
- }
+ parameters.putAll(params);
}
- return templateDO.createFromTemplate(dataFolder, targetName, params);
+ return templateDO.createFromTemplate(dataFolder, targetName,
parameters);
}
public static void addClassAnnotation(WorkingCopy copy, String[]
annotations, Object[] annotationAttrs) {
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/Util.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/Util.java
index 5c749554de..139bb96e59 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/Util.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/Util.java
@@ -1049,7 +1049,10 @@ public class Util {
}
String entityName = null;
TypeElement annotationElement = controller.getElements()
- .getTypeElement(Constants.PERSISTENCE_TABLE);
+ .getTypeElement(Constants.PERSISTENCE_TABLE_JAKARTA);
+ if(annotationElement == null) {
+ annotationElement =
controller.getElements().getTypeElement(Constants.PERSISTENCE_TABLE);
+ }
if (annotationElement == null) {
isIncomplete = true;
}
@@ -1059,7 +1062,11 @@ public class Util {
}
if (entityName == null) {
annotationElement = controller.getElements().getTypeElement(
- Constants.PERSISTENCE_ENTITY);
+ Constants.PERSISTENCE_ENTITY_JAKARTA);
+ if (annotationElement == null) {
+ annotationElement =
controller.getElements().getTypeElement(
+ Constants.PERSISTENCE_ENTITY);
+ }
if (annotationElement == null) {
isIncomplete = true;
return;
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/EjbFacadeGenerator.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/EjbFacadeGenerator.java
index 627e79a21f..3859bfad4b 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/EjbFacadeGenerator.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/EjbFacadeGenerator.java
@@ -50,6 +50,7 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeKind;
import javax.lang.model.util.ElementFilter;
+import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.JavaSource.Phase;
@@ -92,6 +93,9 @@ public class EjbFacadeGenerator implements FacadeGenerator {
private static final String EJB_LOCAL = "javax.ejb.Local"; //NOI18N
private static final String EJB_REMOTE = "javax.ejb.Remote"; //NOI18N
private static final String EJB_STATELESS = "javax.ejb.Stateless"; //NOI18N
+ private static final String EJB_LOCAL_JAKARTA = "jakarta.ejb.Local";
//NOI18N
+ private static final String EJB_REMOTE_JAKARTA = "jakarta.ejb.Remote";
//NOI18N
+ private static final String EJB_STATELESS_JAKARTA =
"jakarta.ejb.Stateless"; //NOI18N
private EntityResourceBeanModel model;
@@ -126,6 +130,16 @@ public class EjbFacadeGenerator implements FacadeGenerator
{
final boolean hasLocal,
boolean overrideExisting) throws IOException {
+ ClassPath cp = ClassPath.getClassPath(targetFolder, ClassPath.COMPILE);
+
+ final boolean javaxPersistenceAvailable = cp != null &&
+ cp.findResource("javax/persistence/EntityManager.class") !=
null;
+
+ final boolean jakartaPersistenceAvailable = cp != null &&
+ cp.findResource("jakarta/persistence/EntityManager.class") !=
null;
+
+ final boolean jakartaNamespace = jakartaPersistenceAvailable ||
(!javaxPersistenceAvailable);
+
final Set<FileObject> createdFiles = new HashSet<FileObject>();
final String entitySimpleName = JavaIdentifiers.unqualify(entityFQN);
final String variableName = entitySimpleName.toLowerCase().charAt(0) +
@@ -157,7 +171,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
String genericsTypeName = "T"; //NOI18N
List<GenerationOptions> methodOptions =
getAbstractFacadeMethodOptions(entityNames,
- genericsTypeName, "entity"); //NOI18N
+ genericsTypeName, "entity", jakartaNamespace);
//NOI18N
List<Tree> members = new ArrayList<>();
String entityClassVar = "entityClass";
//NOI18N
Tree classObjectTree =
genUtils.createType("java.lang.Class<" +
@@ -250,16 +264,22 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
getUniqueClassName(entitySimpleName + FACADE_REMOTE_SUFFIX,
targetFolder);
List<GenerationOptions> intfOptions = getAbstractFacadeMethodOptions(
- entityNames, entityFQN, variableName);
+ entityNames, entityFQN, variableName, jakartaNamespace);
if (hasLocal) {
- FileObject local =
createInterface(JavaIdentifiers.unqualify(localInterfaceFQN),
- EJB_LOCAL, targetFolder);
+ FileObject local = createInterface(
+ JavaIdentifiers.unqualify(localInterfaceFQN),
+ jakartaNamespace ? EJB_LOCAL_JAKARTA : EJB_LOCAL,
+ targetFolder
+ );
addMethodToInterface(intfOptions, local);
createdFiles.add(local);
}
if (hasRemote) {
- FileObject remote =
createInterface(JavaIdentifiers.unqualify(remoteInterfaceFQN),
- EJB_REMOTE, targetFolder);
+ FileObject remote = createInterface(
+ JavaIdentifiers.unqualify(remoteInterfaceFQN),
+ jakartaNamespace ? EJB_REMOTE_JAKARTA : EJB_REMOTE,
+ targetFolder
+ );
addMethodToInterface(intfOptions, remote);
createdFiles.add(remote);
}
@@ -303,7 +323,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
members.add(constructor);
List<RestGenerationOptions> restGenerationOptions =
- getRestFacadeMethodOptions(entityFQN, idClass);
+ getRestFacadeMethodOptions(entityFQN, idClass,
jakartaNamespace);
ModifiersTree publicModifiers = genUtils.createModifiers(
Modifier.PUBLIC);
@@ -314,7 +334,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
ModifiersTree modifiersTree =
maker.addModifiersAnnotation(publicModifiers,
genUtils.createAnnotation(
-
option.getRestMethod().getMethod()));
+
option.getRestMethod().getMethod(jakartaNamespace)));
// add @Path annotation
String uriPath = option.getRestMethod().getUriPath();
@@ -322,9 +342,10 @@ public class EjbFacadeGenerator implements FacadeGenerator
{
ExpressionTree annArgument = maker.Literal(uriPath);
modifiersTree =
maker.addModifiersAnnotation(modifiersTree,
- genUtils.createAnnotation(RestConstants.PATH,
-
Collections.<ExpressionTree>singletonList(
- annArgument)));
+ genUtils.createAnnotation(
+ jakartaNamespace ?
RestConstants.PATH_JAKARTA : RestConstants.PATH,
+
Collections.<ExpressionTree>singletonList(annArgument))
+ );
}
@@ -339,11 +360,11 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
if (produces != null) {
ExpressionTree annArguments;
if (produces.length == 1) {
- annArguments = mimeTypeTree(maker, produces[0]);
+ annArguments = mimeTypeTree(maker, produces[0],
jakartaNamespace);
} else {
List<ExpressionTree> mimeTypes = new
ArrayList<ExpressionTree>();
for (int i=0; i< produces.length; i++) {
- mimeTypes.add(mimeTypeTree(maker,
produces[i]));
+ mimeTypes.add(mimeTypeTree(maker, produces[i],
jakartaNamespace));
}
annArguments = maker.NewArray(null,
Collections.<ExpressionTree>emptyList(),
@@ -352,19 +373,20 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
modifiersTree =
maker.addModifiersAnnotation(modifiersTree,
genUtils.createAnnotation(
- RestConstants.PRODUCE_MIME,
-
Collections.<ExpressionTree>singletonList(annArguments)));
+ jakartaNamespace ?
RestConstants.PRODUCE_MIME_JAKARTA : RestConstants.PRODUCE_MIME,
+
Collections.<ExpressionTree>singletonList(annArguments))
+ );
}
// add @Consumes annotation
String[] consumes = option.getConsumes();
if (consumes != null) {
ExpressionTree annArguments;
if (consumes.length == 1) {
- annArguments = mimeTypeTree(maker, consumes[0]);
+ annArguments = mimeTypeTree(maker, consumes[0],
jakartaNamespace);
} else {
List<ExpressionTree> mimeTypes = new
ArrayList<ExpressionTree>();
for (int i=0; i< consumes.length; i++) {
- mimeTypes.add(mimeTypeTree(maker,
consumes[i]));
+ mimeTypes.add(mimeTypeTree(maker, consumes[i],
jakartaNamespace));
}
annArguments = maker.NewArray(null,
Collections.<ExpressionTree>emptyList(),
mimeTypes);
@@ -372,7 +394,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
modifiersTree =
maker.addModifiersAnnotation(modifiersTree,
genUtils.createAnnotation(
- RestConstants.CONSUME_MIME,
+ jakartaNamespace ?
RestConstants.CONSUME_MIME_JAKARTA : RestConstants.CONSUME_MIME,
Collections.<ExpressionTree>singletonList(annArguments)));
}
@@ -395,7 +417,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
pathParamTree =
maker.addModifiersAnnotation(paramModifier,
genUtils.createAnnotation(
- RestConstants.PATH_PARAM,
+ jakartaNamespace ?
RestConstants.PATH_PARAM_JAKARTA : RestConstants.PATH_PARAM,
annArguments));
}
Tree paramTree =
genUtils.createType(paramTypes[i],
@@ -427,16 +449,17 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
}
- ModifiersTree modifiersTree =
- maker.addModifiersAnnotation(classTree.getModifiers(),
- genUtils.createAnnotation(EJB_STATELESS));
+ ModifiersTree modifiersTree = maker.addModifiersAnnotation(
+ classTree.getModifiers(),
+ genUtils.createAnnotation(jakartaNamespace ?
EJB_STATELESS_JAKARTA : EJB_STATELESS)
+ );
ExpressionTree annArgument =
maker.Literal(entityFQN.toLowerCase());
modifiersTree =
maker.addModifiersAnnotation(modifiersTree,
- genUtils.createAnnotation(RestConstants.PATH,
-
Collections.<ExpressionTree>singletonList(
- annArgument)));
+ genUtils.createAnnotation(
+ jakartaNamespace ?
RestConstants.PATH_JAKARTA : RestConstants.PATH,
+
Collections.<ExpressionTree>singletonList(annArgument)));
TypeElement abstractFacadeElement =
wc.getElements().getTypeElement(afName);
@@ -487,7 +510,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
// generate methods for the facade
EntityManagerGenerator generator = new EntityManagerGenerator(facade,
entityFQN);
- List<GenerationOptions> methodOptions = getMethodOptions(entityFQN,
variableName);
+ List<GenerationOptions> methodOptions = getMethodOptions(entityFQN,
variableName, jakartaNamespace);
for (GenerationOptions each : methodOptions){
generator.generate(each, ContainerManagedJTAInjectableInEJB.class);
}
@@ -496,7 +519,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
return createdFiles;
}
- private ExpressionTree mimeTypeTree(TreeMaker maker, String mimeType) {
+ private ExpressionTree mimeTypeTree(TreeMaker maker, String mimeType,
boolean jakartaNamespace) {
String mediaTypeMember = null;
if (mimeType.equals("application/xml")) { // NOI18N
mediaTypeMember = "APPLICATION_XML"; // NOI18N
@@ -510,7 +533,8 @@ public class EjbFacadeGenerator implements FacadeGenerator {
result = maker.Literal(mimeType);
} else {
// Use a field of MediaType class if possible
- ExpressionTree typeTree =
maker.QualIdent("javax.ws.rs.core.MediaType"); // NOI18N
+ ExpressionTree typeTree = maker.QualIdent(
+ jakartaNamespace ? "jakarta.ws.rs.core.MediaType" :
"javax.ws.rs.core.MediaType"); // NOI18N
result = maker.MemberSelect(typeTree, mediaTypeMember);
}
return result;
@@ -569,12 +593,17 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
}
private List<GenerationOptions> getAbstractFacadeMethodOptions(Map<String,
- String> entityNames, String entityFQN, String variableName)
+ String> entityNames, String entityFQN, String variableName,
+ boolean jakartaNamespace)
{
GenerationOptions getEMOptions = new GenerationOptions();
getEMOptions.setMethodName("getEntityManager"); //NOI18N
- getEMOptions.setReturnType("javax.persistence.EntityManager");//NOI18N
+ if (jakartaNamespace) {
+
getEMOptions.setReturnType("jakarta.persistence.EntityManager");//NOI18N
+ } else {
+
getEMOptions.setReturnType("javax.persistence.EntityManager");//NOI18N
+ }
getEMOptions.setModifiers(EnumSet.of(Modifier.PROTECTED,
Modifier.ABSTRACT));
//implemented methods
@@ -636,13 +665,17 @@ public class EjbFacadeGenerator implements
FacadeGenerator {
* find/remove/findAll.
*/
private List<GenerationOptions> getMethodOptions(String entityFQN,
- String variableName)
+ String variableName, boolean jakartaNamespace)
{
GenerationOptions getEMOptions = new GenerationOptions();
getEMOptions.setMethodName("getEntityManager"); //NOI18N
getEMOptions.setOperation(GenerationOptions.Operation.GET_EM);
- getEMOptions.setReturnType("javax.persistence.EntityManager");//NOI18N
+ if (jakartaNamespace) {
+
getEMOptions.setReturnType("jakarta.persistence.EntityManager");//NOI18N
+ } else {
+
getEMOptions.setReturnType("javax.persistence.EntityManager");//NOI18N
+ }
getEMOptions.setModifiers(EnumSet.of(Modifier.PROTECTED));
return Arrays.<GenerationOptions>asList(getEMOptions);
@@ -758,8 +791,15 @@ public class EjbFacadeGenerator implements FacadeGenerator
{
}
private List<RestGenerationOptions> getRestFacadeMethodOptions(
- String entityFQN, String idClass)
+ String entityFQN, String idClass, boolean jakartaNamespace)
{
+ final String pathSegmentType;
+ if(jakartaNamespace) {
+ pathSegmentType = "jakarta.ws.rs.core.PathSegment";
+ } else {
+ pathSegmentType = "javax.ws.rs.core.PathSegment";
+ }
+
String paramArg = "java.lang.Character".equals(idClass) ?
"id.charAt(0)" : "id"; //NOI18N
String idType = "id".equals(paramArg) ? idClass : "java.lang.String";
//NOI18N
@@ -789,7 +829,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
editOptions.setParameterNames(new String[]{"id", "entity"}); //NOI18N
editOptions.setPathParams(new String[]{"id", null}); //NOI18N
if ( needPathSegment ){
- editOptions.setParameterTypes(new
String[]{"javax.ws.rs.core.PathSegment", entityFQN}); // NOI18N
+ editOptions.setParameterTypes(new String[]{pathSegmentType,
entityFQN}); // NOI18N
}
else {
editOptions.setParameterTypes(new String[]{idType, entityFQN});
@@ -806,7 +846,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
destroyOptions.setPathParams(new String[]{"id"}); //NOI18N
StringBuilder builder = new StringBuilder();
if ( needPathSegment ){
- destroyOptions.setParameterTypes(new
String[]{"javax.ws.rs.core.PathSegment"}); // NOI18N
+ destroyOptions.setParameterTypes(new String[]{pathSegmentType});
// NOI18N
builder.append(idType);
builder.append(" key=getPrimaryKey(id);\n");
paramArg = "key";
@@ -827,7 +867,7 @@ public class EjbFacadeGenerator implements FacadeGenerator {
findOptions.setPathParams(new String[]{"id"}); //NOI18N
findOptions.setParameterNames(new String[]{"id"}); //NOI18N
if ( needPathSegment ){
- findOptions.setParameterTypes(new
String[]{"javax.ws.rs.core.PathSegment"}); // NOI18N
+ findOptions.setParameterTypes(new String[]{pathSegmentType}); //
NOI18N
}
else {
findOptions.setParameterTypes(new String[]{idType});
diff --git
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/Operation.java
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/Operation.java
index 0a09aadbcb..ea93a12818 100644
---
a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/Operation.java
+++
b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/fromdb/Operation.java
@@ -22,13 +22,13 @@ import org.netbeans.modules.websvc.rest.codegen.RestMethod;
public enum Operation implements RestMethod {
- CREATE("javax.ws.rs.POST", "create", true ),
- EDIT("javax.ws.rs.PUT", "edit", "{id}" ),
- REMOVE("javax.ws.rs.DELETE", "remove", "{id}"),
- FIND("javax.ws.rs.GET", "find", "{id}"),
- FIND_ALL("javax.ws.rs.GET", "findAll", true),
- FIND_RANGE("javax.ws.rs.GET", "findRange", "{from}/{to}"),
- COUNT("javax.ws.rs.GET", "countREST", "count");
+ CREATE(".ws.rs.POST", "create", true ),
+ EDIT(".ws.rs.PUT", "edit", "{id}" ),
+ REMOVE(".ws.rs.DELETE", "remove", "{id}"),
+ FIND(".ws.rs.GET", "find", "{id}"),
+ FIND_ALL(".ws.rs.GET", "findAll", true),
+ FIND_RANGE(".ws.rs.GET", "findRange", "{from}/{to}"),
+ COUNT(".ws.rs.GET", "countREST", "count");
private String method, methodName, uriPath;
private boolean override;
@@ -50,8 +50,13 @@ public enum Operation implements RestMethod {
this.uriPath = uriPath;
}
- public String getMethod() {
- return method;
+ public String getMethod(Boolean jakartaVariant) {
+ if(jakartaVariant == null || jakartaVariant) {
+ return "jakarta" + method;
+ } else {
+ return "javax" + method;
+ }
+
}
public String getMethodName() {
diff --git
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/api/RestConstants.java
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/api/RestConstants.java
index b8109cc60e..ccdfcb87c9 100644
---
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/api/RestConstants.java
+++
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/api/RestConstants.java
@@ -54,51 +54,93 @@ public class RestConstants {
public static final String REST_API_PACKAGE = "javax.ws.rs.";
//NOI18N
+ public static final String REST_API_PACKAGE_JAKARTA = "jakarta.ws.rs.";
//NOI18N
+
public static final String PROVIDER_ANNOTATION =
"javax.ws.rs.ext.Provider"; //NOI18N
+ public static final String PROVIDER_ANNOTATION_JAKARTA =
"jakarta.ws.rs.ext.Provider"; //NOI18N
+
public static final String JavaEE5_EJB_PACKAGE = "javax.ejb.";
//NOI18N
+
+ public static final String JavaEE5_EJB_PACKAGE_JAKARTA = "jakarta.ejb.";
//NOI18N
public static final String REST_API_CORE_PACKAGE = REST_API_PACKAGE +
"core."; //NOI18N
+
+ public static final String REST_API_CORE_PACKAGE_JAKARTA =
REST_API_PACKAGE_JAKARTA + "core."; //NOI18N
public static final String JERSEY_PACKAGE = "com.sun.jersey.";
//NOI18N
public static final String JERSEY_API_PACKAGE = JERSEY_PACKAGE + "api.";
//NOI18N
public static final String JERSEY_SPI_PACKAGE = JERSEY_PACKAGE + "spi.";
//NOI18M
-
+
public static final String PATH = REST_API_PACKAGE + PATH_ANNOTATION;
+
+ public static final String PATH_JAKARTA = REST_API_PACKAGE_JAKARTA +
PATH_ANNOTATION;
public static final String GET = REST_API_PACKAGE + GET_ANNOTATION;
-
+
+ public static final String GET_JAKARTA = REST_API_PACKAGE_JAKARTA +
GET_ANNOTATION;
+
public static final String POST = REST_API_PACKAGE + POST_ANNOTATION;
+
+ public static final String POST_JAKARTA = REST_API_PACKAGE_JAKARTA +
POST_ANNOTATION;
public static final String PUT = REST_API_PACKAGE + PUT_ANNOTATION;
+
+ public static final String PUT_JAKARTA = REST_API_PACKAGE_JAKARTA +
PUT_ANNOTATION;
public static final String DELETE = REST_API_PACKAGE + DELETE_ANNOTATION;
+
+ public static final String DELETE_JAKARTA = REST_API_PACKAGE_JAKARTA +
DELETE_ANNOTATION;
public static final String PRODUCE_MIME = REST_API_PACKAGE +
PRODUCE_MIME_ANNOTATION;
+
+ public static final String PRODUCE_MIME_JAKARTA = REST_API_PACKAGE_JAKARTA
+ PRODUCE_MIME_ANNOTATION;
public static final String CONSUME_MIME = REST_API_PACKAGE +
CONSUME_MIME_ANNOTATION;
+
+ public static final String CONSUME_MIME_JAKARTA = REST_API_PACKAGE_JAKARTA
+ CONSUME_MIME_ANNOTATION;
public static final String PATH_PARAM = REST_API_PACKAGE +
PATH_PARAM_ANNOTATION;
+
+ public static final String PATH_PARAM_JAKARTA = REST_API_PACKAGE_JAKARTA +
PATH_PARAM_ANNOTATION;
public static final String QUERY_PARAM = REST_API_PACKAGE +
QUERY_PARAM_ANNOTATION;
+
+ public static final String QUERY_PARAM_JAKARTA = REST_API_PACKAGE_JAKARTA
+ QUERY_PARAM_ANNOTATION;
public static final String DEFAULT_VALUE = REST_API_PACKAGE +
DEFAULT_VALUE_ANNOTATION;
+
+ public static final String DEFAULT_VALUE_JAKARTA =
REST_API_PACKAGE_JAKARTA + DEFAULT_VALUE_ANNOTATION;
public static final String WEB_APPLICATION_EXCEPTION = REST_API_PACKAGE +
"WebApplicationException";
+
+ public static final String WEB_APPLICATION_EXCEPTION_JAKARTA =
REST_API_PACKAGE_JAKARTA + "WebApplicationException";
- public static final String HTTP_RESPONSE =
RestConstants.REST_API_CORE_PACKAGE + "Response"; //NOI18N
+ public static final String HTTP_RESPONSE = REST_API_CORE_PACKAGE +
"Response"; //NOI18N
+
+ public static final String HTTP_RESPONSE_JAKARTA =
REST_API_CORE_PACKAGE_JAKARTA + "Response"; //NOI18N
- public static final String RESPONSE_BUILDER =
RestConstants.REST_API_CORE_PACKAGE + "Response.Builder"; //NOI18N
+ public static final String RESPONSE_BUILDER = REST_API_CORE_PACKAGE +
"Response.Builder"; //NOI18N
+
+ public static final String RESPONSE_BUILDER_JAKARTA =
REST_API_CORE_PACKAGE_JAKARTA + "Response.Builder"; //NOI18N
- public static final String ENTITY_TYPE = RestConstants.REST_API_PACKAGE +
"Entity";
+ public static final String ENTITY_TYPE = REST_API_PACKAGE + "Entity";
+
+ public static final String ENTITY_TYPE_JAKARTA = REST_API_PACKAGE_JAKARTA
+ "Entity";
- public static final String CONTEXT = RestConstants.REST_API_CORE_PACKAGE +
"Context"; //NOI18N
+ public static final String CONTEXT = REST_API_CORE_PACKAGE + "Context";
//NOI18N
+
+ public static final String CONTEXT_JAKARTA = REST_API_CORE_PACKAGE_JAKARTA
+ "Context"; //NOI18N
+
+ public static final String URI_INFO = REST_API_CORE_PACKAGE + "UriInfo";
//NOI18N
- public static final String URI_INFO = RestConstants.REST_API_CORE_PACKAGE
+ "UriInfo"; //NOI18N
+ public static final String URI_INFO_JAKARTA =
REST_API_CORE_PACKAGE_JAKARTA + "UriInfo"; //NOI18N
- public static final String URI_BUILDER =
RestConstants.REST_API_CORE_PACKAGE + "UriBuilder"; //NOI18N
+ public static final String URI_BUILDER = REST_API_CORE_PACKAGE +
"UriBuilder"; //NOI18N
+
+ public static final String URI_BUILDER_JAKARTA =
REST_API_CORE_PACKAGE_JAKARTA + "UriBuilder"; //NOI18N
public static final String SINGLETON = JERSEY_SPI_PACKAGE + "resource." +
SINGLETON_ANNOTATION; //NOI18N
@@ -106,9 +148,15 @@ public class RestConstants {
public static final String STATELESS = JavaEE5_EJB_PACKAGE + "Stateless";
//NOI18N
+ public static final String STATELESS_JAKARTA = JavaEE5_EJB_PACKAGE_JAKARTA
+ "Stateless"; //NOI18N
+
public static final String EJB = JavaEE5_EJB_PACKAGE + "EJB"; //NOI18N
+ public static final String EJB_JAKARTA = JavaEE5_EJB_PACKAGE_JAKARTA +
"EJB"; //NOI18N
+
public static final String APPLICATION_PATH = REST_API_PACKAGE +
"ApplicationPath"; //NOI18N
+
+ public static final String APPLICATION_PATH_JAKARTA =
REST_API_PACKAGE_JAKARTA + "ApplicationPath"; //NOI18N
public static final String GET_CLASSES = "getClasses"; //NOI18N
diff --git
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestApplicationsImpl.java
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestApplicationsImpl.java
index 6bcdde7215..81a3dd65b9 100644
---
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestApplicationsImpl.java
+++
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestApplicationsImpl.java
@@ -73,6 +73,7 @@ public class RestApplicationsImpl implements RestApplications
{
public List<RestApplicationImpl> createInitialObjects() throws
InterruptedException {
final Map<TypeElement, RestApplicationImpl> result =
new HashMap<TypeElement, RestApplicationImpl>();
+ findAnnotations(RestConstants.APPLICATION_PATH_JAKARTA,
EnumSet.of(ElementKind.CLASS), result);
findAnnotations(RestConstants.APPLICATION_PATH,
EnumSet.of(ElementKind.CLASS), result);
return new ArrayList<RestApplicationImpl>(result.values());
}
diff --git
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestServicesImpl.java
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestServicesImpl.java
index 71206ee08d..96fbc3113d 100644
---
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestServicesImpl.java
+++
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/RestServicesImpl.java
@@ -159,10 +159,15 @@ public class RestServicesImpl implements RestServices {
new HashMap<TypeElement, RestServiceDescriptionImpl>();
findAnnotation(RestConstants.PATH, EnumSet.of(ElementKind.CLASS),
result);
+ findAnnotation(RestConstants.PATH_JAKARTA,
EnumSet.of(ElementKind.CLASS), result);
findAnnotation(RestConstants.GET, EnumSet.of(ElementKind.METHOD),
result);
+ findAnnotation(RestConstants.GET_JAKARTA,
EnumSet.of(ElementKind.METHOD), result);
findAnnotation(RestConstants.POST, EnumSet.of(ElementKind.METHOD),
result);
+ findAnnotation(RestConstants.POST_JAKARTA,
EnumSet.of(ElementKind.METHOD), result);
findAnnotation(RestConstants.PUT, EnumSet.of(ElementKind.METHOD),
result);
+ findAnnotation(RestConstants.PUT_JAKARTA,
EnumSet.of(ElementKind.METHOD), result);
findAnnotation(RestConstants.DELETE,
EnumSet.of(ElementKind.METHOD), result);
+ findAnnotation(RestConstants.DELETE_JAKARTA,
EnumSet.of(ElementKind.METHOD), result);
return new ArrayList<RestServiceDescriptionImpl>(result.values());
}
@@ -231,6 +236,7 @@ public class RestServicesImpl implements RestServices {
public List<RestProviderDescriptionImpl> createInitialObjects() throws
InterruptedException {
final Map<TypeElement, RestProviderDescriptionImpl> result =
new HashMap<TypeElement, RestProviderDescriptionImpl>();
+ findAnnotation(RestConstants.PROVIDER_ANNOTATION_JAKARTA,
EnumSet.of(ElementKind.CLASS), result);
findAnnotation(RestConstants.PROVIDER_ANNOTATION,
EnumSet.of(ElementKind.CLASS), result);
return new ArrayList<RestProviderDescriptionImpl>(result.values());
}
diff --git
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/Utils.java
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/Utils.java
index 27617b03ba..cc3d0add70 100644
---
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/Utils.java
+++
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/model/impl/Utils.java
@@ -37,6 +37,7 @@ import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.SourceUtils;
import org.netbeans.api.project.Project;
import
org.netbeans.modules.j2ee.metadata.model.api.support.annotation.AnnotationModelHelper;
+import org.netbeans.modules.websvc.rest.model.api.RestApplication;
import org.netbeans.modules.websvc.rest.spi.RestSupport;
import org.openide.filesystems.FileObject;
import org.openide.util.Exceptions;
@@ -50,15 +51,27 @@ public class Utils {
private static final String VALUE = "value"; //NOI18N
public static String getUriTemplate(Element element) {
- return getAnnotationValue(element, RestConstants.PATH, VALUE);
+ if (hasAnnotationType(element, RestConstants.PATH_JAKARTA)) {
+ return getAnnotationValue(element, RestConstants.PATH_JAKARTA,
VALUE);
+ } else {
+ return getAnnotationValue(element, RestConstants.PATH, VALUE);
+ }
}
public static String getConsumeMime(Element element) {
- return getAnnotationValue(element, RestConstants.CONSUME_MIME, VALUE);
+ if (hasAnnotationType(element, RestConstants.CONSUME_MIME_JAKARTA)) {
+ return getAnnotationValue(element,
RestConstants.CONSUME_MIME_JAKARTA, VALUE);
+ } else {
+ return getAnnotationValue(element, RestConstants.CONSUME_MIME,
VALUE);
+ }
}
public static String getProduceMime(Element element) {
- return getAnnotationValue(element, RestConstants.PRODUCE_MIME, VALUE);
+ if (hasAnnotationType(element, RestConstants.PRODUCE_MIME_JAKARTA)) {
+ return getAnnotationValue(element,
RestConstants.PRODUCE_MIME_JAKARTA, VALUE);
+ } else {
+ return getAnnotationValue(element, RestConstants.PRODUCE_MIME,
VALUE);
+ }
}
static void fillQueryParams( Map<String, String> queryParams,
@@ -71,13 +84,19 @@ public class Utils {
List<? extends VariableElement> parameters = method.getParameters();
for (VariableElement variableElement : parameters) {
String paramName = null;
- if ( hasAnnotationType(variableElement,
RestConstants.QUERY_PARAM)){
+ if ( hasAnnotationType(variableElement,
RestConstants.QUERY_PARAM_JAKARTA)){
paramName = getAnnotationValue(variableElement,
+ RestConstants.QUERY_PARAM_JAKARTA, VALUE);
+ } else if ( hasAnnotationType(variableElement,
RestConstants.QUERY_PARAM)){
+ paramName = getAnnotationValue(variableElement,
RestConstants.QUERY_PARAM, VALUE);
}
String defaultValue = null;
- if ( hasAnnotationType(variableElement,
RestConstants.DEFAULT_VALUE)){
+ if ( hasAnnotationType(variableElement,
RestConstants.DEFAULT_VALUE_JAKARTA)){
defaultValue = getAnnotationValue(variableElement,
+ RestConstants.DEFAULT_VALUE_JAKARTA, VALUE);
+ } else if ( hasAnnotationType(variableElement,
RestConstants.DEFAULT_VALUE)){
+ defaultValue = getAnnotationValue(variableElement,
RestConstants.DEFAULT_VALUE, VALUE);
}
if ( paramName != null ){
@@ -87,40 +106,57 @@ public class Utils {
}
public static String getApplicationPath(Element element) {
- return getAnnotationValue(element, RestConstants.APPLICATION_PATH ,
VALUE);
+ if(hasAnnotationType(element, RestConstants.APPLICATION_PATH_JAKARTA))
{
+ return getAnnotationValue(element,
RestConstants.APPLICATION_PATH_JAKARTA, VALUE);
+ } else {
+ return getAnnotationValue(element, RestConstants.APPLICATION_PATH
, VALUE);
+ }
}
public static String getHttpMethod(Element element) {
- if (hasAnnotationType(element, RestConstants.GET)) {
+ if (hasAnnotationType(element, RestConstants.GET_JAKARTA)
+ || hasAnnotationType(element, RestConstants.GET)) {
return RestConstants.GET_ANNOTATION;
- } else if (hasAnnotationType(element, RestConstants.POST)) {
+ } else if (hasAnnotationType(element, RestConstants.POST_JAKARTA)
+ || hasAnnotationType(element, RestConstants.POST)) {
return RestConstants.POST_ANNOTATION;
- } else if (hasAnnotationType(element, RestConstants.PUT)) {
+ } else if (hasAnnotationType(element, RestConstants.PUT_JAKARTA)
+ || hasAnnotationType(element, RestConstants.PUT)) {
return RestConstants.PUT_ANNOTATION;
- } else if (hasAnnotationType(element, RestConstants.DELETE)) {
+ } else if (hasAnnotationType(element, RestConstants.DELETE_JAKARTA)
+ || hasAnnotationType(element, RestConstants.DELETE)) {
return RestConstants.DELETE_ANNOTATION;
}
return null;
}
public static boolean hasUriTemplate(Element element) {
- return hasAnnotationType(element, RestConstants.PATH);
+ return hasAnnotationType(element, RestConstants.PATH_JAKARTA)
+ || hasAnnotationType(element, RestConstants.PATH);
}
public static boolean hasHttpMethod(Element element) {
- return element.getKind() == ElementKind.METHOD &&
- (hasAnnotationType(element, RestConstants.GET) ||
- hasAnnotationType(element, RestConstants.POST) ||
- hasAnnotationType(element, RestConstants.PUT) ||
- hasAnnotationType(element, RestConstants.DELETE));
+ return element.getKind() == ElementKind.METHOD
+ && (
+ hasAnnotationType(element, RestConstants.GET_JAKARTA)
+ || hasAnnotationType(element, RestConstants.GET)
+ || hasAnnotationType(element, RestConstants.POST_JAKARTA)
+ || hasAnnotationType(element, RestConstants.POST)
+ || hasAnnotationType(element, RestConstants.PUT_JAKARTA)
+ || hasAnnotationType(element, RestConstants.PUT)
+ || hasAnnotationType(element, RestConstants.DELETE_JAKARTA)
+ || hasAnnotationType(element, RestConstants.DELETE)
+ );
}
public static boolean hasConsumeMime(Element element) {
- return hasAnnotationType(element, RestConstants.CONSUME_MIME);
+ return hasAnnotationType(element, RestConstants.CONSUME_MIME_JAKARTA)
+ || hasAnnotationType(element, RestConstants.CONSUME_MIME);
}
public static boolean hasProduceMime(Element element) {
- return hasAnnotationType(element, RestConstants.PRODUCE_MIME);
+ return hasAnnotationType(element, RestConstants.PRODUCE_MIME_JAKARTA)
+ || hasAnnotationType(element, RestConstants.PRODUCE_MIME);
}
private static String getAnnotationValue(Element element, String
annotationType, String paramName) {
@@ -190,10 +226,9 @@ public class Utils {
static boolean isRest(TypeElement type, AnnotationModelHelper helper) {
boolean isRest = false;
if (type.getKind() != ElementKind.INTERFACE) { // don't consider
interfaces
-
if (!type.getModifiers().contains(Modifier.ABSTRACT)) {
- if (helper.hasAnnotation(type.getAnnotationMirrors(),
- RestConstants.PATH)) { // NOI18N
+ if (helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.PATH_JAKARTA)
+ || helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.PATH)) {
isRest = true;
} else {
for (Element element : type.getEnclosedElements()) {
@@ -210,8 +245,8 @@ public class Utils {
static boolean isProvider(TypeElement type, AnnotationModelHelper helper) {
if (type.getKind() != ElementKind.INTERFACE) { // don't consider
interfaces
- if (helper.hasAnnotation(type.getAnnotationMirrors(),
- RestConstants.PROVIDER_ANNOTATION)) { // NOI18N
+ if (helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.PROVIDER_ANNOTATION_JAKARTA)
+ || helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.PROVIDER_ANNOTATION)) {
return true;
}
}
@@ -221,7 +256,8 @@ public class Utils {
static boolean isRestApplication(TypeElement type, AnnotationModelHelper
helper) {
boolean isRest = false;
if (type != null && type.getKind() != ElementKind.INTERFACE) { //
don't consider interfaces
- if (helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.APPLICATION_PATH)) { // NOI18N
+ if (helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.APPLICATION_PATH_JAKARTA)
+ || helper.hasAnnotation(type.getAnnotationMirrors(),
RestConstants.APPLICATION_PATH)) {
isRest = true;
}
}
diff --git
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
index 577e3e5443..5ba7a602d1 100644
---
a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
+++
b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
@@ -304,6 +304,7 @@ public abstract class RestSupport {
}
private static ClassPath extendClassPathWithJaxRsApisIfNecessary(ClassPath
classPath) {
+ // @todo: should we also add the jakarta variants?
if (classPath.findResource("javax/ws/rs/core/Application.class") !=
null) {
return classPath;
}
@@ -643,7 +644,8 @@ public abstract class RestSupport {
}
public boolean hasJaxRsOnClasspath(boolean checkServerClasspath) {
- if (MiscPrivateUtilities.hasResource(getProject(),
"javax/ws/rs/core/Application.class")) {
+ if (MiscPrivateUtilities.hasResource(getProject(),
"jakarta/ws/rs/core/Application.class")
+ || MiscPrivateUtilities.hasResource(getProject(),
"javax/ws/rs/core/Application.class")) {
return true;
}
if (checkServerClasspath) {
diff --git
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/action/GenerationOptions.java
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/action/GenerationOptions.java
index 02e296859f..e5059a6890 100644
---
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/action/GenerationOptions.java
+++
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/action/GenerationOptions.java
@@ -20,8 +20,8 @@
package org.netbeans.modules.j2ee.persistence.action;
import java.text.MessageFormat;
+import java.util.Comparator;
import java.util.EnumSet;
-import java.util.HashSet;
import java.util.Set;
import javax.lang.model.element.Modifier;
import org.netbeans.modules.j2ee.persistence.dd.common.Persistence;
@@ -48,49 +48,85 @@ public final class GenerationOptions {
// here the query attribute represents the name of the entity class
FIND_ALL(
"return {0}.createQuery(\"select object(o) from \" +
{5}.getSimpleName() + \" as o\").getResultList();",
- "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));return
{0}.createQuery(cq).getResultList();"
+ "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));return
{0}.createQuery(cq).getResultList();",
+ "jakarta.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));return
{0}.createQuery(cq).getResultList();"
),
//querry to get only items starting from {1}[0] up to {1}[1]-1
FIND_SUBSET(
"javax.persistence.Query q = {0}.createQuery(\"select
object(o) from \" + {5}.getSimpleName() + \" as
o\");\nq.setMaxResults({1}[1]-{1}[0]+1);\nq.setFirstResult({1}[0]);\nreturn
q.getResultList();",
- "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));javax.persistence.Query
q =
{0}.createQuery(cq);q.setMaxResults({1}[1]-{1}[0]+1);q.setFirstResult({1}[0]);return
q.getResultList();"),
+ "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));javax.persistence.Query
q =
{0}.createQuery(cq);q.setMaxResults({1}[1]-{1}[0]+1);q.setFirstResult({1}[0]);return
q.getResultList();",
+ "jakarta.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));jakarta.persistence.Query
q =
{0}.createQuery(cq);q.setMaxResults({1}[1]-{1}[0]+1);q.setFirstResult({1}[0]);return
q.getResultList();"
+ ),
//qurrry to get count(*) on a table
COUNT(
"return ((Long) {0}.createQuery(\"select count(o) from \" +
{5}.getSimpleName() + \" as o\").getSingleResult()).intValue();",
- "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();javax.persistence.criteria.Root<{4}> rt
=
cq.from({5});cq.select({0}.getCriteriaBuilder().count(rt));javax.persistence.Query
q = {0}.createQuery(cq);return ((Long) q.getSingleResult()).intValue();"),
+ "javax.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();javax.persistence.criteria.Root<{4}> rt
=
cq.from({5});cq.select({0}.getCriteriaBuilder().count(rt));javax.persistence.Query
q = {0}.createQuery(cq);return ((Long) q.getSingleResult()).intValue();",
+ "jakarta.persistence.criteria.CriteriaQuery cq =
{0}.getCriteriaBuilder().createQuery();jakarta.persistence.criteria.Root<{4}>
rt =
cq.from({5});cq.select({0}.getCriteriaBuilder().count(rt));jakarta.persistence.Query
q = {0}.createQuery(cq);return ((Long) q.getSingleResult()).intValue();"),
GET_EM("return {0};");
- private String body;
- private String body2_0;
-
- private Operation(String body){
+ private final String body;
+ private final String body2_0;
+ private final String body3_0;
+
+ private Operation(String body) {
this(body, body);
}
- private Operation(String body, String body2_0){
- this.body2_0=body2_0;
+ private Operation(String body, String body2_0) {
+ this(body, body2_0, body2_0);
+ }
+
+ private Operation(String body, String body2_0, String body3_0) {
+ this.body3_0 = body3_0;
+ this.body2_0 = body2_0;
this.body = body;
}
/*
* @return default body (for jpa 1.0)
*/
- public String getBody(){
+ public String getBody() {
return getBody(Persistence.VERSION_1_0);
}
/*
* @return body for corresponding jpa version, default is 1.0
*/
- public String getBody(String version){
- if(version!=null && !Persistence.VERSION_1_0.equals(version))//any
version except 1.0 will get this case
- {
- return body2_0;
+ public String getBody(String version) {
+ if(version == null) {
+ return body;
}
- else {
+ if(JPA_VERSION_COMPARATOR.compare(version,
Persistence.VERSION_3_0) >= 0) {
+ return body3_0;
+ } else if(JPA_VERSION_COMPARATOR.compare(version,
Persistence.VERSION_2_0) >= 0) {
+ return body2_0;
+ } else {
return body;
}
}
+
+ private static final Comparator<String> JPA_VERSION_COMPARATOR = (a,
b) -> {
+ String[] aComponents = a.split("\\D");
+ String[] bComponents = b.split("\\D");
+ for(int i = 0; i < Math.min(aComponents.length,
bComponents.length); i++) {
+ int numA;
+ int numB;
+ try {
+ numA = Integer.parseInt(aComponents[i]);
+ } catch (NumberFormatException ex) {
+ numA = 0;
+ }
+ try {
+ numB = Integer.parseInt(bComponents[i]);
+ } catch (NumberFormatException ex) {
+ numB = 0;
+ }
+ if (numA != numB) {
+ return numA - numB;
+ }
+ }
+ return 0;
+ };
}
private Operation operation;
diff --git
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/EntityClassesPanel.java
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/EntityClassesPanel.java
index 754152d306..34856c72dc 100644
---
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/EntityClassesPanel.java
+++
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/EntityClassesPanel.java
@@ -152,6 +152,7 @@ public class EntityClassesPanel extends javax.swing.JPanel {
}
final String notNullAnnotation =
"javax.validation.constraints.NotNull"; //NOI18N
+ final String notNullAnnotationJakarta =
"jakarta.validation.constraints.NotNull"; //NOI18N
Sources sources=ProjectUtils.getSources(project);
SourceGroup
groups[]=sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
if(groups == null || groups.length<1){
@@ -163,7 +164,8 @@ public class EntityClassesPanel extends javax.swing.JPanel {
if (compile == null) {
return false;
}
- return compile.findResource(notNullAnnotation.replace('.',
'/')+".class")!=null;//NOI18N
+ return compile.findResource(notNullAnnotation.replace('.', '/') +
".class") != null //NOI18N
+ || compile.findResource(notNullAnnotationJakarta.replace('.',
'/') + ".class") != null; //NOI18N
}
public void initialize(PersistenceGenerator persistenceGen, Project
project, FileObject targetFolder) {
@@ -207,7 +209,8 @@ public class EntityClassesPanel extends javax.swing.JPanel {
javaSource.runUserActionTask( (CompilationController controller)
-> {
controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
TypeElement jc =
controller.getElements().getTypeElement("javax.xml.bind.annotation.XmlTransient");
//NOI18N
- if(jc == null){
+ TypeElement jcJakarta =
controller.getElements().getTypeElement("jakarta.xml.bind.annotation.XmlTransient");
//NOI18N
+ if (jc == null && jcJakarta == null) {
generateJAXBCheckBox.setSelected(false);
generateJAXBCheckBox.setEnabled(false);
}
diff --git
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java
index 32c9bf8568..9f40d7f23e 100644
---
a/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java
+++
b/java/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/fromdb/JavaPersistenceGenerator.java
@@ -716,7 +716,7 @@ public class JavaPersistenceGenerator implements
PersistenceGenerator {
annotations.add(genUtils.createAnnotation(enterprisePrefix
+ ".persistence.Basic", basicAnnArguments)); //NOI18N
//Add @NotNull constraint
if (generateValidationConstraints && !m.isAutoIncrement())
{ //NOI18N
-
annotations.add(genUtils.createAnnotation("javax.validation.constraints.NotNull"));
//NOI18N
+
annotations.add(genUtils.createAnnotation(enterprisePrefix +
".validation.constraints.NotNull")); //NOI18N
}
}
@@ -765,7 +765,7 @@ public class JavaPersistenceGenerator implements
PersistenceGenerator {
sizeAnnArguments.add(genUtils.createAnnotationArgument("min", 1)); //NOI18N
}
sizeAnnArguments.add(genUtils.createAnnotationArgument("max", length)); //NOI18N
-
annotations.add(genUtils.createAnnotation("javax.validation.constraints.Size",
sizeAnnArguments)); //NOI18N
+
annotations.add(genUtils.createAnnotation(enterprisePrefix +
".validation.constraints.Size", sizeAnnArguments)); //NOI18N
}
}
if (isDecimalType(memberType) && !decimalCommentExist) {
@@ -954,7 +954,7 @@ public class JavaPersistenceGenerator implements
PersistenceGenerator {
}
if (xmlTransient) {
AnnotationTree xmlTransientAn =
genUtils.createAnnotation(
- "javax.xml.bind.annotation.XmlTransient");
//NOI18N
+ enterprisePrefix +
".xml.bind.annotation.XmlTransient"); //NOI18N
TypeElement jsonIgnore = moduleElement != null
? copy.getElements().getTypeElement(
moduleElement,
@@ -1124,7 +1124,7 @@ public class JavaPersistenceGenerator implements
PersistenceGenerator {
}
if (generateJAXBAnnotations) {
- newClassTree = genUtils.addAnnotation(newClassTree,
genUtils.createAnnotation("javax.xml.bind.annotation.XmlRootElement"));//NOI18N
+ newClassTree = genUtils.addAnnotation(newClassTree,
genUtils.createAnnotation(enterprisePrefix +
".xml.bind.annotation.XmlRootElement"));//NOI18N
/**
* see #228733
* if(jaxbOrder) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists