aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/data/util/BeanUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/com/vaadin/data/util/BeanUtil.java')
-rw-r--r--server/src/com/vaadin/data/util/BeanUtil.java179
1 files changed, 0 insertions, 179 deletions
diff --git a/server/src/com/vaadin/data/util/BeanUtil.java b/server/src/com/vaadin/data/util/BeanUtil.java
deleted file mode 100644
index 1356cf5359..0000000000
--- a/server/src/com/vaadin/data/util/BeanUtil.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2000-2014 Vaadin Ltd.
- *
- * 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 com.vaadin.data.util;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class for Java Beans information access.
- *
- * @since 7.4
- *
- * @author Vaadin Ltd
- */
-public final class BeanUtil implements Serializable {
- // Prevent instantiation of util class
- private BeanUtil() {
- }
-
- /**
- * Returns the property descriptors of a class or an interface.
- *
- * For an interface, superinterfaces are also iterated as Introspector does
- * not take them into account (Oracle Java bug 4275879), but in that case,
- * both the setter and the getter for a property must be in the same
- * interface and should not be overridden in subinterfaces for the discovery
- * to work correctly.
- *
- * NOTE : This utility method relies on introspection (and returns
- * PropertyDescriptor) which is a part of java.beans package. The latter
- * package could require bigger JDK in the future (with Java 9+). So it may
- * be changed in the future.
- *
- * For interfaces, the iteration is depth first and the properties of
- * superinterfaces are returned before those of their subinterfaces.
- *
- * @param beanClass
- * @return
- * @throws IntrospectionException
- */
- public static List<PropertyDescriptor> getBeanPropertyDescriptor(
- final Class<?> beanClass) throws IntrospectionException {
- // Oracle bug 4275879: Introspector does not consider superinterfaces of
- // an interface
- if (beanClass.isInterface()) {
- List<PropertyDescriptor> propertyDescriptors = new ArrayList<PropertyDescriptor>();
-
- for (Class<?> cls : beanClass.getInterfaces()) {
- propertyDescriptors.addAll(getBeanPropertyDescriptor(cls));
- }
-
- BeanInfo info = Introspector.getBeanInfo(beanClass);
- propertyDescriptors.addAll(getPropertyDescriptors(info));
-
- return propertyDescriptors;
- } else {
- BeanInfo info = Introspector.getBeanInfo(beanClass);
- return getPropertyDescriptors(info);
- }
- }
-
- /**
- * Returns {@code propertyId} class for property declared in {@code clazz}.
- * Property could be of form "property.subProperty[.subProperty2]" i.e.
- * refer to some nested property.
- *
- * @param clazz
- * class where property is declared
- * @param propertyId
- * property of form "property" or
- * "property.subProperty[.subProperty2]"
- * @return class of the property
- * @throws IntrospectionException
- */
- public static Class<?> getPropertyType(Class<?> clazz, String propertyId)
- throws IntrospectionException {
- if (propertyId.contains(".")) {
- String[] parts = propertyId.split("\\.", 2);
- // Get the type of the field in the "cls" class
- Class<?> propertyBean = getPropertyType(clazz, parts[0]);
- // Find the rest from the sub type
- return getPropertyType(propertyBean, parts[1]);
- } else {
- List<PropertyDescriptor> descriptors = getBeanPropertyDescriptor(clazz);
-
- for (PropertyDescriptor descriptor : descriptors) {
- final Method getMethod = descriptor.getReadMethod();
- if (descriptor.getName().equals(propertyId)
- && getMethod != null
- && getMethod.getDeclaringClass() != Object.class) {
- return descriptor.getPropertyType();
- }
- }
- return null;
- }
- }
-
- // Workaround for Java6 bug JDK-6788525. Do nothing for JDK7+.
- private static List<PropertyDescriptor> getPropertyDescriptors(
- BeanInfo beanInfo) {
- PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
- List<PropertyDescriptor> result = new ArrayList<PropertyDescriptor>(
- descriptors.length);
- for (PropertyDescriptor descriptor : descriptors) {
- try {
- Method readMethod = getMethodFromBridge(descriptor
- .getReadMethod());
- if (readMethod != null) {
- Method writeMethod = getMethodFromBridge(
- descriptor.getWriteMethod(),
- readMethod.getReturnType());
- if (writeMethod == null) {
- writeMethod = descriptor.getWriteMethod();
- }
- PropertyDescriptor descr = new PropertyDescriptor(
- descriptor.getName(), readMethod, writeMethod);
- result.add(descr);
- } else {
- result.add(descriptor);
- }
- } catch (SecurityException ignore) {
- // handle next descriptor
- } catch (IntrospectionException e) {
- result.add(descriptor);
- }
- }
- return result;
- }
-
- /**
- * Return declared method for which {@code bridgeMethod} is generated. If
- * {@code bridgeMethod} is not a bridge method then return null.
- */
- private static Method getMethodFromBridge(Method bridgeMethod)
- throws SecurityException {
- if (bridgeMethod == null) {
- return null;
- }
- return getMethodFromBridge(bridgeMethod,
- bridgeMethod.getParameterTypes());
- }
-
- /**
- * Return declared method for which {@code bridgeMethod} is generated using
- * its {@code paramTypes}. If {@code bridgeMethod} is not a bridge method
- * then return null.
- */
- private static Method getMethodFromBridge(Method bridgeMethod,
- Class<?>... paramTypes) throws SecurityException {
- if (bridgeMethod == null || !bridgeMethod.isBridge()) {
- return null;
- }
- try {
- return bridgeMethod.getDeclaringClass().getMethod(
- bridgeMethod.getName(), paramTypes);
- } catch (NoSuchMethodException e) {
- return null;
- }
- }
-}