Package org.jboss.gravia.runtime.embedded.internal

Source Code of org.jboss.gravia.runtime.embedded.internal.EmbeddedModuleContext

/*
* #%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);
    }
}
TOP

Related Classes of org.jboss.gravia.runtime.embedded.internal.EmbeddedModuleContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.