/**
 * Represents the inheritance of a class.
 * @since 2.3
 */
public interface InheritanceMetadata extends Metadata {
    /**
     * Method to set the inheritance strategy.
     * 
     * @param strategy The strategy
     */
    InheritanceMetadata setStrategy(InheritanceStrategy strategy);

    /**
     * Accessor for the inheritance strategy.
     * 
     * @return The strategy
     */
    InheritanceStrategy getStrategy();

    /**
     * Method to set the custom inheritance strategy.
     * 
     * @param strategy The strategy
     */
    InheritanceMetadata setCustomStrategy(String strategy);

    /**
     * Accessor for the custom inheritance (overriding "strategy").
     * 
     * @return The strategy
     */
    String getCustomStrategy();

    /**
     * Method to define the new discriminator metadata.
     * 
     * @return The DiscriminatorMetadata
     */
    DiscriminatorMetadata newDiscriminatorMetadata();

    /**
     * Accessor for the discriminator (if any).
     * 
     * @return Discriminator
     */
    DiscriminatorMetadata getDiscriminatorMetaData();

    /**
     * Method to define the new join information
     * 
     * @return The JoinMetadata
     */
    JoinMetadata newJoinMetadata();

    /**
     * Accessor for the join (if any).
     * 
     * @return Join information
     */
    JoinMetadata getJoinMetaData();
}
