@Override
 public J getValue(Object entity) {
   J value = null;
   if (entity instanceof JavaMetaData) {
     value = ((JavaMetaData) entity).getAnnotation(annotationType.getJavaType());
   }
   if (value == null) {
     Attribute metaAttribute = attributeType.getMetaAttribute(DerivedObject.META_ATTRIBUTE_CODE);
     if (metaAttribute != null) {
       DerivedObject derivedObject = (DerivedObject) metaAttribute.getValue(entity);
       if (derivedObject != null) {
         Object original = derivedObject.getOriginal();
         if (original != null) {
           return getValue(original);
         }
       }
     }
   }
   return value;
 }
 @Override
 public Class<J> getReturnType() {
   return (Class<J>) annotationType.getJavaType();
 }
 @Override
 public String getCode() {
   return annotationType.getJavaType().getName().replace(".", "_");
 }