def postProcessReferences(self): """ Examines the list of objects in the model for instances that conform to the OME XML Schema referential object naming conventions and injects properties into referenced objects to provide back links. """ references = dict() for o in self.objects.values(): if o.isSettings and not o.isAbstract: shortName = o.name.replace('Settings', '') ref = '%sRef' % (shortName) delegate = ReferenceDelegate(ref, ref, None) # Override back reference naming and default cardinality. Also # set the namespace to be the same delegate.name = ref delegate.minOccurs = 1 delegate.maxOccurs = 1 delegate.namespace = o.namespace prop = OMEModelProperty.fromReference(delegate, o, self) o.properties[ref] = prop for o in self.objects.values(): for prop in o.properties.values(): if not prop.isReference and (prop.isAttribute or prop.maxOccurs == 1 \ or o.name == 'OME' or o.isAbstractProprietary): continue shortName = config.REF_REGEX.sub('', prop.type) try: if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]: continue except KeyError: pass if shortName not in references: references[shortName] = list() v = {'data_type': o.name, 'property_name': prop.methodName, 'plural': prop.plural, 'maxOccurs': self.calculateMaxOccurs(o, prop), 'minOccurs': self.calculateMinOccurs(o, prop), 'isOrdered': prop.isOrdered, 'isChildOrdered': prop.isChildOrdered, 'isParentOrdered': prop.isParentOrdered, 'isInjected': prop.isInjected} references[shortName].append(v) logging.debug("Model references: %s" % references) for o in self.objects.values(): if o.name not in references: continue for ref in references[o.name]: key = '%s.%s' % (ref['data_type'], ref['property_name']) delegate = ReferenceDelegate( ref['data_type'], ref['data_type'], ref['plural']) delegate.minOccurs = ref['minOccurs'] delegate.maxOccurs = ref['maxOccurs'] prop = OMEModelProperty.fromReference(delegate, o, self) prop.key = key prop.isChildOrdered = ref['isChildOrdered'] prop.isParentOrdered = ref['isParentOrdered'] prop.isOrdered = ref['isOrdered'] prop.isInjected = ref['isInjected'] o.properties[key] = prop
def addBaseAttribute(self, delegate, namespace): prop = OMEModelProperty.fromReference(delegate, self, self.model) prop.hasBaseAttribute = True self.hasPrimitiveBase = True prop.isBackReference = False prop.isAttribute = True self.properties[delegate.name] = prop
def addElement(self, element): """ Adds an OME XML Schema element to the object's data model. """ name = element.getName() self.properties[name] = \ OMEModelProperty.fromElement(element, self, self.model)
def addAttribute(self, attribute): """ Adds an OME XML Schema attribute to the object's data model. """ name = attribute.getName() self.properties[name] = \ OMEModelProperty.fromAttribute(attribute, self, self.model)
def postProcessReferences(self): """ Examines the list of objects in the model for instances that conform to the OME XML Schema referential object naming conventions and injects properties into referenced objects to provide back links. """ references = dict() for o in self.objects.values(): if o.isSettings and not o.isAbstract: shortName = o.name.replace("Settings", "") ref = "%sRef" % (shortName) delegate = ReferenceDelegate(ref, ref, None) # Override back reference naming and default cardinality. Also # set the namespace to be the same delegate.name = ref delegate.minOccurs = 1 delegate.maxOccurs = 1 delegate.namespace = o.namespace prop = OMEModelProperty.fromReference(delegate, o, self) o.properties[ref] = prop for o in self.objects.values(): for prop in o.properties.values(): if self.opts.lang.hasAbstractType(prop.name): abstractName = self.opts.lang.abstractType(prop.name) prop.delegate.name = abstractName prop.delegate.type = abstractName prop.delegate.unmappedCleanName = abstractName prop.delegate.cleanName = abstractName if not prop.isReference and ( prop.isAttribute or prop.maxOccurs == 1 or o.name == "OME" or o.isAbstract ): continue shortName = config.REF_REGEX.sub("", prop.type) try: if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]: continue except KeyError: pass if shortName not in references: references[shortName] = list() v = { "data_type": o.name, "property_name": prop.methodName, "plural": prop.plural, "maxOccurs": self.calculateMaxOccurs(o, prop), "minOccurs": self.calculateMinOccurs(o, prop), "isOrdered": prop.isOrdered, "isChildOrdered": prop.isChildOrdered, "isParentOrdered": prop.isParentOrdered, "isInjected": prop.isInjected, } references[shortName].append(v) logging.debug("Model references: %s" % references) for o in self.objects.values(): if o.name not in references: continue for ref in references[o.name]: key = "%s.%s" % (ref["data_type"], ref["property_name"]) delegate = ReferenceDelegate(ref["data_type"], ref["data_type"], ref["plural"]) delegate.minOccurs = ref["minOccurs"] delegate.maxOccurs = ref["maxOccurs"] prop = OMEModelProperty.fromReference(delegate, o, self) prop.key = key prop.isChildOrdered = ref["isChildOrdered"] prop.isParentOrdered = ref["isParentOrdered"] prop.isOrdered = ref["isOrdered"] prop.isInjected = ref["isInjected"] o.properties[key] = prop
def postProcessReferences(self): """ Examines the list of objects in the model for instances that conform to the OME XML Schema referential object naming conventions and injects properties into referenced objects to provide back links. """ references = dict() for o in self.objects.values(): if o.isSettings and not o.isAbstract: shortName = o.name.replace('Settings', '') ref = '%sRef' % (shortName) delegate = ReferenceDelegate(ref, ref, None) # Override back reference naming and default cardinality. Also # set the namespace to be the same delegate.name = ref delegate.minOccurs = 1 delegate.maxOccurs = 1 delegate.namespace = o.namespace prop = OMEModelProperty.fromReference(delegate, o, self) o.properties[ref] = prop for o in self.objects.values(): for prop in o.properties.values(): if self.opts.lang.hasAbstractType(prop.name): abstractName = self.opts.lang.abstractType(prop.name) prop.delegate.name = abstractName prop.delegate.type = abstractName prop.delegate.unmappedCleanName = abstractName prop.delegate.cleanName = abstractName if not prop.isReference and (prop.isAttribute or prop.maxOccurs == 1 or o.name == 'OME' or o.isAbstract): continue shortName = config.REF_REGEX.sub('', prop.type) try: if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]: continue except KeyError: pass if shortName not in references: references[shortName] = list() v = { 'data_type': o.name, 'property_name': prop.methodName, 'plural': prop.plural, 'maxOccurs': self.calculateMaxOccurs(o, prop), 'minOccurs': self.calculateMinOccurs(o, prop), 'isOrdered': prop.isOrdered, 'isChildOrdered': prop.isChildOrdered, 'isParentOrdered': prop.isParentOrdered, 'isInjected': prop.isInjected } references[shortName].append(v) logging.debug("Model references: %s" % references) for o in self.objects.values(): if o.name not in references: continue for ref in references[o.name]: key = '%s.%s' % (ref['data_type'], ref['property_name']) delegate = ReferenceDelegate(ref['data_type'], ref['data_type'], ref['plural']) delegate.minOccurs = ref['minOccurs'] delegate.maxOccurs = ref['maxOccurs'] prop = OMEModelProperty.fromReference(delegate, o, self) prop.key = key prop.isChildOrdered = ref['isChildOrdered'] prop.isParentOrdered = ref['isParentOrdered'] prop.isOrdered = ref['isOrdered'] prop.isInjected = ref['isInjected'] o.properties[key] = prop