package org.jenkinsci.plugins.github.admin;
import com.cloudbees.jenkins.GitHubRepositoryName;
import org.kohsuke.stapler.AnnotationHandler;
import org.kohsuke.stapler.InjectedParameter;
import org.kohsuke.stapler.StaplerRequest;
import org.slf4j.Logger;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static org.apache.commons.lang3.Validate.notNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* InjectedParameter annotation to use on WebMethod parameters.
* Converts form submission to {@link GitHubRepositoryName}
*
* @author lanwen (Merkushev Kirill)
* @see <a href=https://wiki.jenkins-ci.org/display/JENKINS/Web+Method>Web Method</a>
* @since 1.17.0
*/
@Retention(RUNTIME)
@Target(PARAMETER)
@Documented
@InjectedParameter(GHRepoName.PayloadHandler.class)
public @interface GHRepoName {
class PayloadHandler extends AnnotationHandler<GHRepoName> {
private static final Logger LOGGER = getLogger(PayloadHandler.class);
/**
* @param param name of param in form and name of the argument in web-method
*
* @return {@link GitHubRepositoryName} extracted from request or null on any problem
*/
@Override
public GitHubRepositoryName parse(StaplerRequest req, GHRepoName a, Class type, String param) {
String repo = notNull(req, "Why StaplerRequest is null?").getParameter(param);
LOGGER.trace("Repo url in method {}", repo);
return GitHubRepositoryName.create(repo);
}
}
}