class ConfigPath implements Serializable {
    private static final long serialVersionUID = 1L;
    
    protected String name;
    protected String path; 
    protected ConfigPath base;
    
    public ConfigPath() {
        super();
    }

    public ConfigPath(String name, String path) {
        super();
        this.name = name;
        this.path = path;
    }

    public ConfigPath getBase() {
        return base;
    }

    public void setBase(ConfigPath base) {
        this.base = base;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPath() {
        return path;
    }

    @Required
    public void setPath(String path) {
        this.path = path;
    } 
    
    public File getFile() {<FILL_FUNCTION_BODY>}
    
    /**
     * To maintain ConfigPath's 'base' and object-identity, this merge
     * should be used to updated ConfigPath properties in other beans, 
     * rather than discarding the old value. 
     * 
     * @param newvals ConfigPath to merge into this one
     * @return this
     */
    public ConfigPath merge(ConfigPath newvals) {
        if(newvals.name!=null) {
            setName(newvals.getName()); 
        }
        if(newvals.path!=null) {
            setPath(newvals.getPath()); 
        }
        return this; 
    }

    protected ConfigPathConfigurer configurer; 
    public void setConfigurer(ConfigPathConfigurer configPathConfigurer) {
        this.configurer = configPathConfigurer;
    }

}

        String interpolatedPath;
        if (configurer != null) {
            interpolatedPath = configurer.interpolate(path);
        } else {
            interpolatedPath = path;
        }
        
        return base == null || interpolatedPath.startsWith("/")
            ? new File(interpolatedPath) 
            : new File(base.getFile(), interpolatedPath);
    
<no_super_class>