
package usda.weru.remoteDataAccess.remoteFiles.inetFile;

import java.io.File;
import java.io.FileFilter;
import usda.weru.gis.latlong.LatLong;
import usda.weru.weps.Weps;
import usda.weru.remoteDataAccess.csip.CsipInputControllerStatic;
import usda.weru.remoteDataAccess.csip.CsipInputControllerBgCacheIf;
import usda.weru.remoteDataAccess.csip.polygon.CsipInputContPolygon;
import usda.weru.remoteDataAccess.csip.polygon.soil.CsipInputContSoilBgCache;

/**
 *
 * @author mhaas
 */
public class CsipSoilFile extends InetFile implements InetFileBgIf {

    static final long serialVersionUID = 1L;

    public CsipSoilFile() {
        this("CSIP Soil Service");
    }

    public CsipSoilFile(String name) {
        super(name, RemoteFileType.SOILS);
        controller = CsipInputControllerStatic.getSoilController();
        controller.setInterfaceName(name);

        this.setLatLonToCurrentUserVal();
        // the LatLon change will fire this, no need to do it explicitly
        //doBackgroundCatalog();
    }

    public CsipSoilFile(CsipSoilFile parent, String name) {
        super((InetFile) parent, name);
    }

    public void setLatLonToCurrentUserVal() {
        setLatLon(Weps.getInstance().getRunFileData().getBean().getLatLong());
    }

    public void setLatLon(LatLong latlon) {
        if (latlon != null) {
            if (controller instanceof CsipInputContSoilBgCache) {
                // Extra work for now, but this will let us transition to polygons in the future.
                ((CsipInputContPolygon) controller).setPolygon(latlon);
                super.reInitialize();
                ((CsipInputContSoilBgCache) controller).resetCatalog();
            } else {
                super.reInitialize();
            }
            doBackgroundCatalog();
        }
    }

    @Override
    public void reInitialize() {
        setLatLonToCurrentUserVal();
    }

    @Override
    public void doBackgroundCatalog() {
        ((CsipInputControllerBgCacheIf) controller).doBackgroundGetCatalog();
    }

    @Override
    public boolean checkBackgroundDownload() {
        return ((CsipInputControllerBgCacheIf) controller).checkBackgroundGetCatalog();
    }

    @Override
    public boolean checkBackgroundNewFiles() {
        return ((CsipInputControllerBgCacheIf) controller).checkNewFiles();
    }

    @Override
    public File[] listFiles(FileFilter filter) {
        if (checkBackgroundNewFiles()) {
            ((CsipInputControllerBgCacheIf) controller).clearNewFiles();
            controllerItem = null;
        }
        return super.listFiles(filter);
    }

    @Override
    public CsipInputControllerBgCacheIf getBackgroundPropertyChangeObject() {
        return (CsipInputControllerBgCacheIf) controller;
    }

    @Override
    public void clearBackgroundNewFiles() {
        ((CsipInputControllerBgCacheIf) controller).clearNewFiles();
    }
}
