public void endElement(String elementName) {

    if (elementName.equals(Tag.listaDP)) {
      bListaDP = false;
      return;
    }

    if (elementName.equals(Tag.threadElement)) {
      bThreadElement = false;
      return;
    }

    if (elementName.equals(Tag.listaStato)) {
      bListaStato = false;
      return;
    }

    if (elementName.equals(Tag.elementoStato)) {
      bElementoStato = false;

      ElementoStato es = new ElementoStato(new Point(0, 0), tipo, nome, true, id, null);
      es.setOnEntryCode(onEntryCode);
      es.setOnExitCode(onExitCode);

      threadElement.getListaStato().addElement(es);
      return;
    }

    // lista Messaggio
    if (elementName.equals(Tag.listaMessaggio)) {
      bListaMessaggio = false;
      return;
    }

    if (elementName.equals(Tag.elementoMessaggio)) {
      ElementoStato from =
          (ElementoStato) threadElement.getListaStato().getElementoById(idStatoFrom);

      ElementoStato to = (ElementoStato) threadElement.getListaStato().getElementoById(idStatoTo);

      bElementoMessaggio = false;
      ElementoMessaggio em =
          new ElementoMessaggio(threadElement, from, to, tipo, nome, rff, true, id, null);
      em.setGuard(guard);
      em.setOperations(operations);
      em.setParameters(parameters);
      em.setSendReceive(modality);

      threadElement.getListaMessaggio().addElement(em);
      guard = "";
      operations = "";
      parameters = new LinkedList();
      return;
    }
    // fine ListaMessaggio

  }
  /**
   * controlla ThreadElement
   *
   * @param eName tag da controllare
   * @param attrs Attributi
   */
  private void createThreadElement(String eName, Attributes attrs) {
    // thread element
    if (bThreadElement) {

      if (bListaStato) {
        if (!bElementoStato) {
          tipo = Integer.parseInt(attrs.getValue(Tag.att_EST_tipo));
          id = util.strToId(attrs.getValue(Tag.att_EST_id));
          nome = attrs.getValue(Tag.att_EST_nome);
          bElementoStato = true;
          return;
        }
        if (eName.equals(Tag.onEntryCode)) {

          bOnEntryCode = true;
          return;
        }
        if (eName.equals(Tag.onExitCode)) {

          bOnExitCode = true;
          return;
        }
      }

      // sto nei messaggi
      if (bListaMessaggio) {
        if (!bElementoMessaggio) {
          // primo elemento messaggio incontrato
          tipo = Integer.parseInt(attrs.getValue(Tag.att_EME_tipo));
          id = util.strToId(attrs.getValue(Tag.att_EME_id));
          nome = attrs.getValue(Tag.att_EME_nome);
          modality = Integer.parseInt(attrs.getValue(Tag.att_EME_sendReceive));
          flussodiretto = util.strToBool(attrs.getValue(Tag.att_EME_flussodiretto));
          rff = Integer.parseInt(attrs.getValue(Tag.att_EME_rff));
          bElementoMessaggio = true;
          return;
        }

        if (eName.equals(Tag.elementoStatoFrom)) {
          idStatoFrom = util.strToId(attrs.getValue(Tag.att_ESFrom_idref));
          return;
        }

        if (eName.equals(Tag.elementoStatoTo)) {
          idStatoTo = util.strToId(attrs.getValue(Tag.att_ESTo_idref));
          return;
        }

        if (eName.equals(Tag.guard)) {
          bGuard = true;
          return;
        }

        if (eName.equals(Tag.parametri)) {
          parameters = new LinkedList();
          bParameters = true;
          return;
        }

        if (eName.equals(Tag.elementoParam)) {
          bElementoParam = true;
          return;
        }

        if (eName.equals(Tag.operations)) {
          bOperations = true;
          return;
        }
      }

      if (eName.equals(Tag.listaStato)) {
        bListaStato = true;
        return;
      }

      if (eName.equals(Tag.listaMessaggio)) {
        bListaMessaggio = true;
        return;
      }
    } // fine thread Element

    // preleva gli attributi di threadElement e lo costruisce
    if (eName.equals(Tag.threadElement)) {
      bThreadElement = true;
      if (plugData != null) {
        listaThread = plugData.getListaDP().getListaThread(idProcessoDP);

        threadElement = new ThreadElement(attrs.getValue(Tag.att_TE_nome), listaThread, plugData);
        threadElement.setNumStato(new Long(attrs.getValue(Tag.att_TE_numStato)).longValue());
        listaThread.add(threadElement);
      }
      return;
    }

    // preleva il riferimento al processo
    if (eName.equals(Tag.listaThread)) {
      idProcessoDP = util.strToId(attrs.getValue(Tag.att_LT_processo));
      return;
    }
  }