1 package com.atlassian.plugin.osgi.factory.transform.model;
2
3 import java.util.Map;
4 import java.util.HashMap;
5
6 import com.atlassian.plugin.osgi.util.OsgiHeaderUtil;
7
8 import com.google.common.base.Function;
9 import com.google.common.collect.ImmutableMap;
10
11 import static com.google.common.collect.Maps.transformValues;
12
13
14
15
16
17
18 public class SystemExports
19 {
20 private final Map<String, Map<String,String>> exports;
21
22 public static final SystemExports NONE = new SystemExports("");
23
24
25
26
27
28
29 public SystemExports(String exportsLine)
30 {
31 if (exportsLine == null)
32 {
33 exportsLine = "";
34 }
35
36 this.exports = internAttributeKeys(OsgiHeaderUtil.parseHeader(exportsLine));
37 }
38
39
40
41
42
43 private static Map<String, Map<String, String>> internAttributeKeys(final Map<String, Map<String, String>> map)
44 {
45 return transformValues(map, new Function<Map<String, String>, Map<String, String>>()
46 {
47 @Override
48 public Map<String, String> apply(final Map<String, String> innerMap)
49 {
50 return internKeys(innerMap);
51 }
52 });
53 }
54
55 private static Map<String, String> internKeys(final Map<String, String> innerMap)
56 {
57
58 final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
59 for (Map.Entry<String, String> entry : innerMap.entrySet())
60 {
61 builder.put(
62 entry.getKey().intern(),
63 entry.getValue()
64 );
65 }
66
67 return builder.build();
68 }
69
70
71
72
73
74
75
76
77 public String getFullExport(String pkg)
78 {
79 if (exports.containsKey(pkg))
80 {
81 Map<String,String> attrs = new HashMap<String,String>(exports.get(pkg));
82 if (attrs.containsKey("version"))
83 {
84 final String version = attrs.get("version");
85 attrs.put("version", "[" + version + "," + version + "]");
86 }
87 return OsgiHeaderUtil.buildHeader(pkg, attrs);
88 }
89 return pkg;
90 }
91
92
93
94
95
96 public boolean isExported(String pkg)
97 {
98 return exports.containsKey(pkg);
99 }
100 }