class AbstractChangeLogBasedTask extends BaseLiquibaseTask {

    @Setter
    private String searchPath;
    @Setter
    private String changeLogDirectory;
    @Setter
    private String changeLogFile;
    @Getter
    @Setter
    private String contexts;
    @Getter
    private LabelExpression labelFilter;
    @Getter
    @Setter
    private FileResource outputFile;
    @Setter
    private String outputEncoding;

    @Override
    protected void validateParameters() {<FILL_FUNCTION_BODY>}

    protected Writer getOutputFileWriter() throws IOException {
        return new OutputStreamWriter(outputFile.getOutputStream(), getOutputEncoding());
    }

    /**
     * Gets the change log directory set from Ant.
     * @return The change log directory resource.
     */
    @Override
    public String getChangeLogDirectory() {
        return changeLogDirectory;
    }

    /**
     * Gets the change log directory set from Ant.
     * @return The change log directory resource.
     */
    @Override
    public String getSearchPath() {
        return searchPath;
    }

    /**
     * Gets the change log file set from Ant.
     * @return The change log file resource.
     */
    @Override
    public String getChangeLogFile() {
        return changeLogFile;
    }

    /**
     * @deprecated use {@link #getLabelFilter()}
     */
    public LabelExpression getLabels() {
        return getLabelFilter();
    }

    /**
     * @deprecated use {@link #setLabelFilter(String)}
     */
    public void setLabels(String labelFilter) {
        this.setLabelFilter(labelFilter);
    }

    public void setLabelFilter(String labelFilter) {
        this.labelFilter = new LabelExpression(labelFilter);
    }

    public String getOutputEncoding() {
        return (StringUtil.trimToNull(outputEncoding) == null) ? getDefaultOutputEncoding() : outputEncoding.trim();
    }

}

        super.validateParameters();

        if(changeLogFile == null) {
            throw new BuildException("Change log file is required.");
        }
    
<methods>public void <init>() ,public void addChangeLogParameters(liquibase.integration.ant.type.ChangeLogParametersType) ,public void addDatabase(liquibase.integration.ant.type.DatabaseType) ,public Path createClasspath() ,public final void execute() throws BuildException,public java.lang.String getChangeLogDirectory() ,public java.lang.String getSearchPath() ,public void init() throws BuildException,public boolean isPromptOnNonLocalDatabase() ,public void setChangeLogParametersRef(Reference) ,public void setClasspathRef(Reference) ,public void setDatabaseRef(Reference) ,public void setPromptOnNonLocalDatabase(boolean) <variables>private liquibase.integration.ant.type.ChangeLogParametersType changeLogParameters,private AntClassLoader classLoader,private Path classpath,private static final java.util.ResourceBundle coreBundle,private liquibase.integration.ant.type.DatabaseType databaseType,private liquibase.Liquibase liquibase,private liquibase.resource.ResourceAccessor resourceAccessor,private final Map<java.lang.String,java.lang.Object> scopeValues