/media/sda-magnetic/david/Extern-Magnetic-2022-06-29/Extern01/Dokumente-2021-05-8/disk10-ab-2020-01-10/02-debian-pc2-work/informatik/java-new/2020-11-23/test/LinkedListProg3.java


import java.io.*;
import java.lang.*;
import java.io.Serializable;
import java.util.LinkedList;

class LinkedListProg3 {
    static class Person implements Serializable {
        private String firstName;
        private String lastName;
        
        public Person (String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }
        
        void print () {
            System.out.println (firstName + " " + lastName);
        }
    }
    interface FullPersistence {
        AddressBook loadBook(String name);

        void storeBook(AddressBook book, String name);
    }

    
    static class AddressBookException extends Exception {
        AddressBookException(String message) {
            super(message);
        }
    }

    static class AddressBook {
        LinkedList <Person> myList = null;
        AddressBook () {
            myList = new LinkedList <Person> ();
        }
        public void addPerson(Person person) {
            myList.add (person);
        }
        public void print() {
            for (Person person : myList)
                person.print();
        }
        LinkedList <Person> getList () {return this.myList;}
        void setList (LinkedList <Person> myList) {this.myList = myList;}
    }
    
    static class SerializationToFilePersistence {
        AddressBook loadBook(String name) {
            AddressBook myAddrsBk = null;
            try {
                LinkedList <Person> listFromFile;
                InputStream is = new FileInputStream (name);
                ObjectInputStream ois = new ObjectInputStream (is);
                myAddrsBk = new AddressBook();
                myAddrsBk.setList((LinkedList <Person>) ois.readObject());
                
            }
            catch (FileNotFoundException e) {
                System.out.println ("We have a file error 1");
            }
            catch (IOException e) {
                System.out.println ("We have a file error");
            }    
            catch (ClassNotFoundException e) {
                System.out.println ("We have a problem");
            }
            return myAddrsBk;
        }
        void storeBook(AddressBook myAddrsBk, String name) {
            try { 
                OutputStream os = new FileOutputStream (name);
                ObjectOutputStream oos = new ObjectOutputStream(os);
                oos.writeObject (myAddrsBk.getList());
                oos.close();    
            }
            catch (IOException e) {
                System.out.println ("We have a file problem");
            }
        }
    }


    public static void main (String [] args) {
        try {
            if (args[0].equals("save")) {
                int i;
                SerializationToFilePersistence  stfp = new  SerializationToFilePersistence ();
                AddressBook addrsbk = new AddressBook ();
                for (i = 2;  i < args.length;  i++)
                    addrsbk.addPerson (new Person ("Anton", args[i]));
                stfp.storeBook(addrsbk, args[1]);
                 
                 
            }
            else if (args[0].equals ("read")) {
                 SerializationToFilePersistence  stfp = new  SerializationToFilePersistence ();
                 AddressBook addrsbk = stfp.loadBook (args[1]);
                 addrsbk.print();
            }
        }
        catch (ArrayIndexOutOfBoundsException e) {
            System.out.println ("usage: ");
            System.out.println ("MyTreeFileProg write fname data1 data2 ...");
            System.out.println ("MyTreeFileProg read fname");
        }
    }
    
}