/**
   * Incrementa atribut durada de l'activitat i recursivament cap amunt incrementa la del seu pare.
   * Tamb� actualitza les dates finals.
   *
   * @param dataFinal La data final a la que es vol actualitzar
   */
  public final void incrementaDurada(Date dataFinal) {
    // Precondicio
    if (ComprovadorAssercions.getInstance().isPrecondicions()) {
      assert dataFinal != null : "dataInicial es null";
    }
    if (ComprovadorAssercions.getInstance().isInvariants()) {
      this.comprovarInvariants();
    }
    durada += Client.segons_PERIODE_RELLOTGE;
    this.getPeriode().setDataFinal(dataFinal);

    if (this.existsProjectePare()) {
      this.projectePare.incrementaDurada(dataFinal);
    }
    // Trucada recursiva per actualizar la Durada del
    // pare i la data final fins que tota la rama s'hagi actualizat
  }
 /**
  * M�tode recursiu que crea la data inicial si no existeix en l'objecte, i tamb�, si existeix el
  * pare, crida aquest mateix m�tode en ell.
  *
  * @param dataInicial La data incial que es vol posar en el objecte
  */
 public final void updateDataInicial(Date dataInicial) {
   // Precondicio
   if (ComprovadorAssercions.getInstance().isPrecondicions()) {
     assert dataInicial != null : "dataInicial es null";
   }
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
   if (this.getPeriode().getDataInicial() == null) {
     // Quan s' arranqui el primer interval de tots els que
     // hi ha en una tasca introduira la data d'inici
     // unicament una vagada a questa tasca
     this.getPeriode().setDataInicial(dataInicial);
     if (existsProjectePare()) {
       this.getProjectePare().updateDataInicial(dataInicial);
     }
   }
 }
 /**
  * Sobreescritua del m�tode toString per printar les dades de les activitats.
  *
  * @return retorna la informacion necesaria per printeja el objete
  */
 @Override
 public final String toString() {
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
   return this.getIdentificador().getNom()
       + "\t"
       + this.getIdentificador().getId()
       + "\t"
       + this.getPeriode().getDataInicialString()
       + "\t"
       + this.getPeriode().getDataFinalString()
       + "\t"
       + this.getDurada();
 }
  /**
   * Donada una activitat guarda en un fitxer aquest objecte i tamb� tots els seus fills amb els
   * valors actuals.
   *
   * @param activitat activitat arrel
   */
  public void guardarActivitatFitxer(Activitat activitat) {
    // Precondici�
    if (ComprovadorAssercions.getInstance().isPrecondicions()) {
      assert activitat != null : "Activitat nula";
    }

    try {
      FileOutputStream file = new FileOutputStream("test.ser");
      ObjectOutputStream out = new ObjectOutputStream(file);
      out.writeObject(activitat);
      out.close();
      file.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    Log.i("datasaver", "S'ha guardat correctament el fixter test.ser");
  }
  /**
   * Donat un nom d'arxiu retorna l'objecte activitat i els seus fills guardats en el fitxer.
   *
   * @param nom nom del fitxer
   */
  public Activitat llegirActivitatFitxer(String nom) {
    // Precondici�
    if (ComprovadorAssercions.getInstance().isPrecondicions()) {
      assert nom != "" : "Nom de fitxer erroni";
    }

    Activitat activitat = null;
    try {
      FileInputStream file = new FileInputStream(nom);
      ObjectInputStream in = new ObjectInputStream(file);
      activitat = (Activitat) in.readObject();
      in.close();
      file.close();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException classException) {
      classException.printStackTrace();
    }
    Log.i("datasaver", "S'ha llegit del fitxer test.ser correctament.");
    return activitat;
  }
 /**
  * Setter of the property <tt>durada</tt>.
  *
  * @param durada The durada to set.
  * @uml.property name="durada"
  * @param durada
  */
 public final void setDurada(long durada) {
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
   this.durada = durada;
 }
 /**
  * Setter of the property <tt>identificador</tt>.
  *
  * @param identificador The identificador to set.
  * @uml.property name="identificador"
  */
 public final void setIdentificador(Identificador identificador) {
   this.identificador = identificador;
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
 }
 /**
  * Setter of the property <tt>periode</tt>.
  *
  * @param periode The periode to set.
  * @uml.property name="periode"
  */
 public final void setPeriode(Periode periode) {
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
   this.periode = periode;
 }
 /**
  * Getter of the property <tt>periode</tt>.
  *
  * @return Returns the periode.
  * @uml.property name="periode"
  */
 public final Periode getPeriode() {
   if (ComprovadorAssercions.getInstance().isInvariants()) {
     this.comprovarInvariants();
   }
   return periode;
 }