1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.dam.external.app.field;
35
36 import info.magnolia.dam.api.AssetProvider;
37 import info.magnolia.dam.api.AssetProviderRegistry;
38 import info.magnolia.dam.api.Item;
39 import info.magnolia.dam.api.ItemKey;
40 import info.magnolia.dam.api.PathAwareAssetProvider;
41 import info.magnolia.ui.form.field.converter.IdentifierToPathConverter;
42
43 import java.util.Locale;
44 import java.util.regex.Pattern;
45
46 import javax.inject.Inject;
47
48 import org.apache.commons.lang.StringUtils;
49
50
51
52
53 public class AssetCompositeIdKeyTranslator implements IdentifierToPathConverter {
54
55 private static final Pattern PATH_PATTERN = Pattern.compile("[a-zA-Z0-9]+\\..+(/.+)*");
56
57 private final AssetProviderRegistry assetProviderRegistry;
58
59 @Inject
60 public AssetCompositeIdKeyTranslator(AssetProviderRegistry assetProviderRegistry) {
61 this.assetProviderRegistry = assetProviderRegistry;
62 }
63
64 @Override
65 public String convertToModel(String path, Class<? extends String> targetType, Locale locale) throws ConversionException {
66 if (StringUtils.isBlank(path)) {
67 return null;
68 }
69 if (!isPath(path)) {
70 if (ItemKey.isValid(path)) {
71 return path;
72 }
73 }
74 String providerId = StringUtils.substringBefore(path, ".");
75 String assetId = StringUtils.substringAfter(path, ".");
76 AssetProvider assetProvider = assetProviderRegistry.getProviderById(providerId);
77 if (!(assetProvider instanceof PathAwareAssetProvider)) {
78 return path;
79 }
80 Item item = ((PathAwareAssetProvider) assetProvider).getItem(assetId);
81 return item.getItemKey().asString();
82 }
83
84 @Override
85 public String convertToPresentation(String itemKeyId, Class<? extends String> targetType, Locale locale) throws ConversionException {
86 String res = StringUtils.EMPTY;
87 if (StringUtils.isBlank(itemKeyId)) {
88 return res;
89 }
90 if (!ItemKey.isValid(itemKeyId)) {
91 return res;
92 }
93 if (isPath(itemKeyId)) {
94 return res;
95 }
96 String providerId = ItemKey.from(itemKeyId).getProviderId();
97 AssetProvider assetProvider = assetProviderRegistry.getProviderById(providerId);
98 Item item = assetProvider.getItem(ItemKey.from(itemKeyId));
99 return assetProvider.getIdentifier() + "." + item.getPath();
100 }
101
102 private boolean isPath(String id) {
103 return PATH_PATTERN.matcher(id).matches();
104 }
105
106 @Override
107 public Class<String> getModelType() {
108 return String.class;
109 }
110
111 @Override
112 public Class<String> getPresentationType() {
113 return String.class;
114 }
115
116 @Override
117 public void setWorkspaceName(String workspaceName) {};
118 }