/* ======================================================
                  Ricardo Martin Manso
                     PFC - UOC 2010
======================================================= */

package backup;

import java.io.File;

// =======================================================
// Empaqueta datos de un trabajo de backup concreto.
// =======================================================
public class Job {

    private static final int FILTRO_NO=0;
    private static final int FILTRO_EMPIEZA=1;
    private static final int FILTRO_TERMINA=2;
    private static final int FILTRO_ARCHIVO=3;

    private int tipoFiltro;

    private String etiqueta;
    private String target;
    private boolean recursivo;

    private String path;
    private String filtro;
    private String fichero;
    private boolean flagArchivo;

    private String cadenaFiltro;

    public boolean getFlagArchivo()
    {
        return flagArchivo;
    }

    public String getPath()
    {
        return path;
    }

    public String getFiltro()
    {
        return filtro;
    }

    public String getFichero()
    {
        return fichero;
    }

    /**
     * @return the etiqueta
     */
    public String getEtiqueta() {
        return etiqueta;
    }

    /**
     * @param etiqueta the etiqueta to set
     */
    public void setEtiqueta(String etiqueta) {
        this.etiqueta = etiqueta;
    }

    /**
     * @return the tarjet
     */
    public String getTarget() {
        return target;
    }

    /**
     * @param tarjet the tarjet to set
     */
    public void setTarget(String target) {
        this.target = target;
        File x=new File(target);
        flagArchivo=x.isFile();
        setFichero(x.getName());
        setPath(x.getParent());
        if (fichero.endsWith("*") || fichero.startsWith("*"))
        {
            filtro=fichero;
            int corte=path.lastIndexOf("\\")+1;
            setFichero(path.substring(corte));
            setPath(path.substring(0, corte));
            if (fichero.equals("")) {setFichero(path);setPath("");}
        }
        else 
        {    
            filtro = "*.*";
            if (fichero.equals("")) {setPath("");setFichero(target);}
            else if (!path.endsWith("\\")) setPath(path + "\\");
        }
        
        //System.out.println("Target:"+target+ " Fichero:"+fichero+" Path:"+path+" filtro:"+filtro);
    }

    public void print()
    {
        if (etiqueta!=null && !etiqueta.equals("") ) System.out.println("Etiqueta:"+etiqueta);
        if (target!=null) System.out.println("Target:"+target);
        if (fichero!=null && !fichero.equals("")) System.out.println("Fichero:"+fichero);
        if (path!=null && filtro!=null) System.out.println("Path:"+path+"\nfiltro:"+filtro);
        System.out.println("Recursivo:"+recursivo);
    }

    public void setRutaCompleta(String target) {
        this.target = new String(target);

        int corte=target.lastIndexOf("\\");
        if (corte<0) {path="\\";}
        else
            path=target.substring(0, corte);
        if (path.equals("")) path="\\";
        fichero=target.substring(corte+1);
        filtro="";
        tipoFiltro=FILTRO_NO;
        cadenaFiltro="";
        if (fichero.equals(""))
        {
            flagArchivo = false;
            filtro="*.*";
            tipoFiltro=FILTRO_NO;
        }
        else
        {
            if (fichero.endsWith(".*"))
            {
                filtro = fichero;
                fichero="";
                flagArchivo=false;
                tipoFiltro=FILTRO_EMPIEZA;
                cadenaFiltro=filtro.substring(0, filtro.length()-2);
            }
            else if  (fichero.startsWith("*."))
            {
                filtro = fichero;
                fichero="";
                flagArchivo=false;
                tipoFiltro=FILTRO_TERMINA;
                cadenaFiltro=filtro.substring(2);
            }
            else
            {
                flagArchivo=true;
                filtro = fichero;
                tipoFiltro=FILTRO_ARCHIVO;
                cadenaFiltro=fichero;
            }
        }
        //System.out.println("Target:"+target+ " Fichero:"+fichero+" Path:"+path+" filtro:"+filtro+" cadenaFiltro:"+cadenaFiltro);
    }

    public boolean testFiltro(String nombre)
    {

        switch(tipoFiltro)
        {
            case FILTRO_NO: return true;
            case FILTRO_EMPIEZA:
            {
                 int corte=nombre.lastIndexOf(".");
                 if (corte<0) return false;
                 String archivo=nombre.substring(0, corte);
                 return (archivo.equals(cadenaFiltro));
            }
            case FILTRO_TERMINA:
            {
                 int corte=nombre.lastIndexOf(".");
                 if (corte<0) return false;
                 String extension=nombre.substring(corte+1);
                 return (extension.equals(cadenaFiltro));
            }
            case FILTRO_ARCHIVO:
            {
                 return (nombre.equals(cadenaFiltro));
            }
        }
        return false;
    }

    /**
     * @return the recursivo
     */
    public boolean isRecursivo() {
        return recursivo;
    }

    /**
     * @param recursivo the recursivo to set
     */
    public void setRecursivo(boolean recursivo) {
        this.recursivo = recursivo;
    }

    /**
     * @param path the path to set
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * @param fichero the fichero to set
     */
    public void setFichero(String fichero) {
        this.fichero = fichero;
    }


}
