001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.messaging.amf.io.util; 022 023import java.lang.annotation.Annotation; 024import java.lang.reflect.Field; 025import java.lang.reflect.Type; 026 027import org.granite.messaging.amf.io.convert.Converters; 028 029/** 030 * @author Franck WOLFF 031 */ 032public class FieldProperty extends Property { 033 034 private final Field field; 035 036 public FieldProperty(Converters converters, Field field) { 037 super(converters, field.getName()); 038 this.field = field; 039 } 040 041 @Override 042 public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass, boolean recursive) { 043 return field.isAnnotationPresent(annotationClass); 044 } 045 046 @Override 047 public <T extends Annotation> T getAnnotation(Class<T> annotationClass, boolean recursive) { 048 return field.getAnnotation(annotationClass); 049 } 050 051 @Override 052 public Type getType() { 053 return field.getGenericType(); 054 } 055 056 @Override 057 public Class<?> getDeclaringClass() { 058 return field.getDeclaringClass(); 059 } 060 061 @Override 062 public void setProperty(Object instance, Object value, boolean convert) { 063 try { 064 field.setAccessible(true); 065 field.set(instance, convert ? convert(value) : value); 066 } catch (Exception e) { 067 throw new RuntimeException(e); 068 } 069 } 070 071 @Override 072 public Object getProperty(Object instance) { 073 try { 074 field.setAccessible(true); 075 return field.get(instance); 076 } catch (Exception e) { 077 throw new RuntimeException(e); 078 } 079 } 080}