package ru.qatools.clay.maven.settings; import org.apache.maven.settings.*; import org.apache.maven.settings.building.DefaultSettingsBuilderFactory; import org.apache.maven.settings.building.DefaultSettingsBuildingRequest; import org.apache.maven.settings.building.SettingsBuildingException; import org.codehaus.plexus.util.FileUtils; import java.io.File; import java.io.FileNotFoundException; import static ru.qatools.clay.maven.settings.MavenDefaults.getDefaultLocalRepository; import static ru.qatools.clay.maven.settings.MavenDefaults.getDefaultSystemSettings; /** * @author Innokenty Shuvalov innokenty@yandex-team.ru */ @SuppressWarnings("JavaDoc") public class FluentSettingsBuilder { private final Settings settings; private FluentSettingsBuilder(Settings settings) { this.settings = settings; } public static FluentSettingsBuilder newSettings() { Settings settings = new Settings(); settings.setLocalRepository(getDefaultLocalRepository()); return new FluentSettingsBuilder(settings); } public static FluentSettingsBuilder loadSettings() throws FileNotFoundException, SettingsBuildingException { String settingsPath = getDefaultSystemSettings(); if (settingsPath != null && FileUtils.fileExists(settingsPath)) { return loadSettings(settingsPath); } else { return newSettings(); } } public static FluentSettingsBuilder loadSettings(String settingsFilePath) throws FileNotFoundException, SettingsBuildingException { return loadSettings(new File(settingsFilePath)); } public static FluentSettingsBuilder loadSettings(File settingsFile) throws FileNotFoundException, SettingsBuildingException { if (settingsFile == null) { throw new NullPointerException("Settings file can't be null"); } if (!settingsFile.exists()) { throw new FileNotFoundException(String.format("Settings file [%s] not found", settingsFile.getAbsoluteFile())); } DefaultSettingsBuildingRequest request = new DefaultSettingsBuildingRequest(); request.setGlobalSettingsFile(settingsFile); Settings settings = new DefaultSettingsBuilderFactory() .newInstance() .build(request) .getEffectiveSettings(); if (settings.getLocalRepository() == null) { settings.setLocalRepository(getDefaultLocalRepository()); } return new FluentSettingsBuilder(settings); } @Deprecated public static FluentSettingsBuilder newSettings(String settingsFilePath) throws SettingsBuildingException { DefaultSettingsBuildingRequest request = new DefaultSettingsBuildingRequest(); request.setGlobalSettingsFile(new File(settingsFilePath)); Settings settings = new DefaultSettingsBuilderFactory() .newInstance() .build(request) .getEffectiveSettings(); return new FluentSettingsBuilder(settings); } /** * Looks for settings.xml at '${user.home}/.m2/settings.xml' and '$M2_HOME/conf/settings.xml'. * {@see http://maven.apache.org/settings.html}. If can't find settings, returns {@link #newSettings()} */ @Deprecated public static FluentSettingsBuilder newSystemSettings() { String userHome = System.getProperty(MavenDefaults.USER_HOME); if (userHome != null) { String settingsPath = String.format("%s/.m2/settings.xml", userHome); try { return newSettings(settingsPath); } catch (SettingsBuildingException ignored) { } } String m2home = System.getProperty(MavenDefaults.MAVEN_HOME, System.getProperty(MavenDefaults.M2_HOME)); if (m2home != null) { String settingsPath = String.format("%s/conf/settings.xml", m2home); try { return newSettings(settingsPath); } catch (SettingsBuildingException ignored) { } } return newSettings(); } public Settings build() { return settings; } /* DELEGATED METHODS */ /** * Set the local repository.<br /><b>Default value is:</b> * <tt>${user.home}/.m2/repository</tt> * * @param localRepository */ public FluentSettingsBuilder withLocalRepository(String localRepository) { if (localRepository == null) return this; settings.setLocalRepository(localRepository); return this; } public FluentSettingsBuilder withLocalRepository(File localRepository) { if (localRepository == null) return this; settings.setLocalRepository(localRepository.getAbsolutePath()); return this; } public FluentSettingsBuilder withMirror(FluentMirrorBuilder mirror) { return withMirror(mirror.build()); } public FluentSettingsBuilder withMirror(Mirror mirror) { settings.addMirror(mirror); return this; } public FluentSettingsBuilder withPluginGroup(String string) { settings.addPluginGroup(string); return this; } public FluentSettingsBuilder withProfile(FluentProfileBuilder profile) { return withProfile(profile.build()); } public FluentSettingsBuilder withProfile(Profile profile) { settings.addProfile(profile); return this; } public FluentSettingsBuilder withActiveProfile(FluentProfileBuilder profile) { return withActiveProfile(profile.build()); } protected FluentSettingsBuilder withActiveProfile(Profile profile) { settings.addProfile(profile); settings.addActiveProfile(profile.getId()); return this; } public FluentSettingsBuilder withActiveProfile(String string) { settings.addActiveProfile(string); return this; } public FluentSettingsBuilder withProxy(FluentProxyBuilder proxy) { return withProxy(proxy.build()); } public FluentSettingsBuilder withProxy(Proxy proxy) { settings.addProxy(proxy); return this; } public FluentSettingsBuilder withServer(FluentServerBuilder server) { return withServer(server.build()); } public FluentSettingsBuilder withServer(Server server) { settings.addServer(server); return this; } public FluentSettingsBuilder withOffline(boolean offline) { settings.setOffline(offline); return this; } }