def getServicegroups(self, names):

        reString = '^' + '$|^'.join(names) + '$'
        queryString = "GET servicegroups\nColumns: name members\nFilter: name ~ " + reString + "\n"
        lines = self.query(queryString)

        idServicegroupMap = {}

        for line in lines:

            columns = line.split(';')
            name = columns[0]
            members = columns[1].split(',')

            idServicegroupMap[name] = Servicegroup(name)

            for member in members:

                elements = member.split('|')
                hostObjectId = elements[0]
                serviceObjectId = elements[1]

                if hostObjectId not in idServicegroupMap[name].hostObjectIds:

                    if hostObjectId not in idServicegroupMap[
                            name].hostObjectIds:

                        idServicegroupMap[name].addHostObjectId(hostObjectId)
                        idServicegroupMap[name].hostServiceObjectIds[
                            hostObjectId] = []
                    idServicegroupMap[name].hostServiceObjectIds[
                        hostObjectId].append(serviceObjectId)

        return idServicegroupMap.values()
    def getServicegroups(self, names):
    
        reString = '^' + '$|^'.join(names) + '$'
        queryString = "GET servicegroups\nColumns: name members\nFilter: name ~ " + reString + "\n"
        lines = self.query(queryString)

        idServicegroupMap = {}

        for line in lines:

            columns = line.split(';')
            name = columns[0]
            members = columns[1].split(',')

            idServicegroupMap[name] = Servicegroup(name)

            for member in members:

                elements = member.split('|')
                hostObjectId = elements[0]
                serviceObjectId = elements[1]

                if hostObjectId not in idServicegroupMap[name].hostObjectIds:

                    if hostObjectId not in idServicegroupMap[name].hostObjectIds:
                
                        idServicegroupMap[name].addHostObjectId(hostObjectId)
                        idServicegroupMap[name].hostServiceObjectIds[hostObjectId] = []
                    idServicegroupMap[name].hostServiceObjectIds[hostObjectId].append(serviceObjectId)

        return idServicegroupMap.values()
    def getServicegroups(self, names):
    
        idServicegroupMap = {}
        
        for name, members in self.servicegroupDefinitions:
        
            if name not in names:
 
                continue
            idServicegroupMap[name] = Servicegroup(name)
            
            hostObjectIds = members[0::2]
            serviceObjectIds = members[1::2]
            
            for hostObjectId, serviceObjectId in zip(hostObjectIds, serviceObjectIds):
            
                if hostObjectId not in idServicegroupMap[name].hostObjectIds:
                
                    idServicegroupMap[name].addHostObjectId(hostObjectId)
                    idServicegroupMap[name].hostServiceObjectIds[hostObjectId] = []
                    
                idServicegroupMap[name].hostServiceObjectIds[hostObjectId].append(serviceObjectId)       

        return idServicegroupMap.values()
    def getServicegroups(self, names):

        if len(names) == 0:

            return []
            raise Exception("List of servicegroup names invalid or empty.")
        try:

            cursor = self.connection.cursor()

            whereClause = '") OR (name1="'.join(names)
            cursor.execute('SELECT name1, object_id FROM ' + self.prefix +
                           '_objects WHERE (objecttype_id="4") AND ((name1="' +
                           whereClause + '"))')
            rows = cursor.fetchall()

            if len(rows) != len(names):

                raise Exception("List of servicegroup names invalid or empty.")

            objectIdNameMap = {}

            for row in rows:

                objectIdNameMap[str(row[1])] = row[0]

            whereClause = '") OR (servicegroup_object_id="'.join(
                objectIdNameMap.keys())
            cursor.execute(
                'SELECT servicegroup_id, servicegroup_object_id FROM ' +
                self.prefix +
                '_servicegroups WHERE (servicegroup_object_id="' +
                whereClause + '")')
            rows = cursor.fetchall()

            # bis hier ok

            idServicegroupMap = {}

            for row in rows:

                name = objectIdNameMap[str(row[1])]
                idServicegroupMap[str(row[0])] = Servicegroup(name)

            # get all members

            whereClause = '") OR (servicegroup_id="'.join(
                idServicegroupMap.keys())
            cursor.execute('SELECT service_object_id, servicegroup_id FROM ' +
                           self.prefix +
                           '_servicegroup_members WHERE (servicegroup_id="' +
                           whereClause + '")')
            rows = cursor.fetchall()

            for row in rows:

                serviceId = str(row[0])
                servicegroupId = str(row[1])

                # find out the host in which the service is.

                cursor.execute('SELECT host_object_id FROM ' + self.prefix +
                               '_services WHERE (service_object_id="' +
                               serviceId + '")')
                hostId = str(cursor.fetchone()[0])

                if hostId not in idServicegroupMap[
                        servicegroupId].hostObjectIds:

                    idServicegroupMap[servicegroupId].addHostObjectId(hostId)
                    idServicegroupMap[servicegroupId].hostServiceObjectIds[
                        hostId] = []
                idServicegroupMap[servicegroupId].hostServiceObjectIds[
                    hostId].append(serviceId)

            cursor.close()
            return idServicegroupMap.values()

        except MySQLdb.Error, e:

            self.connection.close()
            raise Exception(
                "Couldn't fetch service information from database: " +
                str(e.args[1]))