/* * Copyright 2004-2012 the original author or authors. * * 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.springframework.webflow.engine.builder.model; import org.springframework.binding.convert.ConversionService; import org.springframework.binding.expression.ExpressionParser; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericApplicationContext; import org.springframework.validation.Validator; import org.springframework.webflow.core.collection.AttributeMap; import org.springframework.webflow.definition.registry.FlowDefinitionLocator; import org.springframework.webflow.engine.builder.FlowArtifactFactory; import org.springframework.webflow.engine.builder.FlowBuilderContext; import org.springframework.webflow.engine.builder.ViewFactoryCreator; import org.springframework.webflow.validation.ValidationHintResolver; /** * A builder context that delegates to a flow-local bean factory for builder services. Such builder services override * the services of the external "parent" context. * @author Keith Donald */ class LocalFlowBuilderContext implements FlowBuilderContext { private FlowBuilderContext parent; private ApplicationContext localFlowContext; public LocalFlowBuilderContext(FlowBuilderContext parent, GenericApplicationContext localFlowContext) { this.parent = parent; this.localFlowContext = localFlowContext; } public ApplicationContext getApplicationContext() { return localFlowContext; } public String getFlowId() { return parent.getFlowId(); } public AttributeMap<Object> getFlowAttributes() { return parent.getFlowAttributes(); } public FlowDefinitionLocator getFlowDefinitionLocator() { if (localFlowContext.containsLocalBean("flowRegistry")) { return localFlowContext.getBean("flowRegistry", FlowDefinitionLocator.class); } else { return parent.getFlowDefinitionLocator(); } } public FlowArtifactFactory getFlowArtifactFactory() { if (localFlowContext.containsLocalBean("flowArtifactFactory")) { return localFlowContext.getBean("flowArtifactFactory", FlowArtifactFactory.class); } else { return parent.getFlowArtifactFactory(); } } public ConversionService getConversionService() { if (localFlowContext.containsLocalBean("conversionService")) { return localFlowContext.getBean("conversionService", ConversionService.class); } else { return parent.getConversionService(); } } public ViewFactoryCreator getViewFactoryCreator() { if (localFlowContext.containsLocalBean("viewFactoryCreator")) { return localFlowContext.getBean("viewFactoryCreator", ViewFactoryCreator.class); } else { return parent.getViewFactoryCreator(); } } public ExpressionParser getExpressionParser() { if (localFlowContext.containsLocalBean("expressionParser")) { return localFlowContext.getBean("expressionParser", ExpressionParser.class); } else { return parent.getExpressionParser(); } } public Validator getValidator() { if (localFlowContext.containsLocalBean("validator")) { return localFlowContext.getBean("validator", Validator.class); } else { return parent.getValidator(); } } public ValidationHintResolver getValidationHintResolver() { if (localFlowContext.containsLocalBean("validationHintResolver")) { return localFlowContext.getBean("validationHintResolver", ValidationHintResolver.class); } else { return parent.getValidationHintResolver(); } } }