In: Computer Science
IN JAVACreate a Java application that meets the following specifications. Write whatever public and private methods are necessary. Put all of these classes in a package called persistence1.
/// Please write each class in a separate file :
// Class 1 : Student.java
package persistence1;
import java.io.Serializable;
public class Student implements Serializable{
   /**
   *
   */
   private static final long serialVersionUID =
-6123469366535229726L;
   private String name;
   private double gpa;
  
  
   public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }
   public double getGpa() {
       return gpa;
   }
   public void setGpa(double gpa) {
       this.gpa = gpa;
   }
  
   public Student() {
      
   }
  
   public Student(String name, double gpa) {
       super();
       this.name = name;
       this.gpa = gpa;
   }
  
   @Override
   public int hashCode() {
       final int prime = 31;
       int result = 1;
       long temp;
       temp =
Double.doubleToLongBits(gpa);
       result = prime * result + (int)
(temp ^ (temp >>> 32));
       result = prime * result + ((name ==
null) ? 0 : name.hashCode());
       return result;
   }
  
   @Override
   public boolean equals(Object obj) {
       if (this == obj)
           return
true;
       if (obj == null)
           return
false;
       if (getClass() !=
obj.getClass())
           return
false;
       Student other = (Student)
obj;
       if (Double.doubleToLongBits(gpa) !=
Double.doubleToLongBits(other.gpa))
           return
false;
       if (name == null) {
           if (other.name
!= null)
          
    return false;
       } else if
(!name.equals(other.name))
           return
false;
       return true;
   }
   @Override
   public String toString() {
       return "Student [name=" + name + ",
gpa=" + gpa + "]";
   }
      
}
// Class 2: Course.Java
package persistence1;
import java.io.Serializable;
import java.util.ArrayList;
public class Course implements Serializable{
  
   /**
   *
   */
   private static final long serialVersionUID =
-4616187168507101589L;
   private String name;
   private ArrayList<Student> arrStdList = new
ArrayList<>();
  
  
   public Course() {
       super();
   }
  
   public Course(String name, ArrayList<Student>
arrStdList) {
       super();
       this.name = name;
       this.arrStdList = arrStdList;
   }
  
   public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }
   public ArrayList<Student> getStdList() {
       return arrStdList;
   }
   public void setStdList(ArrayList<Student>
arrStdList) {
       this.arrStdList = arrStdList;
   }
   @Override
   public int hashCode() {
       final int prime = 31;
       int result = 1;
       result = prime * result + ((name ==
null) ? 0 : name.hashCode());
       result = prime * result +
((arrStdList == null) ? 0 : arrStdList.hashCode());
       return result;
   }
   @Override
   public boolean equals(Object obj) {
       if (this == obj)
           return
true;
       if (obj == null)
           return
false;
       if (getClass() !=
obj.getClass())
           return
false;
       Course other = (Course) obj;
       if (name == null) {
           if (other.name
!= null)
          
    return false;
       } else if
(!name.equals(other.name))
           return
false;
       if (arrStdList == null) {
           if
(other.arrStdList != null)
          
    return false;
       } else if
(!arrStdList.equals(other.arrStdList))
           return
false;
       return true;
   }
  
   public void addStudent(Student s)
   {
       arrStdList.add(s);
   }
   @Override
   public String toString() {
       return "Course [name=" + name + ",
arrStdList=" + arrStdList + "]";
   }
}
// Class 3 : StudentPersister.java
package persistence1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class StudentPersister {
  
  
   static void save(ArrayList<Student> s)
   {
       try {
           FileOutputStream
f = new FileOutputStream(new File("Student.txt"));
          
ObjectOutputStream o = new ObjectOutputStream(f);
           // Write
objects to file
          
o.writeObject(s);      
   
           o.close();
           f.close();
       } catch (FileNotFoundException
e) {
          
System.out.println("File not found");
       } catch (IOException e) {
          
System.out.println("Error initializing stream");
       }
   }
  
   static ArrayList<Student> read(String loc)
   {
       ArrayList<Student> s1 =
null;
       try
       {
          
       FileInputStream fi = new
FileInputStream(new File(loc));
       ObjectInputStream oi = new
ObjectInputStream(fi);
       // Read objects
       s1 = (ArrayList<Student>)
oi.readObject();
       oi.close();
       fi.close();
       } catch (FileNotFoundException
e) {
          
System.out.println("File not found");
       } catch (IOException e) {
          
System.out.println("Error initializing stream");
       } catch (ClassNotFoundException e)
{
           // TODO
Auto-generated catch block
          
e.printStackTrace();
       }
      
       return s1;
   }
  
}
// Class 4. CoursePersister.java
package persistence1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class CoursePersister {
   static void save(ArrayList<Course> s)
   {
       try {
           FileOutputStream
f = new FileOutputStream(new File("Course.txt"));
          
ObjectOutputStream o = new ObjectOutputStream(f);
           // Write
objects to file
          
o.writeObject(s);      
   
           o.close();
           f.close();
       } catch (FileNotFoundException
e) {
          
System.out.println("File not found");
       } catch (IOException e) {
          
System.out.println("Error initializing stream");
       }
   }
  
   static ArrayList<Course> read(String loc)
   {
       ArrayList<Course> c1 =
null;
       try
       {
          
       FileInputStream fi = new
FileInputStream(new File(loc));
       ObjectInputStream oi = new
ObjectInputStream(fi);
       // Read objects
       c1 = (ArrayList<Course>)
oi.readObject();
       oi.close();
       fi.close();
       } catch (FileNotFoundException
e) {
          
System.out.println("File not found");
       } catch (IOException e) {
          
System.out.println("Error initializing stream");
       } catch (ClassNotFoundException e)
{
           // TODO
Auto-generated catch block
          
e.printStackTrace();
       }
      
       return c1;
   }
}
// Class 5 : Junit Student class : StudentPersisterTest.java
package persistence1;
import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.BeforeClass;
import org.junit.Test;
public class StudentPersisterTest {
   @BeforeClass
   public static void setUpBeforeClass() throws Exception
{
      
       //StudentPersister sp = new
StudentPersister();
   }
  
   @Test
   public void test() {
       Student s = new
Student("Sourabh",8.2);
       Student s2 = new
Student("Raja",7.9);
       String loc="Student.txt";
       ArrayList<Student> sList =
new ArrayList<>();
       sList.add(s);
       sList.add(s2);
       StudentPersister.save(sList);
       ArrayList<Student> sList2
= StudentPersister.read(loc);
       System.out.println(sList2);
      
       fail("Not yet implemented");
   }
}
// Class 6 : junit class for Course ; CoursePersisterTest.java
package persistence1;
import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.BeforeClass;
import org.junit.Test;
public class CoursePersisterTest {
   @BeforeClass
   public static void setUpBeforeClass() throws Exception
{
   }
   @Test
   public void test() {
      
       Student s1 = new
Student("Sourabh",8.2);
       Student s2 = new
Student("Raja",7.9);
       String loc="Course.txt";
       Course c = new Course();
       c.addStudent(s1);
       c.addStudent(s2);
       c.setName("maths");
      
       Course c2 = new Course();
       c2.addStudent(s1);
       c2.addStudent(s2);
       c2.setName("computer");
      
       ArrayList<Course> cList = new
ArrayList<>();
       cList.add(c);
       cList.add(c2);
       CoursePersister.save(cList);
       ArrayList<Course> cList2 =
CoursePersister.read(loc);
       System.out.println(cList2);
      
      
       fail("Not yet implemented");
   }
}
// Here we have implemented Serializable interface in both classes, so need to worry about NotSerializableExceptions.
// Out put :
/*
Output 1.
[Student [name=Sourabh, gpa=8.2], Student [name=Raja, gpa=7.9]]
Output 2.
[Course [name=maths, arrStdList=[Student [name=Sourabh,
gpa=8.2], Student [name=Raja, gpa=7.9]]], Course [name=computer,
arrStdList=[Student [name=Sourabh, gpa=8.2], Student [name=Raja,
gpa=7.9]]]]
*/
