
package usda.weru.remoteDataAccess.jdbc.soil;

import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import javax.swing.ProgressMonitor;
import org.openide.util.Exceptions;
import usda.weru.remoteDataAccess.RdaHierarchicalItem;
import usda.weru.remoteDataAccess.RdaInputController;
import usda.weru.remoteDataAccess.RdaInterface;
import usda.weru.remoteDataAccess.exceptions.RdaConnectException;
import usda.weru.util.WepsMessageLog;

/**
 *
 * @author mhaas
 */
public abstract class JdbcSoilInputController extends RdaInputController {
    
    protected JdbcSoilInterface soilIf;
    
    public JdbcSoilInputController () {
        inputDataTree = null;
    }
    
    @Override
    public RdaInterface getInterface () {
        return soilIf;
    }

    @Override
    protected RdaHierarchicalItem initializeData(RdaHierarchicalItem soilTreeRoot) throws RdaConnectException {
        return null;
    }
    
    @Override
    public void controllerSetDestinationPath (Path destPath) {
        // null. For Soil Data Mart, this function passes from the JdbcSoilHierarchicalItem directly to the JdbcSoilInterface
    }
    
    @Override
    public File getFile(RdaHierarchicalItem item) throws RdaConnectException {
        return ((JdbcSoilHierarchicalItem)item).soilIf.callSoilGetRecord(item.getName(), item.getParentPath());
    }
    
    @Override
    public File getFile (RdaHierarchicalItem item, ProgressMonitor progress) throws RdaConnectException {
        return ((JdbcSoilHierarchicalItem)item).soilIf.callSoilGetRecord(item.getName(), item.getParentPath(), progress);
    }
   
    public WepsMessageLog getFileLog (RdaHierarchicalItem item) {
        return ((JdbcSoilHierarchicalItem)item).soilIf.getRecordLog();
    }
    
    @Override
    protected void loadChildren (RdaHierarchicalItem rootItem) {
        ArrayList<JdbcSoilInterface.SoilCatParms> soilResults;
        if (rootItem instanceof JdbcSoilHierarchicalItem) {
            try {
                soilResults = ((JdbcSoilHierarchicalItem)rootItem).soilIf.callSoilCatalog();
                for (JdbcSoilInterface.SoilCatParms soilItemParms : soilResults) {
                    rootItem.addChild (new JdbcSoilHierarchicalItem (soilItemParms, (JdbcSoilHierarchicalItem)rootItem));
                }
            } catch (RdaConnectException ex) {
                Exceptions.printStackTrace(ex);
            }
        }
    }
}
