Implement following java classes with appropriate constructor(s). Each class should override the toString method. in Java

Write TestCabAppointment,java class where you will instantiate new
CabAppointment objects and
read data from RandomAccessFile and create CabAppointment objects and
save them in RandomAccessFile
You may use FixedLengthStringIO,java class, ICabAppointmentRecord.java
interface.
Complete the ReadWriteRandomAccessFile.java



 CabAppointment.java (this class extends Appointment class)
private int id;
private Address startAddress;
private Address destinationAddress;
private String terminal;
private String description;


Appointment.java
private Customer customer;
private long appointmentStartDateStamp;
private long appointmentEndDateStamp;
private float payment;
private String paymentMethod; 


Customer.java
private String name;
private long phone;
private String email;
private Address address; 


Address.java
private int number;
private String street;
private String city;
private String State;
private long zip; 


 // Complete the following class
public class ReadWriteRandomAccessFile {

public static CabAppointment read(RandomAccessFile raf) throws
IOException {
CabAppointment cabApointment = new CabAppointment();
// read fields from the file and popuplate the cabApointment object
cabApointment.setId(raf.readInt());
String name =
FixedLengthStringIO.readFixedLengthString(ICabAppointmentRecord.NAME_LENGTH,
raf);
cabApointment.getCustomer().setName(name);
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------

}

public static void write(CabAppointment cabApointment, RandomAccessFile
raf) throws IOException {
// write fields from cabApointment object to random access file
raf.writeInt(cabApointment.getId());
FixedLengthStringIO.writeFixedLengthString(cabApointment.getCustomer().getName(),
ICabAppointmentRecord.NAME_LENGTH, raf);
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------

}
===========================================================================================================

public interface ICabAppointmentRecord {
String CabAppointmentFile = "CabAppointmentFile.dat";
int NUMBER_LENGTH = 4;
int STREET_LENGTH = 15;
int CITY_LENGTH = 15;
int STATE_LENGTH = 15;
int ZIP_LENGTH = 8;
int ADDRESS_LENGTH = NUMBER_LENGTH + ZIP_LENGTH + (STREET_LENGTH +
CITY_LENGTH + STATE_LENGTH) * 2;
int NAME_LENGTH = 15;
int PHONE_LENGTH = 8;
int EMAIL_LENGTH = 30;
int CUSTOMER_LENGTH = PHONE_LENGTH + (NAME_LENGTH + EMAIL_LENGTH) * 2
+ ADDRESS_LENGTH;


int ID_LENGTH = 4;
int APPOINTMENT_START_DATE_LENGTH = 8;
int APPOINTMENT_END_DATE_LENGTH = 8;
int PAYMENT_LENGTH = 4;
int PAYMENT_METHOD_LENGTH = 12;
int APPOINTMENT_LENGTH = CUSTOMER_LENGTH + ID_LENGTH +
APPOINTMENT_START_DATE_LENGTH +
APPOINTMENT_END_DATE_LENGTH +
PAYMENT_LENGTH + (PAYMENT_METHOD_LENGTH * 2);

int TERMINAL_LENGTH = 15;
int DESCRIPTION_LENGTH = 30;

int SIZE_OF_CAB_APPOINTMENT = APPOINTMENT_LENGTH + (ADDRESS_LENGTH *
2) + (TERMINAL_LENGTH +
DESCRIPTION_LENGTH) * 2;
}


 import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

public class FixedLengthStringIO {

/**
* Read fixed number of characters from a DataInput stream
*/
public static String readFixedLengthString(int size, DataInput in)
throws IOException {
// Declare an array of characters
char[] chars = new char[size];

// Read fixed number of characters to the array
for (int i = 0; i < size; i++) {
chars[i] = in.readChar();
}

return new String(chars);
}

/**
* Write fixed number of characters to a DataOutput stream
*/
public static void writeFixedLengthString(String s, int size,
DataOutput out) throws IOException {
if (s == null || s.length() <= 1) {
s = "NA";
}

char[] chars = new char[size];
try {
// Fill in string with characters
s.getChars(0, Math.min( s.length(), size), chars, 0);
} catch (Exception e) {
System.out.println(e);
}
// Fill in blank characters in the rest of the array
for (int i = Math.min(s.length(), size); i < chars.length; i++) {
chars[i] = ' ';
}

// Create and write a new string padded with blank characters
out.writeChars(new String(chars));
}
}