Statistik für Abschnittsverweise generieren

EGL beinhaltet vier Java™-Klassen, die Sie zum Erstellen eines Protokolls von Abschnitten verwenden können, auf die von einem Programm verwiesen wird.

Verwenden Sie die Klasse 'PartInfoFactory' zum Generieren von Statistikdaten zu Abschnittsverweisen innerhalb der Eclipse-IDE; verwenden Sie die Klasse 'GenerationServer' zusammen mit der Klasse EGLSDK, um ein Protokoll außerhalb der integrierten Entwicklungsumgebung (IDE) zu generieren.

PartInfoFactory

Die Klasse 'PartInfoFactory' befindet sich an der folgenden Position:
com.ibm.etools.egl.ui.parts.PartInfoFactory

Zur Klasse 'PartInfoFactory' gehören folgende Methoden:

public static IPartInfo[] getReferencePartList(IFile eglFile)
                 throws Exception
public static IPartInfo[] getReferencePartList(IFile eglFile,
                 boolean removeUnusedMembers)
                 throws Exception
public static IPartInfo[] getReferenceElementsList(IFile eglFile)
                 throws Exception
public static IPartInfo[] getReferenceElementsList(IFile eglFile,
                 boolean removeUnusedMembers)
                 throws Exception
IPartInfo
Die Feldgruppe, die von getReferencePartList() zurückgegeben wird und die den ersten Hauptabschnitt in eglFile und die zugehörigen Abschnitte enthält, auf die verwiesen wird.
eglFile
Die Datei, die den Abschnitt enthält, für den Sie die Verweisstatistik generieren.
removeUnusedMembers
Gibt an, ob nicht verwendete Abschnitte aus der Liste der zurückgegebenen Abschnitte entfernt werden sollen.
Mit dem folgenden Beispiel wird eine Abschnittsliste aus der Datei genPart.egl abgerufen und die Liste in IPartInfo gespeichert:
IPartInfo[] parts = PartInfoFactory.getReferencePartList(genPart); 

GenerationServer

Die Klasse 'GenerationServer' befindet sich an der folgenden Position:
com.ibm.etools.egl.GenerationServer

Zur Klasse 'GenerationServer' gehören folgende Methoden:

public static void addListener(IGenerationListener listener)
public static void removeListener(IGenerationListener listener)
public static void enableGeneration (boolean flag)

'enableGeneration' ermöglicht das Festlegen eines booleschen Flags mit 'true' (wahr) oder 'false' (falsch), um anzugeben, ob die Generierung des Abschnitts erfolgen soll. Der Standardwert ist 'true'. Wenn Sie vor dem Aufrufen von EGLSDK den Wert auf 'false' setzen, können Sie eine Liste der zu einer EGL-Quelle gehörigen Abschnitte analysieren und erstellen, ohne dass nachfolgend eine Generierung erfolgt.

listener
Eine Instanz der Schnittstelle 'IGenerationListener'. Lesen Sie in diesem Thema den Abschnitt zur Schnittstelle 'IGenerationListener'.
public static IPartInfo[] getAllUniqueReferencedParts(
                             IPartInfo[] parts)
public static IElementInfo[] getAllUniqueReferecedElements(
                                IElementInfo[] elements)
parts
Eine Feldgruppe von Abschnitten, die zum Erstellen einer Feldgruppe aller Abschnitte verwendet wird, auf die verwiesen wird. Alle Abschnitte in der Feldgruppe sind eindeutig.
elements
Eine Feldgruppe von Elementen, die zum Erstellen einer Feldgruppe aller referenzierten Abschnitte, verschachtelten Funktionen, referenzierten Programme und weiterer Elemente verwendet wird. Alle Elemente in der Feldgruppe sind eindeutig.
Mit dem folgenden Beispiel wird die Klasse EGLSDK in einem Java-Programm aufgerufen, um eine EGL-Generierung außerhalb der Eclipse-IDE aufzurufen.
GenerationServer.addListener(listener);
com.ibm.etools.egl.util.EGLSDK eglsdk = new com.ibm.etools.egl.util.EGLSDK();
GenerationServer.removeListener(listener); 

Schnittstelle 'IGenerationListener'

Zur Schnittstelle 'IGenerationListener' gehören folgende Methoden:

begin()
Wird zu Beginn der Generierung für einen bestimmten Abschnitt aufgerufen.
acceptGeneratedPart(part)
Bietet die Benachrichtigung, dass der Abschnitt part generiert wurde. Diese Methode kann in einer einzigen Generierung mehrfach aufgerufen werden, wenn Sie zugeordnete Abschnitte generieren (Datentabellen (DataTables) und Formulargruppen (FormGroups)).
acceptAssociatedPart(part)
Bietet die Benachrichtigung, dass während der Generierung der Abschnitt part gefunden wurde.
end()
Wird am Ende der Generierung für einen bestimmten Abschnitt aufgerufen.

Schnittstelle 'IPartInfo'

Zur Schnittstelle 'IPartInfo' gehören folgende Methoden:

getPackageName()
Gibt den Paketnamen des Abschnitts zurück. Der Name ist eine durch '.' begrenzte Zeichenfolge aus Paketen.
getResourceName()
Gibt den vollständigen Pfadnamen der Datei zurück, in der der Abschnitt definiert ist.
getSource()
Gibt den EGL-Quellentext für diesen Abschnitt zurück, bei dem es sich um ein Programm, eine Funktion, einen Datensatz oder einen anderen Abschnitt handeln kann. Für diese Methode ist erforderlich, dass der EGL-Abschnitt erstellt wurde und sie beruht auf der Richtigkeit des von EGL kompilierten Informationsabrufs.
getSource(Set resources, List partList)
Gibt den EGL-Quellentext für diesen Abschnitt zurück, bei dem es sich um ein Programm, eine Funktion, einen Datensatz oder einen anderen Abschnitt handeln kann. Für diese Methode ist nicht erforderlich, dass der EGL-Abschnitt erstellt wurde und sie veranlasst ein Parsing der EGL-Quelle dieses Abschnitts während des Aufrufs.

In der Regel werden ein neues 'Set'- und ein 'ArrayList'-Element abgerufen und anschließend freigegeben, die die Logik umgeben, damit alle Abschnitte in der Aktion verarbeitet werden. Beispiel:

public void run(IAction action) {
    resources = new HashSet();
    partList = new ArrayList();
    Iterator selectionIterator = this.selection.iterator();
    while (selectionIterator.hasNext()) {
       Object object = selectionIterator.next();
       if ((object instanceof IEGLFile)) {
          IEGLFile iEglFile = (IEGLFile) object;
          try {
             IFile eglFile = ResourcesPlugin.getWorkspace().getRoot().getFile(iEglFile.getUnderlyingResource().getFullPath());
             IPartInfo[] associatedParts = PartInfoFactory.getReferencePartList(eglFile);
             generateEglSourceFile(associatedParts, eglFile);
          } catch (Exception e) {
             e.printStackTrace();
          }
       }
    }
    resources = null;
    partList = null;
}
private static void generateEsf(IPartInfo[] associatedParts, IFile eglFile) {
    ....
    associatedParts = GenerationServer.getAllUniqueReferecedParts(associatedParts);
    try {
      BufferedWriter out = new BufferedWriter(new FileWriter(outFile, false));
      for (int i = 0; i < associatedParts.length; i++) {
        out.write(associatedParts[i].getSource(resources, partList));
        out.write("\n");
      }
      out.close();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

Feedback