X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_MCLIST.py;h=6c7ab567bcc2e34ca0b9803fe66dd080b28b5b24;hb=9b4a3f9e1b186a5e94945ba5df2c9689505cb1fc;hp=43f267f0bd76138491ba138353fbff53d5d8a876;hpb=fcd054a825fbe171652108194c0204f8e3fd955a;p=tools%2Feficas.git diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py index 43f267f0..6c7ab567 100644 --- a/Noyau/N_MCLIST.py +++ b/Noyau/N_MCLIST.py @@ -1,10 +1,35 @@ +#@ MODIF N_MCLIST Noyau DATE 22/02/2005 AUTEUR DURAND C.DURAND +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM 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. +# +# THIS PROGRAM 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 THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + + """ Ce module contient la classe MCList qui sert à controler la valeur d'une liste de mots-clés facteur par rapport à sa définition portée par un objet de type ENTITE """ +from copy import copy import UserList +import types class MCList(UserList.UserList): """ Liste semblable a la liste Python @@ -44,7 +69,7 @@ class MCList(UserList.UserList): def supprime(self): """ Méthode qui supprime toutes les références arrières afin que l'objet puisse - être correctement détruit par le garbage collector + etre correctement détruit par le garbage collector """ self.parent = None self.etape = None @@ -73,7 +98,7 @@ class MCList(UserList.UserList): if k == name: if v.defaut != None : return v(None,k,None) # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur - #print "Erreur : %s ne peut être un descendant de %s" %(name,self.nom) + #print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom) return None def isBLOC(self): @@ -89,3 +114,94 @@ class MCList(UserList.UserList): """ visitor.visitMCList(self) + def get_sd_utilisees(self): + """ + Retourne la liste des concepts qui sont utilisés à l'intérieur de self + ( comme valorisation d'un MCS) + """ + l=[] + for child in self.data: + l.extend(child.get_sd_utilisees()) + return l + + def get_sd_mcs_utilisees(self): + """ + Retourne la ou les SD utilisée par self sous forme d'un dictionnaire : + . Si aucune sd n'est utilisée, le dictionnaire est vide. + . Sinon, les clés du dictionnaire sont les mots-clés derrière lesquels on + trouve des sd ; la valeur est la liste des sd attenante. + Exemple : { 'VALE_F': [ , + ], + 'MODELE': [] } + """ + dico = {} + for child in self.data: + daux = child.get_sd_mcs_utilisees() + for cle in daux.keys(): + dico[cle] = daux[cle] + return dico + + def get_mcs_with_co(self,co): + """ + Cette methode retourne l'objet MCSIMP fils de self + qui a le concept co comme valeur. + En principe, elle ne doit etre utilisee que pour les concepts + instances de la classe CO + """ + l=[] + for child in self.data: + l.extend(child.get_mcs_with_co(co)) + return l + + def get_all_co(self): + """ + Cette methode retourne tous les concepts instances de CO + """ + l=[] + for child in self.data: + l.extend(child.get_all_co()) + return l + + def copy(self): + """ + Réalise la copie d'une MCList + """ + liste = self.data[0].definition.list_instance() + # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ... + liste.init(self.nom,self.parent) + for objet in self: + new_obj = objet.copy() + # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__ + # dans lequel le parent de l'element d'une MCList est le parent de la MCList + new_obj.reparent(self.parent) + liste.append(new_obj) + return liste + + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.jdc + self.etape=parent.etape + for mcfact in self.data: + mcfact.reparent(parent) + + def get_etape(self): + """ + Retourne l'étape à laquelle appartient self + Un objet de la catégorie etape doit retourner self pour indiquer que + l'étape a été trouvée + XXX double emploi avec self.etape ??? + """ + if self.parent == None: return None + return self.parent.get_etape() + + def __getitem__(self,key): + """ + Dans le cas d un mot cle facteur de longueur 1 on simule un scalaire + """ + if type(key) != types.IntType and len(self) ==1: + return self.data[0].get_mocle(key) + else: + return self.data[key]