/*
 * MammiferoFile.java
 *
 * Created on 15 marzo 2004, 22.32
 */
package Animali;
//
import java.io.*;
/**
 *
 * @author  stfn
 */
public class MammiferoFile implements Mammifero {
    //contiene il nome del file dati
    private String fl_name;
    //variabile corrispondenti ai valori ritornato
    //dai metodi delle interfacce Animale e Mammifero
    private String nome, dieta, habitat, longevita, socialita;
    private int gestazione;
    private double peso;
    /** costruttore con parametro rappresentante
     il nome del file atto a contenere le informazioni
     relative all'animale*/
    public MammiferoFile(String fl) {
        fl_name=fl;
    }
    //legge le informazioni dal file fl_name
    public boolean Leggi(){
        //dichiara la variabile di tipo FileReader
        //per potere leggere caratteri dal file
        FileReader fin = null;
        try {
            //allocazione istanza di FileReader
            fin = new FileReader(fl_name);
        }
        catch(FileNotFoundException e){
            System.out.println("File non trovato");
            return false;
        }
        //
        try {
            //variabile atta ad accumulare i caratteri via via
            //letti dal file
            StringBuffer buffer=new StringBuffer();
            int i=-1;
            //loop che prosegue fino a che esistono
            //ancora caratteri da leggere all'interno del file
            while(fin.ready()){
                //carattere letto dal file
                char ch = (char)fin.read();
                //test per vedere se è finito il dato relativo
                //all'i-esimo elemento della classe
                if(ch=='\n'){
                    //fine linea: incrementa il contatore e scrive 
                    //l'attributo della classe
                    i++;
                    switch (i){
                        case 0:
                            //nome
                            nome=buffer.toString();
                            break;
                        case 1:
                            //dieta
                            dieta=buffer.toString();
                            break;
                        case 2:
                            //habitat
                            habitat=buffer.toString();
                            break;
                        case 3:
                            //longevita
                            longevita=buffer.toString();
                            break;
                        case 4:
                            //peso
                            peso=Double.parseDouble(buffer.toString());
                            break;
                        case 5:
                            //socialità
                            socialita=buffer.toString();
                            break;
                        case 6:
                            //gestazione
                            gestazione=Integer.parseInt(buffer.toString());
                            break;
                    }
                    //svuota il buffer
                    buffer.delete(0,buffer.length());
                }
                else{
                    //accumula caratteri nel buffer
                    buffer.append(ch);
                }
            }
            //file letto interamente senza errori: tutto OK
            return true;
        }
        catch (IOException e){
            System.out.println("Errore di input");
        }
        return false;
    }
    //scrive le informazioni nel file
    public boolean Scrivi(){
        //istanziazione della classe FileWriter atta a scrivere
        //gli attributi della classe sul file
        FileWriter fout = null;
        try {
            //il secondo parametro del file sta ad indicare di scrivere 
            //gli attributi della classe a partire dall'inizio del file
            //quindi sovrascrivendo i dati esistenti: 
            //ci si aspetta un file per ogni istanza di classe
            fout = new FileWriter(fl_name,false);
        }
        catch(IOException e){
            System.out.println("Apertura fallita");
            return false;
        }
        //
        try { 
            //scrive gli attributi uno per riga
            String buffer = null;
            buffer=nome+'\n';
            fout.write(buffer,0,buffer.length());
            buffer=dieta+'\n';
            fout.write(buffer,0,buffer.length());
            buffer=habitat+'\n';
            fout.write(buffer,0,buffer.length());
            buffer=longevita+'\n';
            fout.write(buffer,0,buffer.length());
            buffer = new Double(peso).toString();
            buffer+='\n';
            fout.write(buffer,0,buffer.length());
            buffer=socialita+'\n';
            fout.write(buffer,0,buffer.length());
            buffer = Integer.toString(gestazione);
            buffer+='\n';
            fout.write(buffer,0,buffer.length());
            //chiude il file
            fout.close();
            //tutto è andato OK
            return true;
        } catch (IOException e){
            System.out.println("Errore scrivendo nel file");
        }
        //
        return false;
    }
    //Richiesta di input per la scheda completa
    public void InputScheda(){
        ScanKey sk=new ScanKey();
        ScanKey sd=new ScanDouble();
        System.out.print("\nChi sono? : ");
        nome=sk.readLine2();
        System.out.print("\nCosa mangio? : ");
        dieta=sk.readLine2();
        System.out.print("\nDove vivo? : ");
        habitat=sk.readLine2();
        System.out.print("\nQuanto vivo? :");
        longevita=sk.readLine2();
        System.out.print("\nQuanto peso mediamente da adulto? :");
        peso=Double.parseDouble(sd.readLine());
        System.out.print("\nCome vivo assieme ai miei simili? :");
        socialita=sk.readLine2();
        System.out.print("\nqual'è il tempo di gestazione dei miei piccoli? :");
        gestazione=Integer.parseInt(sd.readLine());
    }
    //
    public String SchedaAnimale() {
        String str;
        str="Io sono "+ getNome()+"\n"
            +"vivo in "+getHabitat()+"\n"
            +"mangio "+getDieta()+"\n"
            +"peso mediamente "+getPesoMedio()+"\n"
            +"vivo circa "+getLongevita()+".\n"
        ;
        return str;
    }
    
    public String SchedaAnimaleCompleta() {
        String str;
        str=SchedaAnimale()
            +"\nInoltre :\n"
            +"la gestazione dei miei piccoli dura per "+getGiorniGestazione()+" giorni circa\n"
            +"e "+getSocialita()+".\n"
        ;
        return str;
    }
    
    public String getDieta() {
        return dieta;
    }
    
    public String getHabitat() {
        return habitat;
    }
    
    public String getLongevita() {
        return longevita;
    }
    
    public String getNome() {
        return nome;
    }
    
    public double getPesoMedio() {
        return peso;
    }
    
    public int getGiorniGestazione() {
        return gestazione;
    }
    
    public String getSocialita() {
        return socialita;
    }
    //overriding da Object che richiama la stampa della scheda completa
    public String toString() {
        return SchedaAnimaleCompleta();
    }
    
}
