```java class Intensity { int r, g, b; // RGB values at a position } class Position { int x, y; // pixel position } class Pixel { // pixel position with RGB values Intensity intensity; Position position; } public interface IDrawErase { // parameter: ArrayList<Pixel> - an ArrayList of pixel with RGB values for random curve object void draw_curve(ArrayList <Pixel>); // parameter: ArrayList<Position> - an ArrayList of pixel position for erase object void erase(ArrayList <Position>); } ``` ``` java public interface IDrawShapes { // parameter: Pixel center - center position with intensity for circle // radius - radius of circle void draw_circle(Pixel center, float radius); // makes an object for square parallel to the whiteBoard // parameter: Pixel start - start position for square with RGB values in whiteBoard // float length - length of the sqaure void draw_square(Pixel start, float length); // parameter: Pixel start - top left position with RGB values for rectangle in whiteBoard // Pixel end - bottom right position with RGB values for rectangle in whiteBoard void draw_rectangle(Pixel start, Pixel end); // makes an object for a line segment parallel to the whiteBoard // parameter: Pixel start - start position with RGB values // Pixel end - end position with RGB values void draw_line(Pixel start, Pixel end); } ``` ```java public interface IUndoRedo { // redo the work done by a particular user void redo(); // undo the work done by a particular user void undo(); } ``` ```java public interface IOperation { // returns the pixel position for selected object if an object exist at selected position ArrayList<Position> select (ArrayList <Position>); // deletes the selected object void delete (); // changes color of selected objected to specified intensity void colorChange (Intensity intensity); // rotates selected object by specified angle in counter clockwise direction void rotate (double angleCCW); // removes all the object drawn by the particular user void reset (); } ``` ```java public interface IChanges { // UI will subscribe for notifications for any changes and we will notify when any changes will happen // UI will call getCahnges function and we will pass the changes boolean listenForChanges(); // returns ArrayList<Pixel> - an ArrayList of position with intensity for the changes to be made in UI ArrayList<Pixel> getChanges(); } ``` ```java public interface IUser { // this function is used to get the user details during initial setup from user through UI // if the board Id is null then we get a new board id from server and pass to UI // parameter: userName - user name // ipAddress - ipaddress for the server with the port // boardId - white board ID to which user wants to connect String getUserDetails(String userName, String ipAddress, String boardId); // return the username at the selected position String getUser(ArrayList<Position>); void stopSession(); } ```