PropertyMapper.java

package org.docascode.ant.types;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.util.FileNameMapper;
import org.docascode.api.core.Substitute;
import org.docascode.api.core.errors.DocAsCodeException;
import org.docascode.api.core.office.PropertiesProcessor;

import java.io.File;
import java.util.Map;

public class PropertyMapper extends DataType implements FileNameMapper {
    /**
     * Ignored.
     * @param from ignored.
     */
    @Override
    public void setFrom(String from) {
        throw new UnsupportedOperationException();
    }

    /**
     * Ignored.
     * @param to ignored.
     */
    @Override
    public void setTo(String to) {
        throw new UnsupportedOperationException();
    }

    private File file;

    public void setFile(String filename){

        this.file= new File(getProject().getBaseDir(),filename);
    }

    @Override
    public String[] mapFileName(String filename) {
        try {
            Map<String,String> dict = new PropertiesProcessor().list(file);
            return new String[]{Substitute.substitute(filename,dict)};
        } catch (DocAsCodeException e) {
            log(String.format(
                    "Cannot evaluate '%s' for file '%s'. Cause: '%s'",
                    filename,
                    file,
                    e.getMessage()), Project.MSG_WARN);
            throw new BuildException(e);
        }
    }
}