package liquibase.change;

import liquibase.structure.DatabaseObject;

import java.lang.annotation.*;

/**
 * Annotation used by {@link AbstractChange } to declare {@link ChangeMetaData} information.
 * This annotation should not be checked for outside AbstractChange, if any code is trying to determine the
 * metadata provided by this annotation, it should get it from {@link liquibase.change.Change#getChangeMetaData()}
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface DatabaseChange {

    /**
     * Value to put into {@link liquibase.change.ChangeMetaData#getName()}
     */
    String name();

    /**
     * Value to put into {@link ChangeMetaData#getDescription()}
     */
    String description();

    /**
     * Value to put into {@link ChangeMetaData#getPriority()} ()}
     */
    int priority();

    /**
     * Value to put into {@link liquibase.change.ChangeMetaData#getAppliesTo()}
     */
    String[] appliesTo() default {};

    DatabaseChangeNote[] databaseNotes() default {};

    String since() default "";

}
