1 /* |
1 /* |
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
34 import java.lang.module.ResolvedModule; |
34 import java.lang.module.ResolvedModule; |
35 import java.nio.file.Files; |
35 import java.nio.file.Files; |
36 import java.nio.file.Path; |
36 import java.nio.file.Path; |
37 import java.nio.file.Paths; |
37 import java.nio.file.Paths; |
38 import java.util.Arrays; |
38 import java.util.Arrays; |
|
39 import java.util.ArrayList; |
39 import java.util.Comparator; |
40 import java.util.Comparator; |
40 import java.util.Date; |
41 import java.util.Date; |
41 import java.util.Enumeration; |
42 import java.util.Enumeration; |
42 import java.util.HashMap; |
43 import java.util.HashMap; |
43 import java.util.HashSet; |
44 import java.util.HashSet; |
|
45 import java.util.List; |
44 import java.util.Map; |
46 import java.util.Map; |
45 import java.util.Set; |
47 import java.util.Set; |
46 import java.util.stream.Collectors; |
48 import java.util.stream.Collectors; |
47 import java.util.zip.ZipEntry; |
49 import java.util.zip.ZipEntry; |
48 import java.util.zip.ZipFile; |
50 import java.util.zip.ZipFile; |
550 .forEach(e -> sb.append(e.source()).append("<br>").append("\n")); |
552 .forEach(e -> sb.append(e.source()).append("<br>").append("\n")); |
551 sb.append("</td>"); |
553 sb.append("</td>"); |
552 return sb.toString(); |
554 return sb.toString(); |
553 } |
555 } |
554 |
556 |
|
557 private String providesEntry(Provides p) { |
|
558 StringBuilder sb = new StringBuilder(); |
|
559 sb.append(String.format("provides %s<br>\n", p.service())); |
|
560 List<String> pvs = new ArrayList<>(p.providers()); |
|
561 pvs.sort(Comparator.naturalOrder()); |
|
562 for (int i = 0; i < pvs.size(); i++) { // My kingdom for Stream::zip ... |
|
563 String fmt = ((i == 0) |
|
564 ? " with %s" |
|
565 : ",<br> %s"); |
|
566 sb.append(String.format(fmt, pvs.get(i))); |
|
567 } |
|
568 sb.append("\n"); |
|
569 return sb.toString(); |
|
570 } |
|
571 |
555 public String servicesColumn() { |
572 public String servicesColumn() { |
556 StringBuilder sb = new StringBuilder(); |
573 StringBuilder sb = new StringBuilder(); |
557 sb.append(String.format(" <td class=\"%s\">", CODE)); |
574 sb.append(String.format(" <td class=\"%s\">", CODE)); |
558 ms.descriptor().uses().stream() |
575 ms.descriptor().uses().stream() |
559 .sorted() |
576 .sorted() |
560 .forEach(s -> sb.append("uses ").append(s).append("<br>").append("\n")); |
577 .forEach(s -> sb.append("uses ").append(s).append("<br>").append("\n")); |
561 ms.descriptor().provides().stream() |
578 ms.descriptor().provides().stream() |
562 .sorted(Comparator.comparing(Provides::service)) |
579 .sorted(Comparator.comparing(Provides::service)) |
563 .map(p -> String.format("provides %s<br> with %s", |
580 .map(this::providesEntry) |
564 p.service(), p.providers())) |
|
565 .forEach(p -> sb.append(p).append("<br>").append("\n")); |
581 .forEach(p -> sb.append(p).append("<br>").append("\n")); |
566 sb.append("</td>"); |
582 sb.append("</td>"); |
567 return sb.toString(); |
583 return sb.toString(); |
568 } |
584 } |
569 |
585 |