/**
* $Id: EntityBrokerRESTServiceManager.java 113499 2012-09-25 01:13:56Z azeckoski@unicon.net $
* $URL: https://source.sakaiproject.org/svn/entitybroker/trunk/rest/src/java/org/sakaiproject/entitybroker/rest/EntityBrokerRESTServiceManager.java $
* TestManager.java - entity-broker - Jul 23, 2008 6:27:29 PM - azeckoski
**************************************************************************
* Copyright (c) 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.entitybroker.rest;
import org.sakaiproject.entitybroker.EntityBrokerManager;
import org.sakaiproject.entitybroker.access.EntityViewAccessProviderManager;
import org.sakaiproject.entitybroker.access.HttpServletAccessProviderManager;
import org.sakaiproject.entitybroker.entityprovider.EntityProviderManager;
import org.sakaiproject.entitybroker.entityprovider.EntityProviderMethodStore;
import org.sakaiproject.entitybroker.entityprovider.extension.RequestGetterWrite;
import org.sakaiproject.entitybroker.entityprovider.extension.RequestStorageWrite;
import org.sakaiproject.entitybroker.providers.EntityPropertiesService;
import org.sakaiproject.entitybroker.providers.ExternalIntegrationProvider;
/**
* This creates all the needed services (as if it were a service manager),
* this will let us create the services we need without too much confusion and ensure
* we are using the same ones <br/>
* If this is used then the services should not be created in some other way but should be
* initiated here and then exported from this class only
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
@SuppressWarnings("deprecation")
public class EntityBrokerRESTServiceManager {
private static volatile EntityBrokerRESTServiceManager instance;
public static EntityBrokerRESTServiceManager getInstance() {
if (instance == null) {
instance = new EntityBrokerRESTServiceManager();
}
return instance;
}
public static void setInstance(EntityBrokerRESTServiceManager ersm) {
instance = ersm;
}
// services we need
private RequestStorageWrite requestStorage;
private RequestGetterWrite requestGetter;
private EntityPropertiesService entityPropertiesService;
private EntityBrokerManager entityBrokerManager;
private EntityProviderManager entityProviderManager;
private EntityProviderMethodStore entityProviderMethodStore;
private HttpServletAccessProviderManager httpServletAccessProviderManager;
private EntityViewAccessProviderManager entityViewAccessProviderManager;
private ExternalIntegrationProvider externalIntegrationProvider;
// services we are starting up
private EntityActionsManager entityActionsManager;
private EntityDescriptionManager entityDescriptionManager;
private EntityEncodingManager entityEncodingManager;
private EntityRedirectsManager entityRedirectsManager;
private EntityHandlerImpl entityRequestHandler;
private EntityBatchHandler entityBatchHandler;
private EntityRESTProviderBase entityRESTProvider;
public void setEntityBrokerManager(EntityBrokerManager entityBrokerManager) {
this.entityBrokerManager = entityBrokerManager;
this.requestStorage = entityBrokerManager.getRequestStorage();
this.requestGetter = entityBrokerManager.getRequestGetter();
this.entityPropertiesService = entityBrokerManager.getEntityPropertiesService();
this.entityProviderManager = entityBrokerManager.getEntityProviderManager();
this.entityProviderMethodStore = entityBrokerManager.getEntityProviderMethodStore();
this.entityViewAccessProviderManager = entityBrokerManager.getEntityViewAccessProviderManager();
this.externalIntegrationProvider = entityBrokerManager.getExternalIntegrationProvider();
}
protected EntityBrokerRESTServiceManager() { }
/**
* Base constructor
* @param entityBrokerManager the main entity broker manager service
*/
public EntityBrokerRESTServiceManager(EntityBrokerManager entityBrokerManager) {
this(entityBrokerManager, null);
}
/**
* Full constructor
* @param entityBrokerManager the main entity broker manager service
* @param httpServletAccessProviderManager (optional)
*/
public EntityBrokerRESTServiceManager(EntityBrokerManager entityBrokerManager,
HttpServletAccessProviderManager httpServletAccessProviderManager) {
super();
if (entityBrokerManager == null) {
throw new IllegalArgumentException("entityBrokerManager cannot be null");
}
setEntityBrokerManager(entityBrokerManager);
this.httpServletAccessProviderManager = httpServletAccessProviderManager;
init();
}
/**
* WARNING: If you use the non-empty constructors to make this object then do not run this,
* it has already been run and should not be run a second time <br/>
* Startup all the REST services for the EB system,
* this can only be run after this is constructed with a full constructor or
* the {@link #setEntityBrokerManager(EntityBrokerManager)} method has been called
* (i.e. all the required services are set)
*/
public void init() {
System.out.println("INFO: EntityBrokerRESTServiceManager: init()");
if (this.entityBrokerManager == null
|| this.requestGetter == null
|| this.requestStorage == null
|| this.entityPropertiesService == null
|| this.entityProviderManager == null
|| this.entityProviderMethodStore == null
|| this.externalIntegrationProvider == null
|| this.entityViewAccessProviderManager == null) {
throw new IllegalArgumentException("Main services must all be set and non-null!");
}
// initialize all the parts
entityActionsManager = new EntityActionsManager(entityProviderMethodStore);
entityRedirectsManager = new EntityRedirectsManager(entityBrokerManager,
entityProviderMethodStore, requestStorage);
entityDescriptionManager = new EntityDescriptionManager(entityViewAccessProviderManager,
httpServletAccessProviderManager, entityProviderManager, entityPropertiesService,
entityBrokerManager, entityProviderMethodStore);
entityEncodingManager = new EntityEncodingManager(entityProviderManager, entityBrokerManager);
entityBatchHandler = new EntityBatchHandler(entityBrokerManager, entityEncodingManager, externalIntegrationProvider);
entityRequestHandler = new EntityHandlerImpl(entityProviderManager,
entityBrokerManager, entityEncodingManager, entityDescriptionManager,
entityViewAccessProviderManager, requestGetter, entityActionsManager,
entityRedirectsManager, entityBatchHandler, requestStorage);
entityRequestHandler.setAccessProviderManager( httpServletAccessProviderManager );
entityRESTProvider = new EntityRESTProviderBase(entityBrokerManager,
entityActionsManager, entityEncodingManager, entityRequestHandler);
setInstance(this);
}
/**
* Shutdown the services
* (just calls over to destroy)
*/
public void shutdown() {
destroy();
}
/**
* Shuts down all services and cleans up
*/
public void destroy() {
System.out.println("INFO: EntityBrokerRESTServiceManager: destroy()");
// cleanup everything
setInstance(null);
this.entityRESTProvider.destroy();
this.entityRESTProvider = null;
this.entityRequestHandler = null;
this.entityBatchHandler.destroy();
this.entityBatchHandler = null;
this.entityEncodingManager = null;
this.entityDescriptionManager.destroy();
this.entityDescriptionManager = null;
this.entityRedirectsManager = null;
this.entityActionsManager = null;
}
public EntityActionsManager getEntityActionsManager() {
return entityActionsManager;
}
public EntityDescriptionManager getEntityDescriptionManager() {
return entityDescriptionManager;
}
public EntityEncodingManager getEntityEncodingManager() {
return entityEncodingManager;
}
public EntityRedirectsManager getEntityRedirectsManager() {
return entityRedirectsManager;
}
public EntityHandlerImpl getEntityRequestHandler() {
return entityRequestHandler;
}
public EntityBatchHandler getEntityBatchHandler() {
return entityBatchHandler;
}
public EntityRESTProviderBase getEntityRESTProvider() {
return entityRESTProvider;
}
}