Subversion Repositories bacoAlunos

Rev

Blame | Last modification | View Log | RSS feed

package com.owlike.genson.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class RenamingPropertyNameResolver implements PropertyNameResolver {

  private final 1.5.0/docs/api/java/lang/String.html">String field;
  private final Class<?> fromClass;
  private final Class<?> ofType;
  private final 1.5.0/docs/api/java/lang/String.html">String toName;

  public RenamingPropertyNameResolver(1.5.0/docs/api/java/lang/String.html">String field, Class<?> fromClass, Class<?> ofType, 1.5.0/docs/api/java/lang/String.html">String toName) {
    this.field = field;
    this.fromClass = fromClass;
    this.ofType = ofType;
    this.toName = toName;
  }

  @1.5.0/docs/api/java/lang/Override.html">Override
  public 1.5.0/docs/api/java/lang/String.html">String resolve(int parameterIdx, Constructor<?> fromConstructor) {
    return null;
  }

  @1.5.0/docs/api/java/lang/Override.html">Override
  public 1.5.0/docs/api/java/lang/String.html">String resolve(int parameterIdx, 1.5.0/docs/api/java/lang/reflect/Method.html">Method fromMethod) {
    return null;
  }

  @1.5.0/docs/api/java/lang/Override.html">Override
  public 1.5.0/docs/api/java/lang/String.html">String resolve(1.5.0/docs/api/java/lang/reflect/Field.html">Field fromField) {
    return tryToRename(fromField.getName(), fromField.getDeclaringClass(),
      fromField.getType());
  }

  @1.5.0/docs/api/java/lang/Override.html">Override
  public 1.5.0/docs/api/java/lang/String.html">String resolve(1.5.0/docs/api/java/lang/reflect/Method.html">Method fromMethod) {
    1.5.0/docs/api/java/lang/String.html">String name = fromMethod.getName();
    if (name.startsWith("is") && name.length() > 2) {
      return tryToRename(name.substring(2), fromMethod.getDeclaringClass(),
        fromMethod.getReturnType());
    }
    if (name.length() > 3) {
      if (name.startsWith("get"))
        return tryToRename(name.substring(3), fromMethod.getDeclaringClass(),
          fromMethod.getReturnType());
      if (name.startsWith("set") && fromMethod.getParameterTypes().length == 1)
        return tryToRename(name.substring(3), fromMethod.getDeclaringClass(),
          fromMethod.getParameterTypes()[0]);
    }
    return null;
  }

  private 1.5.0/docs/api/java/lang/String.html">String tryToRename(1.5.0/docs/api/java/lang/String.html">String actualName, Class<?> declaringClass,
                             Class<?> propertyType) {
    if ((field == null || actualName.equalsIgnoreCase(field))
      && (fromClass == null || fromClass.isAssignableFrom(declaringClass))
      && (ofType == null || ofType.isAssignableFrom(propertyType)))
      return toName;
    return null;
  }
}