Skip to content

Commit

Permalink
Unify Maven configuration preference handling
Browse files Browse the repository at this point in the history
  • Loading branch information
HannesWell committed Feb 4, 2024
1 parent 3aa12f5 commit c59be81
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 178 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ public class Messages extends NLS {

public static String MavenRepositoryView_update_one;

public static String MavenSettingsPreferencePage_userSettingsBrowseButton_text;
public static String MavenSettingsPreferencePage_settingsBrowseButton_text;

public static String MavenSettingsPreferencePage_btnUpdate;

Expand Down Expand Up @@ -1025,8 +1025,6 @@ public class Messages extends NLS {

public static String MavenInstallationWizardPage_selectProjectTitle;

public static String MavenSettingsPreferencePage_globalSettingsBrowseButton_text;

public static String MavenProjectWizardArchetypeParametersPage_runInteractive;

static {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,13 +309,12 @@ MavenRepositoryView_reload_msg=This will reload the settings.xml and rebuild the
MavenRepositoryView_reload_title=Reload settings.xml
MavenRepositoryView_update_more=Update Indexes
MavenRepositoryView_update_one=Update Index
MavenSettingsPreferencePage_userSettingsBrowseButton_text=Browse...
MavenSettingsPreferencePage_settingsBrowseButton_text=Browse...
MavenSettingsPreferencePage_btnUpdate=Update Settings
MavenSettingsPreferencePage_error_globalSettingsMissing=Global settings file doesn't exist
MavenSettingsPreferencePage_error_userSettingsMissing=User settings file doesn't exist
MavenSettingsPreferencePage_error_globalSettingsParse=Unable to parse global settings file {0}
MavenSettingsPreferencePage_error_userSettingsParse=Unable to parse user settings file {0}
MavenSettingsPreferencePage_globalSettingsBrowseButton_text=Browse...
MavenSettingsPreferencePage_job_indexing=Indexing Local Repository...
MavenSettingsPreferencePage_job_updating=Updating Maven settings
MavenSettingsPreferencePage_lblLocal=Local Repository (From merged user and global settings)\:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -32,7 +35,7 @@
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
Expand Down Expand Up @@ -118,11 +121,9 @@ protected void updateSettings(boolean updateMavenDependencies) {
String userSettings = getUserSettings();
String globalSettings = getGlobalSettings();

String currentGlobalSettings = mavenConfiguration.getGlobalSettingsFile();
String currentUserSettings = mavenConfiguration.getUserSettingsFile();

if(Objects.equals(globalSettings, currentGlobalSettings) && Objects.equals(currentUserSettings, userSettings)) {
return;
if(Objects.equals(globalSettings, mavenConfiguration.getGlobalSettingsFile())
&& Objects.equals(userSettings, mavenConfiguration.getUserSettingsFile())) {
return; // current preferences not changed
}

Boolean[] updateProjects = new Boolean[1];
Expand Down Expand Up @@ -187,50 +188,30 @@ protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));

globalSettingsLink = new Link(composite, SWT.NONE);
globalSettingsLink.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
globalSettingsLink.setText(Messages.MavenSettingsPreferencePage_globalSettingslink2);
globalSettingsLink.setToolTipText(Messages.MavenSettingsPreferencePage_globalSettingslink_tooltip);
globalSettingsLink.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
String globalSettings = getGlobalSettings();
if(globalSettings != null) {
openEditor(globalSettings);
}
}));

globalSettingsText = new Text(composite, SWT.BORDER);
globalSettingsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

Button globalSettingsBrowseButton = new Button(composite, SWT.NONE);
globalSettingsBrowseButton.setText(Messages.MavenSettingsPreferencePage_globalSettingsBrowseButton_text);
globalSettingsBrowseButton
.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> browseSettingsAction(globalSettingsText)));

userSettingsLink = new Link(composite, SWT.NONE);
userSettingsLink.setText(Messages.MavenSettingsPreferencePage_userSettingslink2);
userSettingsLink.setToolTipText(Messages.MavenSettingsPreferencePage_userSettingslink_tooltip);
userSettingsLink.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
userSettingsLink.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
String userSettings = getUserSettings();
if(userSettings == null) {
userSettings = SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE.getAbsolutePath();
}
openEditor(userSettings);
}));
userSettingsText = new Text(composite, SWT.BORDER);
userSettingsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
userSettingsText.setMessage(SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE.getAbsolutePath());

Button userSettingsBrowseButton = new Button(composite, SWT.NONE);
userSettingsBrowseButton.setLayoutData(new GridData(SWT.FILL, SWT.RIGHT, false, false, 1, 1));
userSettingsBrowseButton.setText(Messages.MavenSettingsPreferencePage_userSettingsBrowseButton_text);
userSettingsBrowseButton
.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> browseSettingsAction(userSettingsText)));
globalSettingsLink = createLink(composite, Messages.MavenSettingsPreferencePage_globalSettingslink2,
Messages.MavenSettingsPreferencePage_globalSettingslink_tooltip, e -> {
if(getGlobalSettings() != null) {
openEditor(getGlobalSettings());
}
});
globalSettingsText = createFileSelectionWidgets(composite, mavenConfiguration.getGlobalSettingsFile(), null);

userSettingsLink = createLink(composite, Messages.MavenSettingsPreferencePage_userSettingslink2,
Messages.MavenSettingsPreferencePage_userSettingslink_tooltip, e -> {
String userSettings = getUserSettings();
if(userSettings == null) {
userSettings = SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE.getAbsolutePath();
}
openEditor(userSettings);
});
userSettingsText = createFileSelectionWidgets(composite, mavenConfiguration.getUserSettingsFile(),
SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE);

Button updateSettings = new Button(composite, SWT.NONE);
updateSettings.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
updateSettings.setText(Messages.MavenSettingsPreferencePage_btnUpdate);
updateSettings.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> updateSettings(true)));

Label localRepositoryLabel = new Label(composite, SWT.NONE);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
gd.verticalIndent = 25;
Expand All @@ -242,48 +223,46 @@ protected Control createContents(Composite parent) {
localRepositoryText.setData("name", "localRepositoryText"); //$NON-NLS-1$ //$NON-NLS-2$
localRepositoryText.setEditable(false);

ModifyListener settingsModifyListener = modifyevent -> {
updateLocalRepository();
checkSettings();
};
userSettingsText.addModifyListener(settingsModifyListener);
globalSettingsText.addModifyListener(settingsModifyListener);

String globalSettings = mavenConfiguration.getGlobalSettingsFile();
if(globalSettings != null) {
globalSettingsText.setText(globalSettings);
}
String userSettings = mavenConfiguration.getUserSettingsFile();
if(userSettings != null) {
userSettingsText.setText(userSettings);
}
checkSettings();
updateLocalRepository();

return composite;
}

private void updateUserSettingsLink(String userSettings) {
File userSettingsFile = SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE;
if(userSettings != null) {
userSettingsFile = new File(userSettings);
}
boolean active = userSettingsFile.canRead();
private Link createLink(Composite composite, String text, String tooltip, Consumer<SelectionEvent> handler) {
Link link = new Link(composite, SWT.NONE);
link.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
link.setText(text);
link.setToolTipText(tooltip);
link.addSelectionListener(SelectionListener.widgetSelectedAdapter(handler));
return link;
}

String text = Messages.MavenSettingsPreferencePage_userSettingslink1;
if(active) {
text = Messages.MavenSettingsPreferencePage_userSettingslink2;
private Text createFileSelectionWidgets(Composite composite, String selectedFile, File defaultFile) {
Text fileText = new Text(composite, SWT.BORDER);
fileText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
if(defaultFile != null) {
fileText.setMessage(defaultFile.getAbsolutePath());
}
if(selectedFile != null) {
fileText.setText(selectedFile);
}
userSettingsLink.setText(text);
fileText.addModifyListener(modifyevent -> {
updateLocalRepository();
checkSettings();
});

Button browseButton = new Button(composite, SWT.NONE);
browseButton.setLayoutData(new GridData(SWT.FILL, SWT.RIGHT, false, false, 1, 1));
browseButton.setText(Messages.MavenSettingsPreferencePage_settingsBrowseButton_text);
browseButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> browseSettingsAction(fileText)));
return fileText;
}

private void updateGlobalSettingsLink(String globalSettings) {
boolean active = globalSettings != null && new File(globalSettings).canRead();
String text = Messages.MavenSettingsPreferencePage_globalSettingslink1;
if(active) {
text = Messages.MavenSettingsPreferencePage_globalSettingslink2;
}
globalSettingsLink.setText(text);
private void updateLink(Link link, String path, File defaultFile, String activeText, String inactiveText) {
File file = path != null ? new File(path) : defaultFile;
boolean active = file != null && file.canRead();
link.setText(active ? activeText : inactiveText);
}

protected void updateLocalRepository() {
Expand All @@ -310,32 +289,33 @@ protected void checkSettings() {
// NB: enable/disable links regardless of validation errors

String globalSettings = getGlobalSettings();
updateGlobalSettingsLink(globalSettings);
updateLink(globalSettingsLink, globalSettings, null, Messages.MavenSettingsPreferencePage_globalSettingslink2,
Messages.MavenSettingsPreferencePage_globalSettingslink1);

String userSettings = getUserSettings();
updateUserSettingsLink(userSettings);

if(globalSettings != null
&& !checkSettings(globalSettings, Messages.MavenSettingsPreferencePage_error_globalSettingsMissing,
Messages.MavenSettingsPreferencePage_error_globalSettingsParse)) {
//work is done in if-condition
} else if(userSettings != null) {
checkSettings(userSettings, Messages.MavenSettingsPreferencePage_error_userSettingsMissing,
Messages.MavenSettingsPreferencePage_error_userSettingsParse);
}
updateLink(userSettingsLink, userSettings, SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE,
Messages.MavenSettingsPreferencePage_userSettingslink2, Messages.MavenSettingsPreferencePage_userSettingslink1);

setMessage(null);
checkSettings(globalSettings, Messages.MavenSettingsPreferencePage_error_globalSettingsMissing,
l -> maven.validateSettings(l).stream().map(SettingsProblem::getMessage),
Messages.MavenSettingsPreferencePage_error_globalSettingsParse);
checkSettings(userSettings, Messages.MavenSettingsPreferencePage_error_userSettingsMissing,
l -> maven.validateSettings(l).stream().map(SettingsProblem::getMessage),
Messages.MavenSettingsPreferencePage_error_userSettingsParse);
}

private boolean checkSettings(String location, String errorMissing, String errorParse) {
if(!new File(location).canRead()) {
setMessage(errorMissing, IMessageProvider.WARNING);
return false;
}
List<SettingsProblem> result = maven.validateSettings(location);
if(!result.isEmpty()) {
setMessage(NLS.bind(errorParse, result.get(0).getMessage()), IMessageProvider.WARNING);
return false;
private void checkSettings(String location, String errorMissing, Function<String, Stream<String>> validator,
String errorParse) {
if(location != null) {
String newMessage = !new File(location).canRead() //
? errorMissing
: validator.apply(location).findFirst().map(msg -> NLS.bind(errorParse, msg)).orElse(null);
if(newMessage != null) {
String prefix = getMessage() != null ? getMessage() + " and " : "";
setMessage(prefix + newMessage, IMessageProvider.WARNING);
}
}
return true;
}

void openEditor(String fileName) {
Expand All @@ -362,11 +342,11 @@ void openEditor(String fileName) {
}
}

String getUserSettings() {
private String getUserSettings() {
return getSettings(userSettingsText);
}

String getGlobalSettings() {
private String getGlobalSettings() {
return getSettings(globalSettingsText);
}

Expand Down
Loading

0 comments on commit c59be81

Please sign in to comment.