configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/evals/accesspoint_id_counter.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/evals/accesspoint_id_counter.py	Thu Mar 11 17:04:37 2010 +0200
@@ -0,0 +1,365 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+'''
+Ruleml eval extension to count accesspoint id's
+'''
+
+import logging
+
+logger = logging.getLogger('cone.ruleplugin.evals.accesspoint_id_counter')
+
+def get_apindex_by_apname(aps, dns, apname):
+    """
+    Returns AccessPoint index by given AccessPoint name
+    """
+    cnt = _get_ApDnContainer_(aps, dns)
+    return cnt.get_apindex_by_apname(apname)
+
+def get_apid_by_apname(aps, dns, apname, wlan_support=True):
+    """
+    Returns AccessPoint id by given AccessPoint name
+    """
+    cnt = _get_ApDnContainer_(aps, dns, wlan_support)
+    return cnt.get_apid_by_apname(apname)
+
+def get_dnid_by_dnname(aps, dns, dnname, wlan_support=True):
+    """
+    Return DestinationNetwork id by given DestinationNetworks name
+    """
+    cnt = _get_ApDnContainer_(aps, dns, wlan_support)
+    return cnt.get_dnid_by_dnname(dnname)
+
+def get_apid_by_dnname_and_apname(aps, dns, dnname, apname, wlan_support=True):
+    """
+    Returns AccessPoint id by given DestinationNetwork name and AccessPoint name.
+    """
+    cnt = _get_ApDnContainer_(aps, dns, wlan_support)
+    return cnt.get_apid_by_dnname_and_apname(dnname, apname)
+
+def get_all_in_array(aps, dns, wlan_support=True):
+    """
+    Returns array containing all data:
+        [DN name],[DN id], [IAPS names], [IAPS ids], [IAPS indexes] 
+    """
+    cnt = _get_ApDnContainer_(aps, dns, wlan_support)
+    return cnt.get_all_in_array()
+
+def _get_ApDnContainer_(aps, dns, wlan_support=True):
+    """
+    Returns populated ApDnContainer
+    """
+    cnt = ApDnContainer()
+    
+    _read_dns_(dns, cnt)
+    _read_aps_(aps, cnt)
+    
+    cnt._calc_dn_ids_()
+    
+    if wlan_support:
+        cnt._calc_ap_ids_(2)
+    else:
+        cnt._calc_ap_ids_(1)
+    
+    cnt._calc_ap_indexes_(1)
+    
+    return cnt
+
+def _read_dns_(dns, cnt):
+    """
+    Reads DNs to internal objects to ApDnContainer.
+    """
+    
+    dn_names = None
+    dn_ids = None
+    dn_iaps = [None]*10
+    
+    for dn in dns.DN:
+        if dn.ref == 'Name':
+            dn_names = dn.value
+        if dn.ref == 'DNId':
+            dn_ids = dn.value
+        if dn.ref == 'IAP':
+            dn_iaps[0] = dn.value
+        if dn.ref == 'IAP2':
+            dn_iaps[1] = dn.value
+        if dn.ref == 'IAP3':
+            dn_iaps[2] = dn.value
+        if dn.ref == 'IAP4':
+            dn_iaps[3] = dn.value
+        if dn.ref == 'IAP5':
+            dn_iaps[4] = dn.value
+        if dn.ref == 'IAP6':
+            dn_iaps[5] = dn.value
+        if dn.ref == 'IAP7':
+            dn_iaps[6] = dn.value
+        if dn.ref == 'IAP8':
+            dn_iaps[7] = dn.value
+        if dn.ref == 'IAP9':
+            dn_iaps[8] = dn.value
+        if dn.ref == 'IAP10':
+            dn_iaps[9] = dn.value
+    
+    logger.info('Parsed DN names: %s' % dn_names)
+    logger.info('Parsed DN ids: %s' % dn_ids)
+    logger.info('Parsed DN iaps: %s' % dn_iaps)
+    
+    for i in range(len(dn_names)):
+        mydn = Dn()
+        mydn.set_id(dn_ids[i])
+        mydn.set_name(dn_names[i])
+        myiaps = [None]*10
+        for j in range(10):
+            myiaps[j] = dn_iaps[j][i]
+        mydn.set_iaps(myiaps)
+        cnt.add_dn(mydn)
+    return cnt
+
+def _read_aps_(aps, cnt):
+    """
+    Reads APs to internal objects to ApDnContainer.
+    """
+    ap_names = None
+    ap_ids1 = None
+    
+    for ap in aps.AP:
+        if ap.ref == 'ConnectionName':
+            ap_names = ap.value
+        if ap.ref == 'ConnectionId':
+            ap_ids1 = ap.value
+    
+    ap_ids2 = [None]*len(ap_names)
+    if ap_ids1 == None:
+        ap_ids1 = []
+    
+    
+    for i in range(len(ap_ids1)):
+        ap_ids2[i] = ap_ids1[i]
+        
+    
+    logger.info('Parsed AP names: %s' % ap_names)
+    logger.info('Parsed AP ids: %s' % ap_ids2)
+    
+    for i in range(len(ap_names)):
+        myap = Ap()
+        myap.set_id(ap_ids2[i])
+        myap.set_name(ap_names[i])
+        cnt.add_ap(myap)
+    return cnt
+
+def _get_next_free_id_(bases, start_index=1):
+    """
+    Returns next id as a string that is not in use.
+    """
+    
+    biggest_id = int(start_index)
+    
+    for base in bases:
+        current_id = base.get_id()
+        if current_id != None or current_id != '':
+            if current_id > biggest_id:
+                biggest_id = current_id
+    
+    return str(int(biggest_id) + 1)
+
+
+class ApDnContainer(object):
+    """
+    Container for AccessPoints and DestinationNetworks, that provides various access and search methods to them.
+    """
+    
+    def __init__(self):
+        self.dns = []
+        self.aps = []
+
+    def __str__(self):
+        return "ApDnContainer(dns: " + str(self.dns) + ", aps:" + str(self.aps) + ")"
+
+    def add_dn(self, dn):
+        self.dns.append(dn)
+    
+    def add_ap(self, ap):
+        self.aps.append(ap)
+
+    def get_all_dns(self):
+        return self.dns
+    
+    def get_all_aps(self):
+        return self.aps
+    
+    def _calc_dn_ids_(self):
+        for dn in self.dns:
+            if dn.get_id() == None or dn.get_id() == '':
+                dn.set_id(_get_next_free_id_(self.dns, 1))
+
+    def _calc_ap_indexes_(self, ind=1):
+        index = ind
+        
+        for dn in self.dns:
+            for iap in dn.get_iaps():
+                if iap != None:
+                    for ap in self.aps:
+                        if ap.get_name() == iap and ap.get_index() == '':
+                            ap.set_index(str(index))
+                            index += 1
+
+    def _calc_ap_ids_(self, start_index=1):
+        """
+        Calculates unique index for every AccessPoint, if Easy_WLAN is given it always have index 1.
+        """
+        
+        for ap in self.aps:
+            if ap.name == 'Easy WLAN':
+                ap.set_id('1')
+                logger.info('Easy_WLAN AP found. Setting 1 to AP id.')
+                
+        for ap in self.aps:
+            if ap.get_id() == None or ap.get_id() == '':
+                ap.set_id(_get_next_free_id_(self.aps, int(start_index)))
+    
+    def get_apid_by_apname(self, apname):
+        """
+        Returns Accesspoint id by given AccessPoint name
+        """
+    
+        for ap in self.aps:
+            if ap.name == apname:
+                return ap.get_id()
+        return None
+    
+    def get_apindex_by_apname(self, apname):
+        """
+        Returns Accesspoint index by given AccessPoint name
+        """
+        
+        for ap in self.aps:
+            if ap.get_name() == apname:
+                return ap.get_index()
+        return None
+    
+    
+    def get_dnid_by_dnname(self, dnname):
+        """
+        Return DestinationNetwork id by given DestinationNetworks name
+        """
+        for dn in self.dns:
+            if dn.name == dnname:
+                return dn.id
+        return None
+    
+    def get_apid_by_dnname_and_apname(self, dnname, apname):
+        """
+        Returns AccessPoint id by given DestinationNetwork name and AccessPoint name.
+        """
+        for dn in self.dns:
+            if dn.name == dnname:
+                iaps = dn.get_iaps()
+                for iap in range(len(iaps)):
+                    if iaps[iap] != None and iaps[iap] == apname:
+                        return self.get_apid_by_apname(apname)
+        return None
+    
+    def get_all_in_array(self):
+        """
+        Returns array containing all data:
+            [DN name],[DN id], [IAPS names], [IAPS ids] [IAPS index]
+        """
+        ret = [None]*len(self.dns)
+        
+        for i in range(len(self.dns)):
+            line = [None]*5
+            line[0] = self.dns[i].get_name()
+            line[1] = self.dns[i].get_id()
+            line[2] = self.dns[i].get_iaps()
+            
+            ap_ids = [None]*10
+            
+            for j in range(10):
+                ap_ids[j] = self.get_apid_by_apname(self.dns[i].get_iaps()[j])
+            
+            line[3] = ap_ids
+            
+            ap_indexes = [None]*10
+            
+            for j in range(10):
+                ap_indexes[j] = self.get_apindex_by_apname(self.dns[i].get_iaps()[j])
+            
+            line[4] = ap_indexes
+            
+            ret[i] = line
+            
+        return ret
+
+class Base(object):
+    """
+    Base data classes for AP and DN classes.
+    """
+    def __init__(self):
+        self.name = ''
+        self.id = ''
+
+    def set_name(self, name):
+        self.name = name
+    
+    def get_name(self):
+        return self.name
+    
+    def set_id(self, id):
+        self.id = id
+    
+    def get_id(self):
+        return self.id
+
+class Dn(Base):
+    """
+    Destination network
+    """
+    
+    def __init__(self):
+        self.name = None
+        self.id = None
+        self.iaps = [None]*10
+    
+    def __str__(self):
+        return "Dn(name: " + self.name + ", id:" + self.id + ", iaps:" + str(self.iaps) + ")"
+    
+    def set_iaps(self, iaps):
+        self.iaps = iaps
+
+    def set_iap(self, index, value):
+        self.iaps[index] = value
+    
+    def get_iap(self, index):
+        return self.iaps[index]
+    
+    def get_iaps(self):
+        return self.iaps
+    
+class Ap(Base):
+    
+    def __init__(self):
+        self.name = ''
+        self.id = ''
+        self.index = ''
+    
+    def __str__(self):
+        return "Ap(name: " + self.name + ", id:" + self.id + ")"
+    
+    def set_index(self, index):
+        self.index = index
+    
+    def get_index(self):
+        return self.index
+