// @topic S-0314-10-01-60 Java serialization example
// @brief class ScenarioGeneric implements Serializable

package Week05_persistence;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;

public class ScenarioGeneric implements Serializable {

    //-----------------------
    // Data attributes:
    //-----------------------
    // Note: use transient attributes to exclude from serialization
    private String scenarioType = "generic";
    private int numberOfFloors = 10;
    private int numberOfElevators = 3;
    private ArrayList< Visitor> visitors = new ArrayList<>();

    public ScenarioGeneric() {
        int idx = 1;
        for (; idx < 10; ++idx) {
            visitors.add(new Visitor(idx));
        }
    }

    //-----------------------
    // operations
    //-----------------------
    public void saveData(String filePath) {
        try {
            FileOutputStream fileOut
                    = new FileOutputStream(filePath);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(this);
            out.close();
            fileOut.close();
            System.out.println("Serialized data is saved in " + filePath);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }//saveScenario

    public void loadData(String filePath) {
        ScenarioGeneric scenario;
        try {
            FileInputStream fileIn = new FileInputStream(filePath);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            scenario = (ScenarioGeneric) in.readObject();
            in.close();
            fileIn.close();
        } catch (IOException exio) {
            exio.printStackTrace();
            return;
        } catch (ClassNotFoundException exc) {
            System.out.println("ScenarioGeneric class not found");
            exc.printStackTrace();
            return;
        }
        this.scenarioType = scenario.scenarioType;
        this.numberOfFloors = scenario.numberOfFloors;
        this.numberOfElevators = scenario.numberOfElevators;
        this.visitors = scenario.visitors;
    }//loadData

    public String getScenarioType() {
        return scenarioType;
    }

    public void setScenarioType(String scenarioType) {
        this.scenarioType = scenarioType;
    }

    public int getNumberOfFloors() {
        return numberOfFloors;
    }

    public void setNumberOfFloors(int numberOfFloors) {
        this.numberOfFloors = numberOfFloors;
    }

    public int getNumberOfElevators() {
        return numberOfElevators;
    }

    public void setNumberOfElevators(int numberOfElevators) {
        this.numberOfElevators = numberOfElevators;
    }

    public ArrayList<Visitor> getVisitors() {
        return visitors;
    }

    public void setVisitors(ArrayList<Visitor> visitors) {
        this.visitors = visitors;
    }
    
    
}//class ScenarioGeneric