Esempio n. 1
0
    def OnInstanceCreated(self, created_association):
        """
        Trigger for creations
        """

        device_type_instance_id = created_association.instance_ids["Type"]
        device_instance_id = created_association.instance_ids["Subject"]

        if (device_type_instance_id[0] == EnumConfigObjects["C_DEVICE_TYPE"] and device_instance_id[0] == EnumConfigObjects["C_DEVICE"]):
            helper = Helper(config_header=self.config_header)
            device_type = helper.GetEntityByInstanceId(device_type_instance_id)
            device = helper.GetEntityByInstanceId(device_instance_id)
            channel_cls = self.config_header.GetConfigController(EnumConfigObjects["C_DEVICE_CHANNEL"])
            link_cls = self.config_header.GetConfigController(EnumConfigObjects["C_DEVICE_LINK"])
            components_mdl = self.config_header.GetConfigController(EnumConfigObjects["M_COMPONENTS"])
            types_mdl = self.config_header.GetConfigController(EnumConfigObjects["M_TYPES"])
            
            device["params"] = device_type["params"]
            helper.SaveEntity(device)

            groups = helper.NavigateMultiple("M_COMPONENTS", {"Unit" : device_type}, "Part")

            for group in groups:
                group_cid = group.GetControllerId()

                item_controller = None
                if (group_cid == EnumConfigObjects["C_DEVICE_CHANNEL_GROUP"]):
                    item_controller = channel_cls
                elif (group_cid == EnumConfigObjects["C_DEVICE_LINK_GROUP"]):
                    item_controller = link_cls
                if (not item_controller): continue

                quantity = group["quantity"]
                for i in range(0, quantity):
                    createGroupItem(helper, device, group, i, quantity)

        return True
def updateGroupTrigger(helper, group_inst_old, group_inst_new):
    group_to_inst_cid = {
        EnumConfigObjects["C_DEVICE_CHANNEL_GROUP"] : EnumConfigObjects["C_DEVICE_CHANNEL"],
        EnumConfigObjects["C_DEVICE_LINK_GROUP"] : EnumConfigObjects["C_DEVICE_LINK"],
    }

#    update_map = {}
#    for i in range(0, group_inst_new["quantity"]):
#        update_map[getGroupItemName(group_inst_old["name"], i, group_inst_new["quantity"])] = getGroupItemName(group_inst_new["name"], i, group_inst_new["quantity"])

    items_names_old = []
    for i in range(0, group_inst_old["quantity"]):
        items_names_old += [getGroupItemName(group_inst_old["name"], i, group_inst_old["quantity"])]
    items_names_new = []
    for i in range(0, group_inst_new["quantity"]):
        items_names_new += [getGroupItemName(group_inst_new["name"], i, group_inst_new["quantity"])]


    group_instances = helper.NavigateMultiple("M_TYPES", {"Type" : group_inst_new}, "Subject")
    for ginst in group_instances:
        if (ginst.GetControllerId() not in [EnumConfigObjects["C_DEVICE_CHANNEL"], EnumConfigObjects["C_DEVICE_LINK"]]): continue
        if (ginst["name"] not in items_names_old):
            print "Error: Couldn't assign group instance: %s" % ginst.GetInstanceId()
            continue
        old_name_index = items_names_old.index(ginst["name"])
        if (len(items_names_new) > old_name_index):
            ginst["name"] = items_names_new[old_name_index]
        else:
            helper.DeleteEntity(ginst)
        helper.SaveEntity(ginst)
    if (len(items_names_new) > len(items_names_old)):
        device_type = helper.Navigate("M_COMPONENTS", {"Part" : group_inst_new}, "Unit")
        devices = helper.NavigateMultiple("M_TYPES", {"Type" : device_type}, "Subject")
        for device in devices:
            for i in range(len(items_names_old), len(items_names_new)):
                createGroupItem(helper, device, group_inst_new, i, len(items_names_new))