11/**
2- * Copyright (c) 2020-2022 Payara Foundation
2+ * Copyright (c) 2020-2024 Payara Foundation
33 * Copyright (c) 2008-2010 Sonatype, Inc.
44 * All rights reserved. This program and the accompanying materials
55 * are made available under the terms of the Eclipse Public License v2.0
1313import static java .lang .Boolean .TRUE ;
1414import static java .util .stream .Collectors .toList ;
1515
16+ import java .io .BufferedReader ;
17+ import java .io .InputStreamReader ;
18+ import java .io .StringReader ;
19+ import java .net .HttpURLConnection ;
20+ import java .net .URL ;
21+ import java .net .UnknownHostException ;
1622import java .util .ArrayList ;
1723import java .util .Collection ;
1824import java .util .HashMap ;
5359import org .eclipse .ui .INewWizard ;
5460import org .eclipse .ui .IWorkbench ;
5561import org .eclipse .ui .IWorkingSet ;
62+ import org .w3c .dom .Document ;
63+ import org .w3c .dom .NodeList ;
64+ import org .xml .sax .InputSource ;
65+
66+ import javax .xml .parsers .DocumentBuilder ;
67+ import javax .xml .parsers .DocumentBuilderFactory ;
5668
5769public class MicroProjectWizard extends Wizard implements INewWizard {
5870
@@ -75,24 +87,15 @@ public MicroProjectWizard() {
7587 private static final String NAME = "\\ [name\\ ]" ; //$NON-NLS-1$
7688 private static final String PROJECT_NAME_REGEX = "\\ $\\ {[^\\ }]++\\ }" ; //$NON-NLS-1$
7789
78- private static final String ARCHETYPE_GROUP_ID = "fish.payara.maven.archetypes" ; //$NON-NLS-1$
79- private static final String ARCHETYPE_ARTIFACT_ID = "payara-micro-maven-archetype" ; //$NON-NLS-1$
90+ public static final String ARCHETYPE_GROUP_ID = "fish.payara.maven.archetypes" ; //$NON-NLS-1$
91+ public static final String ARCHETYPE_ARTIFACT_ID = "payara-micro-maven-archetype" ; //$NON-NLS-1$
8092 public static final String ARCHETYPE_VERSION_5X = "1.4.0" ; //$NON-NLS-1$
81- public static final String ARCHETYPE_VERSION_6X = "2.0" ; //$NON-NLS-1$
93+ public static final String STARTER_ARCHETYPE_GROUP_ID = "fish.payara.starter" ;
94+ public static final String STARTER_ARCHETYPE_ARTIFACT_ID = "payara-starter-archetype" ;
95+ public static final String ARCHETYPE_VERSION_6X = "1.0-beta9" ; //$NON-NLS-1$
8296 private static final String ARCHETYPE_JDK_VERSION = "jdkVersion" ; //$NON-NLS-1$
8397 private static final String ARCHETYPE_JDK_VERSION_DEFAULT_VALUE = "1.8" ; //$NON-NLS-1$
8498 public static final String ARCHETYPE_MICRO_VERSION = "payaraMicroVersion" ; //$NON-NLS-1$
85- private static final String ARCHETYPE_MICRO_VERSION_DEFAULT_VALUE = "6.2023.2" ; //$NON-NLS-1$
86- public static final String [] ARCHETYPE_MICRO_VERSIONS = new String []{"6.2023.2" , "6.2023.1" , "6.2022.2" , "6.2022.1" ,
87- "5.2022.5" , "5.2022.4" , "5.2022.3" ,
88- "5.2022.2" , "5.2022.1" , "5.2021.10" ,
89- "5.2021.9" , "5.2021.8" , "5.2021.7" ,
90- "5.2021.6" , "5.2021.5" , "5.2021.4" ,
91- "5.2021.3" , "5.2021.2" , "5.2021.1" ,
92- "5.2020.7" , "5.2020.6" , "5.2020.5" ,
93- "5.2020.4" , "5.2020.3" , "5.2020.2" ,
94- "5.201" , "5.194" , "5.193.1" , "5.192" ,
95- "5.191" , "5.184" , "5.183" , "5.182" , "5.181" }; //$NON-NLS-1$
9699 public static final String ARCHETYPE_AUTOBIND_HTTP = "autoBindHttp" ; //$NON-NLS-1$
97100 private static final String ARCHETYPE_CONCURRENT_API = "addConcurrentApi" ; //$NON-NLS-1$
98101 private static final String ARCHETYPE_RESOURCE_API = "addResourceApi" ; //$NON-NLS-1$
@@ -105,6 +108,57 @@ public MicroProjectWizard() {
105108 private static final String ARCHETYPE_DEPLOY_WAR = "deployWar" ; //$NON-NLS-1$
106109 private static final String EMPTY = "" ; //$NON-NLS-1$
107110
111+
112+ public static final String DEFAULT_REPOSITORY_URL = "https://repo1.maven.org/maven2/" ; // NOI18N
113+
114+ private static final String METADATA_URL = "fish/payara/extras/payara-micro/maven-metadata.xml" ; // NOI18N
115+
116+ private static final List <String > versions = new ArrayList <>();
117+ public static List <String > getVersions () {
118+ if (versions .isEmpty ()) {
119+ try {
120+ // Construct the full URL
121+ String urlString = DEFAULT_REPOSITORY_URL + METADATA_URL ;
122+ URL url = new URL (urlString );
123+
124+ // Open connection
125+ HttpURLConnection connection = (HttpURLConnection ) url .openConnection ();
126+ connection .setRequestMethod ("GET" );
127+
128+ // Read the response
129+ BufferedReader in = new BufferedReader (new InputStreamReader (connection .getInputStream ()));
130+ StringBuilder xmlResponse = new StringBuilder ();
131+ String line ;
132+ while ((line = in .readLine ()) != null ) {
133+ xmlResponse .append (line );
134+ }
135+ in .close ();
136+
137+ // Parse the XML response
138+ DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance ();
139+ DocumentBuilder builder = factory .newDocumentBuilder ();
140+ Document doc = builder .parse (new InputSource (new StringReader (xmlResponse .toString ())));
141+
142+ String latest = doc .getElementsByTagName ("latest" ).item (0 ).getTextContent ();
143+ // Extract versions
144+ NodeList versionNodes = doc .getElementsByTagName ("version" );
145+ for (int i = versionNodes .getLength () - 1 ; i >= 0 ; i --) {
146+ String version = versionNodes .item (i ).getTextContent ();
147+ if ((version .contains ("Alpha" ) || version .contains ("Beta" ) || version .contains ("SNAPSHOT" )) // NOI18N
148+ && !version .equals (latest )) {
149+ continue ;
150+ };
151+ versions .add (version );
152+ }
153+
154+ } catch (Exception e ) {
155+ e .printStackTrace ();
156+ }
157+
158+ }
159+ return versions ;
160+ }
161+
108162 @ Override
109163 public void init (IWorkbench workbench , IStructuredSelection selection ) {
110164 this .selection = selection ;
@@ -134,12 +188,12 @@ public void createPageControls(Composite pageContainer) {
134188
135189 private Archetype getArchetype () {
136190 Archetype archetype = new Archetype ();
137- archetype .setGroupId (ARCHETYPE_GROUP_ID );
138- archetype .setArtifactId (ARCHETYPE_ARTIFACT_ID );
191+ archetype .setGroupId (STARTER_ARCHETYPE_GROUP_ID );
192+ archetype .setArtifactId (STARTER_ARCHETYPE_ARTIFACT_ID );
139193 archetype .setVersion (ARCHETYPE_VERSION_6X );
140194 Properties properties = new Properties ();
141195 properties .put (ARCHETYPE_JDK_VERSION , ARCHETYPE_JDK_VERSION_DEFAULT_VALUE );
142- properties .put (ARCHETYPE_MICRO_VERSION , ARCHETYPE_MICRO_VERSION_DEFAULT_VALUE );
196+ properties .put (ARCHETYPE_MICRO_VERSION , getVersions (). get ( 0 ) );
143197 properties .put (ARCHETYPE_AUTOBIND_HTTP , TRUE .toString ());
144198 properties .put (ARCHETYPE_CONCURRENT_API , FALSE .toString ());
145199 properties .put (ARCHETYPE_RESOURCE_API , FALSE .toString ());
0 commit comments