package jenkins.mvn; import hudson.ExtensionPoint; import hudson.FilePath; import hudson.model.AbstractBuild; import hudson.model.AbstractDescribableImpl; import hudson.model.Descriptor; import hudson.model.TaskListener; import javax.servlet.ServletException; import net.sf.json.JSONObject; import org.kohsuke.stapler.StaplerRequest; /** * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a> * @author Dominik Bartholdi (imod) * @since 1.491 */ public abstract class SettingsProvider extends AbstractDescribableImpl<SettingsProvider> implements ExtensionPoint { /** * Configure maven launcher argument list with adequate settings path. Implementations should be aware that this method might get called multiple times during a build. * * @param build * @return the filepath to the provided file. <code>null</code> if no settings will be provided. */ public abstract FilePath supplySettings(AbstractBuild<?, ?> build, TaskListener listener); public static SettingsProvider parseSettingsProvider(StaplerRequest req) throws Descriptor.FormException, ServletException { JSONObject settings = req.getSubmittedForm().getJSONObject("settings"); if (settings == null) { return new DefaultSettingsProvider(); } return req.bindJSON(SettingsProvider.class, settings); } /** * Convenience method handling all <code>null</code> checks. Provides the path on the (possible) remote settings file. * * @param settings * the provider to be used * @param build * the active build * @param listener * the listener of the current build * @return the path to the settings.xml */ public static final FilePath getSettingsFilePath(SettingsProvider settings, AbstractBuild<?, ?> build, TaskListener listener) { FilePath settingsPath = null; if (settings != null) { settingsPath = settings.supplySettings(build, listener); } return settingsPath; } /** * Convenience method handling all <code>null</code> checks. Provides the path on the (possible) remote settings file. * * @param settings * the provider to be used * @param build * the active build * @param listener * the listener of the current build * @return the path to the settings.xml */ public static final String getSettingsRemotePath(SettingsProvider settings, AbstractBuild<?, ?> build, TaskListener listener) { FilePath fp = getSettingsFilePath(settings, build, listener); return fp == null ? null : fp.getRemote(); } }