DefaultBundleInfo.java
/*-
* #%L
* io.earcam.instrumental.module.osgi
* %%
* Copyright (C) 2018 earcam
* %%
* SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
*
* You <b>must</b> choose to accept, in full - any individual or combination of
* the following licenses:
* <ul>
* <li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
* <li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
* <li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
* <li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
* </ul>
* #L%
*/
package io.earcam.instrumental.module.osgi;
import static io.earcam.instrumental.module.manifest.ManifestInfoBuilder.attribute;
import static io.earcam.instrumental.module.osgi.BundleManifestHeaders.BUNDLE_MANIFESTVERSION;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.jar.Attributes.Name;
import java.util.Map.Entry;
import io.earcam.instrumental.module.manifest.AbstractManifestBuilder;
class DefaultBundleInfo extends AbstractManifestBuilder<BundleInfoBuilder> implements BundleInfo, BundleInfoBuilder {
private static final String BUNDLE_MANIFESTVERSION_RELEASE_4 = "2";
private final Map<Name, List<Clause>> clauses = new HashMap<>();
@Override
public boolean equals(Object other)
{
return super.equals(other);
}
@Override
public boolean equals(AbstractManifestBuilder<?> that)
{
return that instanceof DefaultBundleInfo
&& same(that)
&& Objects.deepEquals(((DefaultBundleInfo) that).clauses, this.clauses);
}
@Override
public int hashCode()
{
return Objects.hash(super.hashCode(), clauses);
}
@Override
public BundleInfoBuilder headerClause(Name header, Clause clause)
{
clauses.computeIfAbsent(header, h -> new ArrayList<>()).add(clause);
return self();
}
@Override
protected DefaultBundleInfo self()
{
return this;
}
@Override
protected void preBuildHook()
{
if(!mainAttributes.containsKey(BUNDLE_MANIFESTVERSION.header())) {
bundleManifestVersion(BUNDLE_MANIFESTVERSION_RELEASE_4);
}
for(Entry<Name, List<Clause>> e : clauses.entrySet()) {
manifestMain(attribute(e.getKey(), Clause.allToString(e.getValue())));
}
}
@Override
public BundleInfo construct()
{
hook();
return this;
}
@Override
public BundleInfoBuilder deconstruct()
{
unhook();
return this;
}
@Override
public Map<Name, List<Clause>> allHeaderClauses()
{
return clauses;
}
}