aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/container/bundle
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2021-04-02 16:59:04 +0200
committergjoranv <gv@verizonmedia.com>2021-04-02 19:03:05 +0200
commit3b286c4c41ef4946afcc958f1724e7e467e5dc3a (patch)
tree907263ee2de0671957e583bcc44f0639ce8c6401 /container-core/src/main/java/com/yahoo/container/bundle
parent794378c79b06e6860f862f4c966740a6c8582325 (diff)
Add java source from container-di.
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/bundle')
-rw-r--r--container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java86
-rw-r--r--container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java264
-rw-r--r--container-core/src/main/java/com/yahoo/container/bundle/package-info.java5
3 files changed, 355 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java b/container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java
new file mode 100644
index 00000000000..0fb8a99a957
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java
@@ -0,0 +1,86 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.bundle;
+
+import com.yahoo.component.ComponentId;
+import com.yahoo.component.ComponentSpecification;
+
+
+/**
+ * Specifies how a component should be instantiated from a bundle.
+ *
+ * Immutable
+ *
+ * @author Tony Vaagenes
+ */
+public final class BundleInstantiationSpecification {
+
+ public final ComponentId id;
+ public final ComponentSpecification classId;
+ public final ComponentSpecification bundle;
+
+ public BundleInstantiationSpecification(ComponentSpecification id, ComponentSpecification classId, ComponentSpecification bundle) {
+ this.id = id.toId();
+ this.classId = (classId != null) ? classId : id.withoutNamespace();
+ this.bundle = (bundle != null) ? bundle : this.classId;
+ }
+
+ // Must only be used when classId != null, otherwise the id must be handled as a ComponentSpecification
+ // (since converting a spec string to a ComponentId and then to a ComponentSpecification causes loss of information).
+ public BundleInstantiationSpecification(ComponentId id, ComponentSpecification classId, ComponentSpecification bundle) {
+ this(id.toSpecification(), classId, bundle);
+ assert (classId!= null);
+ }
+
+ private static final String defaultInternalBundle = "container-search-and-docproc";
+
+ private static BundleInstantiationSpecification getInternalSpecificationFromString(String idSpec, String classSpec) {
+ return new BundleInstantiationSpecification(
+ new ComponentSpecification(idSpec),
+ (classSpec == null || classSpec.isEmpty())? null : new ComponentSpecification(classSpec),
+ new ComponentSpecification(defaultInternalBundle));
+ }
+
+ public static BundleInstantiationSpecification getInternalSearcherSpecification(ComponentSpecification idSpec,
+ ComponentSpecification classSpec) {
+ return new BundleInstantiationSpecification(idSpec, classSpec, new ComponentSpecification(defaultInternalBundle));
+ }
+
+ // TODO: These are the same for now because they are in the same bundle.
+ public static BundleInstantiationSpecification getInternalHandlerSpecificationFromStrings(String idSpec, String classSpec) {
+ return getInternalSpecificationFromString(idSpec, classSpec);
+ }
+
+ public static BundleInstantiationSpecification getInternalProcessingSpecificationFromStrings(String idSpec, String classSpec) {
+ return getInternalSpecificationFromString(idSpec, classSpec);
+ }
+
+ public static BundleInstantiationSpecification getInternalSearcherSpecificationFromStrings(String idSpec, String classSpec) {
+ return getInternalSpecificationFromString(idSpec, classSpec);
+ }
+
+ public static BundleInstantiationSpecification getFromStrings(String idSpec, String classSpec, String bundleSpec) {
+ return new BundleInstantiationSpecification(
+ new ComponentSpecification(idSpec),
+ (classSpec == null || classSpec.isEmpty())? null : new ComponentSpecification(classSpec),
+ (bundleSpec == null || bundleSpec.isEmpty())? null : new ComponentSpecification(bundleSpec));
+ }
+
+ /**
+ * Return a new instance of the specification with bundle name altered
+ *
+ * @param bundleName the new name of the bundle
+ * @return the new instance of the specification
+ */
+ public BundleInstantiationSpecification inBundle(String bundleName) {
+ return new BundleInstantiationSpecification(this.id, this.classId, new ComponentSpecification(bundleName));
+ }
+
+ public String getClassName() {
+ return classId.getName();
+ }
+
+ public BundleInstantiationSpecification nestInNamespace(ComponentId namespace) {
+ return new BundleInstantiationSpecification(id.nestInNamespace(namespace), classId, bundle);
+ }
+
+}
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java b/container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java
new file mode 100644
index 00000000000..a6524b41886
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java
@@ -0,0 +1,264 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.bundle;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRequirement;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.framework.wiring.BundleWire;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
+import org.osgi.resource.Wire;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.cert.X509Certificate;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author gjoranv
+ * @author ollivir
+ */
+public class MockBundle implements Bundle, BundleWiring {
+ public static final String SymbolicName = "mock-bundle";
+ public static final Version BundleVersion = new Version(1, 0, 0);
+
+ private static final Class<BundleWiring> bundleWiringClass = BundleWiring.class;
+
+ @Override
+ public int getState() {
+ return Bundle.ACTIVE;
+ }
+
+ @Override
+ public void start(int options) {
+ }
+
+ @Override
+ public void start() {
+ }
+
+ @Override
+ public void stop(int options) {
+ }
+
+ @Override
+ public void stop() {
+ }
+
+ @Override
+ public void update(InputStream input) {
+ }
+
+ @Override
+ public void update() {
+ }
+
+ @Override
+ public void uninstall() {
+ }
+
+ @Override
+ public Dictionary<String, String> getHeaders(String locale) {
+ return getHeaders();
+ }
+
+ @Override
+ public String getSymbolicName() {
+ return SymbolicName;
+ }
+
+ @Override
+ public Version getVersion() {
+ return BundleVersion;
+ }
+
+ @Override
+ public String getLocation() {
+ return getSymbolicName();
+ }
+
+ @Override
+ public long getBundleId() {
+ return 0L;
+ }
+
+ @Override
+ public Dictionary<String, String> getHeaders() {
+ return new Hashtable<>();
+ }
+
+ @Override
+ public ServiceReference<?>[] getRegisteredServices() {
+ return new ServiceReference<?>[0];
+ }
+
+ @Override
+ public ServiceReference<?>[] getServicesInUse() {
+ return getRegisteredServices();
+ }
+
+ @Override
+ public boolean hasPermission(Object permission) {
+ return true;
+ }
+
+ @Override
+ public URL getResource(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Class<?> loadClass(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Enumeration<URL> getResources(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Enumeration<String> getEntryPaths(String path) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public URL getEntry(String path) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
+ return Collections.emptyEnumeration();
+ }
+
+
+ @Override
+ public long getLastModified() {
+ return 1L;
+ }
+
+ @Override
+ public BundleContext getBundleContext() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+ return Collections.emptyMap();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T adapt(Class<T> type) {
+ if (type.equals(bundleWiringClass)) {
+ return (T) this;
+ } else {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ @Override
+ public File getDataFile(String filename) {
+ return null;
+ }
+
+ @Override
+ public int compareTo(Bundle o) {
+ return Long.compare(getBundleId(), o.getBundleId());
+ }
+
+
+ //TODO: replace with mockito
+ @Override
+ public List<URL> findEntries(String p1, String p2, int p3) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Wire> getRequiredResourceWires(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Capability> getResourceCapabilities(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isCurrent() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<BundleWire> getRequiredWires(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<BundleCapability> getCapabilities(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Wire> getProvidedResourceWires(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<BundleWire> getProvidedWires(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public BundleRevision getRevision() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Requirement> getResourceRequirements(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isInUse() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Collection<String> listResources(String p1, String p2, int p3) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public ClassLoader getClassLoader() {
+ return MockBundle.class.getClassLoader();
+ }
+
+ @Override
+ public List<BundleRequirement> getRequirements(String p1) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public BundleRevision getResource() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Bundle getBundle() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/package-info.java b/container-core/src/main/java/com/yahoo/container/bundle/package-info.java
new file mode 100644
index 00000000000..c9707371626
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/bundle/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.container.bundle;
+
+import com.yahoo.osgi.annotation.ExportPackage;