|
47 | 47 | import java.util.Comparator; |
48 | 48 | import java.util.List; |
49 | 49 | import java.util.Map.Entry; |
| 50 | +import java.util.Optional; |
50 | 51 | import java.util.OptionalInt; |
51 | 52 | import java.util.Properties; |
52 | 53 | import java.util.TreeSet; |
@@ -94,6 +95,15 @@ public class JetBrains implements Distribution { |
94 | 95 |
|
95 | 96 | private static final Pattern JBRSDK_PATTERN = Pattern.compile("JBRSDK\\s+\\|\\s+\\[([0-9a-zA-Z_.-]+)\\]\\(([0-9a-z:/._-]+)\\)"); |
96 | 97 | private static final Matcher JBRSDK_MATCHER = JBRSDK_PATTERN.matcher(""); |
| 98 | + private static final Pattern JBRSDK_JCEF_PATTERN = Pattern.compile("(https:\\/\\/[a-zA-Z0-9_\\/\\.\\-]+)((jbrsdk_jcef)-([a-zA-Z0-9\\.]*)-([a-zA-Z]*)-([a-zA-Z0-9]*)-([bB0-9\\.]*)(((\\.tar\\.gz)|(\\.zip)|(\\.pkg)|(\\.msi))(\\.checksum)?))");//Pattern.compile("(https:\\/\\/[a-zA-Z0-9_\\/\\.\\-]+)((jbrsdk_jcef)-([a-zA-Z0-9\\.]*)-([a-zA-Z]*)-([a-zA-Z0-9]*)-([bB0-9\\.]*)((\\.tar\\.gz)|(\\.zip))(?!\\.checksum))"); |
| 99 | + private static final Matcher JBRSDK_JCEF_MATCHER = JBRSDK_JCEF_PATTERN.matcher(""); |
| 100 | + // Group 0 -> download link |
| 101 | + // Group 2 -> filename |
| 102 | + // Group 4 -> version number |
| 103 | + // Group 5 -> operating system |
| 104 | + // Group 6 -> architecture |
| 105 | + // Group 7 -> build number |
| 106 | + // Group 8 -> file ending |
97 | 107 |
|
98 | 108 | @Override public Distro getDistro() { return Distro.JETBRAINS; } |
99 | 109 |
|
@@ -267,78 +277,81 @@ public List<Pkg> getAllPkgs(final boolean onlyNewPkgs) { |
267 | 277 |
|
268 | 278 | public List<Pkg> getAllPkgsFromString(final String bodyText, final boolean onlyNewPkgs) { |
269 | 279 | List<Pkg> pkgs = new ArrayList<>(); |
270 | | - JBRSDK_MATCHER.reset(bodyText); |
271 | | - while(JBRSDK_MATCHER.find()) { |
272 | | - if (JBRSDK_MATCHER.groupCount() >= 2) { |
273 | | - String filename = JBRSDK_MATCHER.group(1); |
274 | | - if (null == filename || filename.isEmpty() || filename.contains("checksum") || filename.contains("fastdebug") || filename.endsWith("diz.tar.gz")) { continue; } |
275 | | - |
276 | | - String strippedFilename = filename.replaceFirst("jbrsdk-", "").replaceAll("(\\.tar\\.gz|\\.zip)", ""); |
277 | | - String[] filenameParts = strippedFilename.split("-"); |
278 | | - String downloadLink = JBRSDK_MATCHER.group(2); |
279 | | - |
280 | | - |
281 | | - if (onlyNewPkgs) { |
282 | | - if (CacheManager.INSTANCE.pkgCache.getPkgs().stream().filter(p -> p.getFilename().equals(filename)).filter(p -> p.getDirectDownloadUri().equals(downloadLink)).count() > 0) { continue; } |
| 280 | + |
| 281 | + // SDK + JCEF |
| 282 | + JBRSDK_JCEF_MATCHER.reset(bodyText); |
| 283 | + while(JBRSDK_JCEF_MATCHER.find()) { |
| 284 | + final String downloadLink = JBRSDK_JCEF_MATCHER.group(0); |
| 285 | + final String filename = JBRSDK_JCEF_MATCHER.group(2); |
| 286 | + final String versionNumber = JBRSDK_JCEF_MATCHER.group(4); |
| 287 | + final String operatingSystem = JBRSDK_JCEF_MATCHER.group(5); |
| 288 | + final String architecture = JBRSDK_JCEF_MATCHER.group(6); |
| 289 | + final String buildNumber = JBRSDK_JCEF_MATCHER.group(7).replaceAll("\\.", ""); |
| 290 | + final String fileEnding = JBRSDK_JCEF_MATCHER.group(8); |
| 291 | + |
| 292 | + // Fetch checksum |
| 293 | + if (fileEnding.endsWith("checksum")) { |
| 294 | + final String filenameWithoutChecksum = filename.replace(".checksum", ""); |
| 295 | + final Optional<Pkg> optPkg = pkgs.stream().filter(pkg -> pkg.getFilename().equals(filenameWithoutChecksum)).findFirst(); |
| 296 | + if (optPkg.isPresent()) { |
| 297 | + optPkg.get().setChecksumUri(downloadLink); |
| 298 | + optPkg.get().setChecksumType(HashAlgorithm.SHA512); |
283 | 299 | } |
| 300 | + continue; |
| 301 | + } |
284 | 302 |
|
285 | | - Pkg pkg = new Pkg(); |
| 303 | + if (onlyNewPkgs) { |
| 304 | + if (CacheManager.INSTANCE.pkgCache.getPkgs().stream().filter(p -> p.getFilename().equals(filename)).filter(p -> p.getDirectDownloadUri().equals(downloadLink)).count() > 0) { continue; } |
| 305 | + } |
286 | 306 |
|
287 | | - pkg.setDistribution(Distro.JETBRAINS.get()); |
288 | | - pkg.setFileName(filename); |
289 | | - pkg.setDirectDownloadUri(downloadLink); |
| 307 | + Pkg pkg = new Pkg(); |
290 | 308 |
|
291 | | - ArchiveType ext = getFromFileName(filename); |
292 | | - pkg.setArchiveType(ext); |
| 309 | + pkg.setDistribution(JetBrains.this); |
| 310 | + pkg.setFileName(filename); |
| 311 | + pkg.setDirectDownloadUri(downloadLink); |
293 | 312 |
|
294 | | - Architecture arch = Constants.ARCHITECTURE_LOOKUP.entrySet().stream() |
295 | | - .filter(entry -> filename.contains(entry.getKey())) |
296 | | - .findFirst() |
297 | | - .map(Entry::getValue) |
298 | | - .orElse(Architecture.NONE); |
| 313 | + ArchiveType ext = ArchiveType.fromText(fileEnding); |
| 314 | + pkg.setArchiveType(ext); |
299 | 315 |
|
300 | | - pkg.setArchitecture(arch); |
301 | | - pkg.setBitness(arch.getBitness()); |
| 316 | + Architecture arch = Architecture.fromText(architecture); |
302 | 317 |
|
| 318 | + pkg.setArchitecture(arch); |
| 319 | + pkg.setBitness(arch.getBitness()); |
303 | 320 |
|
304 | | - VersionNumber vNumber = VersionNumber.fromText(filenameParts[0].replaceAll("_", ".")); |
305 | | - pkg.setVersionNumber(vNumber); |
306 | | - pkg.setJavaVersion(vNumber); |
307 | | - pkg.setDistributionVersion(vNumber); |
308 | | - pkg.setJdkVersion(new MajorVersion(vNumber.getFeature().getAsInt())); |
| 321 | + VersionNumber vNumber = VersionNumber.fromText(versionNumber); |
| 322 | + vNumber.setBuild(Integer.parseInt(buildNumber.substring(1))); |
| 323 | + pkg.setVersionNumber(vNumber); |
| 324 | + pkg.setJavaVersion(vNumber); |
| 325 | + pkg.setDistributionVersion(vNumber); |
| 326 | + pkg.setJdkVersion(new MajorVersion(vNumber.getFeature().getAsInt())); |
309 | 327 |
|
310 | | - pkg.setTermOfSupport(TermOfSupport.LTS); |
| 328 | + pkg.setTermOfSupport(Helper.getTermOfSupport(vNumber)); |
311 | 329 |
|
312 | | - pkg.setPackageType(JDK); |
| 330 | + pkg.setPackageType(JDK); |
313 | 331 |
|
314 | | - pkg.setReleaseStatus(GA); |
| 332 | + pkg.setReleaseStatus(GA); |
315 | 333 |
|
316 | | - OperatingSystem os = Constants.OPERATING_SYSTEM_LOOKUP.entrySet().stream() |
317 | | - .filter(entry -> strippedFilename.contains(entry.getKey())) |
318 | | - .findFirst() |
319 | | - .map(Entry::getValue) |
320 | | - .orElse(OperatingSystem.NONE); |
| 334 | + OperatingSystem os = OperatingSystem.fromText(operatingSystem); |
321 | 335 |
|
322 | | - if (OperatingSystem.NONE == os) { |
323 | | - LOGGER.debug("Operating System not found in {} for filename: {}", getName(), filename); |
324 | | - continue; |
325 | | - } |
326 | | - pkg.setOperatingSystem(os); |
327 | | - |
328 | | - if (WINDOWS == os) { |
329 | | - pkg.setLibCType(LibCType.C_STD_LIB); |
330 | | - } else if (LINUX == os ) { |
331 | | - pkg.setLibCType(LibCType.GLIBC); |
332 | | - } else if (MACOS == os) { |
333 | | - pkg.setLibCType(LibCType.LIBC); |
334 | | - } |
| 336 | + if (OperatingSystem.NONE == os) { |
| 337 | + LOGGER.debug("Operating System not found in {} for filename: {}", getName(), filename); |
| 338 | + continue; |
| 339 | + } |
| 340 | + pkg.setOperatingSystem(os); |
335 | 341 |
|
336 | | - pkg.setFreeUseInProduction(Boolean.TRUE); |
| 342 | + if (WINDOWS == os) { |
| 343 | + pkg.setLibCType(LibCType.C_STD_LIB); |
| 344 | + } else if (LINUX == os ) { |
| 345 | + pkg.setLibCType(LibCType.GLIBC); |
| 346 | + } else if (MACOS == os) { |
| 347 | + pkg.setLibCType(LibCType.LIBC); |
| 348 | + } |
337 | 349 |
|
338 | | - pkg.setSize(Helper.getFileSize(downloadLink)); |
| 350 | + pkg.setFreeUseInProduction(Boolean.TRUE); |
339 | 351 |
|
340 | | - pkgs.add(pkg); |
341 | | - } |
| 352 | + pkg.setSize(Helper.getFileSize(downloadLink)); |
| 353 | + |
| 354 | + pkgs.add(pkg); |
342 | 355 | } |
343 | 356 |
|
344 | 357 | Helper.checkPkgsForTooEarlyGA(pkgs); |
|
0 commit comments