All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.mhus.osgi.api.util.MServiceTracker Maven / Gradle / Ivy

There is a newer version: 7.8.0
Show newest version
/**
 * Copyright 2018 Mike Hummel
 *
 * 

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * *

http://www.apache.org/licenses/LICENSE-2.0 * *

Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package de.mhus.osgi.api.util; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.component.ComponentContext; import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTrackerCustomizer; import de.mhus.osgi.api.MOsgi; public abstract class MServiceTracker { private BundleContext context; protected Class clazz; private ServiceTrackerCustomizer customizer = new ServiceTrackerCustomizer() { @Override public T addingService(ServiceReference reference) { T service = context.getService(reference); if (service != null && service instanceof ReferenceInject) ((ReferenceInject) service).setReference(reference); MServiceTracker.this.addService(reference, service); return service; } @Override public void modifiedService(ServiceReference reference, T service) { if (service != null && service instanceof ReferenceInject) ((ReferenceInject) service).setReference(reference); MServiceTracker.this.modifyService(reference, service); } @Override public void removedService(ServiceReference reference, T service) { MServiceTracker.this.removeService(reference, service); } }; private ServiceTracker tracker; public MServiceTracker(Class clazz) { this(null, clazz); } protected void modifyService(ServiceReference reference, T service) { removeService(reference, service); addService(reference, service); } protected abstract void removeService(ServiceReference reference, T service); protected abstract void addService(ServiceReference reference, T service); public MServiceTracker(BundleContext context, Class clazz) { if (context == null) { try { context = MOsgi.getBundleContext(); } catch (Throwable t) { } } this.context = context; this.clazz = clazz; } public MServiceTracker start(ComponentContext ctx) { if (ctx != null) return start(ctx.getBundleContext()); else return start(); } public MServiceTracker start(BundleContext ctx) { if (ctx != null) context = ctx; return start(); } public MServiceTracker start() { if (tracker != null) return this; tracker = new ServiceTracker<>(context, clazz, customizer); tracker.open(true); return this; } public void stop() { if (tracker == null) return; tracker.close(); tracker = null; } public boolean isRunning() { return tracker != null; } public BundleContext getBundleContext() { return context; } public void setBundleContext(BundleContext context) { this.context = context; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy