View Javadoc
1   /*-
2    * #%L
3    * io.earcam.instrumental.module.osgi
4    * %%
5    * Copyright (C) 2018 earcam
6    * %%
7    * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8    * 
9    * You <b>must</b> choose to accept, in full - any individual or combination of 
10   * the following licenses:
11   * <ul>
12   * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13   * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14   * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15   * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16   * </ul>
17   * #L%
18   */
19  package io.earcam.instrumental.module.osgi;
20  
21  import static io.earcam.instrumental.module.osgi.BundleManifestHeaders.*;
22  import static java.util.Collections.emptyList;
23  
24  import java.util.List;
25  import java.util.Map;
26  import java.util.jar.Attributes.Name;
27  
28  import javax.annotation.Nullable;
29  
30  import io.earcam.instrumental.module.manifest.ManifestInfo;
31  
32  /**
33   * <p>
34   * BundleInfo interface.
35   * </p>
36   *
37   */
38  public interface BundleInfo extends ManifestInfo {
39  
40  	/**
41  	 * <p>
42  	 * allHeaderClauses.
43  	 * </p>
44  	 *
45  	 * @return a {@link java.util.Map} object.
46  	 */
47  	public abstract Map<Name, List<Clause>> allHeaderClauses();
48  
49  
50  	/**
51  	 * <p>
52  	 * deconstruct.
53  	 * </p>
54  	 *
55  	 * @return a {@link io.earcam.instrumental.module.osgi.BundleInfoBuilder} object.
56  	 */
57  	public abstract BundleInfoBuilder deconstruct();
58  
59  
60  	/**
61  	 * <p>
62  	 * exportPackage.
63  	 * </p>
64  	 *
65  	 * @return a {@link java.util.List} object.
66  	 */
67  	public default List<Clause> exportPackage()
68  	{
69  		return allHeaderClauses().getOrDefault(EXPORT_PACKAGE.header(), emptyList());
70  	}
71  
72  
73  	/**
74  	 * <p>
75  	 * importPackage.
76  	 * </p>
77  	 *
78  	 * @return a {@link java.util.List} object.
79  	 */
80  	public default List<Clause> importPackage()
81  	{
82  		return allHeaderClauses().getOrDefault(IMPORT_PACKAGE.header(), emptyList());
83  	}
84  
85  
86  	/**
87  	 * <p>
88  	 * dynamicImportPackage.
89  	 * </p>
90  	 *
91  	 * @return a {@link java.util.List} object.
92  	 */
93  	public default List<Clause> dynamicImportPackage()
94  	{
95  		return allHeaderClauses().getOrDefault(DYNAMICIMPORT_PACKAGE.header(), emptyList());
96  	}
97  
98  
99  	/**
100 	 * <p>
101 	 * symbolicName.
102 	 * </p>
103 	 *
104 	 * @return a {@link io.earcam.instrumental.module.osgi.Clause} object.
105 	 */
106 	public default Clause symbolicName()
107 	{
108 		return allHeaderClauses().get(BUNDLE_SYMBOLICNAME.header()).get(0);
109 	}
110 
111 
112 	/**
113 	 * <p>
114 	 * symbolicName.
115 	 * </p>
116 	 *
117 	 * @return a {@link io.earcam.instrumental.module.osgi.Clause} object.
118 	 */
119 	public default Clause fragmentHost()
120 	{
121 		return allHeaderClauses().get(FRAGMENT_HOST.header()).get(0);
122 	}
123 
124 
125 	/**
126 	 * <p>
127 	 * activator.
128 	 * </p>
129 	 *
130 	 * @return a {@link java.lang.String} object.
131 	 */
132 	public default @Nullable String activator()
133 	{
134 		List<Clause> header = allHeaderClauses().get(BUNDLE_ACTIVATOR.header());
135 		return (header == null) ? null : header.get(0).uniqueNames().first();
136 	}
137 }