Skip to content

Commit 92c00ef

Browse files
Merge pull request #8886 from NicolaIsotta/jakarta-bv
Handle jakarta package in bean validation constraint template
2 parents 0a7f461 + 20d986b commit 92c00ef

File tree

7 files changed

+82
-25
lines changed

7 files changed

+82
-25
lines changed

enterprise/javaee.beanvalidation/nbproject/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
# KIND, either express or implied. See the License for the
1515
# specific language governing permissions and limitations
1616
# under the License.
17-
javac.source=1.8
17+
javac.release=17
1818
javac.compilerargs=-Xlint -Xlint:-serial

enterprise/javaee.beanvalidation/nbproject/project.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@
2525
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
2626
<code-name-base>org.netbeans.modules.javaee.beanvalidation</code-name-base>
2727
<module-dependencies>
28+
<dependency>
29+
<code-name-base>org.netbeans.api.java.classpath</code-name-base>
30+
<build-prerequisite/>
31+
<compile-dependency/>
32+
<run-dependency>
33+
<release-version>1</release-version>
34+
<specification-version>1.27</specification-version>
35+
</run-dependency>
36+
</dependency>
2837
<dependency>
2938
<code-name-base>org.netbeans.api.web.webmodule</code-name-base>
3039
<build-prerequisite/>

enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/ConstraintIterator.java

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,23 @@
2222
import java.awt.Component;
2323
import java.io.IOException;
2424
import java.util.ArrayList;
25-
import java.util.Arrays;
2625
import java.util.Collections;
2726
import java.util.HashMap;
28-
import java.util.HashSet;
2927
import java.util.List;
28+
import java.util.Map;
3029
import java.util.NoSuchElementException;
3130
import java.util.Set;
3231
import javax.swing.JComponent;
3332
import javax.swing.event.ChangeListener;
33+
import org.netbeans.api.j2ee.core.Profile;
34+
import org.netbeans.api.java.classpath.ClassPath;
3435
import org.netbeans.api.java.project.JavaProjectConstants;
3536
import org.netbeans.api.project.Project;
3637
import org.netbeans.api.project.ProjectUtils;
3738
import org.netbeans.api.project.SourceGroup;
39+
import org.netbeans.api.project.Sources;
40+
import org.netbeans.modules.javaee.project.api.JavaEEProjectSettings;
41+
import org.netbeans.spi.java.classpath.ClassPathProvider;
3842
import org.netbeans.spi.java.project.support.ui.templates.JavaTemplates;
3943
import org.netbeans.spi.project.ui.templates.support.Templates;
4044
import org.openide.WizardDescriptor;
@@ -50,8 +54,10 @@
5054
*
5155
* @author alexeybutenko
5256
*/
53-
public class ConstraintIterator implements TemplateWizard.Iterator{
54-
57+
public class ConstraintIterator implements TemplateWizard.Iterator {
58+
59+
private static final String JAVAX_CONSTRAINT_CLASS = "javax/validation/Constraint.class";
60+
5561
private transient WizardDescriptor.Panel<WizardDescriptor>[] panels;
5662
private int index;
5763
private final String VALIDATOR_TEMPLATE = "Validator.java"; //NOI18N
@@ -61,30 +67,32 @@ public Set<DataObject> instantiate(TemplateWizard wizard) throws IOException {
6167
FileObject dir = Templates.getTargetFolder( wizard );
6268
DataFolder df = DataFolder.findFolder( dir );
6369
FileObject template = Templates.getTemplate( wizard );
70+
Project project = Templates.getProject(wizard);
71+
boolean jakartaPackage = isJakartaPackage(project);
6472

6573
DataObject dTemplate = DataObject.find( template );
6674
List<String> targetElements = (List<String>) wizard.getProperty(WizardProperties.TARGET_ELEMENTS);
6775
if (targetElements == null) {
68-
targetElements = new ArrayList<String>();
76+
targetElements = new ArrayList<>();
6977
}
7078
String validatorClassName = (String) wizard.getProperty(WizardProperties.VALIDATOR_CLASS_NAME);
7179
String validatorType = (String)wizard.getProperty(WizardProperties.VALIDATOR_TYPE);
7280
boolean generateValidator = validatorClassName !=null;
7381

74-
HashMap<String, Object> templateProperties = new HashMap<String, Object>();
82+
Map<String, Object> templateProperties = new HashMap<>();
7583
templateProperties.put(WizardProperties.TARGET_ELEMENTS, targetElements);
84+
templateProperties.put(WizardProperties.JAKARTA_PACKAGE, jakartaPackage);
7685
if (generateValidator) {
7786
templateProperties.put(WizardProperties.VALIDATOR_CLASS_NAME, validatorClassName);
7887
templateProperties.put(WizardProperties.VALIDATOR_TYPE, validatorType);
7988
}
80-
DataObject dobj = null;
8189
String constraintClass = wizard.getTargetName();
82-
dobj = dTemplate.createFromTemplate(df, constraintClass, templateProperties);
90+
DataObject dobj = dTemplate.createFromTemplate(df, constraintClass, templateProperties);
8391
if (generateValidator) {
8492
FileObject validatorTemplate = template.getParent().getFileObject(VALIDATOR_TEMPLATE);
85-
DataObject validatorDataObject = createValidator(df, validatorTemplate, validatorClassName, validatorType, constraintClass);
86-
if (validatorDataObject !=null) {
87-
return new HashSet<DataObject>(Arrays.asList(new DataObject[]{dobj, validatorDataObject}));
93+
DataObject validatorDataObject = createValidator(df, validatorTemplate, validatorClassName, validatorType, constraintClass, jakartaPackage);
94+
if (validatorDataObject != null) {
95+
return Set.of(dobj, validatorDataObject);
8896
}
8997
}
9098
return Collections.singleton(dobj);
@@ -110,8 +118,8 @@ public void initialize(TemplateWizard wizard) {
110118
// Creating steps.
111119
Object prop = wizard.getProperty(WizardDescriptor.PROP_CONTENT_DATA); // NOI18N
112120
String[] beforeSteps = null;
113-
if (prop instanceof String[]) {
114-
beforeSteps = (String[])prop;
121+
if (prop instanceof String[] strings) {
122+
beforeSteps = strings;
115123
}
116124
String[] steps = createSteps(beforeSteps, panels);
117125

@@ -123,8 +131,7 @@ public void initialize(TemplateWizard wizard) {
123131
// chooser to appear in the list of steps.
124132
steps[i] = c.getName();
125133
}
126-
if (c instanceof JComponent) { // assume Swing components
127-
JComponent jc = (JComponent) c;
134+
if (c instanceof JComponent jc) { // assume Swing components
128135
// Step #.
129136
jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i);
130137
// Step name (actually the whole list for reference).
@@ -196,24 +203,48 @@ public void addChangeListener(ChangeListener l) {
196203
public void removeChangeListener(ChangeListener l) {
197204
}
198205

199-
private static DataObject createValidator(DataFolder df, FileObject template, String className, String type, String constraintClass) {
206+
private static DataObject createValidator(DataFolder df, FileObject template, String className, String type, String constraintClass, boolean jakartaPackage) {
200207
try {
201208
DataObject dTemplate = DataObject.find(template);
202-
HashMap<String, Object> templateProperties = new HashMap<String, Object>();
209+
Map<String, Object> templateProperties = new HashMap<>();
203210
templateProperties.put(WizardProperties.VALIDATOR_TYPE, type);
204211
templateProperties.put(WizardProperties.CONSTRAINT_CLASS_NAME, constraintClass);
212+
templateProperties.put(WizardProperties.JAKARTA_PACKAGE, jakartaPackage);
205213
return dTemplate.createFromTemplate(df, className,templateProperties);
206214

207215
} catch (IOException ex) {
208216
Exceptions.printStackTrace(ex);
209217
}
210218
return null;
211219
}
220+
221+
private static boolean isJakartaPackage(Project project) {
222+
Profile profile = JavaEEProjectSettings.getProfile(project);
223+
if (profile != null) {
224+
return profile.isAtLeast(Profile.JAKARTA_EE_9_WEB);
225+
}
226+
227+
Sources sources = ProjectUtils.getSources(project);
228+
if (sources == null) {
229+
return true;
230+
}
231+
232+
SourceGroup[] sourceGroups = sources.getSourceGroups("java");
233+
if (sourceGroups.length > 0) {
234+
ClassPathProvider cpp = project.getLookup().lookup(ClassPathProvider.class);
235+
ClassPath classPath = cpp.findClassPath(sourceGroups[0].getRootFolder(), ClassPath.COMPILE);
236+
if (classPath != null && classPath.findResource(JAVAX_CONSTRAINT_CLASS) != null) {
237+
return false;
238+
}
239+
}
240+
return true;
241+
}
212242

213243
static class WizardProperties {
214244
public static final String CONSTRAINT_CLASS_NAME = "constraint"; //NOI18N
215245
public static final String VALIDATOR_CLASS_NAME = "validator"; //NOI18N
216246
public static final String VALIDATOR_TYPE = "validatorType"; //NOI18N
217247
public static final String TARGET_ELEMENTS = "targetElements"; //NOI18N
248+
public static final String JAKARTA_PACKAGE = "jakartaPackage";
218249
}
219250
}

enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/resources/Bundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
OpenIDE-Module-Name=Bean Validation
1818
Templates/Bean_Validation=Bean Validation
1919
Templates/Bean_Validation/Constraint.java=Validation Constraint
20+
Templates/Bean_Validation/Validator.java=Constraint Validator
2021
Templates/Bean_Validation/validation.xml=Bean Validation Configuration
2122
Templates/Bean_Validation/constraint.xml=Constraint Mappings

enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/resources/Constraint.template

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,17 @@ import java.lang.annotation.ElementType;
1212
import java.lang.annotation.Retention;
1313
import java.lang.annotation.RetentionPolicy;
1414
import java.lang.annotation.Target;
15+
<#if jakartaPackage?? && jakartaPackage==true>
16+
<#if validator?? && validator != "">
17+
import jakarta.validation.Constraint;
18+
</#if>
19+
import jakarta.validation.Payload;
20+
<#else>
1521
<#if validator?? && validator != "">
1622
import javax.validation.Constraint;
1723
</#if>
1824
import javax.validation.Payload;
25+
</#if>
1926

2027
/**
2128
*
@@ -31,4 +38,4 @@ public @interface ${name} {
3138
String message() default "{${package}.${name}}";
3239
Class<?>[] groups() default {};
3340
Class<? extends Payload>[] payload() default {};
34-
}
41+
}

enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/resources/Validator.template

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77
package ${package};
88
</#if>
99

10+
<#if jakartaPackage?? && jakartaPackage==true>
11+
import jakarta.validation.ConstraintValidator;
12+
import jakarta.validation.ConstraintValidatorContext;
13+
<#else>
1014
import javax.validation.ConstraintValidator;
1115
import javax.validation.ConstraintValidatorContext;
16+
</#if>
1217

1318
/**
1419
*
@@ -25,4 +30,4 @@ public class ${name} implements ConstraintValidator<${constraint}, ${validatorTy
2530
public boolean isValid(${validatorType} value, ConstraintValidatorContext context) {
2631
throw new UnsupportedOperationException("Not supported yet.");
2732
}
28-
}
33+
}

enterprise/javaee.beanvalidation/src/org/netbeans/modules/javaee/beanvalidation/resources/layer.xml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
under the License.
2020
2121
-->
22-
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
22+
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
2323
<filesystem>
2424
<folder name="Templates">
2525
<folder name="Bean_Validation">
26-
<attr name="position" intvalue="701"/>
26+
<attr name="position" intvalue="701"/>
2727
<attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javaee.beanvalidation.resources.Bundle"/>
2828
<attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javaee/beanvalidation/resources/WebInfo.html"/>
2929

@@ -38,11 +38,15 @@
3838
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/java/resources/class.gif"/>
3939
</file>
4040
<file name="Validator.java" url="Validator.template">
41-
<attr name="position" intvalue="0"/>
41+
<attr name="position" intvalue="1004"/>
42+
<attr name="template" boolvalue="true"/>
4243
<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
44+
<attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javaee.beanvalidation.resources.Bundle"/>
45+
<attr name="templateCategory" stringvalue="web-types,j2ee-types"/>
46+
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/java/resources/class.gif"/>
4347
</file>
4448
<file name="validation.xml" url="validation.xml">
45-
<attr name="position" intvalue="1004"/>
49+
<attr name="position" intvalue="1005"/>
4650
<attr name="template" boolvalue="true"/>
4751
<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
4852
<attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javaee/beanvalidation/resources/ValidationConfiguration.html"/>
@@ -51,7 +55,7 @@
5155
<attr name="templateCategory" stringvalue="web-types,j2ee-types"/>
5256
</file>
5357
<file name="constraint.xml" url="constraint.xml">
54-
<attr name="position" intvalue="1005"/>
58+
<attr name="position" intvalue="1006"/>
5559
<attr name="template" boolvalue="true"/>
5660
<attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
5761
<attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javaee/beanvalidation/resources/ValidationMapping.html"/>

0 commit comments

Comments
 (0)