private void chargerPresentation(ZipInputStream projectZip)
      throws ParserConfigurationException, SAXException, IOException, FichierException {
    ZipEntry zipEntry = projectZip.getNextEntry();

    while (zipEntry != null && !this.presentationTrouve) {
      DataInputStream data = new DataInputStream(new BufferedInputStream(projectZip));
      if (zipEntry.getName().equals("Presentation.xml")) {
        this.presentationTrouve = true;
        this.print(Application.getApplication().getTraduction("SAX_initialisation"));
        // preparation du parsing
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxparser = factory.newSAXParser();
        this.print(Application.getApplication().getTraduction("presentation_parsing"));
        PresentationHandler handler = new PresentationHandler();
        saxparser.parse(data, handler);
        this.print(Application.getApplication().getTraduction("Presentation_charge"));
      } else {
        zipEntry = projectZip.getNextEntry();
      }
    }
    projectZip.close();
    if (!this.presentationTrouve) {
      throw new FichierException("Presentation");
    }
  }
  public void chargerPaquetagePresentation() {
    this.print(Application.getApplication().getTraduction("Initialisation_chargement"));

    ZipInputStream zipFile = null;
    try {
      // verifier qu'il n'y ait que le fichier presentation.xml et non les autres
      zipFile = new ZipInputStream(new FileInputStream(new File(this.nomFic)));
      this.verifierPaquetage(zipFile);

      // récupérer un flux vers le fichier zip
      // revenir au début du flux pour un dernier parsing
      zipFile = new ZipInputStream(new FileInputStream(new File(this.nomFic)));
      chargerPresentation(zipFile);

      this.print("------------------------------------");
      this.print(Application.getApplication().getTraduction("paquetage_succes"));

    } catch (FileNotFoundException e) {
      // ne devrait pas arriver
      this.traiterErreur();
      ErrorManager.getInstance().display("ERR", "ERR_Fichier_Non_Trouve");

    } catch (FichierException e) {
      String fic = e.getMessage();
      this.traiterErreur();
      if (!fic.equals("Presentation")) {
        ErrorManager.getInstance().display("ERR", "ERR_" + fic + "_Trouve");
      } else {
        ErrorManager.getInstance().display("ERR", "ERR_" + fic + "_Pas_Trouve");
      }

    } catch (ParserConfigurationException e) {
      e.printStackTrace();
      this.traiterErreur();
      ErrorManager.getInstance().displayError(e.getMessage());

    } catch (SAXException e) {
      e.printStackTrace();
      this.traiterErreur();
      ErrorManager.getInstance().displayError(e.getMessage());
    } catch (IOException e) {
      e.printStackTrace();
      this.traiterErreur();
      ErrorManager.getInstance().displayError(e.getMessage());
    }
  }
  public void setNomFusionAll(String nom) {
    nomFusion = nom;
    for (int i = 0; i < mapFProduits.size(); i++)
      ((FProduit) mapFProduits.get(vecteurLienFusion.get(i)))
          .getModele()
          .getId()
          .setNomElement(nom);

    Application.getApplication().getFenetrePrincipale().getVueDPArbre().invalidate();
  }
  public void recupererListe() {
    Vector listeProdEntree = new Vector();
    Vector listeProdSortie = new Vector();
    Vector listeComposants = new Vector();

    DefinitionProcessus defProc = Application.getApplication().getProjet().getDefProc();
    for (int i = 0; i < defProc.getListeComp().size(); i++) {
      IdObjetModele id = (IdObjetModele) defProc.getListeComp().elementAt(i);
      ComposantProcessus cp = (ComposantProcessus) id.getRef();

      int nbInterfaceNonResolues = 0;

      Vector liens = cp.getLien();
      // récupérer la liste des produits en entrée qui ne sont pas liés
      Vector produitEntree = cp.getProduitEntree();

      for (int j = 0; j < produitEntree.size(); j++) {
        IdObjetModele idproduits = (IdObjetModele) produitEntree.elementAt(j);
        if (!this.estLie(idproduits, liens)) {
          listeProdEntree.addElement(idproduits);
          nbInterfaceNonResolues++;
        }
      }

      // récupérer la liste des produits en sortie qui ne sont pas liés
      Vector produitSortie = cp.getProduitSortie();
      for (int j = 0; j < produitSortie.size(); j++) {
        IdObjetModele idproduits = (IdObjetModele) produitSortie.elementAt(j);
        if (!this.estLie(idproduits, liens)) {
          listeProdSortie.addElement(idproduits);
          nbInterfaceNonResolues++;
        }
      }

      if (nbInterfaceNonResolues != 0) {
        listeComposants.addElement(id);
      }
    }

    if (listeProdEntree.size() != 0 || listeProdSortie.size() != 0 || listeComposants.size() != 0) {
      // afficher le panneau de vérification
      Application.getApplication()
          .getFenetrePrincipale()
          .afficherPanneauVerification(listeProdEntree, listeProdSortie, listeComposants);
    } else {
      Application.getApplication().getFenetrePrincipale().getPanneauVerif().clearErrorArea();
      JOptionPane.showMessageDialog(
          Application.getApplication().getFenetrePrincipale(),
          Application.getApplication().getTraduction("projet_valide"),
          Application.getApplication().getTraduction("Valider"),
          JOptionPane.INFORMATION_MESSAGE);
    }
  }
 /**
  * Procédure de renommage du produit de fusion Appelle une boite de dialogue permettant de choisir
  * le nom
  */
 public void renommer() {
   FenetreRenommerProduitFusion f =
       new FenetreRenommerProduitFusion(Application.getApplication().getFenetrePrincipale(), this);
   f.pack();
   f.show();
 }
  /**
   * Exécuter la commande, ajouter au diagramme le composant et les interfaces en entrée et sortie
   *
   * @return true si la commande s'est bien exécutée
   */
  public boolean executer() {

    FenetreEdition fenetre = Application.getApplication().getProjet().getFenetreEdition();
    // déselectionner tous les éléments
    fenetre.getVueDPGraphe().clearSelection();

    // vérifier que le composant n'est pas déjà présent dans le diagramme
    if (fenetre.getVueDPGraphe().contient(this.composant) != null) {
      ErrorManager.getInstance().display("ERR", "ERR_Composant_Present");
      return false;
    }

    // Construire la vue associéé au composant
    MDComposantProcessus mdcomp = new MDComposantProcessus(((IdObjetModele) this.composant));
    mdcomp.setY((int) this.point.getY());
    mdcomp.setX((int) this.point.getX());

    FComposantProcessus fcomp = new FComposantProcessus(mdcomp);
    fenetre.getVueDPGraphe().ajouterFigure(fcomp);
    fenetre.getVueDPGraphe().selectionneFigure(fcomp);

    // Récupération des produits en entrée du composant
    Vector prod_entree = ((ComposantProcessus) this.composant.getRef()).getProduitEntree();

    for (int i = 0; i < prod_entree.size(); i++) {
      // Création de la vue associée au produit en entrée
      MDProduit mprod = new MDProduit((IdObjetModele) prod_entree.elementAt(i));
      mprod.setX((int) this.point.getX() - 100 - mprod.getLargeur());
      mprod.setY((int) this.point.getY() + (i * (mprod.getHauteur() + 30)));
      FProduit fprod = new FProduit(mprod);
      fenetre.getVueDPGraphe().ajouterFigure(fprod);
      fenetre.getVueDPGraphe().selectionneFigure(fprod);

      // Liaison du produit avec le composant
      CLierInterface c =
          new CLierInterface(
              fenetre.getVueDPGraphe(),
              new FLienInterface(new MDLienDotted()),
              fprod,
              fcomp,
              new Vector());
      c.executer();
    }

    //	Récupération des produits en sortie du composant
    Vector prod_sortie = ((ComposantProcessus) this.composant.getRef()).getProduitSortie();

    for (int i = 0; i < prod_sortie.size(); i++) {
      // Création de la vue associée au produit en sortie
      MDProduit mprod = new MDProduit((IdObjetModele) prod_sortie.elementAt(i));
      mprod.setX((int) this.point.getX() + mdcomp.getLargeur() + 100);
      mprod.setY((int) this.point.getY() + (i * (mprod.getHauteur() + 30)));
      FProduit fprod = new FProduit(mprod);
      fenetre.getVueDPGraphe().ajouterFigure(fprod);
      fenetre.getVueDPGraphe().selectionneFigure(fprod);

      // Liaison du produit avec le composant
      CLierInterface c =
          new CLierInterface(
              fenetre.getVueDPGraphe(),
              new FLienInterface(new MDLienDotted()),
              fcomp,
              fprod,
              new Vector());
      c.executer();
    }
    return (true);
  }