Traumtyp Phing
Kommentare

Erste Schritte
Zuerst kümmern wir uns um den Befehl, den wir ausführen wollen. Hierfür reichen ein privates Attribut innerhalb unserer Klasse und ein Setter, der mit set beginnt, gefolgt von dem Eigenschaftennamen,

Erste Schritte

Zuerst kümmern wir uns um den Befehl, den wir ausführen wollen. Hierfür reichen ein privates Attribut innerhalb unserer Klasse und ein Setter, der mit set beginnt, gefolgt von dem Eigenschaftennamen, über den das Merkmal innerhalb der XML Buildfile gesetzt werden soll. Alle Setter sind selbstverständlich public. Der Setter für unsere Executeable-Eigenschaft (zu sehen in Listing 2 ab Zeile 20) kann im Task innerhalb der Buildfile einfach durch executeable=“ls“ aufgerufen werden. Dabei wird nicht auf Klein- beziehungsweise Großschreibung geachtet. Ähnlich sieht das Setzen des Variablennamens aus, in dem wir den Rückgabewert speichern wollen. Der Setter für den Verbose-Modus, der uns die gewünschten zusätzlichen Ausgaben ermöglicht, unterscheidet sich nur in einer Hinsicht von den anderen Settern. Innerhalb dieses Setters wird die Eingabe per StringHelper des Phing-Frameworks in einen booleschen Wert verwandelt. Diesen nutzen wir, um mehr als nur true und false als Eingabe für boolesche Werte zu akzeptieren. So kann für true ebenfalls on, t und yes, respektive off, f und no für false genutzt werden. Innerhalb der Klassen können wir dann wie gewohnt auf boolesche Werte zugreifen.

Dateien und Ordner

Ein weiterer Setter, der vom normalen Schema abweicht, ist für unser FileSet notwendig. Da mehrere Dateien genutzt werden können, muss hier ein Array für den klasseninternen Datentyp gewählt werden, das später mehrere Objekte vom Typ FileSet enthält. Das FileSet ist in Phing ein so genannter „Type“, der Regeln enthält, wie mit den exclude– und include-Tags innerhalb der Buildfile verfahren werden soll. Es gehört zum Standardumfang in Phing, sodass wir uns hier um nichts weiter zu kümmern brauchen. Normalerweise müsste der entsprechende Type ebenfalls per require_once geladen werden, das geschieht jedoch bereits beim Laden der Task-Klasse, von der wir ableiten. Im Setter für unser FileSet kümmern wir uns nun nur noch darum, dass jedes Element daraus an unser Array angehängt wird. Da der Setter für das FileSet streng genommen kein Setter ist, sondern dieses erst aufgrund der angegebenen Regeln erstellt, heißt er auch nicht Setter, sondern createFileSet. In dieser Methode legen wir ein neues FileSet an, das an unser bisher leeres files-Array angehängt wird, und geben dieses neu angelegte FileSet zurück. Um den Aufbau, welche Dateien zum FileSet gehören und welche weggelassen werden, kümmert sich Phing bei der Ausführung der Tasks automatisch. Damit haben wir bereits erreicht, dass ein FileSet (Listing 1) für unseren Task genutzt werden kann – jedenfalls theoretisch.

Ein Traumtyp

Zuvor sollten wir noch unsere letzte Anforderung umsetzen. Wir wollen, ähnlich wie bei dem FileSet, dem auszuführenden Befehl Argumente übergeben können. Hierfür bringt Phing zwar den CommandLine-Type mit, der Arg-Types enthalten kann, jedoch soll an dieser Stelle händisch ein Type erstellt werden, der den Arg-Tag direkt nutzbar macht. Also schreiben wir einen eigenen Type: Typen können von der Klasse DataType erben, zu finden unter /phing/types/. Jedoch sollte man das nur tun, wenn es sich um einen Datentyp handelt, der für sich steht. Das ist immer dann der Fall, wenn der Datentyp auch außerhalb eines Tasks genutzt werden soll. So kann beispielsweise ein FileSet auch außerhalb eines Tasks definiert und in diesem nur referenziert werden. Da die Anforderung nicht ist, dass Argumentlisten referenziert werden können, lassen wir unseren Type direkt von ProjectComponent erben, das die Basisklasse für alle Elemente innerhalb der Buildfile darstellt.

Der Type für den Arg-Tag besteht nur aus einer Klassenvariablen, die den entsprechenden Kommandozeilenparameter enthält. Jedoch hat unser Type eine kleine Besonderheit: Er besitzt für ein und dieselbe Klassenvariable zwei Setter. Damit wird es möglich, sowohl value als auch line zum Setzen eines Parameters zu. Letzteres ermöglicht lange Parameter zu übergeben, die dann zeilenweise auf der Konsole ausgegeben werden. Zu sehen ist das in Listing 3 ebenso wie die Methode getValue, die uns den Wert des entsprechenden Arguments zurückliefert. Um Arg als verschachtelten Tag innerhalb des Apply-Tasks zu verwenden, nutzen wir wieder eine create-Methode innerhalb des Tasks, wie an der Methode createFileSet bereits demonstriert. Da der Arg-Type noch nicht bekannt ist, muss er innerhalb des Apply-Tasks per require_once geladen werden.

Listing 3
_value = $value . ' ';
    }

    public function setLine($value)
    {
        $this->_value = $value . '\' . PHP_EOL . ' ';
    }
    
    public function getValue() 
    {
        return $this->_value;
    }
}

Auf den folgenden Seiten:

  • Den Task das Laufen lehren
  • Unser Task lernt sprechen
  • Fazit
  • Info zum Autoren
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -