Package com.kurento.kmf.content.internal

Source Code of com.kurento.kmf.content.internal.ContentApplicationContextConfiguration

/*
* (C) Copyright 2013 Kurento (http://kurento.org/)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-2.1.html
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
package com.kurento.kmf.content.internal;

import java.net.InetSocketAddress;

import javax.servlet.AsyncContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;

import com.kurento.kmf.common.SecretGenerator;
import com.kurento.kmf.common.exception.KurentoException;
import com.kurento.kmf.content.*;
import com.kurento.kmf.content.internal.base.AbstractContentSession;
import com.kurento.kmf.content.internal.base.AsyncContentRequestProcessor;
import com.kurento.kmf.content.internal.player.HttpPlayerSessionImpl;
import com.kurento.kmf.content.internal.recorder.HttpRecorderSessionImpl;
import com.kurento.kmf.content.internal.rtp.RtpContentSessionImpl;
import com.kurento.kmf.content.internal.webrtc.WebRtcContentSessionImpl;
import com.kurento.kmf.content.jsonrpc.JsonRpcRequest;
import com.kurento.kmf.jsonrpcconnector.client.JsonRpcClient;
import com.kurento.kmf.media.MediaApiConfiguration;
import com.kurento.kmf.media.factory.MediaPipelineFactory;
import com.kurento.kmf.spring.RootWebApplicationContextParentRecoverer;
import com.kurento.kmf.thrift.ThriftInterfaceConfiguration;
import com.kurento.kmf.thrift.internal.ThriftInterfaceExecutorService;
import com.kurento.kmf.thrift.jsonrpcconnector.JsonRpcClientThrift;
import com.kurento.kmf.thrift.pool.ThriftClientPoolService;

/**
*
* Configuration class, declaring the Spring beans used in Content Management
* API.
*
* @author Luis López (llopez@gsyc.es)
* @author Boni García (bgarcia@gsyc.es)
* @version 1.0.0
*/
@Configuration
public class ContentApplicationContextConfiguration {

  private static final Logger log = LoggerFactory
      .getLogger(ContentApplicationContextConfiguration.class);

  @Autowired
  private RootWebApplicationContextParentRecoverer parentRecoverer;

  @Bean
  StreamingProxy streamingProxy() {
    return new StreamingProxy();
  }

  @Bean
  ContentApiExecutorService contentApiExecutorService() {
    return new ContentApiExecutorService();
  }

  /**
   * Random word generator.
   *
   * @return Random word generator bean
   */
  @Bean
  SecretGenerator secretGenerator() {
    return new SecretGenerator();
  }

  /**
   * Protocol manager.
   *
   * @return Protocol manager bean
   */
  @Bean
  ControlProtocolManager controlPrototolManager() {
    return new ControlProtocolManager();
  }

  @Bean
  @Scope("prototype")
  AsyncContentRequestProcessor asyncContentRequestProcessor(
      AbstractContentSession contentSession, JsonRpcRequest message,
      AsyncContext asyncCtx) {
    return new AsyncContentRequestProcessor(contentSession, message,
        asyncCtx);
  }

  // PLAYER STUFF
  @Bean
  @Scope("prototype")
  HttpPlayerSessionImpl httpPlayerSessionImpl(
      HttpPlayerHandler playerHandler, ContentSessionManager manager,
      AsyncContext ctx, String contentId, boolean redirect,
      boolean useControlProtocol) {
    return new HttpPlayerSessionImpl(playerHandler, manager, ctx,
        contentId, redirect, useControlProtocol);
  }

  // RECORDER STUFF
  @Bean
  @Scope("prototype")
  HttpRecorderSessionImpl httpRecordSessionImpl(
      HttpRecorderHandler recorderHander, ContentSessionManager manager,
      AsyncContext ctx, String contentId, boolean redirect,
      boolean useControlProtocol) {
    return new HttpRecorderSessionImpl(recorderHander, manager, ctx,
        contentId, redirect, useControlProtocol);
  }

  // WEBRTC MEDIA STUFF
  @Bean
  @Scope("prototype")
  WebRtcContentSessionImpl webRtcContentSessionImpl(
      WebRtcContentHandler handler, ContentSessionManager manager,
      AsyncContext asyncContext, String contentId) {
    return new WebRtcContentSessionImpl(handler, manager, asyncContext,
        contentId);
  }

  // RTP MEDIA STUFF
  @Bean
  @Scope("prototype")
  RtpContentSessionImpl rtpContentSessionImpl(RtpContentHandler handler,
      ContentSessionManager manager, AsyncContext asyncContext,
      String contentId) {
    return new RtpContentSessionImpl(handler, manager, asyncContext,
        contentId);
  }

  // OTHER STUFF
  @Bean
  @Scope("prototype")
  ContentSessionManager contentSessionManager() {
    return new ContentSessionManager();
  }

  private <E> E getBeanInParentOrDefault(Class<E> beanClass) {

    E bean = returnBeanInParent(beanClass);

    if (bean != null) {
      return bean;
    } else {
      try {
        return beanClass.newInstance();
      } catch (InstantiationException | IllegalAccessException e) {
        throw new KurentoException(
            "Exception creating default configuration for "
                + beanClass.getSimpleName(), e);
      }
    }
  }

  private <E> E returnBeanInParent(Class<E> beanClass) {
    try {
      return parentRecoverer.getParentContext().getBean(beanClass);
    } catch (NullPointerException npe) {
      log.info(
          "Loading {}. Could not find parent context. Switching to default configuration ...",
          beanClass.getSimpleName());
      return null;
    } catch (NoSuchBeanDefinitionException t) {
      log.info("Loading {}. Could not find exacly one bean of class "
          + beanClass.getSimpleName()
          + ". Switching to default configuration ...");
      return null;
    }
  }

  @Bean
  @Primary
  ContentApiConfiguration contentApiConfiguration() {
    return getBeanInParentOrDefault(ContentApiConfiguration.class);
  }

  @Bean
  @Primary
  public MediaPipelineFactory mediaPipelineFactory() {

    MediaPipelineFactory bean = returnBeanInParent(MediaPipelineFactory.class);

    if (bean != null) {
      return bean;

    } else {

      ThriftClientPoolService clientPool = new ThriftClientPoolService(
          thriftInterfaceConfiguration());

      ThriftInterfaceExecutorService executorService = new ThriftInterfaceExecutorService(
          thriftInterfaceConfiguration());

      MediaApiConfiguration mediaApiConfiguration = mediaApiConfiguration();

      JsonRpcClient client = new JsonRpcClientThrift(clientPool,
          executorService, new InetSocketAddress(
              mediaApiConfiguration.getHandlerAddress(),
              mediaApiConfiguration.getHandlerPort()));

      return new MediaPipelineFactory(client);
    }
  }

  @Bean
  @Primary
  public ThriftInterfaceConfiguration thriftInterfaceConfiguration() {
    return getBeanInParentOrDefault(ThriftInterfaceConfiguration.class);
  }

  @Bean
  @Primary
  MediaApiConfiguration mediaApiConfiguration() {
    return getBeanInParentOrDefault(MediaApiConfiguration.class);
  }
}
TOP

Related Classes of com.kurento.kmf.content.internal.ContentApplicationContextConfiguration

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.