blob: d21b2f624560e66f03e31fcb1f23b29b680df7b5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 com.opensymphony.xwork2.ognl;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
import ognl.Ognl;
import ognl.OgnlException;
import ognl.OgnlRuntime;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
public class OgnlReflectionProvider implements ReflectionProvider {
private OgnlUtil ognlUtil;
@Inject
public void setOgnlUtil(OgnlUtil ognlUtil) {
this.ognlUtil = ognlUtil;
}
public Field getField(Class inClass, String name) {
return OgnlRuntime.getField(inClass, name);
}
public Method getGetMethod(Class targetClass, String propertyName)
throws IntrospectionException, ReflectionException {
try {
return OgnlRuntime.getGetMethod(null, targetClass, propertyName);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public Method getSetMethod(Class targetClass, String propertyName)
throws IntrospectionException, ReflectionException {
try {
return OgnlRuntime.getSetMethod(null, targetClass, propertyName);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public void setProperties(Map<String, ?> props, Object o, Map<String, Object> context) {
ognlUtil.setProperties(props, o, context);
}
public void setProperties(Map<String, ?> props, Object o, Map<String, Object> context, boolean throwPropertyExceptions) throws ReflectionException{
ognlUtil.setProperties(props, o, context, throwPropertyExceptions);
}
public void setProperties(Map<String, ?> properties, Object o) {
ognlUtil.setProperties(properties, o);
}
public PropertyDescriptor getPropertyDescriptor(Class targetClass,
String propertyName) throws IntrospectionException,
ReflectionException {
try {
return OgnlRuntime.getPropertyDescriptor(targetClass, propertyName);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public void copy(Object from, Object to, Map<String, Object> context,
Collection<String> exclusions, Collection<String> inclusions) {
copy(from, to, context, exclusions, inclusions, null);
}
public void copy(Object from, Object to, Map<String, Object> context,
Collection<String> exclusions, Collection<String> inclusions, Class<?> editable) {
ognlUtil.copy(from, to, context, exclusions, inclusions, editable);
}
public Object getRealTarget(String property, Map<String, Object> context, Object root)
throws ReflectionException {
try {
return ognlUtil.getRealTarget(property, context, root);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public void setProperty(String name, Object value, Object o, Map<String, Object> context) {
ognlUtil.setProperty(name, value, o, context);
}
public void setProperty(String name, Object value, Object o, Map<String, Object> context, boolean throwPropertyExceptions) {
ognlUtil.setProperty(name, value, o, context, throwPropertyExceptions);
}
public Map getBeanMap(Object source) throws IntrospectionException,
ReflectionException {
try {
return ognlUtil.getBeanMap(source);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public Object getValue(String expression, Map<String, Object> context, Object root)
throws ReflectionException {
try {
return ognlUtil.getValue(expression, context, root);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public void setValue(String expression, Map<String, Object> context, Object root,
Object value) throws ReflectionException {
try {
Ognl.setValue(expression, context, root, value);
} catch (OgnlException e) {
throw new ReflectionException(e);
}
}
public PropertyDescriptor[] getPropertyDescriptors(Object source)
throws IntrospectionException {
return ognlUtil.getPropertyDescriptors(source);
}
}