/**
 * Class which holds a list of all the available databanks 
 * @author Kim Paterson
 */
package question;

import java.util.Collection;

public abstract class  QuestionBankDB {
  /**
   * The collection of Question databases
   */
  private Collection<QuestionDB> questionBanks;

  /**
   * Adds the input QuestionDB to the collection
   */
  /*@
    requires
    //
    // There is no Question Database with the same name as the 
    // given input.
    //
    (! (\exists QuestionDB questionDB ;
       questionBanks.contains(questionDB) ;
          questionDB.name.equals(qdb.name)))

          &&
    //
    // The question database is not null
    //
    (qdb != null);

    ensures
    //
    // The given QuestionDB is in the questionBank
    //
    questionBanks.contains(qdb)

    &&
     (\forall QuestionDB  questionDB ;
            questionBanks.contains(questionDB) <==>
                questionDB.equals(qdb) || \old(questionBanks).contains(questionDB));
    @*/
  abstract void add(QuestionDB qdb);


  /**
   * Removes the given QuestionDB from the data
   */
  /*@
    requires
    //
    // The given QuestionDB is in this.questionBanks
    //
    (questionBanks.contains(qdb));
    
    ensures
    //
    // A QuestionDB is in the database are if and only if
    // the are not equal to the input questionDB. 
    //
    (\forall QuestionDB questiondb ; 
       questionBanks.contains(questiondb) <==>
          !questiondb.equals(qdb) && \old(questionBanks).contains(questiondb)) ;

    @*/  
  abstract QuestionDB remove(QuestionDB qdb);
  
  

}