// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/VcsType.java
// public enum VcsType {
//     git(".git"),
//     bzr(".bzr"),
//     hg(".hg"),
//     svn(".svn"),
//     manual("");
// 
//     @Nonnull
//     private final String _uriSuffix;
//     @Nonnull
//     private final Set<String> _schemes;
// 
//     VcsType(@Nonnull String uriSuffix, @Nullable String... plainSchemes) {
//         _uriSuffix = uriSuffix;
//         final Set<String> schemes = new LinkedHashSet<>();
//         if (plainSchemes != null) {
//             addAll(schemes, plainSchemes);
//         }
//         _schemes = unmodifiableSet(schemes);
//     }
// 
//     @Nonnull
//     public String getUriSuffix() {
//         return _uriSuffix;
//     }
// 
//     @Nonnull
//     public Set<String> getSchemes() {
//         return _schemes;
//     }
// 
//     @Nonnull
//     public String getName() {
//         return name();
//     }
// 
//     @Override
//     public String toString() {
//         return getName();
//     }
// 
// }
// 
// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/isps/DefaultVcsRepositoryProvider.java
// public class DefaultVcsRepositoryProvider extends IspBasedVcsRepositoryProviderSupport {
// 
//     @Nonnull
//     private final VcsType _type;
//     @Nonnull
//     private final String _name;
// 
//     public DefaultVcsRepositoryProvider(@Nonnull VcsType type, @Nonnull String prefix, @Nonnull String name, @Nonnull Pattern dependencyPattern) {
//         super(prefix, dependencyPattern);
//         _type = type;
//         _name = name;
//     }
// 
//     @Nonnull
//     @Override
//     protected VcsType detectVcsTypeOf(@Nonnull RawVcsReference rawReference) throws VcsException {
//         return fixedVcsTypeFor(rawReference, _type);
//     }
// 
//     @Nonnull
//     @Override
//     protected String getName() {
//         return _name;
//     }
// 
// }


import org.echocat.gradle.plugins.golang.vcs.VcsType;
import org.echocat.gradle.plugins.golang.vcs.isps.DefaultVcsRepositoryProvider;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import static java.util.Arrays.asList;
import static java.util.Collections.unmodifiableList;
import static java.util.regex.Pattern.compile;
import static org.echocat.gradle.plugins.golang.vcs.VcsType.git;
package org.echocat.gradle.plugins.golang.model;




@Immutable
public class VcsRepositoryProvider {

    @Nonnull
    private static final List<VcsRepositoryProvider> DEFAULTS = unmodifiableList(asList(
        new VcsRepositoryProvider(git, "github.com/", "GitHub", compile("^(?<root>github\\.com/[A-Za-z0-9_.\\-]+/[A-Za-z0-9_.\\-]+)(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "gopkg.in/", "gopkg.in", compile("^(?<root>gopkg\\.in(?<repo>(?:/[A-Za-z0-9_.\\-]+){1,2})\\.v(?<version>[0-9]{1,9}))(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "git.apache.org/", "Git at Apache", compile("^(?<root>git.apache.org/[a-z0-9_.\\-]+\\.git)(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "git.openstack.org/", "OpenStack Git Repository", compile("^(?<root>git\\.openstack\\.org/[A-Za-z0-9_.\\-]+/[A-Za-z0-9_.\\-]+)(\\.git)?(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "hub.jazz.net/git/", "IBM Bluemix DevOps Services", compile("^(?<root>hub\\.jazz\\.net/git/[a-z0-9]+/[A-Za-z0-9_.\\-]+)(?<subPath>/[A-Za-z0-9_.\\-]+)*$"))
    ));
    private static final List<org.echocat.gradle.plugins.golang.vcs.VcsRepositoryProvider> DEFAULT_CONCRETES = toConcrete(DEFAULTS);

    @Nonnull
    public static List<VcsRepositoryProvider> defaults() {
        return DEFAULTS;
    }

    @Nonnull
    public static List<org.echocat.gradle.plugins.golang.vcs.VcsRepositoryProvider> defaultConcretes() {
        return DEFAULT_CONCRETES;
    }

    @Nonnull
    private final String _prefix;
    @Nonnull
// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/VcsType.java
// public enum VcsType {
//     git(".git"),
//     bzr(".bzr"),
//     hg(".hg"),
//     svn(".svn"),
//     manual("");
// 
//     @Nonnull
//     private final String _uriSuffix;
//     @Nonnull
//     private final Set<String> _schemes;
// 
//     VcsType(@Nonnull String uriSuffix, @Nullable String... plainSchemes) {
//         _uriSuffix = uriSuffix;
//         final Set<String> schemes = new LinkedHashSet<>();
//         if (plainSchemes != null) {
//             addAll(schemes, plainSchemes);
//         }
//         _schemes = unmodifiableSet(schemes);
//     }
// 
//     @Nonnull
//     public String getUriSuffix() {
//         return _uriSuffix;
//     }
// 
//     @Nonnull
//     public Set<String> getSchemes() {
//         return _schemes;
//     }
// 
//     @Nonnull
//     public String getName() {
//         return name();
//     }
// 
//     @Override
//     public String toString() {
//         return getName();
//     }
// 
// }
// 
// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/isps/DefaultVcsRepositoryProvider.java
// public class DefaultVcsRepositoryProvider extends IspBasedVcsRepositoryProviderSupport {
// 
//     @Nonnull
//     private final VcsType _type;
//     @Nonnull
//     private final String _name;
// 
//     public DefaultVcsRepositoryProvider(@Nonnull VcsType type, @Nonnull String prefix, @Nonnull String name, @Nonnull Pattern dependencyPattern) {
//         super(prefix, dependencyPattern);
//         _type = type;
//         _name = name;
//     }
// 
//     @Nonnull
//     @Override
//     protected VcsType detectVcsTypeOf(@Nonnull RawVcsReference rawReference) throws VcsException {
//         return fixedVcsTypeFor(rawReference, _type);
//     }
// 
//     @Nonnull
//     @Override
//     protected String getName() {
//         return _name;
//     }
// 
// }


// Path: src/main/java/org/echocat/gradle/plugins/golang/model/VcsRepositoryProvider.java
import org.echocat.gradle.plugins.golang.vcs.VcsType;
import org.echocat.gradle.plugins.golang.vcs.isps.DefaultVcsRepositoryProvider;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import static java.util.Arrays.asList;
import static java.util.Collections.unmodifiableList;
import static java.util.regex.Pattern.compile;
import static org.echocat.gradle.plugins.golang.vcs.VcsType.git;

package org.echocat.gradle.plugins.golang.model;




@Immutable
public class VcsRepositoryProvider {

    @Nonnull
    private static final List<VcsRepositoryProvider> DEFAULTS = unmodifiableList(asList(
        new VcsRepositoryProvider(git, "github.com/", "GitHub", compile("^(?<root>github\\.com/[A-Za-z0-9_.\\-]+/[A-Za-z0-9_.\\-]+)(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "gopkg.in/", "gopkg.in", compile("^(?<root>gopkg\\.in(?<repo>(?:/[A-Za-z0-9_.\\-]+){1,2})\\.v(?<version>[0-9]{1,9}))(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "git.apache.org/", "Git at Apache", compile("^(?<root>git.apache.org/[a-z0-9_.\\-]+\\.git)(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "git.openstack.org/", "OpenStack Git Repository", compile("^(?<root>git\\.openstack\\.org/[A-Za-z0-9_.\\-]+/[A-Za-z0-9_.\\-]+)(\\.git)?(?<subPath>/[A-Za-z0-9_.\\-]+)*$")),
        new VcsRepositoryProvider(git, "hub.jazz.net/git/", "IBM Bluemix DevOps Services", compile("^(?<root>hub\\.jazz\\.net/git/[a-z0-9]+/[A-Za-z0-9_.\\-]+)(?<subPath>/[A-Za-z0-9_.\\-]+)*$"))
    ));
    private static final List<org.echocat.gradle.plugins.golang.vcs.VcsRepositoryProvider> DEFAULT_CONCRETES = toConcrete(DEFAULTS);

    @Nonnull
    public static List<VcsRepositoryProvider> defaults() {
        return DEFAULTS;
    }

    @Nonnull
    public static List<org.echocat.gradle.plugins.golang.vcs.VcsRepositoryProvider> defaultConcretes() {
        return DEFAULT_CONCRETES;
    }

    @Nonnull
    private final String _prefix;
    @Nonnull
    private final VcsType _type;