GGMan - Testen und Manipulieren von Geograf-Daten
Skript Factories Filter Grabber Funktionen Macros Utils Files GUI Typen Elemente
Je nach Komplexität der Aufgabe können Funktionsaufrufe sehr umfangreich werden. Um das Skript übersichtlich zu halten, können Teilaufgaben in Macros ausgelagert werden. Die Macros werden außerhalb der Factories definiert und einer Globalen Variablen zugewiesen. Innerhalb der Factories wird das Macro dann über den Namen der Globalen Variablen angesprochen.
Macros haben vollen Zugriff auf die Variablen der Factories, in denen sie eingesetzt werden. Auch können mit der Funktion @Store Variablen mit dem Macro gesetzt werden, die dann in den nachfolgenden Anweisungen innerhalb der Factory zur Verfügung stehen.
$testMacro = new Macro VoidMacro function = @Log(ERROR, &in, @Concat("falsches ", &lName)) function = @Log(WARNING, &in, "eine Warnung") end new Factory PointLinesCounter name = "PunktLinienZähler" filter = new Filter ArtFilter range = 470-479 end function = @If( @Gt(&lCount, 1), @Store(&lName, "Drucksystem"), $testMacro) finally = @Log("&count Punkte getestet") end
Macros können geschachtelt werden. Das heißt, innerhalb eines Macros können wiederum Macros aufgerufen werden.
$testArrayMacro = new Macro VoidMacro function = @Store(&valueI, "wert2") function = @If(@Not(@Equals(&value1, &valueI)), @Log(ERROR, &in, @Concat("Punkt hat verschiedene Linien"))) end $testMacro = new Macro VoidMacro function = @Store(&value1, "wert1") function = @ForArray(&outLines, &l, $testArrayMacro) end
Eine ähnliche Funktionalität haben Subroutinen. Im Gegensatz zu den Macros werden diese aber nicht in den Kontext einer Factory eingebunden. Die Subroutinen haben keinen Zugriff auf die Variablen der Factories.
Auch die Subroutinen werden außerhalb der Factories definiert und einer Globalen Variablen zugewiesen. Aufgerufen werden sie mittels der Funktion @Sub
$testSub = new Sub StringSub function = @Return("Test") end new Factory ReaderFactory name = "Tester" function = @Log(@Sub($testSub)) end
Damit Subroutinen variabel auf Inhalte reagieren können, ist eine Parameterübergabe möglich. Die Parameter werden bei der Subroutinendefinition vereinbart:
$testSub = new Sub StringSub(&s1, &s2) function = @Return(@Concat(&s1, " - ", &s2)) end new Factory ReaderFactory name = "Tester" function = @Log(@Sub($testSub, "Text1", "Text2")) end
Die Inhalte der Parameter werden mit dem Aufruf der Funktion @Sub übergeben. Innerhalb der Subroutine stehen die Parameter dann unter den vereinbarten Namen zur Verfügung. Im obigen Beispiel sind das die Parameternamen &s1 und &s2.
Wie auch bei den Macros können Subroutinen verschachtelt werden.
$testSub2 = new Sub StringSub(&s1, &s2)
function = @Return(@Concat(&s1, " - ", &s2))
end
$testSub1 = new Sub StringSub(&s1, &s3)
function = @Return(@Concat("Die Funktion testSub2 fügt Texte zusammen: ", @Sub($testSub2, "Text1", "Text2")))
end
GGMan unterscheidet wie auch bei den Funktionen zwei wesentliche Typen von Macros. Einerseits gibt es Macros ohne Rückabewert (VoidMacro), andererseits Macros mit Rückgabewert.
Die sogenannten VoidMacros haben keinen Rückgabewert. Sie werden aufgerufen, um eine Tätigkeit auszuführen.
$testMacro = new Macro VoidMacro function = @Log("Ein Text für die LogDatei") endDas hier vereinbarten Macro ist ein VoidMacro. Es hat keinen Rückgabewert.
Bei den Subroutinen existiert die Variante ohne Rückgabewert nicht.
Alle ValueMacros haben einen vereinbarten Rückgabewert. Der Rückgabewert muss innerhalb des Macros mit der Funktion @Return erzeugt werden.
Subroutinen haben immer einen Rückgabewert. Auch hier muss der Rückgabewert mit der Funktion @Return erzeugt werden.
$sMacro = new Macro StringMacro
function = @IfThenElse( @Equals(&var1, var2), \
@Return("Var1 ist gleich var2"), \
@Return("Var1 ist ungleich var2") \
)
end
Die ValueMacros und ValueSubs haben eine Standardrückgabetyp. Diesen Standardtyp zeigen Sie dem Aufrufer durch Ihren Typ an. Folgende Typen kann kann ein Macro bzw. eine Subroutine haben:
Solle die Konvertierung nicht möglich sein, wird von der Funktion eine Fehlermeldung erzeugt. GGMan protokolliert diese dann in der LogDatei.
StringValue name : Das Macro kann einen Namen erhalten. Bei Fehlermeldungen wird dieser Name angezeigt.
StringValue spec : Mit diesem Parameter kann die Funktionalität des Macros dokumentiert werden.
Void function : Ein Funktionsaufruf. Mehrere Angaben werden bis zum erstmaligen Aufruf der Funktion @Return nacheinander ausgeführt.
StringValue name : Die Subroutine kann einen Namen erhalten. Bei Fehlermeldungen wird dieser Name angezeigt.
StringValue spec : Mit diesem Parameter kann die Funktionalität der Subroutine dokumentiert werden.
Void function : Ein Funktionsaufruf. Mehrere Angaben werden bis zum erstmaligen Aufruf der Funktion @Return nacheinander ausgeführt.