1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.handler.mediasource.ngdm.impl;
21
22 import java.util.regex.Matcher;
23 import java.util.regex.Pattern;
24
25 import org.apache.commons.lang3.StringUtils;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28
29
30
31
32
33
34
35 public final class NextGenDynamicMediaReference {
36
37 private static final Pattern REFERENCE_PATTERN = Pattern.compile("^/(urn:[^/]+)/([^/]+)$");
38 private static final String ASSET_ID_PREFIX = "urn:";
39
40 private final String assetId;
41 private final String fileName;
42
43
44
45
46
47 public NextGenDynamicMediaReference(@NotNull String assetId, @NotNull String fileName) {
48 if (!StringUtils.startsWith(assetId, ASSET_ID_PREFIX)) {
49 throw new IllegalArgumentException("Asset ID must start with '" + ASSET_ID_PREFIX + "'");
50 }
51 this.assetId = assetId;
52 this.fileName = fileName;
53 }
54
55
56
57
58 public @NotNull String getAssetId() {
59 return assetId;
60 }
61
62
63
64
65 public @NotNull String getFileName() {
66 return fileName;
67 }
68
69
70
71
72 public @NotNull String toReference() {
73 return "/" + assetId + "/" + fileName;
74 }
75
76
77
78
79
80
81 public static @Nullable NextGenDynamicMediaReference fromReference(@Nullable String reference) {
82 if (reference == null) {
83 return null;
84 }
85 Matcher matcher = REFERENCE_PATTERN.matcher(reference);
86 if (!matcher.matches()) {
87 return null;
88 }
89 String assetId = matcher.group(1);
90 String fileName = matcher.group(2);
91 return new NextGenDynamicMediaReference(assetId, fileName);
92 }
93
94
95
96
97
98
99 public static boolean isReference(@Nullable String reference) {
100 return reference != null && REFERENCE_PATTERN.matcher(reference).matches();
101 }
102
103 @Override
104 public String toString() {
105 return toReference();
106 }
107
108 }