Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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