--- a/plcopen/plcopen.py Wed Oct 12 15:08:47 2011 +0200
+++ b/plcopen/plcopen.py Wed Oct 12 23:47:48 2011 +0200
@@ -353,18 +353,7 @@
def updateElementName(self, old_name, new_name):
for datatype in self.types.getdataTypeElements():
- datatype_content = datatype.baseType.getcontent()
- if datatype_content["name"] == "derived" and datatype_content["value"].getname() == old_name:
- datatype_content["value"].setname(new_name)
- elif datatype_content["name"] in ["array", "subrangeSigned", "subrangeUnsigned"]:
- basetype_content = datatype_content["value"].baseType.getcontent()
- if basetype_content["name"] == "derived" and basetype_content["value"].getname() == old_name:
- basetype_content["value"].setname(new_name)
- elif datatype_content["name"] == "struct":
- for element in datatype_content["value"].getvariable():
- element_type = element.type.getcontent()
- if element_type["name"] == "derived" and element_type["value"].getname() == old_name:
- element_type["value"].setname(new_name)
+ datatype.updateElementName(old_name, new_name)
for pou in self.types.getpouElements():
pou.updateElementName(old_name, new_name)
for configuration in self.instances.configurations.getconfiguration():
@@ -823,9 +812,7 @@
variables.pop(i)
def _SearchInConfigurationResource(self, criteria, parent_infos=[]):
- search_result = []
- for result in TestTextElement(self.getname(), criteria):
- search_result.append((tuple(parent_infos + ["name"]),) + result)
+ search_result = _Search([("name", self.getname())], criteria, parent_infos)
var_number = 0
for varlist in self.getglobalVars():
variable_type = searchResultVarTypes.get("globalVars", "var_local")
@@ -1097,14 +1084,103 @@
def Search(self, criteria, parent_infos=[]):
search_result = []
filter = criteria["filter"]
- #if filter == "all" or "datatype" in filter:
- # for datatype in self.dataTypes.getdataType():
- # search_result.extend(datatype.Search(criteria, parent_infos))
+ for datatype in self.dataTypes.getdataType():
+ search_result.extend(datatype.Search(criteria, parent_infos))
for pou in self.pous.getpou():
search_result.extend(pou.Search(criteria, parent_infos))
return search_result
setattr(cls, "Search", Search)
+def _updateBaseTypeElementName(self, old_name, new_name):
+ self.baseType.updateElementName(old_name, new_name)
+
+cls = PLCOpenClasses.get("dataTypes_dataType", None)
+if cls:
+ setattr(cls, "updateElementName", _updateBaseTypeElementName)
+
+ def Search(self, criteria, parent_infos=[]):
+ search_result = []
+ filter = criteria["filter"]
+ if filter == "all" or "datatype" in filter:
+ parent_infos = parent_infos + ["D::%s" % self.getname()]
+ search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
+ search_result.extend(self.baseType.Search(criteria, parent_infos))
+ if self.initialValue is not None:
+ search_result.extend(_Search([("initial", self.initialValue.getvalue())], criteria, parent_infos))
+ return search_result
+ setattr(cls, "Search", Search)
+
+cls = PLCOpenClasses.get("dataType", None)
+if cls:
+
+ def updateElementName(self, old_name, new_name):
+ if self.content["name"] in ["derived", "array", "subrangeSigned", "subrangeUnsigned"]:
+ self.content["value"].updateElementName(old_name, new_name)
+ elif self.content["name"] == "struct":
+ for element in datatype_content["value"].getvariable():
+ element_type = element.type.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
+ def Search(self, criteria, parent_infos=[]):
+ search_result = []
+ if self.content["name"] in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]:
+ search_result.extend(self.content["value"].Search(criteria, parent_infos))
+ elif self.content["name"] == "struct":
+ for i, element in enumerate(self.content["value"].getvariable()):
+ search_result.extend(element.Search(criteria, parent_infos + ["struct", i]))
+ else:
+ basetype = self.content["name"]
+ if basetype in ["string", "wstring"]:
+ basetype = basetype.upper()
+ search_result.extend(_Search([("base", basetype)], criteria, parent_infos))
+ return search_result
+ setattr(cls, "Search", Search)
+
+cls = PLCOpenClasses.get("derivedTypes_array", None)
+if cls:
+ setattr(cls, "updateElementName", _updateBaseTypeElementName)
+
+ def Search(self, criteria, parent_infos=[]):
+ search_result = self.baseType.Search(criteria, parent_infos)
+ for i, dimension in enumerate(self.getdimension()):
+ search_result.extend(_Search([("lower", dimension.getlower()),
+ ("upper", dimension.getupper())],
+ criteria, parent_infos + ["range", i]))
+ return search_result
+ setattr(cls, "Search", Search)
+
+def _SearchInSubrange(self, criteria, parent_infos=[]):
+ search_result = self.baseType.Search(criteria, parent_infos)
+ search_result.extend(_Search([("lower", self.range.getlower()),
+ ("upper", self.range.getupper())],
+ criteria, parent_infos))
+ return search_result
+
+cls = PLCOpenClasses.get("derivedTypes_subrangeSigned", None)
+if cls:
+ setattr(cls, "updateElementName", _updateBaseTypeElementName)
+ setattr(cls, "Search", _SearchInSubrange)
+
+cls = PLCOpenClasses.get("derivedTypes_subrangeUnsigned", None)
+if cls:
+ setattr(cls, "updateElementName", _updateBaseTypeElementName)
+ setattr(cls, "Search", _SearchInSubrange)
+
+cls = PLCOpenClasses.get("derivedTypes_enum", None)
+if cls:
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
+ def Search(self, criteria, parent_infos=[]):
+ search_result = []
+ for i, value in enumerate(self.values.getvalue()):
+ for result in TestTextElement(value.getname(), criteria):
+ search_result.append((tuple(parent_infos + ["value", i]),) + result)
+ return search_result
+ setattr(cls, "Search", Search)
+
cls = PLCOpenClasses.get("pous_pou", None)
if cls:
@@ -1433,8 +1509,7 @@
filter = criteria["filter"]
if filter == "all" or self.getpouType() in filter:
parent_infos = parent_infos + ["P::%s" % self.getname()]
- for result in TestTextElement(self.getname(), criteria):
- search_result.append((tuple(parent_infos + ["name"]),) + result)
+ search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
if self.interface is not None:
var_number = 0
for content in self.interface.getcontent():