/**
   * @param member the java member of attribute
   * @param name the name of the attribute
   * @param parsed set of annotations parsed
   * @since $version
   * @author hceylan
   */
  public EmbeddedAttributeMetadataImpl(
      Member member, String name, Set<Class<? extends Annotation>> parsed) {
    super(member, name);

    parsed.add(Embedded.class);

    // if there is AttributesOverrides annotation use it
    final AttributeOverrides attributeOverrides =
        ReflectHelper.getAnnotation(member, AttributeOverrides.class);
    final AttributeOverride attributeOverride =
        ReflectHelper.getAnnotation(member, AttributeOverride.class);

    if ((attributeOverrides != null)
        && (attributeOverrides.value() != null)
        && (attributeOverrides.value().length > 0)) {
      parsed.add(AttributeOverrides.class);

      for (final AttributeOverride a : attributeOverrides.value()) {
        this.attributeOverrides.add(new AttributeOverrideMetadataImpl(this.getLocator(), a));
      }
    } else if (attributeOverride != null) {
      parsed.add(AttributeOverride.class);

      this.attributeOverrides.add(
          new AttributeOverrideMetadataImpl(this.getLocator(), attributeOverride));
    }

    // if there is AssociationsOverrides annotation use it
    final AssociationOverrides associationOverrides =
        ReflectHelper.getAnnotation(member, AssociationOverrides.class);
    final AssociationOverride associationOverride =
        ReflectHelper.getAnnotation(member, AssociationOverride.class);

    if ((associationOverrides != null)
        && (associationOverrides.value() != null)
        && (associationOverrides.value().length > 0)) {
      parsed.add(AssociationOverrides.class);

      for (final AssociationOverride a : associationOverrides.value()) {
        this.associationOverrides.add(new AssociationOverrideMetadataImpl(this.getLocator(), a));
      }
    } else if (associationOverride != null) {
      parsed.add(AssociationOverride.class);

      this.associationOverrides.add(
          new AssociationOverrideMetadataImpl(this.getLocator(), associationOverride));
    }
  }
  private void introspectAttributeOverrides(EntityType entityType, Class type) {
    EntityType parent = entityType.getParentType();

    if (parent == null) return;

    boolean isAbstract = Modifier.isAbstract(parent.getBeanClass().getModifiers());

    if (parent.isEntity() && !isAbstract) return;

    HashMap<String, ColumnConfig> overrideMap = new HashMap<String, ColumnConfig>();

    getInternalAttributeOverrideConfig(type, _annotationCfg);
    AttributeOverride attributeOverrideAnn = (AttributeOverride) _annotationCfg.getAnnotation();

    boolean hasAttributeOverride = (attributeOverrideAnn != null);

    AttributeOverrides attributeOverridesAnn =
        (AttributeOverrides) type.getAnnotation(AttributeOverrides.class);

    ArrayList<AttributeOverrideConfig> attributeOverrideList = null;

    EntityConfig entityConfig = getEntityConfig(type.getName());

    if (entityConfig != null) attributeOverrideList = entityConfig.getAttributeOverrideList();

    boolean hasAttributeOverrides = false;

    if ((attributeOverrideList != null) && (attributeOverrideList.size() > 0)) {
      hasAttributeOverrides = true;
    } else if (attributeOverridesAnn != null) hasAttributeOverrides = true;

    if (hasAttributeOverride && hasAttributeOverrides)
      throw new ConfigException(
          L.l("{0} may not have both @AttributeOverride and @AttributeOverrides", type));

    if (attributeOverrideList == null)
      attributeOverrideList = new ArrayList<AttributeOverrideConfig>();

    if (hasAttributeOverride) {
      // Convert annotation to configuration.

      AttributeOverrideConfig attOverrideConfig =
          convertAttributeOverrideAnnotationToConfig(attributeOverrideAnn);

      attributeOverrideList.add(attOverrideConfig);
    } else if (hasAttributeOverrides) {
      if (attributeOverrideList.size() > 0) {
        // OK: attributeOverrideList came from orm.xml
      } else {
        // Convert annotations to configurations.

        AttributeOverride attOverridesAnn[] = attributeOverridesAnn.value();

        AttributeOverrideConfig attOverrideConfig;

        /* XXX:
        for (int i = 0; i < attOverridesAnn.length; i++) {
          attOverrideConfig
            = convertAttributeOverrideAnnotationToConfig((JAnnotation) attOverridesAnn[i]);

          attributeOverrideList.add(attOverrideConfig);
        }
                * */
      }
    }

    for (AttributeOverrideConfig override : attributeOverrideList) {
      overrideMap.put(override.getName(), override.getColumn());
    }

    _depCompletions.add(new AttributeOverrideCompletion(this, entityType, type, overrideMap));
  }