2222import java .awt .Component ;
2323import java .io .IOException ;
2424import java .util .ArrayList ;
25- import java .util .Arrays ;
2625import java .util .Collections ;
2726import java .util .HashMap ;
28- import java .util .HashSet ;
2927import java .util .List ;
28+ import java .util .Map ;
3029import java .util .NoSuchElementException ;
3130import java .util .Set ;
3231import javax .swing .JComponent ;
3332import javax .swing .event .ChangeListener ;
33+ import org .netbeans .api .j2ee .core .Profile ;
34+ import org .netbeans .api .java .classpath .ClassPath ;
3435import org .netbeans .api .java .project .JavaProjectConstants ;
3536import org .netbeans .api .project .Project ;
3637import org .netbeans .api .project .ProjectUtils ;
3738import 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 ;
3842import org .netbeans .spi .java .project .support .ui .templates .JavaTemplates ;
3943import org .netbeans .spi .project .ui .templates .support .Templates ;
4044import org .openide .WizardDescriptor ;
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}
0 commit comments