Package org.red5.server.scope

Source Code of org.red5.server.scope.ScopeResolver

/*
* RED5 Open Source Flash Server - http://code.google.com/p/red5/
*
* Copyright 2006-2014 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.scope;

import java.util.Arrays;

import org.apache.commons.lang3.StringUtils;
import org.red5.server.api.scope.IGlobalScope;
import org.red5.server.api.scope.IScope;
import org.red5.server.api.scope.IScopeResolver;
import org.red5.server.api.scope.ScopeType;
import org.red5.server.exception.ScopeException;
import org.red5.server.exception.ScopeNotFoundException;
import org.red5.server.exception.ScopeShuttingDownException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Resolves scopes from path
*/
public class ScopeResolver implements IScopeResolver {

  protected static Logger log = LoggerFactory.getLogger(ScopeResolver.class);

  /**
   *  Global scope
   */
  protected IGlobalScope globalScope;

  /**
   * Getter for global scope
   * @return      Global scope
   */
  public IGlobalScope getGlobalScope() {
    return globalScope;
  }

  /**
   * Setter for global scope
   * @param root        Global scope
   */
  public void setGlobalScope(IGlobalScope root) {
    this.globalScope = root;
  }

  /**
   * Return scope associated with given path
   *
   * @param path        Scope path
   * @return            Scope object
   */
  public IScope resolveScope(String path) {
    // start from global scope
    return resolveScope(globalScope, path);
  }

  /**
   * Return scope associated with given path from given root scope.
   *
   * @param root        Scope to start from
   * @param path        Scope path
   * @return            Scope object
   */
  public IScope resolveScope(IScope root, String path) {
    log.debug("resolveScope - root: {} path: {}", root, path);
    if (root == null) {
      throw new ScopeException("Null root scope");
    }
    // start from root scope
    IScope scope = root;
    // if there's no path return root scope (e.i. root path scope)
    if (StringUtils.isNotEmpty(path)) {
      // Split path to parts
      final String[] parts = path.split("/");
      log.debug("Split path: {}", Arrays.toString(parts));
      // Iterate thru them, skip empty parts
      for (String child : parts) {
        if (StringUtils.isEmpty(child)) {
          // skip empty path elements
          continue;
        }
        // if scope does not exist and we are not in the root, create a child scope
        if (!scope.hasChildScope(child) && !scope.equals(root)) {
          scope.createChildScope(child);
        }
        // get child scope
        scope = scope.getScope(child);
        // if the scope is null then the room was not found
        if (scope == null) {
          throw new ScopeNotFoundException(scope, child);
        }
        // some scopes don't implement IScope, such as SharedObjectScope
        if (scope instanceof IScope) {
          if (scope.getType().equals(ScopeType.APPLICATION) && ((WebScope) scope).isShuttingDown()) {
            throw new ScopeShuttingDownException(scope);
          }
        }
      }
    }
    return scope;
  }

}
TOP

Related Classes of org.red5.server.scope.ScopeResolver

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.