The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::ContentProcessor::Type - Entität

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 liefert undef. 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 entfernt

  • Gleichheitszeichen (=) 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

$dir

Verzeichnis, in dem sich die Datei befindet oder in das sie geschrieben wird.

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;

Dateierzeugung

outputFiles() - Liste der Ausgabedateien (abstrakt)

Synopsis

    @files = $ent->outputFiles;

Description

Liefere die Liste der Dateien, die die Entität generiert. Diese Basisklassenmethode liefert eine leere Liste. Sie wird in Subklassen überschrieben.

Interne Methoden

needsTest() - Liefere/Setze persistenten Test-Status

Synopsis

    $needsTest = $ent->needsTest;
    $needsTest = $ent->needsTest($state);

Arguments

$state

Test-Status, der gesetzt wird.

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

$state

Änderungs-Status, der gesetzt wird.

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.154

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.