Skip to content

Commit 086955c

Browse files
G-OrkHannesWell
authored andcommitted
Bug 571572 - UI for setting the location of the toolchain.xml files #114
1 parent df3d38b commit 086955c

File tree

11 files changed

+115
-2
lines changed

11 files changed

+115
-2
lines changed

org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-SymbolicName: org.eclipse.m2e.core.ui;singleton:=true
4-
Bundle-Version: 2.0.7.qualifier
4+
Bundle-Version: 2.0.8.qualifier
55
Bundle-RequiredExecutionEnvironment: JavaSE-17
66
Bundle-Name: %Bundle-Name
77
Bundle-Vendor: %Bundle-Vendor

org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/Messages.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,10 @@ public class Messages extends NLS {
569569

570570
public static String MavenSettingsPreferencePage_error_userSettingsParse;
571571

572+
public static String MavenSettingsPreferencePage_error_userToolchainsMissing;
573+
574+
public static String MavenSettingsPreferencePage_error_userToolchainsParse;
575+
572576
public static String MavenSettingsPreferencePage_job_indexing;
573577

574578
public static String MavenSettingsPreferencePage_job_updating;
@@ -603,6 +607,12 @@ public class Messages extends NLS {
603607

604608
public static String MavenWarningsPreferencePage_notCoveredMojoExecution;
605609

610+
public static String MavenSettingsPreferencePage_userToolchainslink1;
611+
612+
public static String MavenSettingsPreferencePage_userToolchainslink2;
613+
614+
public static String MavenSettingsPreferencePage_userToolchainslink_tooltip;
615+
606616
public static String MavenWarningsPreferencePage_versionDupParent;
607617

608618
public static String MavenWarningsPreferencePage_overridingManagedPreferences;

org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/messages.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,17 @@ MavenSettingsPreferencePage_error_globalSettingsMissing=Global settings file doe
315315
MavenSettingsPreferencePage_error_userSettingsMissing=User settings file doesn't exist
316316
MavenSettingsPreferencePage_error_globalSettingsParse=Unable to parse global settings file {0}
317317
MavenSettingsPreferencePage_error_userSettingsParse=Unable to parse user settings file {0}
318+
MavenSettingsPreferencePage_error_userToolchainsMissing=User toolchains file doesn't exist
319+
MavenSettingsPreferencePage_error_userToolchainsParse=Unable to parse user toolchains file {0}
318320
MavenSettingsPreferencePage_job_indexing=Indexing Local Repository...
319321
MavenSettingsPreferencePage_job_updating=Updating Maven settings
320322
MavenSettingsPreferencePage_lblLocal=Local Repository (From merged user and global settings)\:
321323
MavenSettingsPreferencePage_userSettingslink1=User &Settings\:
322324
MavenSettingsPreferencePage_userSettingslink2=User &Settings (<a href\="\#">open file</a>)\:
323325
MavenSettingsPreferencePage_userSettingslink_tooltip=Open editor for user settings
326+
MavenSettingsPreferencePage_userToolchainslink1=User &Toolchains\:
327+
MavenSettingsPreferencePage_userToolchainslink2=User &Toolchains (<a href\="\#">open file</a>)\:
328+
MavenSettingsPreferencePage_userToolchainslink_tooltip=Open editor for user toolchains
324329
MavenSettingsPreferencePage_globalSettingslink1=Global &Settings\:
325330
MavenSettingsPreferencePage_globalSettingslink2=Global &Settings (<a href\="\#">open file</a>)\:
326331
MavenSettingsPreferencePage_globalSettingslink_tooltip=Open editor for global settings

org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/preferences/MavenSettingsPreferencePage.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
import org.eclipse.ui.ide.FileStoreEditorInput;
5959
import org.eclipse.ui.ide.IDE;
6060

61+
import org.apache.maven.building.Problem;
62+
import org.apache.maven.cli.MavenCli;
6163
import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor;
6264
import org.apache.maven.repository.RepositorySystem;
6365
import org.apache.maven.settings.Settings;
@@ -66,6 +68,7 @@
6668
import org.eclipse.m2e.core.MavenPlugin;
6769
import org.eclipse.m2e.core.embedder.IMaven;
6870
import org.eclipse.m2e.core.embedder.IMavenConfiguration;
71+
import org.eclipse.m2e.core.internal.IMavenToolbox;
6972
import org.eclipse.m2e.core.project.IMavenProjectFacade;
7073
import org.eclipse.m2e.core.project.MavenUpdateRequest;
7174
import org.eclipse.m2e.core.ui.internal.Messages;
@@ -95,6 +98,10 @@ public class MavenSettingsPreferencePage extends PreferencePage implements IWork
9598

9699
private Link userSettingsLink;
97100

101+
private Link userToolchainsLink;
102+
103+
private Text userToolchainsText;
104+
98105
public MavenSettingsPreferencePage() {
99106
setTitle(Messages.MavenSettingsPreferencePage_title);
100107

@@ -119,10 +126,12 @@ protected void updateSettings(boolean updateMavenDependencies) {
119126
updateLocalRepository();
120127

121128
String userSettings = getUserSettings();
129+
String userToolchains = getUserToolchains();
122130
String globalSettings = getGlobalSettings();
123131

124132
if(Objects.equals(globalSettings, mavenConfiguration.getGlobalSettingsFile())
125-
&& Objects.equals(userSettings, mavenConfiguration.getUserSettingsFile())) {
133+
&& Objects.equals(userSettings, mavenConfiguration.getUserSettingsFile())
134+
&& Objects.equals(userToolchains, mavenConfiguration.getUserToolchainsFile())) {
126135
return; // current preferences not changed
127136
}
128137

@@ -142,6 +151,7 @@ protected void updateSettings(boolean updateMavenDependencies) {
142151
// this clears cached settings.xml instance
143152
mavenConfiguration.setGlobalSettingsFile(globalSettings);
144153
mavenConfiguration.setUserSettingsFile(userSettings);
154+
mavenConfiguration.setUserToolchainsFile(userToolchains);
145155

146156
if(Boolean.TRUE.equals(updateProjects[0])) {
147157
List<IMavenProjectFacade> projects = MavenPlugin.getMavenProjectRegistry().getProjects();
@@ -198,6 +208,12 @@ protected Control createContents(Composite parent) {
198208
userSettingsText = createFileSelectionWidgets(composite, mavenConfiguration.getUserSettingsFile(),
199209
SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE);
200210

211+
userToolchainsLink = createLink(composite, Messages.MavenSettingsPreferencePage_userToolchainslink2,
212+
Messages.MavenSettingsPreferencePage_userToolchainslink_tooltip, this::getUserToolchains,
213+
MavenCli.DEFAULT_USER_TOOLCHAINS_FILE);
214+
userToolchainsText = createFileSelectionWidgets(composite, mavenConfiguration.getUserToolchainsFile(),
215+
MavenCli.DEFAULT_USER_TOOLCHAINS_FILE);
216+
201217
Button updateSettings = new Button(composite, SWT.NONE);
202218
updateSettings.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
203219
updateSettings.setText(Messages.MavenSettingsPreferencePage_btnUpdate);
@@ -293,13 +309,21 @@ protected void checkSettings() {
293309
updateLink(userSettingsLink, userSettings, SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE,
294310
Messages.MavenSettingsPreferencePage_userSettingslink2, Messages.MavenSettingsPreferencePage_userSettingslink1);
295311

312+
String userToolchains = getUserToolchains();
313+
updateLink(userToolchainsLink, userToolchains, MavenCli.DEFAULT_USER_TOOLCHAINS_FILE,
314+
Messages.MavenSettingsPreferencePage_userToolchainslink2,
315+
Messages.MavenSettingsPreferencePage_userToolchainslink1);
316+
296317
setMessage(null);
297318
checkSettings(globalSettings, Messages.MavenSettingsPreferencePage_error_globalSettingsMissing,
298319
l -> maven.validateSettings(l).stream().map(SettingsProblem::getMessage),
299320
Messages.MavenSettingsPreferencePage_error_globalSettingsParse);
300321
checkSettings(userSettings, Messages.MavenSettingsPreferencePage_error_userSettingsMissing,
301322
l -> maven.validateSettings(l).stream().map(SettingsProblem::getMessage),
302323
Messages.MavenSettingsPreferencePage_error_userSettingsParse);
324+
checkSettings(userToolchains, Messages.MavenSettingsPreferencePage_error_userToolchainsMissing,
325+
l -> IMavenToolbox.of(maven).validateToolchains(l).stream().map(Problem::getMessage),
326+
Messages.MavenSettingsPreferencePage_error_userToolchainsParse);
303327
}
304328

305329
private void checkSettings(String location, String errorMissing, Function<String, Stream<String>> validator,
@@ -343,6 +367,10 @@ private String getUserSettings() {
343367
return getSettings(userSettingsText);
344368
}
345369

370+
private String getUserToolchains() {
371+
return getSettings(userToolchainsText);
372+
}
373+
346374
private String getGlobalSettings() {
347375
return getSettings(globalSettingsText);
348376
}

org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public interface IMavenConfiguration {
5555

5656
void setUserSettingsFile(String absolutePath) throws CoreException;
5757

58+
String getUserToolchainsFile();
59+
60+
void setUserToolchainsFile(String absolutePath) throws CoreException;
61+
5862
// resolution
5963

6064
boolean isDownloadSources();

org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenToolbox.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
import org.eclipse.osgi.util.NLS;
3535

3636
import org.apache.maven.DefaultMaven;
37+
import org.apache.maven.building.FileSource;
38+
import org.apache.maven.building.Problem;
39+
import org.apache.maven.building.ProblemCollector;
40+
import org.apache.maven.building.ProblemCollectorFactory;
3741
import org.apache.maven.execution.DefaultMavenExecutionResult;
3842
import org.apache.maven.execution.MavenExecutionRequest;
3943
import org.apache.maven.execution.MavenExecutionResult;
@@ -50,6 +54,11 @@
5054
import org.apache.maven.project.ProjectBuildingException;
5155
import org.apache.maven.project.ProjectBuildingRequest;
5256
import org.apache.maven.project.ProjectBuildingResult;
57+
import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest;
58+
import org.apache.maven.toolchain.building.ToolchainsBuilder;
59+
import org.apache.maven.toolchain.building.ToolchainsBuildingException;
60+
import org.apache.maven.toolchain.building.ToolchainsBuildingRequest;
61+
import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
5362

5463
import org.eclipse.m2e.core.embedder.IComponentLookup;
5564
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
@@ -237,6 +246,39 @@ default Model readModel(InputStream in) throws CoreException {
237246
}
238247
}
239248

249+
/**
250+
* Validates the toolchains definition
251+
*
252+
* @param toolchains The path to the toolchains definition file to test.
253+
* @return List of all problems. Is never <code>null</code>.
254+
* @throws CoreException if reading failed
255+
*/
256+
default List<Problem> validateToolchains(String toolchains) {
257+
List<Problem> problems = new ArrayList<>();
258+
if(toolchains != null) {
259+
File toolchainsFile = new File(toolchains);
260+
ProblemCollector problemsFactory = ProblemCollectorFactory.newInstance(null);
261+
if(toolchainsFile.canRead()) {
262+
ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
263+
request.setUserToolchainsSource(new FileSource(toolchainsFile));
264+
try {
265+
ToolchainsBuildingResult result = getComponentLookup().orElseThrow(ERROR_NO_LOOKUP).lookup(ToolchainsBuilder.class).build(request);
266+
problems.addAll(result.getProblems());
267+
} catch(ToolchainsBuildingException ex) {
268+
problems.addAll(ex.getProblems());
269+
} catch(CoreException ex) {
270+
problemsFactory.add(Problem.Severity.FATAL, toolchains, -1, -1, ex);
271+
problems.addAll(problemsFactory.getProblems());
272+
}
273+
} else {
274+
problemsFactory.add(Problem.Severity.ERROR, NLS.bind(Messages.MavenImpl_error_read_toolchains, toolchains), -1,
275+
-1, null);
276+
problems.addAll(problemsFactory.getProblems());
277+
}
278+
}
279+
return problems;
280+
}
281+
240282
/**
241283
* Writes the given model to the output stream, the default implementation of this requires a lookup.
242284
*

org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ public class Messages extends NLS {
132132

133133
public static String MavenImpl_error_read_settings2;
134134

135+
public static String MavenImpl_error_read_toolchains;
136+
135137
public static String MavenImpl_error_resolve;
136138

137139
public static String MavenImpl_error_sort;

org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExecutionContext.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.maven.artifact.Artifact;
4545
import org.apache.maven.artifact.InvalidRepositoryException;
4646
import org.apache.maven.artifact.repository.ArtifactRepository;
47+
import org.apache.maven.cli.MavenCli;
4748
import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor;
4849
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
4950
import org.apache.maven.execution.DefaultMavenExecutionRequest;
@@ -176,6 +177,13 @@ static MavenExecutionRequest createExecutionRequest(IMavenConfiguration mavenCon
176177
request.setUserSettingsFile(userSettingsFile);
177178

178179
//and settings are actually derived from IMavenConfiguration
180+
181+
File userToolchainsFile = MavenCli.DEFAULT_USER_TOOLCHAINS_FILE;
182+
if(mavenConfiguration.getUserToolchainsFile() != null) {
183+
userToolchainsFile = new File(mavenConfiguration.getUserToolchainsFile());
184+
}
185+
request.setUserToolchainsFile(userToolchainsFile);
186+
179187
try {
180188
request = lookup.lookup(MavenExecutionRequestPopulator.class).populateFromSettings(request, settings);
181189
} catch(MavenExecutionRequestPopulationException ex) {

org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ MavenImpl_error_read_pom=Could not read pom.xml
5757
MavenImpl_error_read_project=Could not read maven project
5858
MavenImpl_error_read_settings=Could not read settings.xml
5959
MavenImpl_error_read_settings2=Can not read settings file {0}
60+
MavenImpl_error_read_toolchains=Can not read toolchains file {0}
6061
MavenImpl_error_resolve=Could not resolve artifact {0}
6162
MavenImpl_error_sort=unable to sort projects
6263
MavenImpl_error_write_lastUpdated=Could not write artifact lastUpdated status

org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ public String getUserSettingsFile() {
102102
return getStringPreference(MavenPreferenceConstants.P_USER_SETTINGS_FILE, null);
103103
}
104104

105+
@Override
106+
public String getUserToolchainsFile() {
107+
return getStringPreference(MavenPreferenceConstants.P_USER_TOOLCHAINS_FILE, null);
108+
}
109+
105110
@Override
106111
public boolean isDebugOutput() {
107112
return getBooleanPreference(MavenPreferenceConstants.P_DEBUG_OUTPUT);
@@ -149,6 +154,11 @@ public void setGlobalSettingsFile(String globalSettingsFile) throws CoreExceptio
149154
setSettingsFile(globalSettingsFile, MavenPreferenceConstants.P_GLOBAL_SETTINGS_FILE);
150155
}
151156

157+
@Override
158+
public void setUserToolchainsFile(String settingsFile) throws CoreException {
159+
setSettingsFile(settingsFile, MavenPreferenceConstants.P_USER_TOOLCHAINS_FILE);
160+
}
161+
152162
private void setSettingsFile(String settingsFile, String preferenceKey) throws CoreException {
153163
if(settingsFile != null) {
154164
settingsFile = settingsFile.isBlank() ? null : settingsFile.strip();

0 commit comments

Comments
 (0)