blob: b6ef379ca8fbe0b07ac65c15126fc86c38bdcea9 [file] [log] [blame]
Stuart McCullochf3173222012-06-07 21:57:32 +00001package aQute.lib.osgi;
2
3import static aQute.lib.osgi.Constants.*;
4
5import java.util.*;
6import java.util.jar.*;
7
8import aQute.libg.header.*;
9import aQute.libg.reporter.*;
10import aQute.libg.version.*;
11
12/**
13 * This class abstracts domains that have properties holding OSGi meta data. It
14 * provides access to the keys, the set method and the get method. It then
15 * provides convenient methods to access these properties via semantic methods.
16 *
17 */
18public abstract class Domain implements Iterable<String> {
19
20 public abstract String get(String key);
21
22 public String get(String key, String deflt) {
23 String result = get(key);
24 if (result != null)
25 return result;
26 return deflt;
27 }
28
29 public abstract void set(String key, String value);
30
31 public abstract Iterator<String> iterator();
32
33 public static Domain domain(final Manifest manifest) {
34 Attributes attrs = manifest.getMainAttributes();
35 return domain(attrs);
36 }
37
38 public static Domain domain(final Attributes attrs) {
39 return new Domain() {
40
41 @Override public String get(String key) {
42 return attrs.getValue(key);
43 }
44
45 @Override public void set(String key, String value) {
46 attrs.putValue(key, value);
47 }
48
49 @Override public Iterator<String> iterator() {
50 final Iterator<Object> it = attrs.keySet().iterator();
51
52 return new Iterator<String>() {
53
54 public boolean hasNext() {
55 return it.hasNext();
56 }
57
58 public String next() {
59 return it.next().toString();
60 }
61
62 public void remove() {
63 it.remove();
64 }
65 };
66 }
67 };
68 }
69
70 public static Domain domain(final Processor processor) {
71 return new Domain() {
72
73 @Override public String get(String key) {
74 return processor.getProperty(key);
75 }
76
77 @Override public String get(String key, String deflt) {
78 return processor.getProperty(key, deflt);
79 }
80
81 @Override public void set(String key, String value) {
82 processor.setProperty(key, value);
83 }
84
85 @Override public Iterator<String> iterator() {
86 final Iterator<String> it = processor.getPropertyKeys(true).iterator();
87
88 return new Iterator<String>() {
89 String current;
90
91 public boolean hasNext() {
92 return it.hasNext();
93 }
94
95 public String next() {
96 return current = it.next().toString();
97 }
98
99 public void remove() {
100 processor.getProperties().remove(current);
101 }
102 };
103 }
104 };
105 }
106
107 public static Domain domain(final Map<String, String> map) {
108 return new Domain() {
109
110 @Override public String get(String key) {
111 return map.get(key);
112 }
113
114 @Override public void set(String key, String value) {
115 map.put(key, value);
116 }
117
118 @Override public Iterator<String> iterator() {
119 return map.keySet().iterator();
120 }
121 };
122 }
123
124 public Parameters getParameters(String key, Reporter reporter) {
125 return new Parameters(get(key), reporter);
126 }
127
128 public Parameters getParameters(String key) {
129 return new Parameters(get(key));
130 }
131
132 public Parameters getParameters(String key, String deflt) {
133 return new Parameters(get(key, deflt));
134 }
135
136 public Parameters getParameters(String key, String deflt, Reporter reporter) {
137 return new Parameters(get(key, deflt), reporter);
138 }
139
140 public Parameters getImportPackage() {
141 return getParameters(IMPORT_PACKAGE);
142 }
143
144 public Parameters getExportPackage() {
145 return getParameters(EXPORT_PACKAGE);
146 }
147
148 public Parameters getBundleClassPath() {
149 return getParameters(BUNDLE_CLASSPATH);
150 }
151
152 public Parameters getPrivatePackage() {
153 return getParameters(PRIVATE_PACKAGE);
154 }
155
156 public Parameters getIncludeResource() {
157 Parameters ic = getParameters(INCLUDE_RESOURCE);
158 ic.putAll( getParameters(INCLUDERESOURCE));
159 return ic;
160 }
161
162 public Parameters getDynamicImportPackage() {
163 return getParameters(DYNAMICIMPORT_PACKAGE);
164 }
165
166 public Parameters getExportContents() {
167 return getParameters(EXPORT_CONTENTS);
168 }
169
170 public String getBundleActivator() {
171 return get(BUNDLE_ACTIVATOR);
172 }
173
174 public void setPrivatePackage(String s) {
175 if (s != null)
176 set(PRIVATE_PACKAGE, s);
177 }
178
179 public void setIncludeResource(String s) {
180 if (s != null)
181 set(INCLUDE_RESOURCE, s);
182 }
183
184 public void setBundleActivator(String s) {
185 if (s != null)
186 set(BUNDLE_ACTIVATOR, s);
187 }
188
189 public void setExportPackage(String s) {
190 if (s != null)
191 set(EXPORT_PACKAGE, s);
192 }
193
194 public void setImportPackage(String s) {
195 if (s != null)
196 set(IMPORT_PACKAGE, s);
197 }
198
199 public void setBundleClasspath(String s) {
200 if (s != null)
201 set(BUNDLE_CLASSPATH, s);
202 }
203
204 public Parameters getBundleClasspath() {
205 return getParameters(BUNDLE_CLASSPATH);
206 }
207
208 public void setBundleRequiredExecutionEnvironment(String s) {
209 if (s != null)
210 set(BUNDLE_REQUIREDEXECUTIONENVIRONMENT, s);
211 }
212
213 public Parameters getBundleRequiredExecutionEnvironment() {
214 return getParameters(BUNDLE_REQUIREDEXECUTIONENVIRONMENT);
215 }
216
217 public void setSources(boolean b) {
218 if (b)
219 set(SOURCES, "true");
220 else
221 set(SOURCES, "false");
222 }
223
224 public boolean isSources() {
225 return Processor.isTrue(get(SOURCES));
226 }
227
228 public String getBundleSymbolicName() {
229 return get(BUNDLE_SYMBOLICNAME);
230 }
231
232 public void setBundleSymbolicName(String s) {
233 set(BUNDLE_SYMBOLICNAME, s);
234 }
235
236 public String getBundleVersion() {
237 return get(BUNDLE_VERSION);
238 }
239
240 public void setBundleVersion(String version) {
241 Version v = new Version(version);
242 set(BUNDLE_VERSION,v.toString());
243 }
244
245 public void setBundleVersion(Version version) {
246 set(BUNDLE_VERSION,version.toString());
247 }
248
249 public void setFailOk(boolean b) {
250 set(FAIL_OK, b+"");
251 }
252
253 public boolean isFailOk() {
254 return Processor.isTrue(get(FAIL_OK));
255 }
256}