# -*- coding: iso-8859-1 -*- # Copyright 20003 - 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) # This file is part of MEDITE. # # MEDITE is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # MEDITE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Foobar; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #---------------------------------------------------------------------------- # Nom: donnees.py # Objet: Classe qui accede au donnees concernant les auteurs #---------------------------------------------------------------------------- from Utile.constantesDonnees import * from Utile.exceptionsDonnees import * from auteur import * from oeuvre import * from arbre import * import shelve class Donnees: # Methode qui renvoie vrai si l'auteur existe dans notre fichier de donnees def __existeAuteurByNom(self, pNom): listeAuteurs = shelve.open(NOSDONNEES) # Donne la liste des auteurs existe = listeAuteurs.has_key(str(pNom)) listeAuteurs.close() return existe # Methode qui retourne l'auteur dont le nom est passe en parametre # Une exception est lancee si l'auteur n'existe pas def getAuteurByNom(self,pNom): ## print 'dans Donnees.getAuteurByNom' if self.__existeAuteurByNom(pNom): listeAuteurs = shelve.open(NOSDONNEES) auteur = listeAuteurs[str(pNom)] listeAuteurs.close() return auteur else : raise AuteurNonTrouve('l\'auteur "'+pNom+'" n\'a pas ete trouve') # Methode pour ajouter un auteur dans notre fichier de donnees # Une exception est lancee si l'auteur est deja enregistre def addAuteur(self, pAuteur): ## print 'dans Donnees.addAuteur' try : auteur = self.getAuteurByNom(str(pAuteur.getNom())) raise AuteurDejaExistant('l\'auteur "'+pAuteur.getNom()+'" est deja existant',auteur) except AuteurNonTrouve : listeAuteurs = shelve.open(NOSDONNEES) listeAuteurs[str(pAuteur.getNom())]= pAuteur listeAuteurs.close() # Methode pour supprimer un auteur de notre fichier de donnees # Une exception est lancee, si l'auteur n'existe pas def deleteAuteur(self, pNom): # print 'dans Donnees.deleteAuteur' try: listeAuteurs = shelve.open(NOSDONNEES) del listeAuteurs[str(pNom)] listeAuteurs.close() except KeyError: raise AuteurNonTrouve('l\'auteur "'+pNom+'" n\'a pas ete trouve') # Methode de mise a jour d'un auteur def updateAuteur(self, pAuteur): ## print 'dans Donnees.updateAuteur' auteur = self.getAuteurByNom(pAuteur.getNom()) auteur.modifyAuteur(pAuteur.getPrenom(), pAuteur.getNaissance(), pAuteur.getDeces()) self.deleteAuteur(pAuteur.getNom()) self.addAuteur(auteur) # Methode qui renvoie la liste des noms des auteurs def getListeNomsAuteurs(self): ## print 'dans Donnees.getListeNomsAuteurs' listeAuteurs = shelve.open(NOSDONNEES) l=listeAuteurs.keys() listeAuteurs.close() return l # Methode qui renvoie la liste des titres des oeuvres d'un auteur def getListeTitresByAuteur(self, pNom): ## print 'dans Donnees.getListeTitresByAuteur' auteur = self.getAuteurByNom(pNom) return auteur.getListeTitresOeuvres() # Methode qui renvoie la liste des noms des dossiers genetiques des oeuvres d'un auteur def getListeDGByAuteur(self, pNom): ## print 'dans Donnees.getListeDGByAuteur' auteur = self.getAuteurByNom(pNom) return auteur.getListeDGOeuvres() # Methode qui ajoute une oeuvre a un auteur # Une exception est lancee si l'oeuvre est deja existante def addOeuvre(self, pNom, pOeuvre): ## print 'dans Donnees.addOeuvre' try : auteur = self.getAuteurByNom(pNom) oeuvre = auteur.getOeuvreByTitre(pOeuvre.getTitre()) # Si l'oeuvre existe, on lance une exception raise OeuvreDejaExistante('l\'oeuvre "'+pOeuvre.getTitre()+'"de "'+pNom+'" est deja enregistree',oeuvre) except OeuvreNonTrouvee: auteur.addOeuvre(pOeuvre) self.deleteAuteur(pNom) self.addAuteur(auteur) # Methode pour supprimer une oeuvre d'un auteur def deleteOeuvre(self, pNom, pTitre): ## print 'dans Donnees.deleteOeuvre' auteur = self.getAuteurByNom(pNom) if auteur.existeOeuvreByTitre(pTitre): auteur.deleteOeuvreByTitre(pTitre) self.deleteAuteur(pNom) self.addAuteur(auteur) # Methode qui met a jour l'oeuvre d'un auteur def updateOeuvre(self, pNom, pOeuvre): ## print 'dans Donnees.updateOeuvre' auteur = self.getAuteurByNom(pNom) #oeuvre = auteur.getOeuvreByTitre(pOeuvre.getTitre()) auteur.deleteOeuvreByTitre(pOeuvre.getTitre()) #oeuvre.modifyOeuvre(pOeuvre.getEdition(), pOeuvre.getPublication()) auteur.addOeuvre(pOeuvre) self.deleteAuteur(pNom) self.addAuteur(auteur) # Methode qui retourne le nom du dossier genetique de l'oeuvre passee en parametre def getNomDG(self, pNom, pTitre): ## print 'dans Donnees.getNomDG' auteur = self.getAuteurByNom(pNom) oeuvre = auteur.getOeuvreByTitre(pTitre) return oeuvre.getNomDG()