def sortAndBuildDataNodes(self, data):
        sortColumnIndex = self._gui.sortColumnIndex
        dnColumnIndex = DataControl.getInstance().getDataColumnDef().colIndexMap('DN')
        treeViewTypes = [self.viewType_DN, self.viewType_MRSITE, self.viewType_OMS]
	
        dnNodes = self.getFilteredDnNodesByDN(data.getRawData())
        sortedRawData = []

#        print "sort column index  = ",sortColumnIndex
        if sortColumnIndex == dnColumnIndex:
#            print "-- sort dn begin = ", time.time()
            for dn in sorted(dnNodes.keys(), cmp= lambda x,y:self.sortDNColumn(x, y, dnNodes)):
#                print "append1 -------", dn
                sortedRawData.append(dnNodes[dn].getRawData())
                
            rawData = self.getFilteredRawDataByCommonState(sortedRawData)
            
#            for i in rawData:
#                print "state = ",i[-7]," ",i[-1]," MRSITE-",i[0]," ",i[2]
            
            data.setSortedRawData(rawData)
            self.buildDataNodes(data)
#            print "-- sort dn end = ",time.time()
            
        elif self.viewType in treeViewTypes  and sortColumnIndex != dnColumnIndex:
#            print "-- sort non dn begin = ", time.time()
            for dn in sorted(dnNodes.keys(), cmp= lambda x,y:self.sortDNColumn(x, y, dnNodes)):
#                print "----------------- append dn = ",dn
                sortedRawData.append(dnNodes[dn].getRawData())
                
            tmpData = LTEStatusData()
            tmpData.setSortedRawData(self.getFilteredRawDataByCommonState(sortedRawData))
            self.buildDataNodes(tmpData)
            
            newTopNodes = []
            for topNode in sorted(tmpData.getTopNodes(), cmp= lambda x,y:self.sortNonDNColumn(x, y, sortColumnIndex)):
                topNode.setIndex(len(newTopNodes))
                newTopNodes.append(topNode)
                
                if topNode.getChildren(): 
                    self.sortChildren(topNode, sortColumnIndex)
            
            data.setTopNodes(newTopNodes)
#            print "-- sort non dn begin = ", time.time()
        else:
#            print "-- sort non dn begin = ", time.time()
            for node in sorted(dnNodes.values(), cmp= lambda x,y:self.sortNonDNColumn(x, y, sortColumnIndex)):
                sortedRawData.append(node.getRawData())
            
            data.setSortedRawData(self.getFilteredRawDataByCommonState(sortedRawData))
            self.buildDataNodes(data)
#            print "-- sort non dn end = ",time.time()
	
	#For Status Report, Lock/unlock operation
        if self.viewType == self.viewType_List:
            self.storeLNBTSChildren(dnNodes)