/* * #%L * Gravia :: Runtime :: Embedded * %% * Copyright (C) 2013 - 2014 JBoss by Red Hat * %% * 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. * #L% */ package org.jboss.gravia.runtime.embedded.internal; import static org.jboss.gravia.runtime.spi.RuntimeLogger.LOGGER; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Dictionary; import java.util.List; import org.jboss.gravia.runtime.Module; import org.jboss.gravia.runtime.ModuleListener; import org.jboss.gravia.runtime.ServiceListener; import org.jboss.gravia.runtime.ServiceReference; import org.jboss.gravia.runtime.ServiceRegistration; import org.jboss.gravia.runtime.spi.AbstractModule; import org.jboss.gravia.runtime.spi.AbstractModuleContext; import org.jboss.gravia.runtime.spi.AbstractRuntime; import org.jboss.gravia.runtime.spi.RuntimeEventsManager; import org.jboss.gravia.utils.IllegalArgumentAssertion; /** * The embedded {@link ModuleContext} * * @author thomas.diesler@jboss.com * @since 27-Sep-2013 */ final class EmbeddedModuleContext extends AbstractModuleContext { EmbeddedModuleContext(Module module) { super(module); } @Override protected void destroy() { super.destroy(); } @Override public void addModuleListener(ModuleListener listener) { IllegalArgumentAssertion.assertNotNull(listener, "listener"); assertNotDestroyed(); getEventsManager().addModuleListener(getModule(), listener); } @Override public void removeModuleListener(ModuleListener listener) { IllegalArgumentAssertion.assertNotNull(listener, "listener"); assertNotDestroyed(); getEventsManager().removeModuleListener(getModule(), listener); } @Override public void addServiceListener(ServiceListener listener, String filterstr) { IllegalArgumentAssertion.assertNotNull(listener, "listener"); assertNotDestroyed(); getEventsManager().addServiceListener(getModule(), listener, filterstr); } @Override public void addServiceListener(ServiceListener listener) { IllegalArgumentAssertion.assertNotNull(listener, "listener"); assertNotDestroyed(); getEventsManager().addServiceListener(getModule(), listener, null); } @Override public void removeServiceListener(ServiceListener listener) { IllegalArgumentAssertion.assertNotNull(listener, "listener"); assertNotDestroyed(); getEventsManager().removeServiceListener(getModule(), listener); } @Override @SuppressWarnings("unchecked") public <S> ServiceRegistration<S> registerService(Class<S> clazz, S service, Dictionary<String, ?> properties) { IllegalArgumentAssertion.assertNotNull(clazz, "clazz"); IllegalArgumentAssertion.assertNotNull(service, "service"); assertNotDestroyed(); return getServicesManager().registerService(this, new String[]{ clazz.getName() }, service, properties); } @Override public ServiceRegistration<?> registerService(String className, Object service, Dictionary<String, ?> properties) { IllegalArgumentAssertion.assertNotNull(className, "className"); IllegalArgumentAssertion.assertNotNull(service, "service"); assertNotDestroyed(); return getServicesManager().registerService(this, new String[]{ className }, service, properties); } @Override public ServiceRegistration<?> registerService(String[] classNames, Object service, Dictionary<String, ?> properties) { IllegalArgumentAssertion.assertNotNull(classNames, "classNames"); IllegalArgumentAssertion.assertNotNull(service, "service"); assertNotDestroyed(); return getServicesManager().registerService(this, classNames, service, properties); } @Override @SuppressWarnings("unchecked") public <S> ServiceReference<S> getServiceReference(Class<S> clazz) { IllegalArgumentAssertion.assertNotNull(clazz, "clazz"); assertNotDestroyed(); return (ServiceReference<S>) getServicesManager().getServiceReference(this, clazz.getName()); } @Override public ServiceReference<?> getServiceReference(String className) { IllegalArgumentAssertion.assertNotNull(className, "className"); assertNotDestroyed(); return getServicesManager().getServiceReference(this, className); } @Override public ServiceReference<?>[] getServiceReferences(String className, String filter) { assertNotDestroyed(); List<ServiceState<?>> srefs = getServicesManager().getServiceReferences(this, className, filter, true); if (srefs.isEmpty()) return null; List<ServiceReference<?>> result = new ArrayList<ServiceReference<?>>(); for (ServiceState<?> serviceState : srefs) result.add(serviceState.getReference()); return result.toArray(new ServiceReference[result.size()]); } @Override @SuppressWarnings("unchecked") public <S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz, String filter) { assertNotDestroyed(); String className = clazz != null ? clazz.getName() : null; List<ServiceState<?>> srefs = getServicesManager().getServiceReferences(this, className, filter, true); List<ServiceReference<S>> result = new ArrayList<ServiceReference<S>>(); for (ServiceState<?> serviceState : srefs) result.add((ServiceReference<S>) serviceState.getReference()); return Collections.unmodifiableList(result); } @Override public ServiceReference<?>[] getAllServiceReferences(String className, String filter) { assertNotDestroyed(); List<ServiceState<?>> srefs = getServicesManager().getServiceReferences(this, className, filter, false); if (srefs.isEmpty()) return null; List<ServiceReference<?>> result = new ArrayList<ServiceReference<?>>(); for (ServiceState<?> serviceState : srefs) result.add(serviceState.getReference()); return result.toArray(new ServiceReference[result.size()]); } @Override public boolean ungetService(ServiceReference<?> reference) { IllegalArgumentAssertion.assertNotNull(reference, "reference"); if (isDestroyed()) { LOGGER.warn("Cannot ungetService " + reference + " from already destroyed module context: " + this); return false; } else { ServiceState<?> serviceState = ServiceState.assertServiceState(reference); return getServicesManager().ungetService((AbstractModule) getModule(), serviceState); } } @Override @SuppressWarnings("unchecked") public <S> S getService(ServiceReference<S> reference) { IllegalArgumentAssertion.assertNotNull(reference, "reference"); assertNotDestroyed(); ServiceState<S> serviceState = ServiceState.assertServiceState(reference); return getServicesManager().getService(this, serviceState); } private RuntimeServicesManager getServicesManager() { AbstractRuntime runtime = getModule().adapt(AbstractRuntime.class); return runtime.adapt(RuntimeServicesManager.class); } private RuntimeEventsManager getEventsManager() { AbstractRuntime runtime = getModule().adapt(AbstractRuntime.class); return runtime.adapt(RuntimeEventsManager.class); } }