diff --git a/src/main/java/hu/rxd/toolbox/switcher/ExplicitHttpMirrors.java b/src/main/java/hu/rxd/toolbox/switcher/ExplicitHttpMirrors.java new file mode 100644 index 0000000..75aaaf5 --- /dev/null +++ b/src/main/java/hu/rxd/toolbox/switcher/ExplicitHttpMirrors.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package hu.rxd.toolbox.switcher; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ExplicitHttpMirrors implements Mirrors { + + @Override + public String getComponentVersion(Version version, Component c) { + return version.getVerStr(); + } + + @Override + public String decodeStackVersion(String url) { + // http://ci.hive.apache.org/job/hive-nightly/4/artifact/archive/apache-hive-4.0.0-nightly-dd23fa9147-20220210_160351-bin.tar.gz + //FIXME: possibly generalize later + Pattern pat = Pattern.compile("http.*/apache-hive-(.*)-bin\\.tar\\.gz"); + Matcher m = pat.matcher(url); + if (!m.matches()) { + throw new RuntimeException("unsupported url: " + url); + } + return m.group(1); + } + + @Override + public Collection of0(Version ver) { + List ret = new ArrayList(); + ret.add(new ExplicitMirror(ver.getUrl())); + return ret; + } + + static class ExplicitMirror implements Mirror { + + private String root; + + public ExplicitMirror(String root) { + this.root = root; + } + + @Override + public URL getFor(Component c, String componentVersion) throws Exception { + return new URL(root); + } + } + +} diff --git a/src/main/java/hu/rxd/toolbox/switcher/Version.java b/src/main/java/hu/rxd/toolbox/switcher/Version.java index 2fb6ef2..62e71d6 100644 --- a/src/main/java/hu/rxd/toolbox/switcher/Version.java +++ b/src/main/java/hu/rxd/toolbox/switcher/Version.java @@ -6,7 +6,8 @@ public class Version { public enum Type { - APACHE(new ApacheMirrors()), HDP(new HdpMirrors()), DEV(new DevMirrors()), CDP(new CDPMirrors()); + APACHE(new ApacheMirrors()), HDP(new HdpMirrors()), DEV(new DevMirrors()), CDP(new CDPMirrors()), HTTP( + new ExplicitHttpMirrors()); public Mirrors mirrors; @@ -21,8 +22,11 @@ public Mirrors getMirrors() { } Version.Type type; + /** Full versionStr; 3.1.2.7.1.2.2-11 */ private String versionStr; + /** stackVersion; 7.1.2.2-11 - for 3.1.2.7.1.2.2-11 */ String stackVersion; + private String url; public Version(String versionStr) { this.versionStr = versionStr; @@ -34,6 +38,11 @@ public Version(String versionStr) { } else if (versionStr.startsWith("CDP")) { this.type = Type.CDP; this.stackVersion = type.mirrors.decodeStackVersion(versionStr.substring(4)); + } else if (versionStr.startsWith("http")) { + this.type = Type.HTTP; + this.url = versionStr; + // FIXME: ugly + this.versionStr = type.mirrors.decodeStackVersion(versionStr); } else { this.type = Type.APACHE; } @@ -49,13 +58,17 @@ public String getComponentVersion(Component c) throws Exception { static Logger LOG = LoggerFactory.getLogger(Version.class); /** Supposed to be the qualified version string - * + * * probably something like HDP-3.1 */ public String getVerStr() { return versionStr; } + public String getUrl() { + return url; + } + @Override public String toString() { return versionStr;