All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.appng.api.support.ClassWrapper Maven / Gradle / Ivy

There is a newer version: 1.24.5
Show newest version
/*
 * Copyright 2011-2019 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.appng.api.support;

import java.lang.reflect.Method;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanWrapper;

/**
 * Provides operations to analyze a class, similar to Springs {@link BeanWrapper}, except it doesn't need an
 * instanciatable class to work on.
* NOTE: The given Class does not have to be a JavaBean, meaning the presence of a getter does not imply the presence of * a setter! * * @author Matthias Müller * */ public final class ClassWrapper { private Class wrappedClass; public ClassWrapper(Class clazz) { this.wrappedClass = clazz; } public final boolean isWritableProperty(String property) { try { String[] splitted = property.split("\\."); int length = splitted.length; Class innerClazz = wrappedClass; String propertyName = null; for (int i = 0; i < length; i++) { propertyName = splitted[i]; if (i < length - 1) { innerClazz = getGetter(innerClazz, StringUtils.capitalize(propertyName)).getReturnType(); } else { getSetter(innerClazz, propertyName); } } return true; } catch (Exception e) { // do nothing } return false; } public final boolean isReadableProperty(String property) { try { String[] splitted = property.split("\\."); Class innerClazz = wrappedClass; for (String propertyName : splitted) { Method getter = getGetter(innerClazz, StringUtils.capitalize(propertyName)); if (null == getter) { return false; } innerClazz = getter.getReturnType(); } return true; } catch (Exception e) { // do nothing } return false; } private Method getGetter(Class clazz, String property) throws SecurityException, NoSuchMethodException { String name = property.split("\\[")[0]; Method method = null; try { method = clazz.getMethod("get" + StringUtils.capitalize(name), new Class[] {}); return method; } catch (Exception e) { } try { method = clazz.getMethod("is" + StringUtils.capitalize(name), new Class[] {}); return method; } catch (Exception e) { // do nothing } return null; } private Method getSetter(Class clazz, String property) throws SecurityException, NoSuchMethodException { String name = property.split("\\[")[0]; Method getter = getGetter(clazz, name); if (null != getter) { Class type = getter.getReturnType(); return clazz.getMethod("set" + StringUtils.capitalize(name), new Class[] { type }); } return null; } public final Class getWrappedClass() { return wrappedClass; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy