package com.temenos.interaction.winkext; /* * #%L * interaction-winkext * %% * Copyright (C) 2012 - 2014 Temenos Holdings N.V. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.util.HashSet; import java.util.Set; import com.temenos.interaction.core.cache.Cache; import com.temenos.interaction.core.command.CommandController; import com.temenos.interaction.core.entity.Metadata; import com.temenos.interaction.core.hypermedia.ResourceLocatorProvider; import com.temenos.interaction.core.hypermedia.ResourceParameterResolverProvider; import com.temenos.interaction.core.hypermedia.ResourceState; import com.temenos.interaction.core.hypermedia.ResourceStateMachine; import com.temenos.interaction.core.hypermedia.ResourceStateProvider; import com.temenos.interaction.core.hypermedia.Transformer; import com.temenos.interaction.core.rim.HTTPResourceInteractionModel; import com.temenos.interaction.core.workflow.WorkflowCommandBuilderProvider; /** * A resource factory that uses the beans and configuration files from the SpringDSL implementation * to construct all the resources required for an hypermedia server instance. * @author aphethean */ public class LazyServiceRootFactory implements ServiceRootFactory { private ResourceStateProvider resourceStateProvider; private ResourceStateMachine hypermediaEngine; // members passed to lazy resources private CommandController commandController; private Metadata metadata; private ResourceLocatorProvider resourceLocatorProvider; private ResourceParameterResolverProvider parameterResolverProvider; private WorkflowCommandBuilderProvider workflowCommandBuilderProvider; private Cache cacheImpl; private ResourceState exception; private Transformer transformer; @Override public Set<HTTPResourceInteractionModel> getServiceRoots() { hypermediaEngine = new ResourceStateMachine.Builder() .initial(null) .exception(exception) .transformer(transformer) .resourceLocatorProvider(resourceLocatorProvider) .resourceStateProvider(resourceStateProvider) .parameterResolverProvider(parameterResolverProvider) .workflowCommandBuilderProvider(workflowCommandBuilderProvider) .responseCache(cacheImpl) .build(); Set<HTTPResourceInteractionModel> services = new HashSet<HTTPResourceInteractionModel>(); Set<String> methods = new HashSet<String>(); methods.add("GET"); methods.add("POST"); methods.add("PUT"); methods.add("DELETE"); methods.add("OPTIONS"); // Register a single Wink resource that is responsible for delegating requests to IRIS LazyResourceDelegate resource = new LazyResourceDelegate(hypermediaEngine, resourceStateProvider, commandController, metadata, "all", "{var:.*}", methods); services.add(resource); return services; } public CommandController getCommandController() { return commandController; } public void setCommandController(CommandController commandController) { this.commandController = commandController; } public Metadata getMetadata() { return metadata; } public void setMetadata(Metadata metadata) { this.metadata = metadata; } public void setResourceLocatorProvider(ResourceLocatorProvider resourceLocatorProvider) { this.resourceLocatorProvider = resourceLocatorProvider; } public void setResourceParameterResolverProvider(ResourceParameterResolverProvider parameterResolverProvider) { this.parameterResolverProvider = parameterResolverProvider; } public void setWorkflowCommandBuilderProvider(WorkflowCommandBuilderProvider workflowCommandBuilderProvider) { this.workflowCommandBuilderProvider = workflowCommandBuilderProvider; } public ResourceState getException() { return exception; } public void setException(ResourceState exception) { this.exception = exception; } public Transformer getTransformer() { return transformer; } public void setTransformer(Transformer transformer) { this.transformer = transformer; } public ResourceStateProvider getResourceStateProvider() { return resourceStateProvider; } public void setResourceStateProvider(ResourceStateProvider resourceStateProvider) { this.resourceStateProvider = resourceStateProvider; } public void setHypermediaEngine(ResourceStateMachine hypermediaEngine) { this.hypermediaEngine = hypermediaEngine; } public Cache getCacheImpl() { return cacheImpl; } public void setCacheImpl(Cache cache) { cacheImpl = cache; } }