/*- * ~~~~~~licensing~~~~~~ * profile-management * ========== * Copyright (C) 2020 - 2021 EmDev LLC * ========== * 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. * ~~~~~~/licensing~~~~~~ */ package ru.entaxy.platform.base.support.osgi.tracker; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.osgi.framework.Bundle; import org.osgi.framework.BundleEvent; import org.osgi.util.tracker.BundleTrackerCustomizer; public abstract class UniformBundleTrackerCustomizer implements BundleTrackerCustomizer { protected BundleTrackerCustomizerListener listener; protected List> filters = new LinkedList<>(); public UniformBundleTrackerCustomizer() { super(); } public UniformBundleTrackerCustomizer(BundleTrackerCustomizerListener listener) { super(); setListener(listener); } public BundleTrackerCustomizerListener getListener() { return listener; } public void setListener(BundleTrackerCustomizerListener listener) { this.listener = listener; } public void addFilter(BundleFilter filter) { this.filters.add(filter); } public UniformBundleTrackerCustomizer listener(BundleTrackerCustomizerListener listener){ setListener(listener); return this; } @Override public T addingBundle(Bundle bundle, BundleEvent event) { Map> filterResults = new HashMap<>(); for (BundleFilter filter: filters) { List result = filter.checkBundle(bundle, event); if (result == null) return null; filterResults.put(filter.getFilterId(), result); } T managedObject = createManagedObject(bundle, event, filterResults); enrichManagedObject(bundle, event, filterResults, managedObject); if (listener != null) listener.added(managedObject); return managedObject; } protected abstract T createManagedObject(Bundle bundle, BundleEvent event, Map> filterResults); /* * to override */ protected void enrichManagedObject(Bundle bundle, BundleEvent event, Map> filterResults, T managedObject) { } @Override public void modifiedBundle(Bundle bundle, BundleEvent event, T object) { listener.modified(object); } @Override public void removedBundle(Bundle bundle, BundleEvent event, T object) { listener.removed(object); } }