package org.kohsuke.args4j.spi;

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * {@link URL} {@link OptionHandler}.
 *
 * @author Kohsuke Kawaguchi
 */
public class URLOptionHandler extends OptionHandler<URL> {
    public URLOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super URL> setter) {
        super(parser, option, setter);
    }

    @Override
    public int parseArguments(Parameters params) throws CmdLineException {
        String param = params.getParameter(0);
        try {
            setter.addValue(new URL(param));
            return 1;
        } catch (MalformedURLException e) {
            throw new CmdLineException(owner, Messages.ILLEGAL_OPERAND.format(
                    params.getParameter(-1),param));
        }
    }

    @Override
    public String getDefaultMetaVariable() {
        return "URL";
    }
}
