testGetPastMeeting() passes in JUnit. (accessibility of contactMap,
pastMeetingMap and counter as well as the constructor needed to be
changed temporarily).
testAddFutureMeeting() JUnit test passes. Also correctly throws
exceptions when either the date is in the past or the contact does not
exist (i.e. was not added into the contactMap via addNewContact())
Completed some more unfinished javadocs.
Added the name of the method into the exception catch block println
(which is intended to help the developers (both the
implementation-writer and the interface-writer) rather than to be
included in the final user version.)
JUnit testing of generateId() revealed that the counter increment could
be done in a nicer way (so that a new counter value replaces its
predecessor rather than just concatenating onto the end). 
Also added toLowerCase() to the name parameter sent to generateId() from
addNewContact() so that different id numbers are not created for the
same name which one user happens to enter different cases as another
user.
Completed JUnit test of generateId() and generateId2() which test for
creation of a unique id number when passed either a date of a meeting or
a name of a contact. Both pass now after debugging the generateId()
method in ContactManagerImpl.
Just pushing the whole lot up to Github remote repo as my external
backup disk drive is not currently working (!)
Pushing it all up, but still in process of testing!
Completed testGetFutureMeeting() JUnit test. Passed.
Completed testGetFutureMeeting() JUnit test. It passed.
Completed testGetMeeting() JUnit test. It passes. Realised also that my
tests for getFutureMeeting() and getPastMeeting() needed to actually
call those methods in the test in order for the test to be testing
them!! I'd been using entry.getValue() within the for-each loop. All
corrected now.
JUnit failed test prompted me to changed getFutureMeetingList() methods
and getPastMeetingList(). They are now being sorted (hopefully) in a
TreeMap<Calendar,Meeting>. TreeMap sorts by keys, so it should use
natural ordering to give a chronologically ordered map or meetings.
(Still trying to get the JUnit tests to pass though.)
JUnit testGetFutureMeetingListContactImpl() completed and passed.
Re-wrote my clumsy getFutureMeetingList() methods, (especially as I
could not get the Calendar parameter method to pass my JUnit test). 
I'm no longer trying to use SortedMap/TreeMap to order the meetings.
This was a problem because it did not allow meetings scheduled at same
time to be put into the map with Calendar as a key, because keys (rather
than key-value pairs) have no duplicates. It also might have required my
overriding compareTo() method which would have 'broken the interface'.
So I opted for creating another two private methods, one to help pass a
calendar date for the user to receive a list of meetings scheduled on
that day, rather than at a specific time as well. The second method
addSort() sorts the meetings chronologically. It uses generics!!!  so
proud of myself. Also 5-1 Liverpool v Arsenal :-D