if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb)
print ('----------- fin delObjPyxb', self.nom)
- def addObjPyxb(self,indiceDansLeContenu):
+ def addObjPyxbV0(self,indiceDansLeContenu):
if not self.cata.modeleMetier : return
#print ('**********************************************')
#print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDansLeContenu)
#print (self.nom, ' a pour gp ', grandPere)
if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb)
+ def addObjPyxb(self,indiceDansLeContenu):
+ if not self.cata.modeleMetier : return
+ print ('**********************************************')
+ print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDansLeContenu)
+ # adherence Accas sur le parent
+ parent=self.parent
+ while (parent.isBLOC()): parent=parent.parent
+ self.perePyxb=parent
+
+ #EF: grandPere et ancienObjPerePyxb sont devenus inutiles
+ # grandPere=self.perePyxb.perePyxb
+ # ancienObjPerePyxb=self.perePyxb.objPyxb
+ # print ('dans le perePyxb', self.perePyxb.nom)
+ # print ('j ai pour orderedContent', self.objPyxb.orderedContent())
+
+ self.objPyxb.objAccas=self
+
+ # listeArg=[]
+ # indice=0
+ # # a tester
+ # # a affiner si on ajoute en fin
+ # #print (indiceDansLeContenu)
+ # #print (self.perePyxb.objPyxb.orderedContent())
+ # for i in self.perePyxb.objPyxb.orderedContent():
+ # if indice==indiceDansLeContenu : listeArg.append(self.objPyxb)
+ # else : listeArg.append(i._Content__value)
+ # indice=indice+1
+ # #print ('avec', listeArg)
+ # if indiceDansLeContenu == len(self.perePyxb.objPyxb.orderedContent()):
+ # listeArg.append(self.objPyxb)
+ print('self.cata.modeleMetier.Namespace : ',self.cata.modeleMetier.Namespace)
+ print('self.nom : ',self.nom)
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ #perePyxb est en fait l'objet ACAS père de notre objet PyxB (Il peut être éloigné à cause des BLOCS)
+ self.perePyxb.objPyxb.orderedContent().insert(indiceDansLeContenu,elt)
+ setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
+ #print ('avec', listeArg)
+
+ #EF: J'imagine que la ligne suivante sert a demander au père de se reconstruire avec la liste des args
+ #nvlObjPerePyxb=self.perePyxb.maClasseModeleMetier(*listeArg)
+ #self.perePyxb.objPyxb=nvlObjPerePyxb
+ #self.perePyxb.objPyxb.objAccas=ancienObjPerePyxb.objAccas
+ #print (self.nom, ' a pour gp ', grandPere)
+ #if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb)
+
def reconstruitAvecNvlObj(self, ancienObj,nvlObj):
if not self.cata.modeleMetier : return
print ('reconstruitAvecNvlObj pour', self, self.nom, ancienObj,nvlObj)
print ('addObjPyxb : ajout de ', self.nom, 'en ', indiceDsLeContenu)
# adherence Accas sur le parent
- parent=self.parent
- while (parent.isBLOC() ): parent=parent.parent
- self.perePyxb=parent
+ # parent=self.parent
+ # while (parent.isBLOC() ): parent=parent.parent
+ # self.perePyxb=parent
#print ('dans le perePyxb', self.perePyxb.nom)
#print (dir(self.perePyxb))
self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
#nvlObj=self.maClasseModeleMetier()
#nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
- if self.valeur != None : nvlObj=self.maClasseModeleMetier(self.valeur)
- else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False);
+ if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
+ else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False);
#print (self.perePyxb.objPyxb.orderedContent())
#for i in (self.perePyxb.objPyxb.orderedContent()): print i._Content__value;print (type(i._Content__value))
- setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
- tampon=self.perePyxb.objPyxb.orderedContent()[-1]
- self.objPyxb = nvlObj
- self.objPyxb.objAccas=self
- indexOC=-1
- longueur=len(self.perePyxb.objPyxb.orderedContent())
- #print (self.perePyxb.objPyxb.orderedContent())
- #print (self.perePyxb.nom)
- for i in reversed(range(longueur)):
- self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
- if i == indiceDsLeContenu + 1 : break
- self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
+
+ X_OBJECT.addObjPyxb(self, indiceDsLeContenu)
+
+ # setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ # tampon=self.perePyxb.objPyxb.orderedContent()[-1]
+ # self.objPyxb = nvlObj
+ # self.objPyxb.objAccas=self
+ # indexOC=-1
+ # longueur=len(self.perePyxb.objPyxb.orderedContent())
+ # #print (self.perePyxb.objPyxb.orderedContent())
+ # #print (self.perePyxb.nom)
+ # for i in reversed(range(longueur)):
+ # self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
+ # if i == indiceDsLeContenu + 1 : break
+ # self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
rangDeLObjet=indiceDsLeContenu
for obj in self.mcListe:
obj.addObjPyxb( rangDeLObjet)
- rangDeLObjet=rangDeLObjet+1
+ rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
class X_MCLIST (X_MCCOMPO):
# --------------------------
- def buildObjPyxb(self,mc_list):
+ def buildObjPyxb(self,mc_list):
#print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
pass
-
- def addObjPyxb(self,indiceDansLeContenu):
+
+ def addObjPyxb(self,indiceDansLeContenu):
#traceback.print_stack()
print ('X_MCLIST addObjPyxb ne fait rien', self.nom)
pass
class X_MCFACT (X_MCCOMPO):
# -------------------------
# on gere au niveau du MCCOMPO
- pass
+ def addObjPyxb(self,indiceDansLeContenu):
+ if not self.cata.modeleMetier : return
+ print ('**********************************************')
+ print ('_____________ addObjPyxb ds X_MCLIST', self.nom, indiceDansLeContenu)
+ # adherence Accas sur le parent
+ #perePyxb est en fait l'objet ACCAS père de notre objet PyxB (Il peut être éloigné à cause des BLOCS)
+ parentNonBloc=self.parent
+ while (parentNonBloc.isBLOC()): parentNonBloc=parentNonBloc.parent
+ self.perePyxb=parentNonBloc
+ objPerePyxb=self.perePyxb.objPyxb
+
+ self.objPyxb.objAccas=self
+
+ # print('self.cata.modeleMetier.Namespace : ',self.cata.modeleMetier.Namespace)
+ # print('self.nom : ',self.nom)
+
+ listeObjets=self.parent.getChild(self.nom,restreint='oui')
+ nbObjsPresents=len(listeObjets)
+ # nbObjsPresents == 1 nous indique qu'il n'y avait pas d'objet avec notre 'nom' dans le père
+
+ #Il y a une symetrie entre le contenu de l'orderedContent pour l'objet plural et la liste maintenue pas pyxb pour l'attribut et la mcListe ACCAS
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=objPerePyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ objPerePyxb.orderedContent().insert(indiceDansLeContenu,elt)
+
+ if (elt.elementDeclaration.isPlural()):
+ if (nbObjsPresents == 1):
+ #vérifier que lorsque l'élément est optionnel il existe une liste vide ??
+ # setattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb,)
+ ouAjouter=0
+ else:
+ ouAjouter=listeObjets.getIndex(self)
+ liste=getattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key)
+ liste.insert(ouAjouter,self.objPyxb)
+ else:
+ setattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
+
+
class X_JDC (X_MCCOMPO):
# ---------------------
print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
if not self.cata.modeleMetier : return
+ import traceback
+ traceback.print_stack()
self.objPyxb.append(etape.objPyxb)
etape.perePyxb=self
#print (self.objPyxb.orderedContent())
#except pyxb.ValidationError as e:
# print(e.details())
- def toXml(self):
+ def toXml(self,fichier=None):
if not self.cata.modeleMetier : return
print ('***************',self.objPyxb,'***************',)
print ('***************',self,'***************',)