plcopen/plcopen.py
changeset 1852 70c1cc354a8f
parent 1850 614396cbffbf
child 1872 866fb3ab8778
equal deleted inserted replaced
1851:1b8b5324506c 1852:70c1cc354a8f
   480 
   480 
   481     def removedataType(self, name):
   481     def removedataType(self, name):
   482         self.types.removedataTypeElement(name)
   482         self.types.removedataTypeElement(name)
   483     setattr(cls, "removedataType", removedataType)
   483     setattr(cls, "removedataType", removedataType)
   484 
   484 
   485     def getpous(self, exclude=None, filter=[]):
   485     def getpous(self, exclude=None, filter=None):
       
   486         filter = [] if filter is None else filter
   486         return self.xpath(
   487         return self.xpath(
   487             "ppx:types/ppx:pous/ppx:pou%s%s" %
   488             "ppx:types/ppx:pous/ppx:pou%s%s" %
   488             (("[@name!='%s']" % exclude) if exclude is not None else '',
   489             (("[@name!='%s']" % exclude) if exclude is not None else '',
   489              ("[%s]" % " or ".join(
   490              ("[%s]" % " or ".join(
   490                  map(lambda x: "@pouType='%s'" % x, filter)))
   491                  map(lambda x: "@pouType='%s'" % x, filter)))
   613 
   614 
   614     def GetEnumeratedDataTypeValues(self):
   615     def GetEnumeratedDataTypeValues(self):
   615         return [value.getname() for value in enumerated_values_xpath(self)]
   616         return [value.getname() for value in enumerated_values_xpath(self)]
   616     setattr(cls, "GetEnumeratedDataTypeValues", GetEnumeratedDataTypeValues)
   617     setattr(cls, "GetEnumeratedDataTypeValues", GetEnumeratedDataTypeValues)
   617 
   618 
   618     def Search(self, criteria, parent_infos=[]):
   619     def Search(self, criteria, parent_infos=None):
       
   620         parent_infos = [] if parent_infos is None else parent_infos
   619         result = self.types.Search(criteria, parent_infos)
   621         result = self.types.Search(criteria, parent_infos)
   620         for configuration in self.instances.configurations.getconfiguration():
   622         for configuration in self.instances.configurations.getconfiguration():
   621             result.extend(configuration.Search(criteria, parent_infos))
   623             result.extend(configuration.Search(criteria, parent_infos))
   622         return result
   624         return result
   623     setattr(cls, "Search", Search)
   625     setattr(cls, "Search", Search)
   754                 result = address_model.match(var_address)
   756                 result = address_model.match(var_address)
   755                 if result is not None:
   757                 if result is not None:
   756                     variables.remove(variables[i])
   758                     variables.remove(variables[i])
   757 
   759 
   758 
   760 
   759 def _SearchInConfigurationResource(self, criteria, parent_infos=[]):
   761 def _SearchInConfigurationResource(self, criteria, parent_infos=None):
       
   762     parent_infos = [] if parent_infos is None else parent_infos
   760     search_result = _Search([("name", self.getname())], criteria, parent_infos)
   763     search_result = _Search([("name", self.getname())], criteria, parent_infos)
   761     var_number = 0
   764     var_number = 0
   762     for varlist in self.getglobalVars():
   765     for varlist in self.getglobalVars():
   763         variable_type = searchResultVarTypes.get("globalVars", "var_local")
   766         variable_type = searchResultVarTypes.get("globalVars", "var_local")
   764         variables = varlist.getvariable()
   767         variables = varlist.getvariable()
   808     setattr(cls, "updateElementAddress", updateElementAddress)
   811     setattr(cls, "updateElementAddress", updateElementAddress)
   809 
   812 
   810     setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress)
   813     setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress)
   811     setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter)
   814     setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter)
   812 
   815 
   813     def Search(self, criteria, parent_infos=[]):
   816     def Search(self, criteria, parent_infos=None):
       
   817         parent_infos = [] if parent_infos is None else parent_infos
   814         search_result = []
   818         search_result = []
   815         parent_infos = parent_infos + ["C::%s" % self.getname()]
   819         parent_infos = parent_infos + ["C::%s" % self.getname()]
   816         filter = criteria["filter"]
   820         filter = criteria["filter"]
   817         if filter == "all" or "configuration" in filter:
   821         if filter == "all" or "configuration" in filter:
   818             search_result = _SearchInConfigurationResource(self, criteria, parent_infos)
   822             search_result = _SearchInConfigurationResource(self, criteria, parent_infos)
   846     setattr(cls, "updateElementAddress", updateElementAddress)
   850     setattr(cls, "updateElementAddress", updateElementAddress)
   847 
   851 
   848     setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress)
   852     setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress)
   849     setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter)
   853     setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter)
   850 
   854 
   851     def Search(self, criteria, parent_infos=[]):
   855     def Search(self, criteria, parent_infos=None):
       
   856         parent_infos = [] if parent_infos is None else parent_infos
   852         parent_infos = parent_infos[:-1] + ["R::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())]
   857         parent_infos = parent_infos[:-1] + ["R::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())]
   853         search_result = _SearchInConfigurationResource(self, criteria, parent_infos)
   858         search_result = _SearchInConfigurationResource(self, criteria, parent_infos)
   854         task_number = 0
   859         task_number = 0
   855         instance_number = 0
   860         instance_number = 0
   856         for task in self.gettask():
   861         for task in self.gettask():
   894             self.single = update_address(self.single, address_model, new_leading)
   899             self.single = update_address(self.single, address_model, new_leading)
   895         if self.interval is not None:
   900         if self.interval is not None:
   896             self.interval = update_address(self.interval, address_model, new_leading)
   901             self.interval = update_address(self.interval, address_model, new_leading)
   897     setattr(cls, "updateElementAddress", updateElementAddress)
   902     setattr(cls, "updateElementAddress", updateElementAddress)
   898 
   903 
   899     def Search(self, criteria, parent_infos=[]):
   904     def Search(self, criteria, parent_infos=None):
       
   905         parent_infos = [] if parent_infos is None else parent_infos
   900         return _Search([("single", self.getsingle()),
   906         return _Search([("single", self.getsingle()),
   901                         ("interval", self.getinterval()),
   907                         ("interval", self.getinterval()),
   902                         ("priority", str(self.getpriority()))],
   908                         ("priority", str(self.getpriority()))],
   903                        criteria, parent_infos)
   909                        criteria, parent_infos)
   904     setattr(cls, "Search", Search)
   910     setattr(cls, "Search", Search)
   916     def updateElementName(self, old_name, new_name):
   922     def updateElementName(self, old_name, new_name):
   917         if TextMatched(self.typeName, old_name):
   923         if TextMatched(self.typeName, old_name):
   918             self.typeName = new_name
   924             self.typeName = new_name
   919     setattr(cls, "updateElementName", updateElementName)
   925     setattr(cls, "updateElementName", updateElementName)
   920 
   926 
   921     def Search(self, criteria, parent_infos=[]):
   927     def Search(self, criteria, parent_infos=None):
       
   928         parent_infos = [] if parent_infos is None else parent_infos
   922         return _Search([("name", self.getname()),
   929         return _Search([("name", self.getname()),
   923                         ("type", self.gettypeName())],
   930                         ("type", self.gettypeName())],
   924                        criteria, parent_infos)
   931                        criteria, parent_infos)
   925     setattr(cls, "Search", Search)
   932     setattr(cls, "Search", Search)
   926 
   933 
   959             return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name)
   966             return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name)
   960         # Variable type is an elementary type
   967         # Variable type is an elementary type
   961         return vartype_content_name
   968         return vartype_content_name
   962     setattr(cls, "gettypeAsText", gettypeAsText)
   969     setattr(cls, "gettypeAsText", gettypeAsText)
   963 
   970 
   964     def Search(self, criteria, parent_infos=[]):
   971     def Search(self, criteria, parent_infos=None):
       
   972         parent_infos = [] if parent_infos is None else parent_infos
   965         search_result = _Search([("name", self.getname()),
   973         search_result = _Search([("name", self.getname()),
   966                                  ("type", self.gettypeAsText()),
   974                                  ("type", self.gettypeAsText()),
   967                                  ("location", self.getaddress())],
   975                                  ("location", self.getaddress())],
   968                                 criteria, parent_infos)
   976                                 criteria, parent_infos)
   969         initial = self.getinitialValue()
   977         initial = self.getinitialValue()
  1056                 break
  1064                 break
  1057         if not found:
  1065         if not found:
  1058             raise ValueError(_("\"%s\" POU doesn't exist !!!") % name)
  1066             raise ValueError(_("\"%s\" POU doesn't exist !!!") % name)
  1059     setattr(cls, "removepouElement", removepouElement)
  1067     setattr(cls, "removepouElement", removepouElement)
  1060 
  1068 
  1061     def Search(self, criteria, parent_infos=[]):
  1069     def Search(self, criteria, parent_infos=None):
       
  1070         parent_infos = [] if parent_infos is None else parent_infos
  1062         search_result = []
  1071         search_result = []
  1063         for datatype in self.dataTypes.getdataType():
  1072         for datatype in self.dataTypes.getdataType():
  1064             search_result.extend(datatype.Search(criteria, parent_infos))
  1073             search_result.extend(datatype.Search(criteria, parent_infos))
  1065         for pou in self.pous.getpou():
  1074         for pou in self.pous.getpou():
  1066             search_result.extend(pou.Search(criteria, parent_infos))
  1075             search_result.extend(pou.Search(criteria, parent_infos))
  1081 
  1090 
  1082 
  1091 
  1083 def _updateDataTypeDataTypesClass(cls):
  1092 def _updateDataTypeDataTypesClass(cls):
  1084     setattr(cls, "updateElementName", _updateBaseTypeElementName)
  1093     setattr(cls, "updateElementName", _updateBaseTypeElementName)
  1085 
  1094 
  1086     def Search(self, criteria, parent_infos=[]):
  1095     def Search(self, criteria, parent_infos=None):
       
  1096         parent_infos = [] if parent_infos is None else parent_infos
  1087         search_result = []
  1097         search_result = []
  1088         filter = criteria["filter"]
  1098         filter = criteria["filter"]
  1089         if filter == "all" or "datatype" in filter:
  1099         if filter == "all" or "datatype" in filter:
  1090             parent_infos = parent_infos + ["D::%s" % self.getname()]
  1100             parent_infos = parent_infos + ["D::%s" % self.getname()]
  1091             search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
  1101             search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
  1112         elif content_name == "struct":
  1122         elif content_name == "struct":
  1113             for element in self.content.getvariable():
  1123             for element in self.content.getvariable():
  1114                 element.type.updateElementName(old_name, new_name)
  1124                 element.type.updateElementName(old_name, new_name)
  1115     setattr(cls, "updateElementName", updateElementName)
  1125     setattr(cls, "updateElementName", updateElementName)
  1116 
  1126 
  1117     def Search(self, criteria, parent_infos=[]):
  1127     def Search(self, criteria, parent_infos=None):
       
  1128         parent_infos = [] if parent_infos is None else parent_infos
  1118         search_result = []
  1129         search_result = []
  1119         content_name = self.content.getLocalTag()
  1130         content_name = self.content.getLocalTag()
  1120         if content_name in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]:
  1131         if content_name in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]:
  1121             search_result.extend(self.content.Search(criteria, parent_infos + ["base"]))
  1132             search_result.extend(self.content.Search(criteria, parent_infos + ["base"]))
  1122         elif content_name == "struct":
  1133         elif content_name == "struct":
  1142     def updateElementName(self, old_name, new_name):
  1153     def updateElementName(self, old_name, new_name):
  1143         if TextMatched(self.name, old_name):
  1154         if TextMatched(self.name, old_name):
  1144             self.name = new_name
  1155             self.name = new_name
  1145     setattr(cls, "updateElementName", updateElementName)
  1156     setattr(cls, "updateElementName", updateElementName)
  1146 
  1157 
  1147     def Search(self, criteria, parent_infos=[]):
  1158     def Search(self, criteria, parent_infos=None):
       
  1159         parent_infos = [] if parent_infos is None else parent_infos
  1148         return [(tuple(parent_infos),) + result for result in TestTextElement(self.name, criteria)]
  1160         return [(tuple(parent_infos),) + result for result in TestTextElement(self.name, criteria)]
  1149     setattr(cls, "Search", Search)
  1161     setattr(cls, "Search", Search)
  1150 
  1162 
  1151 
  1163 
  1152 cls = PLCOpenParser.GetElementClass("derived", "dataType")
  1164 cls = PLCOpenParser.GetElementClass("derived", "dataType")
  1158 
  1170 
  1159 
  1171 
  1160 def _updateArrayDataTypeClass(cls):
  1172 def _updateArrayDataTypeClass(cls):
  1161     setattr(cls, "updateElementName", _updateBaseTypeElementName)
  1173     setattr(cls, "updateElementName", _updateBaseTypeElementName)
  1162 
  1174 
  1163     def Search(self, criteria, parent_infos=[]):
  1175     def Search(self, criteria, parent_infos=None):
       
  1176         parent_infos = [] if parent_infos is None else parent_infos
  1164         search_result = self.baseType.Search(criteria, parent_infos)
  1177         search_result = self.baseType.Search(criteria, parent_infos)
  1165         for i, dimension in enumerate(self.getdimension()):
  1178         for i, dimension in enumerate(self.getdimension()):
  1166             search_result.extend(_Search([("lower", dimension.getlower()),
  1179             search_result.extend(_Search([("lower", dimension.getlower()),
  1167                                           ("upper", dimension.getupper())],
  1180                                           ("upper", dimension.getupper())],
  1168                                          criteria, parent_infos + ["range", i]))
  1181                                          criteria, parent_infos + ["range", i]))
  1176 
  1189 
  1177 
  1190 
  1178 # ----------------------------------------------------------------------
  1191 # ----------------------------------------------------------------------
  1179 
  1192 
  1180 
  1193 
  1181 def _SearchInSubrange(self, criteria, parent_infos=[]):
  1194 def _SearchInSubrange(self, criteria, parent_infos=None):
       
  1195     parent_infos = [] if parent_infos is None else parent_infos
  1182     search_result = self.baseType.Search(criteria, parent_infos)
  1196     search_result = self.baseType.Search(criteria, parent_infos)
  1183     search_result.extend(_Search([("lower", self.range.getlower()),
  1197     search_result.extend(_Search([("lower", self.range.getlower()),
  1184                                   ("upper", self.range.getupper())],
  1198                                   ("upper", self.range.getupper())],
  1185                                  criteria, parent_infos))
  1199                                  criteria, parent_infos))
  1186     return search_result
  1200     return search_result
  1209         pass
  1223         pass
  1210     setattr(cls, "updateElementName", updateElementName)
  1224     setattr(cls, "updateElementName", updateElementName)
  1211 
  1225 
  1212     enumerated_datatype_values_xpath = PLCOpen_XPath("ppx:values/ppx:value")
  1226     enumerated_datatype_values_xpath = PLCOpen_XPath("ppx:values/ppx:value")
  1213 
  1227 
  1214     def Search(self, criteria, parent_infos=[]):
  1228     def Search(self, criteria, parent_infos=None):
       
  1229         parent_infos = [] if parent_infos is None else parent_infos
  1215         search_result = []
  1230         search_result = []
  1216         for i, value in enumerate(enumerated_datatype_values_xpath(self)):
  1231         for i, value in enumerate(enumerated_datatype_values_xpath(self)):
  1217             for result in TestTextElement(value.getname(), criteria):
  1232             for result in TestTextElement(value.getname(), criteria):
  1218                 search_result.append((tuple(parent_infos + ["value", i]),) + result)
  1233                 search_result.append((tuple(parent_infos + ["value", i]),) + result)
  1219         return search_result
  1234         return search_result
  1602                         result = address_model.match(var_address)
  1617                         result = address_model.match(var_address)
  1603                         if result is not None:
  1618                         if result is not None:
  1604                             content.remove(variable)
  1619                             content.remove(variable)
  1605     setattr(cls, "removeVariableByFilter", removeVariableByFilter)
  1620     setattr(cls, "removeVariableByFilter", removeVariableByFilter)
  1606 
  1621 
  1607     def Search(self, criteria, parent_infos=[]):
  1622     def Search(self, criteria, parent_infos=None):
       
  1623         parent_infos = [] if parent_infos is None else parent_infos
  1608         search_result = []
  1624         search_result = []
  1609         filter = criteria["filter"]
  1625         filter = criteria["filter"]
  1610         if filter == "all" or self.getpouType() in filter:
  1626         if filter == "all" or self.getpouType() in filter:
  1611             if parent_infos == []:
  1627             if parent_infos == []:
  1612                 parent_infos = parent_infos + ["P::%s" % self.getname()]
  1628                 parent_infos = parent_infos + ["P::%s" % self.getname()]
  1967         else:
  1983         else:
  1968             for element in self.content.getcontent():
  1984             for element in self.content.getcontent():
  1969                 element.updateElementAddress(address_model, new_leading)
  1985                 element.updateElementAddress(address_model, new_leading)
  1970     setattr(cls, "updateElementAddress", updateElementAddress)
  1986     setattr(cls, "updateElementAddress", updateElementAddress)
  1971 
  1987 
  1972     def Search(self, criteria, parent_infos=[]):
  1988     def Search(self, criteria, parent_infos=None):
       
  1989         parent_infos = [] if parent_infos is None else parent_infos
  1973         if self.content.getLocalTag() in ["IL", "ST"]:
  1990         if self.content.getLocalTag() in ["IL", "ST"]:
  1974             search_result = self.content.Search(criteria, parent_infos + ["body", 0])
  1991             search_result = self.content.Search(criteria, parent_infos + ["body", 0])
  1975         else:
  1992         else:
  1976             search_result = []
  1993             search_result = []
  1977             for element in self.content.getcontent():
  1994             for element in self.content.getcontent():
  2115 
  2132 
  2116 def _updateElementAddress(self, address_model, new_leading):
  2133 def _updateElementAddress(self, address_model, new_leading):
  2117     pass
  2134     pass
  2118 
  2135 
  2119 
  2136 
  2120 def _SearchInElement(self, criteria, parent_infos=[]):
  2137 def _SearchInElement(self, criteria, parent_infos=None):
  2121     return []
  2138     return []
  2122 
  2139 
  2123 
  2140 
  2124 _connectionsFunctions = {
  2141 _connectionsFunctions = {
  2125     "bbox": {"none": _getBoundingBox,
  2142     "bbox": {"none": _getBoundingBox,
  2172 
  2189 
  2173     def updateElementAddress(self, address_model, new_leading):
  2190     def updateElementAddress(self, address_model, new_leading):
  2174         self.content.updateElementAddress(address_model, new_leading)
  2191         self.content.updateElementAddress(address_model, new_leading)
  2175     setattr(cls, "updateElementAddress", updateElementAddress)
  2192     setattr(cls, "updateElementAddress", updateElementAddress)
  2176 
  2193 
  2177     def Search(self, criteria, parent_infos=[]):
  2194     def Search(self, criteria, parent_infos=None):
       
  2195         parent_infos = [] if parent_infos is None else parent_infos
  2178         return self.content.Search(criteria, parent_infos + ["comment", self.getlocalId(), "content"])
  2196         return self.content.Search(criteria, parent_infos + ["comment", self.getlocalId(), "content"])
  2179     setattr(cls, "Search", Search)
  2197     setattr(cls, "Search", Search)
  2180 
  2198 
  2181 
  2199 
  2182 cls = _initElementClass("comment", "commonObjects")
  2200 cls = _initElementClass("comment", "commonObjects")
  2216         _translate(self, dx, dy)
  2234         _translate(self, dx, dy)
  2217         for input in self.inputVariables.getvariable():
  2235         for input in self.inputVariables.getvariable():
  2218             _translateConnections(input.connectionPointIn, dx, dy)
  2236             _translateConnections(input.connectionPointIn, dx, dy)
  2219     setattr(cls, "translate", translate)
  2237     setattr(cls, "translate", translate)
  2220 
  2238 
  2221     def Search(self, criteria, parent_infos=[]):
  2239     def Search(self, criteria, parent_infos=None):
       
  2240         parent_infos = [] if parent_infos is None else parent_infos
  2222         parent_infos = parent_infos + ["block", self.getlocalId()]
  2241         parent_infos = parent_infos + ["block", self.getlocalId()]
  2223         search_result = _Search([("name", self.getinstanceName()),
  2242         search_result = _Search([("name", self.getinstanceName()),
  2224                                  ("type", self.gettypeName())],
  2243                                  ("type", self.gettypeName())],
  2225                                 criteria, parent_infos)
  2244                                 criteria, parent_infos)
  2226         for i, variable in enumerate(self.inputVariables.getvariable()):
  2245         for i, variable in enumerate(self.inputVariables.getvariable()):
  2253 def _UpdateLDElementAddress(self, address_model, new_leading):
  2272 def _UpdateLDElementAddress(self, address_model, new_leading):
  2254     self.variable = update_address(self.variable, address_model, new_leading)
  2273     self.variable = update_address(self.variable, address_model, new_leading)
  2255 
  2274 
  2256 
  2275 
  2257 def _getSearchInLDElement(ld_element_type):
  2276 def _getSearchInLDElement(ld_element_type):
  2258     def SearchInLDElement(self, criteria, parent_infos=[]):
  2277     def SearchInLDElement(self, criteria, parent_infos=None):
       
  2278         parent_infos = [] if parent_infos is None else parent_infos
  2259         return _Search([("reference", self.variable)], criteria, parent_infos + [ld_element_type, self.getlocalId()])
  2279         return _Search([("reference", self.variable)], criteria, parent_infos + [ld_element_type, self.getlocalId()])
  2260     return SearchInLDElement
  2280     return SearchInLDElement
  2261 
  2281 
  2262 
  2282 
  2263 # ----------------------------------------------------------------------
  2283 # ----------------------------------------------------------------------
  2282 
  2302 
  2283 # ----------------------------------------------------------------------
  2303 # ----------------------------------------------------------------------
  2284 
  2304 
  2285 
  2305 
  2286 def _updateStepSfcObjectSingleClass(cls):
  2306 def _updateStepSfcObjectSingleClass(cls):
  2287     def Search(self, criteria, parent_infos=[]):
  2307     def Search(self, criteria, parent_infos=None):
       
  2308         parent_infos = [] if parent_infos is None else parent_infos
  2288         return _Search([("name", self.getname())], criteria, parent_infos + ["step", self.getlocalId()])
  2309         return _Search([("name", self.getname())], criteria, parent_infos + ["step", self.getlocalId()])
  2289     setattr(cls, "Search", Search)
  2310     setattr(cls, "Search", Search)
  2290 
  2311 
  2291 
  2312 
  2292 cls = _initElementClass("step", "sfcObjects", "single")
  2313 cls = _initElementClass("step", "sfcObjects", "single")
  2394         if condition_connection is not None:
  2415         if condition_connection is not None:
  2395             return condition_connection.getconnections()
  2416             return condition_connection.getconnections()
  2396         return None
  2417         return None
  2397     setattr(cls, "getconnections", getconnections)
  2418     setattr(cls, "getconnections", getconnections)
  2398 
  2419 
  2399     def Search(self, criteria, parent_infos=[]):
  2420     def Search(self, criteria, parent_infos=None):
       
  2421         parent_infos = [] if parent_infos is None else parent_infos
  2400         parent_infos = parent_infos + ["transition", self.getlocalId()]
  2422         parent_infos = parent_infos + ["transition", self.getlocalId()]
  2401         search_result = []
  2423         search_result = []
  2402         content = self.condition.getcontent()
  2424         content = self.condition.getcontent()
  2403         content_name = content.getLocalTag()
  2425         content_name = content.getLocalTag()
  2404         if content_name == "reference":
  2426         if content_name == "reference":
  2473             self.reference.setname(update_address(self.reference.getname(), address_model, new_leading))
  2495             self.reference.setname(update_address(self.reference.getname(), address_model, new_leading))
  2474         if self.inline is not None:
  2496         if self.inline is not None:
  2475             self.inline.updateElementAddress(address_model, new_leading)
  2497             self.inline.updateElementAddress(address_model, new_leading)
  2476     setattr(cls, "updateElementAddress", updateElementAddress)
  2498     setattr(cls, "updateElementAddress", updateElementAddress)
  2477 
  2499 
  2478     def Search(self, criteria, parent_infos=[]):
  2500     def Search(self, criteria, parent_infos=None):
       
  2501         parent_infos = [] if parent_infos is None else parent_infos
  2479         qualifier = self.getqualifier()
  2502         qualifier = self.getqualifier()
  2480         if qualifier is None:
  2503         if qualifier is None:
  2481             qualifier = "N"
  2504             qualifier = "N"
  2482         return _Search([("inline", self.getinlineContent()),
  2505         return _Search([("inline", self.getinlineContent()),
  2483                         ("reference", self.getreferenceName()),
  2506                         ("reference", self.getreferenceName()),
  2546     def updateElementAddress(self, address_model, new_leading):
  2569     def updateElementAddress(self, address_model, new_leading):
  2547         for action in self.action:
  2570         for action in self.action:
  2548             action.updateElementAddress(address_model, new_leading)
  2571             action.updateElementAddress(address_model, new_leading)
  2549     setattr(cls, "updateElementAddress", updateElementAddress)
  2572     setattr(cls, "updateElementAddress", updateElementAddress)
  2550 
  2573 
  2551     def Search(self, criteria, parent_infos=[]):
  2574     def Search(self, criteria, parent_infos=None):
       
  2575         parent_infos = [] if parent_infos is None else parent_infos
  2552         parent_infos = parent_infos + ["action_block", self.getlocalId()]
  2576         parent_infos = parent_infos + ["action_block", self.getlocalId()]
  2553         search_result = []
  2577         search_result = []
  2554         for idx, action in enumerate(self.action):
  2578         for idx, action in enumerate(self.action):
  2555             search_result.extend(action.Search(criteria, parent_infos + ["action", idx]))
  2579             search_result.extend(action.Search(criteria, parent_infos + ["action", idx]))
  2556         return search_result
  2580         return search_result
  2563 
  2587 
  2564 
  2588 
  2565 # ----------------------------------------------------------------------
  2589 # ----------------------------------------------------------------------
  2566 
  2590 
  2567 
  2591 
  2568 def _SearchInIOVariable(self, criteria, parent_infos=[]):
  2592 def _SearchInIOVariable(self, criteria, parent_infos=None):
       
  2593     parent_infos = [] if parent_infos is None else parent_infos
  2569     return _Search([("expression", self.expression)], criteria, parent_infos + ["io_variable", self.getlocalId()])
  2594     return _Search([("expression", self.expression)], criteria, parent_infos + ["io_variable", self.getlocalId()])
  2570 
  2595 
  2571 
  2596 
  2572 def _UpdateIOElementName(self, old_name, new_name):
  2597 def _UpdateIOElementName(self, old_name, new_name):
  2573     if TextMatched(self.expression, old_name):
  2598     if TextMatched(self.expression, old_name):
  2595     setattr(cls, "updateElementName", _UpdateIOElementName)
  2620     setattr(cls, "updateElementName", _UpdateIOElementName)
  2596     setattr(cls, "updateElementAddress", _UpdateIOElementAddress)
  2621     setattr(cls, "updateElementAddress", _UpdateIOElementAddress)
  2597     setattr(cls, "Search", _SearchInIOVariable)
  2622     setattr(cls, "Search", _SearchInIOVariable)
  2598 
  2623 
  2599 
  2624 
  2600 def _SearchInConnector(self, criteria, parent_infos=[]):
  2625 def _SearchInConnector(self, criteria, parent_infos=None):
       
  2626     parent_infos = [] if parent_infos is None else parent_infos
  2601     return _Search([("name", self.getname())], criteria, parent_infos + ["connector", self.getlocalId()])
  2627     return _Search([("name", self.getname())], criteria, parent_infos + ["connector", self.getlocalId()])
  2602 
  2628 
  2603 
  2629 
  2604 # ----------------------------------------------------------------------
  2630 # ----------------------------------------------------------------------
  2605 
  2631