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

org.red5.server.adapter.StatefulScopeWrappingAdapter Maven / Gradle / Ivy

/*
 * RED5 Open Source Media Server - https://github.com/Red5/
 * 
 * Copyright 2006-2016 by respective authors (see below). All rights reserved.
 * 
 * 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 org.red5.server.adapter;

import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.red5.server.api.IAttributeStore;
import org.red5.server.api.IClient;
import org.red5.server.api.IConnection;
import org.red5.server.api.IContext;
import org.red5.server.api.scope.IScope;
import org.red5.server.api.scope.IScopeAware;
import org.red5.server.plugin.PluginDescriptor;
import org.springframework.core.io.Resource;

/**
 * StatefulScopeWrappingAdapter class wraps stateful IScope functionality. That is, it has attributes that you can work with, subscopes, associated resources and connections.
 *
 */
public class StatefulScopeWrappingAdapter extends AbstractScopeAdapter implements IScopeAware, IAttributeStore {

    //private static Logger log = LoggerFactory.getLogger(StatefulScopeWrappingAdapter.class);

    /**
     * Wrapped scope
     */
    protected IScope scope;

    /**
     * List of plug-in descriptors
     */
    protected List plugins;

    /** {@inheritDoc} */
    public void setScope(IScope scope) {
        //log.trace("setScope: {}", scope.getName());
        this.scope = scope;
    }

    /**
     * Getter for wrapped scope
     *
     * @return Wrapped scope
     */
    public IScope getScope() {
        //log.trace("getScope: {}", scope.getName());
        return scope;
    }

    /**
     * Returns any plug-ins descriptors added
     * 
     * @return plug-in descriptor list
     */
    public List getPlugins() {
        return plugins;
    }

    /**
     * Adds a list of plug-in descriptors
     * 
     * @param plugins
     *            plugins
     */
    public void setPlugins(List plugins) {
        this.plugins = plugins;
    }

    /** {@inheritDoc} */
    public Object getAttribute(String name) {
        return scope.getAttribute(name);
    }

    /** {@inheritDoc} */
    public Object getAttribute(String name, Object defaultValue) {
        Object value = scope.getAttribute(name);
        if (value == null) {
            value = defaultValue;
        }
        return value;
    }

    /** {@inheritDoc} */
    public Set getAttributeNames() {
        return scope.getAttributeNames();
    }

    /**
     * Wrapper for Scope#getAttributes
     * 
     * @return Scope attributes map
     */
    public Map getAttributes() {
        return scope.getAttributes();
    }

    /** {@inheritDoc} */
    public boolean hasAttribute(String name) {
        return scope.hasAttribute(name);
    }

    /** {@inheritDoc} */
    public boolean removeAttribute(String name) {
        return scope.removeAttribute(name);
    }

    /** {@inheritDoc} */
    public void removeAttributes() {
        Set names = scope.getAttributeNames();
        for (String name : names) {
            scope.removeAttribute(name);
        }
    }

    /** {@inheritDoc} */
    public int size() {
        return scope != null ? scope.getAttributeNames().size() : 0;
    }

    /** {@inheritDoc} */
    public boolean setAttribute(String name, Object value) {
        return scope.setAttribute(name, value);
    }

    /** {@inheritDoc} */
    public boolean setAttributes(IAttributeStore attributes) {
        int successes = 0;
        for (Map.Entry entry : attributes.getAttributes().entrySet()) {
            if (scope.setAttribute(entry.getKey(), entry.getValue())) {
                successes++;
            }
        }
        // expect every value to have been added
        return (successes == attributes.size());
    }

    /** {@inheritDoc} */
    public boolean setAttributes(Map attributes) {
        int successes = 0;
        for (Map.Entry entry : attributes.entrySet()) {
            if (scope.setAttribute(entry.getKey(), entry.getValue())) {
                successes++;
            }
        }
        // expect every value to have been added
        return (successes == attributes.size());
    }

    /**
     * Creates child scope
     * 
     * @param name
     *            Child scope name
     * @return true on success, false otherwise
     */
    public boolean createChildScope(String name) {
        if (!scope.hasChildScope(name)) {
            return scope.createChildScope(name);
        }
        return false;
    }

    /**
     * Return child scope
     * 
     * @param name
     *            Child scope name
     * @return Child scope with given name
     */
    public IScope getChildScope(String name) {
        return scope.getScope(name);
    }

    /**
     * Iterator for child scope names
     *
     * @return collection of child scope names
     */
    public Set getChildScopeNames() {
        return scope.getScopeNames();
    }

    /**
     * Getter for set of clients
     *
     * @return Set of clients
     */
    public Set getClients() {
        return scope.getClients();
    }

    /**
     * Returns all connections in the scope
     *
     * @return collection of a set of connections
     */
    @SuppressWarnings("deprecation")
    public Collection> getConnections() {
        return scope.getConnections();
    }

    /**
     * Returns all connections for a given client
     *
     * @param client
     *            client
     * @return set of connections
     */
    @SuppressWarnings("deprecation")
    public Set lookupConnections(IClient client) {
        return scope.lookupConnections(client);
    }

    /**
     * Getter for context
     *
     * @return Value for context
     */
    public IContext getContext() {
        return scope.getContext();
    }

    /**
     * Getter for depth
     *
     * @return Value for depth
     */
    public int getDepth() {
        return scope.getDepth();
    }

    /**
     * Getter for name
     *
     * @return Value for name
     */
    public String getName() {
        return scope.getName();
    }

    /**
     * Return parent scope
     *
     * @return Parent scope
     */
    public IScope getParent() {
        return scope.getParent();
    }

    /**
     * Getter for stateful scope path
     *
     * @return Value for path
     */
    public String getPath() {
        return scope.getPath();
    }

    /**
     * Whether this scope has a child scope with given name
     * 
     * @param name
     *            Child scope name
     * @return true if it does have it, false otherwise
     */
    public boolean hasChildScope(String name) {
        return scope.hasChildScope(name);
    }

    /**
     * If this scope has a parent
     * 
     * @return true if this scope has a parent scope, false otherwise
     */
    public boolean hasParent() {
        return scope.hasParent();
    }

    /**
     * Returns array of resources (as Spring core Resource class instances)
     * 
     * @param pattern
     *            Resource pattern
     * @return Returns array of resources
     * @throws IOException
     *             I/O exception
     */
    public Resource[] getResources(String pattern) throws IOException {
        return scope.getResources(pattern);
    }

    /**
     * Return resource by name
     * 
     * @param path
     *            Resource name
     * @return Resource with given name
     */
    public Resource getResource(String path) {
        return scope.getResource(path);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy