please do it by yourself and don't use works that you used before!!!

profileWhite
previousassignment.zip

Facebook/.classpath

Facebook/.project

Facebook org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature

Facebook/.settings/org.eclipse.jdt.core.prefs

eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=10 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=10 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.source=10

Facebook/bin/Driver.class

public synchronized class Driver {
    public void Driver();
    public static void main(String[]) throws java.io.IOException;
}

Facebook/bin/Facebook.class

public synchronized class Facebook implements java.io.Serializable {
    private static final long serialVersionUID = 1;
    transient java.util.Scanner keyboard;
    private java.util.Map users;
    public void Facebook();
    public void printUsers();
    public void addUser();
    public void deleteUser();
    public void getPasswordHelp();
    public void friend();
    public void defriend(FacebookUser);
    public void listFriends();
    public void getRecommendations();
    private void getRecommendations(FacebookUser, java.util.ArrayList);
}

Facebook/bin/FacebookUser.class

public synchronized class FacebookUser extends UserAccount implements Comparable, Cloneable, java.io.Serializable {
    private static final long serialVersionUID = 1;
    protected String passwordHint;
    protected java.util.ArrayList friends;
    public void FacebookUser(String, String);
    public void setPasswordHint(String);
    public void friend(FacebookUser);
    public void defriend(FacebookUser);
    public java.util.ArrayList getFriends();
    public int compareTo(FacebookUser);
    public void getPasswordHelp();
}

Facebook/bin/UserAccount.class

public abstract synchronized class UserAccount implements java.io.Serializable {
    private static final long serialVersionUID = 1;
    protected String username;
    protected String password;
    protected boolean active;
    public void UserAccount(String, String);
    public boolean checkPassword(String);
    public void deactivateAccount();
    public int hashCode();
    public boolean equals(Object);
    public String toString();
    public abstract void getPasswordHelp();
}

Facebook/src/Driver.java

Facebook/src/Driver.java

import  java . io . IOException ;
import  java . util . Scanner ;

public   class   Driver   {
     public   static   void  main ( String []  args )   throws   IOException   {
         Scanner  keyboard  =   new   Scanner ( System . in );
         Facebook  faceBook  =   new   Facebook ();
         // testing
         while   ( true )   {
             System . out . println (
                     "Choose an option: 1. List users , 2. Add users, "   +   "3. Delete users, 4. Get password hint, "
                             +   "5. add a friend, 6. delete a friend, 7. list friends, "
                             +   "8. recommend new friends, 9. quit " );
             String  op  =  keyboard . next ();
             if   ( op . equalsIgnoreCase ( "1" ))   {   // list
                faceBook . printUsers ();
             }   else   if   ( op . equalsIgnoreCase ( "2" ))   {   // add
                faceBook . addUser ();
             }   else   if   ( op . equalsIgnoreCase ( "3" ))   {   // delete
                faceBook . deleteUser ();
             }   else   if   ( op . equalsIgnoreCase ( "4" ))   {   // password hint
                faceBook . getPasswordHelp ();
             }   else   if   ( op . equalsIgnoreCase ( "5" ))   {   // friend
                faceBook . friend ();
             }   else   if   ( op . equalsIgnoreCase ( "6" ))   {   // de-friend
                faceBook . deleteUser ();
             }   else   if   ( op . equalsIgnoreCase ( "7" ))   {   // list
                faceBook . listFriends ();
             }   else   if   ( op . equalsIgnoreCase ( "8" ))   {   // recommend
                faceBook . getRecommendations ();
             }   else   if   ( op . equalsIgnoreCase ( "9" ))   {   // quit
                 // create serialized object before program ends
                 System . out . println ( "" );
                 System . out . println ( "exiting..." );
                 System . exit ( 0 );
             }   else   {
                 System . out . println ( "Error, Please choose from the available list." );
             }
         }   // end loop
     }
}   // end

Facebook/src/Facebook.java

Facebook/src/Facebook.java

import  java . io . Serializable ;
import  java . util . ArrayList ;
import  java . util . HashMap ;
import  java . util . Map ;
import  java . util . Scanner ;

public   class   Facebook   implements   Serializable   {   //implements facebook
     /**
    *
    */
     private   static   final   long  serialVersionUID  =   1L ;
     transient   Scanner  keyboard  =   new   Scanner ( System . in );
     private   Map < String ,   FacebookUser >  users ;

     public   Facebook ()   {
        users  =   new   HashMap < String ,   FacebookUser > ();
     }

     // list users
     public   void  printUsers ()   {  
         for   ( String  key  :  users . keySet ())   {
             System . out . println ( users . get ( key ));
         }
     }

     // adds a user
     public   void  addUser ()   {   //add friend
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( users . containsKey ( username ))   {
             System . out . println ( "that user exist" );
         }   else   {
             System . out . println ( "Please enter a password." );
             String  password  =  keyboard . nextLine ();
             System . out . println ( "Please enter a password hint." );
             String  passWordHint  =  keyboard . nextLine ();
             FacebookUser  facebookUser  =   new   FacebookUser ( username ,  password );
            facebookUser . setPasswordHint ( passWordHint );
            users . put ( username ,  facebookUser );
         }
     }

     // deletes a user
     public   void  deleteUser ()   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( users . containsKey ( username ))   {
             FacebookUser  facebookUser  =  users . get ( username );
             System . out . println ( "Please enter a password" );
             String  password  =  keyboard . nextLine ();
             if   ( facebookUser . password . equals ( password ))   {
                users . remove ( username );
                 System . out . println ( "User Removed" );
             }
         }   else   {
             System . out . println ( "That username does not exist" );
         }
     }
     // get password hint
     public   void  getPasswordHelp ()   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( users . containsKey ( username ))   {
             FacebookUser  facebookUser  =  users . get ( username );
            facebookUser . getPasswordHelp ();
         }   else   {
             System . out . println ( "That user does not exist" );
         }
     }
     // add a friend
     public   void  friend ()   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( username  !=   null   &&   ! users . containsKey ( username ))   {
             System . out . println ( "that user does not exist" );
         }   else   {
             FacebookUser  facebookUser  =  users . get ( username );
             System . out . println ( "Please enter a password." );
             String  password  =  keyboard . nextLine ();
             if   ( facebookUser . password . equals ( password ))   {
                 System . out . println ( "Please enter a friend's name" );
                 String  friendName  =  keyboard . nextLine ();
                 if   ( friendName . equals ( username ))   {
                     System . out . println ( "You cannot friend yourself" );
                 }   else   {
                     FacebookUser  friend  =  users . get ( friendName );
                    facebookUser . friend ( friend );
                    users . put ( username ,  facebookUser );
                 }
             }
         }
     }
     // delete a friend
     public   void  defriend ( FacebookUser  formerFriend )   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( username  !=   null   &&   ! users . containsKey ( username ))   {
             System . out . println ( "that user does not exist" );
         }   else   {
             FacebookUser  facebookUser  =  users . get ( username );
             System . out . println ( "Please enter a password." );
             String  password  =  keyboard . nextLine ();
             if   ( facebookUser . password . equals ( password ))   {
                 System . out . println ( "Please enter a friend's name" );
                 String  friendName  =  keyboard . nextLine ();
                 if   ( friendName . equals ( username ))   {
                     System . out . println ( "You cannot de-friend yourself" );
                 }   else   {
                     FacebookUser  friend  =  users . get ( friendName );
                    facebookUser . defriend ( friend );
                 }
             }
         }
     }
     // list User's friends
     public   void  listFriends ()   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( username  !=   null   &&   ! users . containsKey ( username ))   {
             System . out . println ( "that user does not exist" );
         }   else   {
             FacebookUser  facebookUser  =  users . get ( username );
             System . out . println ( "Please enter a password." );
             String  password  =  keyboard . nextLine ();
             if   ( facebookUser . password . equals ( password ))   {
                 System . out . println ( "Friends List:" );
                facebookUser . getFriends ();
             }
         }
     }
     // get recommendations of your friend's friends
     public   void  getRecommendations ()   {
         System . out . println ( "Please enter a username." );
         String  username  =  keyboard . nextLine ();
         if   ( username  !=   null   &&   ! users . containsKey ( username ))   {
             System . out . println ( "that user does not exist" );
         }   else   {
             FacebookUser  facebookUser  =  users . get ( username );
             System . out . println ( "Please enter a password." );
             String  password  =  keyboard . nextLine ();
             if   ( facebookUser . password . equals ( password ))   {
                 ArrayList < FacebookUser >  recommendations  =   new   ArrayList < FacebookUser > ();
                 for   ( FacebookUser  f  :  facebookUser . friends )   {
                    getRecommendations ( f ,  recommendations );
                 }
                 if   ( ! recommendations . isEmpty ())   {
                     System . out . println ( "Recommendation friends List:" );
                     for   ( FacebookUser  u  :  recommendations )   {
                         System . out . println ( u );
                     }
                 }
             }
         }
     }

     private   void  getRecommendations ( FacebookUser  user ,   ArrayList < FacebookUser >  recommendations )   {
         if   ( user  !=   null   &&  user . friends  !=   null   &&   ! user . friends . isEmpty ())   {
             for   ( FacebookUser  friend  :  user . friends )   {
                 if   ( ! recommendations . contains ( friend ))   {
                    recommendations . add ( friend );
                    getRecommendations ( friend ,  recommendations );
                 }
             }
         }
     }
}   // end all facebook

Facebook/src/FacebookUser.java

Facebook/src/FacebookUser.java

import  java . io . Serializable ;
import  java . util . ArrayList ;

public   class   FacebookUser   extends   UserAccount   implements   Comparable < FacebookUser > ,   Cloneable ,   Serializable   {
     /**
    *
    */
     private   static   final   long  serialVersionUID  =   1L ;
     protected   String  passwordHint ;
     protected   ArrayList < FacebookUser >  friends ;

     public   FacebookUser ( String  username ,   String  password )   {
         super ( username ,  password );
        friends  =   new   ArrayList < FacebookUser > ();
     }

     public   void  setPasswordHint ( String  hint )   {
         this . passwordHint  =  hint ;
     }

     public   void  friend ( FacebookUser  newFriend )   {
         if   ( friends . contains ( newFriend ))   {
             System . out . println ( "That friend has already been added. " );
         }   else   {
            friends . add ( newFriend );
         }
     }

     public   void  defriend ( FacebookUser  formerFriend )   {
         if   ( ! friends . contains ( formerFriend ))   {
             System . out . println ( "That friend has not been added. " );
         }   else   {
            friends . remove ( formerFriend );
         }
     }

     public   ArrayList < FacebookUser >  getFriends ()   {
         ArrayList < FacebookUser >  friendsCopy  =   new   ArrayList < FacebookUser > ();
         for   ( FacebookUser  user  :   this . friends )   {
             try   {
                friendsCopy . add (( FacebookUser )  user . clone ());
             }   catch   ( CloneNotSupportedException  cloneNotSupportedException )   {
                cloneNotSupportedException . printStackTrace ();
             }
         }
         for   ( int  i  =   0 ;  i  <  friendsCopy . size ();  i ++ )   {
             System . out . println ( friendsCopy . get ( i ));
         }
         return  friendsCopy ;
     }

     public   int  compareTo ( FacebookUser  o )   {
         if   ( this . username . compareToIgnoreCase ( o . username )   !=   0 )   {
             return   this . username . compareToIgnoreCase ( o . username );
         }
         return   0 ;
     }

    @ Override
     public   void  getPasswordHelp ()   {
        setPasswordHint ( passwordHint );
         System . out . println ( "Password Hint: "   +  passwordHint );
     }
}   // end facebookUser

Facebook/src/UserAccount.java

Facebook/src/UserAccount.java

import  java . io . Serializable ;

public   abstract   class   UserAccount   implements   Serializable   {
     /**
    *
    */
     private   static   final   long  serialVersionUID  =   1L ;
     protected   String  username ;
     protected   String  password ;
     protected   boolean  active ;   // check the account is active or not

     public   UserAccount ( String  username ,   String  password )   {
         this . username  =  username ;
         this . password  =  password ;
        active  =   true ;
     }

     public   boolean  checkPassword ( String  password )   {
         boolean  passwordMatch ;
         if   ( password . equals ( this . password ))   {
            passwordMatch  =   true ;
         }   else   {
            passwordMatch  =   false ;
         }
         return  passwordMatch ;
     }

     public   void  deactivateAccount ()   {
        active  =   false ;
     }

    @ Override
     public   int  hashCode ()   {
         final   int  prime  =   31 ;
         int  result  =   1 ;
        result  =  prime  *  result  +   (( username  ==   null )   ?   0   :  username . 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 ;
         UserAccount  other  =   ( UserAccount )  obj ;
         if   ( username  ==   null )   {
             if   ( other . username  !=   null )
                 return   false ;
         }   else   if   ( ! username . equals ( other . username ))
             return   false ;
         return   true ;
     }

    @ Override
     public   String  toString ()   {
         return   "Username: "   +  username  +   " " ;
     }

     public   abstract   void  getPasswordHelp ();
}   // end UserAccount