1749 setattr(cls, "Search", Search) |
1749 setattr(cls, "Search", Search) |
1750 |
1750 |
1751 cls = PLCOpenClasses.get("body", None) |
1751 cls = PLCOpenClasses.get("body", None) |
1752 if cls: |
1752 if cls: |
1753 cls.currentExecutionOrderId = 0 |
1753 cls.currentExecutionOrderId = 0 |
|
1754 cls.instances_dict = {} |
|
1755 |
|
1756 setattr(cls, "_loadXMLTree", getattr(cls, "loadXMLTree")) |
|
1757 |
|
1758 def loadXMLTree(self, *args, **kwargs): |
|
1759 self._loadXMLTree(*args, **kwargs) |
|
1760 if self.content["name"] in ["LD","FBD","SFC"]: |
|
1761 self.instances_dict = dict( |
|
1762 [(element["value"].getlocalId(), element) |
|
1763 for element in self.content["value"].getcontent()]) |
|
1764 setattr(cls, "loadXMLTree", loadXMLTree) |
1754 |
1765 |
1755 def resetcurrentExecutionOrderId(self): |
1766 def resetcurrentExecutionOrderId(self): |
1756 object.__setattr__(self, "currentExecutionOrderId", 0) |
1767 object.__setattr__(self, "currentExecutionOrderId", 0) |
1757 setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId) |
1768 setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId) |
1758 |
1769 |
1823 raise TypeError, _("Can only generate execution order on FBD networks!") |
1834 raise TypeError, _("Can only generate execution order on FBD networks!") |
1824 setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
1835 setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
1825 |
1836 |
1826 def appendcontentInstance(self, name, instance): |
1837 def appendcontentInstance(self, name, instance): |
1827 if self.content["name"] in ["LD","FBD","SFC"]: |
1838 if self.content["name"] in ["LD","FBD","SFC"]: |
1828 self.content["value"].appendcontent({"name" : name, "value" : instance}) |
1839 element = {"name" : name, "value" : instance} |
|
1840 self.content["value"].appendcontent(element) |
|
1841 self.instances_dict[instance.getlocalId()] = element |
1829 else: |
1842 else: |
1830 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1843 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1831 setattr(cls, "appendcontentInstance", appendcontentInstance) |
1844 setattr(cls, "appendcontentInstance", appendcontentInstance) |
1832 |
1845 |
1833 def getcontentInstances(self): |
1846 def getcontentInstances(self): |
1840 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1853 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1841 setattr(cls, "getcontentInstances", getcontentInstances) |
1854 setattr(cls, "getcontentInstances", getcontentInstances) |
1842 |
1855 |
1843 def getcontentInstance(self, id): |
1856 def getcontentInstance(self, id): |
1844 if self.content["name"] in ["LD","FBD","SFC"]: |
1857 if self.content["name"] in ["LD","FBD","SFC"]: |
1845 for element in self.content["value"].getcontent(): |
1858 instance = self.instances_dict.get(id, None) |
1846 if element["value"].getlocalId() == id: |
1859 if instance is not None: |
1847 return element["value"] |
1860 return instance["value"] |
1848 return None |
1861 return None |
1849 else: |
1862 else: |
1850 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1863 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1851 setattr(cls, "getcontentInstance", getcontentInstance) |
1864 setattr(cls, "getcontentInstance", getcontentInstance) |
1852 |
1865 |
1853 def getcontentRandomInstance(self, exclude): |
1866 def getcontentRandomInstance(self, exclude): |
1854 if self.content["name"] in ["LD","FBD","SFC"]: |
1867 if self.content["name"] in ["LD","FBD","SFC"]: |
1855 for element in self.content["value"].getcontent(): |
1868 ids = self.instances_dict.viewkeys() - exclude |
1856 if element["value"].getlocalId() not in exclude: |
1869 if len(ids) > 0: |
1857 return element["value"] |
1870 return self.instances_dict[ids.pop()]["value"] |
1858 return None |
1871 return None |
1859 else: |
1872 else: |
1860 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1873 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1861 setattr(cls, "getcontentRandomInstance", getcontentRandomInstance) |
1874 setattr(cls, "getcontentRandomInstance", getcontentRandomInstance) |
1862 |
1875 |
1869 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1882 raise TypeError, _("%s body don't have instances!")%self.content["name"] |
1870 setattr(cls, "getcontentInstanceByName", getcontentInstanceByName) |
1883 setattr(cls, "getcontentInstanceByName", getcontentInstanceByName) |
1871 |
1884 |
1872 def removecontentInstance(self, id): |
1885 def removecontentInstance(self, id): |
1873 if self.content["name"] in ["LD","FBD","SFC"]: |
1886 if self.content["name"] in ["LD","FBD","SFC"]: |
1874 i = 0 |
1887 element = self.instances_dict.get(id, None) |
1875 removed = False |
1888 if element is not None: |
1876 elements = self.content["value"].getcontent() |
1889 self.content["value"].getcontent().remove(element) |
1877 while i < len(elements) and not removed: |
1890 else: |
1878 if elements[i]["value"].getlocalId() == id: |
|
1879 self.content["value"].removecontent(i) |
|
1880 removed = True |
|
1881 i += 1 |
|
1882 if not removed: |
|
1883 raise ValueError, _("Instance with id %d doesn't exist!")%id |
1891 raise ValueError, _("Instance with id %d doesn't exist!")%id |
1884 else: |
1892 else: |
1885 raise TypeError, "%s body don't have instances!"%self.content["name"] |
1893 raise TypeError, "%s body don't have instances!"%self.content["name"] |
1886 setattr(cls, "removecontentInstance", removecontentInstance) |
1894 setattr(cls, "removecontentInstance", removecontentInstance) |
1887 |
1895 |