
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.prism.CsipInputContPrismBgCache;

/**
 *
 * @author mhaas
 */
public class CsipPrismFile extends InetFile implements InetFileBgIf {
    
    static final long serialVersionUID = 1L;
    
    public CsipPrismFile() {
        this ("CSIP Prism Service");
    }
    
    public CsipPrismFile(String name) {
        super (name, RemoteFileType.PRISM);
        controller = CsipInputControllerStatic.getPrismController();
        controller.setInterfaceName(name);

        setLatLonToCurrentUserVal();
        // the LatLon change will fire this, no need to do it explicitly
        //doBackgroundCatalog();
    }
        
    public CsipPrismFile(CsipPrismFile 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 CsipInputContPrismBgCache) {
                // Extra work for now, but this will let us transition to polygons in the future.
                ((CsipInputContPolygon)controller).setPolygon(latlon);
                super.reInitialize();
                ((CsipInputContPrismBgCache)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();
    }
}
