Skip to content

Commit

Permalink
{JENKINS-41502] Select provider using a paramater
Browse files Browse the repository at this point in the history
  • Loading branch information
imeredith committed Nov 27, 2017
1 parent d69340a commit 2916203
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 1 deletion.
Expand Up @@ -16,6 +16,11 @@ public String getDisplayName() {
return Messages.classic_name();
}

@Override
public String getName() {
return "classic";
}

@Override
public String getRunURL(Run<?, ?> run) {
return getRoot() + Util.encode(run.getUrl());
Expand Down
Expand Up @@ -53,6 +53,11 @@ public String getDisplayName() {
return this.getClass().getSimpleName();
}

/** Name of provider to be used as an id. Do not use i18n */
public String getName() {
return this.getClass().getSimpleName();
}

/** Fully qualified URL for a Run */
public abstract String getRunURL(Run<?, ?> run);

Expand Down
Expand Up @@ -11,8 +11,10 @@
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import javax.annotation.Nullable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.function.Predicate;

public abstract class AbstractDisplayAction implements Action {

Expand All @@ -34,13 +36,36 @@ public String getUrlName() {
}

public final Object doRedirect(StaplerRequest req, StaplerResponse rsp) throws IOException {
DisplayURLProvider provider = lookupProvider();
DisplayURLProvider provider = lookupProvider(req);
rsp.sendRedirect(HttpServletResponse.SC_MOVED_TEMPORARILY, getRedirectURL(provider));
return null;
}

protected abstract String getRedirectURL(DisplayURLProvider provider);

DisplayURLProvider lookupProvider(StaplerRequest req) {
final String providerName = req.getParameter("provider");
if(providerName != null && !providerName.isEmpty()) {
Iterable<DisplayURLProvider> providers = DisplayURLProvider.all();
Iterable<DisplayURLProvider> filtered = Iterables.filter(providers, new com.google.common.base.Predicate<DisplayURLProvider>() {
@Override
public boolean apply(@Nullable DisplayURLProvider displayURLProvider) {
if(displayURLProvider == null) {
return false;
}

return displayURLProvider.getName().equals(providerName);
}
});

DisplayURLProvider provider = Iterables.getFirst(filtered, null);
if(provider != null) {
return provider;
}
}

return lookupProvider();
}
DisplayURLProvider lookupProvider() {
PreferredProviderUserProperty prefProperty = getUserPreferredProviderProperty();

Expand Down
Expand Up @@ -44,6 +44,16 @@ public void testRedirectForChangesURL() throws Exception {
.header("Location", getRedirectedProvider().getChangesURL(run));
}

@Test
public void testRedirectForYetAnotherProviderParameter() throws Exception {
given()
.urlEncodingEnabled(false)
.redirects().follow(false)
.when().get(provider.getChangesURL(run) + "&provider=YetAnotherDisplayURLProvider").then()
.statusCode(HttpServletResponse.SC_MOVED_TEMPORARILY)
.header("Location", getYetAnotherRedirectedProvider().getChangesURL(run));
}

@Test
public void testUrls() throws Exception {
String root = DisplayURLProvider.get().getRoot();
Expand All @@ -59,6 +69,10 @@ protected DisplayURLProvider getRedirectedProvider() {
return Iterables.find(DisplayURLProvider.all(), Predicates.instanceOf(AnotherDisplayURLProvider.class));
}

protected DisplayURLProvider getYetAnotherRedirectedProvider() {
return Iterables.find(DisplayURLProvider.all(), Predicates.instanceOf(YetAnotherDisplayURLProvider.class));
}

@TestExtension
public static class AnotherDisplayURLProvider extends DisplayURLProvider {

Expand All @@ -79,4 +93,25 @@ public String getJobURL(Job<?, ?> project) {
return DisplayURLProvider.getDefault().getJobURL(project) + EXTRA_CONTENT_IN_URL;
}
}

@TestExtension
public static class YetAnotherDisplayURLProvider extends DisplayURLProvider {

public static final String EXTRA_CONTENT_IN_URL = "yetanother";

@Override
public String getRunURL(Run<?, ?> run) {
return DisplayURLProvider.getDefault().getRunURL(run) + EXTRA_CONTENT_IN_URL;
}

@Override
public String getChangesURL(Run<?, ?> run) {
return DisplayURLProvider.getDefault().getChangesURL(run) + EXTRA_CONTENT_IN_URL;
}

@Override
public String getJobURL(Job<?, ?> project) {
return DisplayURLProvider.getDefault().getJobURL(project) + EXTRA_CONTENT_IN_URL;
}
}
}

0 comments on commit 2916203

Please sign in to comment.