Beispiel #1
0
 def toXML(self, package, filters, ignore):
     lines=[]
     lines.extend(self.beginPackage(package.name))
     if len(package.elements)>0:
         lines.append(self.indent("<ELEMENTS>",1))
         for elem in package.elements:
             elemRef = elem.ref
             ignoreElem=True if (isinstance(ignore, collections.abc.Iterable) and elemRef in ignore) else False
             #if SWC was ignored by user, also ignore its InternalBehavior and SwcImplementation elements in case they are in the same package
             if not ignoreElem and isinstance(elem, autosar.behavior.InternalBehavior):
                 if (isinstance(ignore, collections.abc.Iterable) and elem.componentRef in ignore):
                     ignoreElem = True
             if not ignoreElem and isinstance(elem, autosar.component.SwcImplementation):
                 behavior = package.rootWS().find(elem.behaviorRef)
                 if behavior is not None:
                     if (isinstance(ignore, collections.abc.Iterable) and behavior.componentRef in ignore):
                         ignoreElem = True
             if not ignoreElem and applyFilter(elemRef, filters):
                 elementName = elem.__class__.__name__
                 elementWriter = self.xmlSwitcher.get(elementName)
                 if elementWriter is not None:
                     result = elementWriter.writeElementXML(elem)
                     if result is None:
                         print("[PackageWriter] No return value: %s"%elementName)
                         continue
                     else:
                         lines.extend(self.indent(result,2))
                 else:
                     print("[PackageWriter] Unhandled: %s"%elementName)
         lines.append(self.indent("</ELEMENTS>",1))
     else:
         if self.version<4.0:
             lines.append(self.indent("<ELEMENTS/>",1))
     if len(package.subPackages)>0:
         numPackets = 0
         if self.version >= 3.0 and self.version < 4.0:
             for subPackage in package.subPackages:
                 if applyFilter(subPackage.ref, filters):
                     if numPackets == 0:
                         lines.append(self.indent("<SUB-PACKAGES>",1))
                     lines.extend(self.indent(self.toXML(subPackage, filters, ignore),2))
                     numPackets += 1
             if numPackets > 0:
                 lines.append(self.indent("</SUB-PACKAGES>",1))
         elif self.version >= 4.0:
             for subPackage in package.subPackages:
                 if applyFilter(subPackage.ref, filters):
                     if numPackets == 0:
                         lines.append(self.indent("<AR-PACKAGES>",1))
                     lines.extend(self.indent(self.toXML(subPackage, filters, ignore),2))
                     numPackets += 1
             if numPackets > 0:
                 lines.append(self.indent("</AR-PACKAGES>",1))
     lines.extend(self.endPackage())
     return lines
Beispiel #2
0
    def toCode(self, package, filters, ignore, localvars, isTemplate):
        lines = []
        if not isTemplate:
            if package.role is not None:
                lines.append('package=ws.createPackage("%s", role="%s")' %
                             (package.name, package.role))
            else:
                lines.append('package=ws.createPackage("%s")' % (package.name))
            localvars['package'] = package
            for subPackage in package.subPackages:
                if subPackage.role is not None:
                    lines.append('package.createSubPackage("%s", role="%s")' %
                                 (subPackage.name, subPackage.role))
                else:
                    lines.append('package.createSubPackage("%s")' %
                                 (subPackage.name))
        for elem in package.elements:
            elemRef = elem.ref
            ignoreElem = True if (isinstance(ignore, str)
                                  and ignore == elemRef) or (
                                      isinstance(ignore, collections.Iterable)
                                      and elemRef in ignore) else False

            #if SWC was ignored by user, also ignore its InternalBehavior and SwcImplementation elements in case they are in the same package
            if not ignoreElem and isinstance(
                    elem, autosar.behavior.InternalBehavior):
                if (isinstance(ignore, str) and ignore == elem.componentRef
                    ) or (isinstance(ignore, collections.Iterable)
                          and elem.componentRef in ignore):
                    ignoreElem = True
            if not ignoreElem and isinstance(
                    elem, autosar.component.SwcImplementation):
                behavior = package.rootWS().find(elem.behaviorRef)
                if behavior is not None:
                    if (isinstance(ignore, str)
                            and ignore == behavior.componentRef) or (
                                isinstance(ignore, collections.Iterable)
                                and behavior.componentRef in ignore):
                        ignoreElem = True
            if not ignoreElem and applyFilter(elemRef, filters):
                elementName = elem.__class__.__name__
                elementWriter = self.codeSwitcher.get(elementName)
                if elementWriter is not None:
                    result = elementWriter.writeElementCode(elem, localvars)
                    if result is None:
                        print("[PackageWriter] No return value: %s" %
                              elementName)
                        continue
                    else:
                        lines.extend(result)
                else:
                    print("[PackageWriter] Unhandled: %s" % elementName)
            else:
                pass
        return lines
 def toXML(self, ws, filters, ignore):
     lines=self.beginFile()
     result='\n'.join(lines)+'\n'
     for package in ws.packages:
         if applyFilter(package.ref, filters):
             lines=self.packageWriter.toXML(package, filters, ignore)
             if len(lines)>0:
                 lines=self.indent(lines,2)
                 result+='\n'.join(lines)+'\n'
     lines=self.endFile()
     return result+'\n'.join(lines)+'\n'
Beispiel #4
0
 def toXML(self, ws, filters, ignore):
    lines=self.beginFile()
    result='\n'.join(lines)+'\n'
    for package in ws.packages:
       if applyFilter(package.ref, filters):
          lines=self.packageWriter.toXML(package, filters, ignore)
          if len(lines)>0:
             lines=self.indent(lines,2)
             result+='\n'.join(lines)+'\n'
    lines=self.endFile()
    return result+'\n'.join(lines)+'\n'
Beispiel #5
0
    def toCode(self,
               ws,
               filters=None,
               ignore=None,
               head=None,
               tail=None,
               isModule=False,
               isTemplate=False,
               indent=3):
        localvars = collections.OrderedDict()
        localvars['ws'] = ws
        indentStr = indent * ' '
        if isModule == False:
            #head
            if head is None:
                lines = ['import autosar']
                if not isTemplate:
                    lines.append('ws=autosar.workspace()')
                result = '\n'.join(lines) + '\n\n'
            else:
                if isinstance(head, list):
                    head = '\n'.join(head)
                assert (isinstance(head, str))
                result = head + '\n\n'

            #body
            for package in ws.packages:
                if applyFilter(package.ref, filters):
                    lines = self.packageWriter.toCode(package, filters, ignore,
                                                      localvars, isTemplate)
                    if len(lines) > 0:
                        result += '\n'.join(lines) + '\n'
            #tail
            if not isTemplate:
                if tail is None:
                    result += '\n' + 'print(ws.toXML())\n'
                else:
                    if isinstance(tail, list):
                        tail = '\n'.join(tail)
                    assert (isinstance(tail, str))
                    result += '\n' + tail
            return result
        else:
            if head is None:
                head = [['import autosar'], ['ws = autosar.workspace()']]
            if len(head) != 2:
                raise ValueError(
                    'when module=True then head must have exactly two elements (list of lists)'
                )
            if isinstance(head[0], collections.Iterable):
                head[0] = '\n'.join(head[0])
            assert (isinstance(head[0], str))
            result = head[0] + '\n\n'
            #body
            result += 'def apply(ws):\n'
            for package in ws.packages:
                if applyFilter(package.ref, filters):
                    lines = self.packageWriter.toCode(package, filters, ignore,
                                                      localvars, isTemplate)
                    if len(lines) > 0:
                        lines = [indentStr + x for x in lines]
                        result += '\n'.join(lines) + '\n'

            #tail
            result += "\nif __name__=='__main__':\n"
            if isinstance(head[1], collections.Iterable):
                head[1] = '\n'.join([indentStr + x for x in head[1]])
            else:
                head[1] = '\n'.join(
                    [indentStr + x for x in head[1].split('\n')])
            assert (isinstance(head[1], str))
            result += head[1] + '\n'
            result += indentStr + 'apply(ws)\n'
            if not isTemplate:
                if tail is None:
                    result += indentStr + 'print(ws.toXML())\n'
                else:
                    if isinstance(tail, list):
                        tail = '\n'.join([indentStr + x for x in tail])
                    else:
                        tail = '\n'.join(
                            [indentStr + x for x in tail.split('\n')])
                    assert (isinstance(tail, str))
                    result += tail + '\n'
            return result
Beispiel #6
0
 def toCode(self, ws, filters=None, ignore=None, head=None, tail=None, module=False, indent=3):
    localvars = collections.OrderedDict()
    localvars['ws']=ws
    indentStr=indent*' '
    if module == False:
       #head
       if head is None:
          lines=['import autosar', 'ws=autosar.workspace()']
          result='\n'.join(lines)+'\n\n'
       else:            
          if isinstance(head,list):
             head = '\n'.join(head)
          assert(isinstance(head,str))
          result = head+'\n\n'      
       
       
       #body
       for package in ws.packages:
          if applyFilter(package.ref, filters):
             lines=self.packageWriter.toCode(package, filters, ignore, localvars)
             if len(lines)>0:
                result+='\n'.join(lines)+'\n'
       #tail
       if tail is None:
          result+='\n'+'print(ws.toXML())\n'
       else:
          if isinstance(tail,list):
             tail = '\n'.join(tail)
          assert(isinstance(tail,str))
          result+='\n'+tail
       return result
    else:
       if head is None:
          head=[
             ['import autosar'],
             ['ws = autosar.workspace()']
          ]
       if len(head)!=2:
          raise ValueError('when module=True then head must have exactly two elements (list of lists)')
       if isinstance(head[0], collections.Iterable):
          head[0] = '\n'.join(head[0])
       assert(isinstance(head[0],str))
       result = head[0]+'\n\n'
       #body
       result+='def apply(ws):\n'
       for package in ws.packages:
          if applyFilter(package.ref, filters):
             lines=self.packageWriter.toCode(package, filters, ignore, localvars)
             if len(lines)>0:
                lines=[indentStr+x for x in lines]
                result+='\n'.join(lines)+'\n'
       
       #tail
       result+="\nif __name__=='__main__':\n"
       if isinstance(head[1], collections.Iterable):
          head[1] = '\n'.join([indentStr+x for x in head[1]])
       else:
          head[1] = '\n'.join([indentStr+x for x in head[1].split('\n')])
       assert(isinstance(head[1],str))
       result+=head[1]+'\n'
       result+=indentStr+'apply(ws)\n'
       if tail is None:
          result+=indentStr+'print(ws.toXML())\n'
       else:
          if isinstance(tail,list):
             tail = '\n'.join([indentStr+x for x in tail])
          else:
             tail = '\n'.join([indentStr+x for x in tail.split('\n')])
          assert(isinstance(tail,str))
          result+=tail+'\n'
       return result