Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
    * JBoss, Home of Professional Open Source
    * Copyright 2005, JBoss Inc., and individual contributors as indicated
    * by the @authors tag. See the copyright.txt in the distribution for a
    * full listing of individual contributors.
    *
    * This is free software; you can redistribute it and/or modify it
    * under the terms of the GNU Lesser General Public License as
    * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
 package org.jboss.xb.binding.introspection;
 
 

Author(s):
Alexey Loubyansky
Version:
$Revision: $
 
 public class FieldInfo
 {
    private static final Object[] NO_ARGS = new Object[0];
 
    private interface GetValueAccess
    {
    }
 
    public static class GetValueAccessFactory
    {
       public static GetValueAccess fieldAccess(final Field field)
       {
          return new GetValueAccess()
          {
             public Object get(Object ownerthrows IllegalAccessException
             {
                return field.get(owner);
             }
          };
       }
 
       public static GetValueAccess methodAccess(final Method m)
       {
          return new GetValueAccess()
          {
             public Object get(Object ownerthrows IllegalAccessExceptionInvocationTargetException
             {
                return m.invoke(owner);
             }
          };
       }
    }
 
    private interface SetValueAccess
    {
       void set(Object ownerObject valuethrows IllegalAccessExceptionInvocationTargetException;
    }
 
    public static class SetValueAccessFactory
    {
       public static SetValueAccess fieldAccess(final Field field)
       {
          return new SetValueAccess()
          {
             public void set(Object ownerObject valuethrows IllegalAccessException
             {
                field.set(ownervalue);
             }
          };
       }
 
       public static SetValueAccess methodAccess(final Method m)
       {
          return new SetValueAccess()
          {
             public void set(Object ownerObject valuethrows IllegalAccessExceptionInvocationTargetException
             {
                Object[] arguments = new Object[] { value };
                try
                {
                   m.invoke(ownernew Object[]{value});
                }
                catch (IllegalArgumentException e)
               {
                  if (owner == null)
                     throw new IllegalArgumentException("Null target for " + m.getName());
                  ArrayList<Stringexpected = new ArrayList<String>();
                  Class[] parameters = m.getParameterTypes();
                  if (parameters != null)
                  {
                     for (int i = 0; i < parameters.length; ++i)
                        expected.add(parameters[i].getName());
                  }
                  ArrayList<Stringactual = new ArrayList<String>();
                  if (arguments != null)
                  {
                     for (int i = 0; i < arguments.length; ++i)
                     {
                        if (arguments[i] == null)
                           actual.add(null);
                        else
                           actual.add(arguments[i].getClass().getName());
                     }
                  }
                  throw new IllegalArgumentException("Wrong arguments. " + m.getName() + " for target " + owner + " expected=" + expected + " actual=" + actual);
               }
            }
         };
      }
   }
   static FieldInfo getFieldInfo(ClassInfo clsInfoString name)
   {
      FieldInfo fieldInfo = null;
      try
      {
         Method getter = Classes.getAttributeGetter(clsInfo.getType(), name);
         fieldInfo = new FieldInfo(clsInfo.getType(), namegetter);
         clsInfo.addFieldInfo(fieldInfo);
      }
      catch(NoSuchMethodException e)
      {
         try
         {
            Field field = clsInfo.getType().getField(name);
            fieldInfo = new FieldInfo(clsInfo.getType(), field);
            clsInfo.addFieldInfo(fieldInfo);
         }
         catch(NoSuchFieldException e1)
         {
            fieldInfo = clsInfo.introspect(name);
         }
      }
      return fieldInfo;
   }
   public static FieldInfo getFieldInfo(Class<?> clsString fieldNameboolean required)
   {
      return ClassInfos.getClassInfo(cls).getFieldInfo(fieldNamerequired);
   }
   private final Class<?> owner;
   private final String name;
   private final Class<?> type;
   private final GetValueAccess getter;
   private SetValueAccess setter;
   private boolean setterInitialized;
   public FieldInfo(Class<?> ownerString nameMethod getter)
   {
      this. = owner;
      this. = name;
      this. = getter.getReturnType();
      this. = GetValueAccessFactory.methodAccess(getter);
   }
   public FieldInfo(Class<?> ownerString nameMethod getterMethod setter)
   {
      this. = owner;
      this. = name;
      this. = getter.getReturnType();
      this. = GetValueAccessFactory.methodAccess(getter);
      this. = SetValueAccessFactory.methodAccess(setter);
       = true;
   }
   public FieldInfo(Class<?> ownerField field)
   {
      this. = owner;
      this. = field.getName();
      this. = field.getType();
      this. = GetValueAccessFactory.fieldAccess(field);
      this. = SetValueAccessFactory.fieldAccess(field);
       = true;
   }
   public Class<?> getOwner()
   {
      return ;
   }
   public String getName()
   {
      return ;
   }
   public Class<?> getType()
   {
      return ;
   }
   public boolean isReadable()
   {
      return true;
   }
   public boolean isWritable()
   {
      if(!)
      {
         initializeSetter();
      }
      return  != null;
   }
   public Object getValue(Object owner)
   {
      try
      {
         return .get(owner);
      }
      catch(Exception e)
      {
         throw new JBossXBRuntimeException(
            "Failed to get value of the property '" +  + "' defined in " + owner + " from instance " + ownere
         );
      }
   }
   public void setValue(Object ownerObject value)
   {
      if(!isWritable())
      {
         throw new JBossXBRuntimeException(
            "Failed to find setter or field for property '" +  + "' in " + owner
         );
      }
      try
      {
         .set(ownervalue);
      }
      catch(Exception e)
      {
         throw new JBossXBRuntimeException(
            "Failed to set value '" + value + "' for property '" +  + "' defined in " +
            owner.getClass().getName() + " on instance " + ownere
         );
      }
   }
   private void initializeSetter()
   {
      try
      {
          = SetValueAccessFactory.methodAccess(Classes.getAttributeSetter());
      }
      catch(NoSuchMethodException e)
      {
      }
       = true;
   }
New to GrepCode? Check out our FAQ X