% ------------------------------------------------------------------ %
%                                                                    %
% Datei:        api3.tex                                             %
% Autor:        Oliver Nietsch                                       %
%                                                                    %
% Universitaet Hamburg                                               %
% Fachbereich Informatik                                             %
% Arbeitsbereich DBIS                                                %
%                                                                    %
% Thema: Studienarbeit: "Gateway zwischen dem StP-Repository         %
%                        und Tycoon"                                 %
%                                                                    %
% Inhalt: LaTeX-Dokument: Studienarbeit,                             %
%                         Anhang A.2: C-Programm api3.c              %
%                                                                    %
% Version vom  22. 2.1996                                            %
% ------------------------------------------------------------------ %

\section{C-Programm api3.c}
\label{Ann:api3}

\subsection{Programmdatei api3.c}
\label{Ann:Programm}

\begin{scriptsize}
\begin{verbatim}
/* -------------------------------------------------------------------- */
/*      Datei:  api3.c                                                  */
/*      Autor:  Oliver Nietsch                                          */
/*                                                                      */
/*      Universitaet Hamburg                                            */
/*      Fachbereich Informatik                                          */
/*      Arbeitsbereich DBIS                                             */
/*                                                                      */
/*      INHALT: Aufruf initialisierter StP API Funktionen aus diesem    */
/*              C-Programm heraus um auf StP Repositoryobjekte          */
/*              zuzugreifen und deren Attributwerte auszugeben.         */
/*              hier: nur exemplarischer Funktionsaufruf einiger,       */
/*                    wichtiger ausgewaehlter StP API Funktionen        */
/*              ProjDir: /local/dbis11/software/StP/project             */
/*              System:  tutor (wg. rw-Rechte)                          */
/*                                                                      */
/*      Version vom   5.10.1995                                         */
/* -------------------------------------------------------------------- */

#include <stdio.h>
#include "oms_stdinc.h"


void
printStatus(oms_status_tp status)
{
  if (status == OMS_FAIL) printf("Zugriff auf Repository nicht moeglich\n");
  else if (status == OMS_SUCCEED) printf("Zugriff auf Repository erfolgt.\n");
  else if (status == OMS_ABORT) printf("Zugriff auf Repository abgebrochen.\n");
  else printf("Unbekannter Fehler.\n");
}


void
printName(char *name)
{
  if (! name)
    printf("Kein Name angegeben\n");
  else
    printf("%s\n", name);
}


void
main()
{
  char                    *name1, *name2, *name3;
  char                    *name = "interessanter Node";
  oms_app_type_tp         type = 701576;      /* int, s. oms.app.types 
                                                 hier: "OMTEvent" */
  oms_object_id_tp        scope = 0;          /* long */
  char                    *sig = "moin_moin";
  oms_object_id_tp        annot = 7;          /* long */ 
  FILE                    *fp;

  oms_node_tp             *node1, *node2, *node3, *node4;
  char                    buf[1024];
  oms_status_tp           status;     


  printf("\n");

  status = oms_sys_repos_open("/local/dbis11/software/StP/project", "tutor");
  printStatus(status);

  name1 = oms_repos_current_server_name();
  printf("Server Name: ");
  printName(name1);

  name2 = oms_repos_current_rep_name();
  printf("System Name: ");
  printName(name2);


  node1 = oms_node_find(name, type, scope, sig);
  if (! node1)
    {
      printf("Node nicht vorhanden bzw. nicht aufgefunden.\n");
      printf("Generiere neuen Node mit den angegebenen Attributwerten.\n");
      printf("Setze 1.Pointer auf erstellten Node.\n");
      node1 = oms_node_create(name, type, scope, sig);
      if (! node1)
        printf("Kann neuen Node nicht erstellen.\n");
    }
  else
    {
      printf("Angegebener Node ist schon vorhanden -> Keine Neugenerierung.\n");
      printf("1.Pointer auf vorhandenen Node gesetzt.\n");
    }

  node2 = oms_node_find(name, type, scope, sig);
  if (! node2)
    printf("Kann vorhandenen Node nicht finden.\n");
  else
    printf("Vorhandenen Node wiedergefunden und 2.Pointer darauf gesetzt.\n");


  node3 = oms_node_find_by_id(node2 -> id);
  if (! node3)
    printf("Kann vorhandenen Node nicht finden.\n");
  else
    printf("Node nochmals aufgefunden und 3.Pointer darauf gesetzt.\n");


  sprintf(buf, "node[name='%s' && type=%d && scope_node_id=%ld && sig='%s']", name, type, scope, sig);
  node4 = oms_node_find_by_query(buf);
  if (node4)
    {
      printf("In Query angegebenen Node im Repository wiedergefunden.\n");
      printf("-> 4.Pointer auf gefundenen Node gesetzt.\n");
    }
  else
    {
      printf("Query negativ. Node nicht vorhanden/ aufgefunden.\n");
      printf("4.Pointer nicht gesetzt.\n");
    }
        
  printf("Node-Attribute (1.Pointer):\n");
  oms_node_print(node1, fp);
  printf("Node-Attribute (4.Pointer):\n");
  oms_node_print(node4, fp);


  oms_node_free(&node4);
  printf("4.Pointer freigegeben (nur Hauptspeicher-Operation).\n");

                
  status = oms_node_update(node1);
    if (status != OMS_SUCCEED)
      printf("Repository-Update (1.Pointer) nicht erfolgt.\n");
    else
      {
        printf("Repository-Update erfolgt.\n"); 
        printf("Node (1.Pointer) im Repository persistent abgelegt.\n");
      }

  
  oms_node_annot_file_id_asgn(node1, 0);
  status = oms_node_update(node1);
    if (status != OMS_SUCCEED)
      printf("Repository-Update (1.Pointer) nicht erfolgt.\n");
    else
      {
        printf("Wert annot_file_id auf 0 gesetzt.\n");
        printf("Repository-Update erfolgt.\n"); 
        printf("Node (1.Pointer) im Repository persistent abgelegt.\n");
      }
  

  printf("Node-Attribute (1.Pointer) nach Wert-Aenderung der annot_file_id:\n");
  node1 = oms_node_find(name, type, scope, sig);
  oms_node_print(node1, fp);
  
  
  status = oms_repos_close();
  printStatus(status);

}
\end{verbatim}
\end{scriptsize}
\newpage

\subsection{Aufbereitete Programmausgabe api3\_Output.txt}
\label{Ann:Programmausg}

\begin{scriptsize}
\begin{verbatim}
/* -------------------------------------------------------------------- */
/*      Datei:  api3_Output.txt                                         */
/*      Autor:  Oliver Nietsch                                          */
/*                                                                      */
/*      Universitaet Hamburg                                            */
/*      Fachbereich Informatik                                          */
/*      Arbeitsbereich DBIS                                             */
/*                                                                      */
/*      INHALT: Aufbereitete Ausgabe des C-Programms "api3.c"           */
/*              Ausfuehrung: api3                                       */
/*              ProjDir: /local/dbis11/software/StP/project             */
/*              System:  tutor (wg. rw-Rechte)                          */
/*                                                                      */
/*      Version vom   5.10.1995                                         */
/* -------------------------------------------------------------------- */

Wertinitialisierung (Node Objekt ist im Repository schon vorhanden):
====================================================================

*name =         "ausgedachter Node";    Node Name
type =          701576;                 hier: Node Typ:OMTEvent
scope =         0;                      scope_node_id
*sig =          "hallo";                signature
annot =         5;                      annot_file_id


Ausgabe:
========

Zugriff auf Repository erfolgt.
Server Name: STP_SERVER
System Name: tutor

Angegebener Node ist schon vorhanden -> Keine Neugenerierung.
1.Pointer auf vorhandenen Node gesetzt.

Vorhandenen Node wiedergefunden und 2.Pointer darauf gesetzt.

Node nochmals aufgefunden und 3.Pointer darauf gesetzt.

In Query angegebenen Node im Repository wiedergefunden.
-> 4.Pointer auf gefundenen Node gesetzt.

Node-Attribute (1.Pointer):
id = 13803
name = ausgedachter Node
type = OMTEvent
scope_node_id = 0
sig = hallo
annot_file_id = 5

Node-Attribute (4.Pointer):
id = 13803
name = ausgedachter Node
type = OMTEvent
scope_node_id = 0
sig = hallo
annot_file_id = 5

4.Pointer freigegeben (nur Hauptspeicher-Operation).

Repository-Update erfolgt.
Node (1.Pointer) im Repository persistent abgelegt.

Wert annot_file_id auf 0 gesetzt.
Repository-Update erfolgt.
Node (1.Pointer) im Repository persistent abgelegt.

Node-Attribute (1.Pointer) nach Wert-Aenderung der annot_file_id:
id = 13803
name = ausgedachter Node
type = OMTEvent
scope_node_id = 0
sig = hallo
annot_file_id = 0

Zugriff auf Repository erfolgt.


Wertinitialisierung (Node Objekt ist im Repository nicht vorhanden):
====================================================================

*name =         "interessanter Node";   Node Name
type =          701576;                 hier: Node Typ:OMTEvent
scope =         0;                      scope_node_id
*sig =          "moin_moin";            signature
annot =         7;                      annot_file_id


Ausgabe:
========

Zugriff auf Repository erfolgt.
Server Name: STP_SERVER
System Name: tutor

Node nicht vorhanden bzw. nicht aufgefunden.
Generiere neuen Node mit den angegebenen Attributwerten.
Setze 1.Pointer auf erstellten Node.

Vorhandenen Node wiedergefunden und 2.Pointer darauf gesetzt.

Node nochmals aufgefunden und 3.Pointer darauf gesetzt.

Query negativ. Node nicht vorhanden/ aufgefunden.
4.Pointer nicht gesetzt.

Node-Attribute (1.Pointer):
id = 14103
name = interessanter Node
type = OMTEvent
scope_node_id = 0
sig = moin_moin
annot_file_id = 7

Node-Attribute (4.Pointer):
4.Pointer freigegeben (nur Hauptspeicher-Operation).

Repository-Update erfolgt.
Node (1.Pointer) im Repository persistent abgelegt.

Wert annot_file_id auf 0 gesetzt.
Repository-Update erfolgt.
Node (1.Pointer) im Repository persistent abgelegt.

Node-Attribute (1.Pointer) nach Wert-Aenderung der annot_file_id:
id = 14103
name = interessanter Node
type = OMTEvent
scope_node_id = 0
sig = moin_moin
annot_file_id = 0

Zugriff auf Repository erfolgt.
\end{verbatim}
\end{scriptsize}
\newpage

\input{start}
