From b96277a47541b78e5d1b085c8a56e329feeb8c25 Mon Sep 17 00:00:00 2001 From: wentao Date: Wed, 13 May 2020 23:12:51 +0800 Subject: [PATCH] =?UTF-8?q?-=20update:=20=E8=87=AA=E5=8A=A8=E8=8E=B7?= =?UTF-8?q?=E5=8F=96NB=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nutz/demo/maker/module/MakerModule.java | 62 ++++++++++++++++--- src/main/resources/static/index.html | 29 +++++---- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/nutz/demo/maker/module/MakerModule.java b/src/main/java/io/nutz/demo/maker/module/MakerModule.java index 3b50a22..d4b3d52 100644 --- a/src/main/java/io/nutz/demo/maker/module/MakerModule.java +++ b/src/main/java/io/nutz/demo/maker/module/MakerModule.java @@ -4,25 +4,28 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletResponse; +import org.nutz.http.Http; import org.nutz.ioc.impl.PropertiesProxy; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.json.JsonFormat; import org.nutz.jst.impl.JstImpl; import org.nutz.jst.loader.impl.JstClasspathLoader; -import org.nutz.lang.Files; -import org.nutz.lang.Lang; -import org.nutz.lang.Streams; -import org.nutz.lang.Strings; +import org.nutz.lang.*; import org.nutz.lang.random.R; -import org.nutz.lang.util.Context; -import org.nutz.lang.util.Disks; -import org.nutz.lang.util.FileVisitor; -import org.nutz.lang.util.NutMap; +import org.nutz.lang.util.*; +import org.nutz.log.Log; +import org.nutz.log.Logs; import org.nutz.mvc.adaptor.JsonAdaptor; import org.nutz.mvc.annotation.AdaptBy; import org.nutz.mvc.annotation.At; @@ -38,10 +41,53 @@ public class MakerModule { protected File tmpDir; protected JstClasspathLoader loader; + + private static final Log log = Logs.get(); + private static final String LAST_GET_NUTZ_BOOT_VERSIONS_TIME_KEY = "LAST_GET_NUTZ_BOOT_VERSIONS_TIME"; + private static final String VERSIONS_CACHE_KEY = "NUTZ_BOOT_VERSIONS"; + private static final int VERSIONS_CACHE_TIMES = 300; + public static final String RELEASE_VERSIONS_URL = "https://jfrog.nutz.cn/artifactory/jcenter/org/nutz/boot/nutzboot-maven-plugin/maven-metadata.xml"; + public static final String SNAPSHOTS_VERSIONS_URL = "https://jfrog.nutz.cn/artifactory/snapshots/org/nutz/nutzboot-parent/maven-metadata.xml"; @At("/") @Ok("->:/index.html") public void index() {} + + @At("/maker/getNutzBootVersion") + @Ok("json:full") + public List getNutzBootVersion() { + Long lastGetNutzBootVersionTimes = conf.getLong(LAST_GET_NUTZ_BOOT_VERSIONS_TIME_KEY, Times.getTS()); + Long now = Times.getTS(); + List result = new ArrayList<>(); + String cacheResult = conf.get(VERSIONS_CACHE_KEY); + if(now - lastGetNutzBootVersionTimes > VERSIONS_CACHE_TIMES || Strings.isBlank(cacheResult)) { + log.debug("get versions from post..."); + getLastVersion(result, RELEASE_VERSIONS_URL, 5); + getLastVersion(result, SNAPSHOTS_VERSIONS_URL, 3); + conf.set(VERSIONS_CACHE_KEY, Json.toJson(result, JsonFormat.tidy())); + conf.set(LAST_GET_NUTZ_BOOT_VERSIONS_TIME_KEY, String.valueOf(Times.getTS())); + } else { + log.debug("get versions from cache..."); + result = (List)Json.fromJson(cacheResult); + } + return result; + } + + + + private void getLastVersion(List result, String url, int num) { + String versionXml = Http.get(url).getContent(); + Pattern pattern = Regex.getPattern("(.*?)"); + Matcher matcher = pattern.matcher(versionXml); + List versions = new ArrayList<>(); + while (matcher.find()) { + versions.add(matcher.group(1)); + } + for (int i = versions.size() - num; i < versions.size(); i++) { + String version = versions.get(i); + result.add(NutMap.NEW().addv("label", version).addv("value", version)); + } + } @AdaptBy(type=JsonAdaptor.class) @At("/maker/make") diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 9ceba46..750cad7 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -268,6 +268,19 @@