NAME
Quiq::ContentProcessor::Type - Entität, Basisklasse aller Plugin-Klassen
BASE CLASS
Quiq::ContentProcessor::BaseType
DESCRIPTION
Diese Klasse ist die Basisklasse für alle Plugin-Klassen, die im ContentProcessor mit registerType() definiert werden.
Definition von Subklassen
Die Plugin-Klassen bilden eine Hierarchie von Klassen, an deren Spitze eine allgemeine, abstrakte Klasse steht (stehen sollte), die von der dieser Klasse abgeleitet ist:
package Jaz::Type;
use base qw/Quiq::ContentProcessor::Type/;
__PACKAGE__->def(
ContentAllowed => 0,
Attributes => [qw/
Name
/],
);
Ob der Abschnitt eines Typs einen Inhalt zulässt und welches die zulässigen Attribute sind, wird mit den Klassen-Attributen ContentAllowed
und Attributes
festgelegt. Obige Basisklassen-Definition vereinbart, dass per Default kein Content erlaubt ist und dass das Attribut Name
bei allen (Haupt-)Typen vorkommt.
Die abgeleiteten Klassen ergänzen die Attribut-Liste und überschreiben u.U. das ContentAllowed
-Attribut.
Die Methode create() erzeugt aus einem Abschnitts-Objekt eine Instanz des betreffenden Typs, eine sog. Entität, und setzt die für den ContentProcessor essentiellen Attribute (siehe Code der Methode). Die Methode wird in der Typ-Klasse überschrieben und von dort aus gerufen:
package Jaz::Type::Program::Shell;
use base qw/Jaz::Type::Program/;
__PACKAGE__->def(
Attributes => [qw/
<Spezifische Attribute des Typs>
/],
);
sub create {
my ($class,$sec,$cop,$plg) = @_;
return $class->SUPER::create($sec,$cop,$plg,
<Eigenschaften der Entität>
);
}
Standard-Attribute
Die Basisklassenmethode erweitert das Objekt um grundlegende Informationen und Verküpfungen:
- processor
-
Referenz auf die Processor-Instanz. Diese gibt der Entität u.a. Zugriff auf alle anderen Entitäten.
- plugin
-
Referenz auf die Plugin-Definition. Diese wird von der Methode entityId() herangezogen um die Entity-Id zu generieren.
- fileSource
-
Der gesamte Quelltext der Entität, wenn es sich um eine Datei-Entität [] handelt. Bei Sub-Entitäten () ein Leerstring.
- testable
-
Attribut, das anzeigt, ob die Entität Programmcode repräsentiert und im Änderungsfall getestet werden kann.
Methoden
Ferner implementiert die Basisklasse folgende Methoden, die überschrieben werden können:
- entityId()
-
Liefert den eindeutigen Entitätsbezeichner. Die Basisklassenmethode setzt diesen aus dem Typ-Bezeichner und den Werten der @keyVal-Liste des Plugins zusammen. Kann überschrieben werden, wenn der Entitätsbezeichner anders gebildet werden soll.
- name()
-
Liefert den Namen der Entität. Die Basisklassenmethode erzeugt diesen durch geringfügige Änderungen aus dem Wert des Abschnitts-Attributs
Name:
. Kann überschrieben werden, wenn der Name anders hergeleitet werden soll.
Oder überschrieben werden müssen:
- files()
-
Liefert die Liste aller Ausgabe-Datei-Objekte der Entität. Die Basisklassenmethode liefert eine leere Liste. Die Methode wird überschrieben.
- pureCode()
-
Liefert bei einer testbaren Entität (s. Attribut
testable
) den Quelltext ohne Inline-Doku und Kommentare. Besteht der Quelltext aus mehreren Dateien (z.B. im Falle von C++), werden diese konkateniert geliefert, denn der Code muss nicht kompilierbar/ausführbar sein. Die Basisklassenmethode liefertundef
. Die Methode wird überschrieben.
METHODS
Erzeugung
create() - Erzeuge Entität
Synopsis
$ent = $class->create($sec,$cop,$plg,@keyVal);
Arguments
- $sec
-
Referenz auf Abschnitts-Objekt.
- $cop
-
Referenz auf ContentProcessor-Objekt.
- $plg
-
Referenz auf Plugin-Definition.
- @keyVal
-
Attribute, die der Entität hinzugefügt werden.
Returns
Zur Entität geblesstes Abschnitts-Objekt.
Description
Erweitere Abschnitts-Objekt $sec und blesse es zu einer Entität.
Entität
entityId() - Eindeutiger Entitätsbezeichner
Synopsis
$entityId = $ent->entityId;
Description
Liefere einen eindeutigen Bezeichner für die Entität.
entityType() - Entitäts-Typ
Synopsis
$entityType = $ent->entityType;
Returns
Entitäts-Typ (String)
Description
Liefere den Typ der Entität, wie er bei der bei der Registrierung der Entitäts-Klasse angegeben wurde.
name() - Name der Entität
Synopsis
$name = $ent->name;
Description
Liefere den Namen der Entität. Dies ist der Wert des Attributs Name:
, bereinigt um Besonderheiten:
ein Sigil am Namensanfang (z.B.
@@
) wird entferntGleichheitszeichen (
=
) innerhalb des Namens (z.B. bei Klassen) werden durch einen Slash (/
) ersetzt
entityFile() - Name/Pfad der Entitätsdatei
Synopsis
$file = $ent->entityFile;
$file = $ent->entityFile($dir);
Arguments
Returns
Dateiname
Description
Liefere den Dateinamen der Entität. Dieser besteht aus der Entity-Id und der Entity-Extension. Wenn angegeben, wird diesem Dateinamen der Pfad $dir vorangestellt.
Quelltext
fileSource() - Gesamter Quelltext
Synopsis
$source = $ent->fileSource;
Returns
Quelltext (String)
Description
Liefere den gesamten Quelltext der Entität, wie er in der Enttitätsdatei steht, einschließlich des Quelltexts der Sub-Entitäten.
fileSourceRef() - Referenz auf gesamten Quelltext
Synopsis
$sourceR = $ent->fileSourceRef;
Returns
Referenz auf Quelltext
Description
Wie $ent->fileSource(), nur dass eine Referenz auf den Quelltext geliefert wird.
appendFileSource() - Ergänze Quelltext um Abschnitts-Quelltext
Synopsis
$ent->appendFileSource($sec);
Returns
nichts
Description
Ergänze Attribut fileSource um den Quelltext des Abschnitts $sec.
Test
pureCode() - Quelltext ohne Kommentare und Inline-Doku (abstrakt)
Synopsis
$str = $ent->pureCode;
Interne Methoden
needsTest() - Liefere/Setze persistenten Test-Status
Synopsis
$needsTest = $ent->needsTest;
$needsTest = $ent->needsTest($state);
Arguments
Returns
Test-Status der Entität
Description
Liefere/Setze den Test-Status der Entität $ent. Der Test-Status ist persistent und bleibt daher über Programmaufrufe hinweg erhalten.
Eine Entität besitzt einen von drei Test-Status:
- 0
-
Nichts zu tun. Die Entität braucht nicht getestet werden.
- 1
-
Der Code der Entität hat sich geändert. Die Entität und alle abhängigen Entitäten müssen getestet werden.
- 2
-
Nur die Entität selbst muss getestet werden. Die Entität selbst wurde nicht geändert, hängt aber von einer Entität ab, die geändert wurde, oder ihre Testdateien oder Testdaten wurden geändert, was keinen Test der abhängigen Entitäten erfordert.
Ohne Parameter aufgerufen, liefert die Methode den aktuellen Test-Status der Entität. Mit Parameter gerufen, setzt die Methode den Test-Status, wobei dieser persistent gespeichert wird.
needsUpdate() - Liefere/Setze persistenten Änderungs-Status
Synopsis
$needsUpdate = $ent->needsUpdate;
$needsUpdate = $ent->needsUpdate($state);
Arguments
Returns
Änderungs-Status der Entität
Description
Liefere/Setze den Änderungs-Status der Entität $ent. Der Änderungs-Status ist persistent und bleibt daher über Programmaufrufe hinweg erhalten.
Eine Entität besitzt einen von zwei Änderungs-Status:
- 0
-
Nichts zu tun. Die Entität wurde nicht geändert.
- 1
-
Die Entitäts wurde geändert. Die Ausgabe-Dateien der Entität müssen neu generiert werden.
Ohne Parameter aufgerufen, liefert die Methode den aktuellen Änderungs-Status der Entität. Mit Parameter gerufen, setzt die Methode den Änderungs-Status, wobei dieser persistent gespeichert wird.
VERSION
1.223
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2024 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.