/**
* Copyright 2005-2016 hdiv.org
*
* 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.hdiv.config.annotation.condition;
import java.util.List;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.ConfigurationCondition;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.MultiValueMap;
/**
* {@link ConfigurationCondition} for {@link ConditionalOnFramework} condition.
*
* @since 2.1.7
*/
public class OnFrameworkCondition implements ConfigurationCondition {
protected final boolean springMvcModulePresent = ClassUtils.isPresent("org.hdiv.web.servlet.support.HdivRequestDataValueProcessor",
OnFrameworkCondition.class.getClassLoader());
protected final boolean grailsModulePresent = ClassUtils.isPresent("org.hdiv.web.servlet.support.GrailsHdivRequestDataValueProcessor",
OnFrameworkCondition.class.getClassLoader());
protected final boolean grailsPresent = ClassUtils.isPresent("org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet",
OnFrameworkCondition.class.getClassLoader());
protected final boolean jsfPresent = ClassUtils.isPresent("javax.faces.webapp.FacesServlet",
OnFrameworkCondition.class.getClassLoader());
protected final boolean jsfModulePresent = ClassUtils.isPresent("org.hdiv.filter.JsfValidatorHelper",
OnFrameworkCondition.class.getClassLoader());
protected final boolean struts1ModulePresent = ClassUtils.isPresent("org.hdiv.action.HDIVRequestProcessor",
OnFrameworkCondition.class.getClassLoader());
protected final boolean thymeleafModulePresent = ClassUtils
.isPresent("org.hdiv.web.servlet.support.ThymeleafHdivRequestDataValueProcessor", OnFrameworkCondition.class.getClassLoader());
public ConfigurationPhase getConfigurationPhase() {
return ConfigurationPhase.PARSE_CONFIGURATION;
}
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
MultiValueMap<String, Object> attributes = metadata.getAllAnnotationAttributes(ConditionalOnFramework.class.getName(), true);
List<Object> values = attributes.get("value");
Assert.notEmpty(values);
SupportedFramework frwk = (SupportedFramework) values.get(0);
if (frwk == SupportedFramework.SPRING_MVC) {
return springMvcModulePresent;
}
else if (frwk == SupportedFramework.THYMELEAF) {
return thymeleafModulePresent;
}
else if (frwk == SupportedFramework.GRAILS) {
return grailsPresent && grailsModulePresent;
}
else if (frwk == SupportedFramework.JSF) {
return jsfPresent && jsfModulePresent;
}
else if (frwk == SupportedFramework.STRUTS1) {
return struts1ModulePresent;
}
else {
return false;
}
}
}