#
import time
import vtcapp

# Zu evaluierenden Ordner per inerne ID definieren
ordid = vtcapp.inputbox("Ordnerperformance", "ID des Ordners eingeben", "")
try:
    ord = vtcapp.getobjectbyid(ordid)
except:
    vtcapp.msgbox("Kein Ordner mit dieser ID gefunden.",0,"Ordnerperformance")
else:
    if not ord.evalocl("self->oclIsKindOf(AbstractOrdner)"):
        vtcapp.msgbox("Kein Ordner mit dieser ID gefunden.",0,"Ordnerperformance")
    else:
        # Objekte des Ordners laden.
        start = time.time()
        lstobj = ord.evalocl("eintraege.list")
        end = time.time()
        print("{} Ordnerobjekte laden: {}".format(len(lstobj), str(end-start)))
        # Spaltendefinitionen des Ordners(boldId) als Liste erzeugen
        lstcols = ord.evalocl("gridDefs.gridcols->orderby(orderidx)")
        # Falls keine Spaltendefinitionen vorhanden sind, dann gibt 
        # es vermutlich keine persistenten. Den User darauf hinweisen. 
        if not lstcols:
            vtcapp.msgbox("Der angegebene Ordner hat keine persistenten Spaltendefinitionen. Sie können erstellt werden durch eine minimale Änderung, z.B. einer Spaltenbreite.",0,"Ordnerperformance")
        else:
            # zur Messung der Laufzeit durch Liste der Spalten iterieren
            for col in lstcols:
                start = time.time()
                #zusätzlich durch die Ordnerelemente iterieren, um das
                #Berechnen der OCL-Expression für jede Zeile/Zelle zu simulieren
                for obj in lstobj:
                 temp = obj.evalocl(col.expression)
                end = time.time()
                if col.titel:
                    titel = col.titel
                else:
                    titel = "(kein Spaltentitel)"
                print(titel.encode() + ':', str(end-start))
