\chapter{Use cases}

In this appendix, we consider particular ``use cases'' or
``scenarios'', i.e. common situations that the user will need to
handle.  The purpose of this exercise is twofold:

\begin{enumerate}
\item To give the readers of this specification an idea of how the
  system might be used.
\item To determine the requirements of the object store
  \seechap{chap-object-store} based on real situations that it must
  handle, or not.
\end{enumerate}

\section{Opening a document for reading}

This scenario is defined by the fact that the user wants to start the
execution of some application, while giving it a particular document,
presumably of the type that this application can handle.  Examples of
such situation are:

\begin{itemize}
\item The user wants to read a text document in PDF format.%
  \footnote{Notice that PDF is a way of storing a structured document
    in a file consisting of a sequence of bytes.  This is not the kind
    of document we mean here.  We rather mean some structured version
    of the document containing the same sections as the PDF
    specification requires, but that is not stored as a sequence of
    bytes, but rather as a graph of instances of classes that together
    represent such a document.}
\item The user wants to watch a particular movie.
\item The user wants to listen to some piece of music.
\end{itemize}

In all these cases, there are several ways in which the scenario can
play out:

\begin{itemize}
\item The user might be interacting with a listener, and the user
  knows some \commonlisp{} form (perhaps the name of a special
  variable) to type in order to obtain the desired document.  In this
  case, the user calls the top-level function of the application,
  passing it the result of the form as an argument.
\item The user might be interacting with a listener, but the document
  is somewhere in the object store.  Then the user first issues a
  request to the object store, perhaps with the document type and the
  title (or part of the title).  The object store then presents%
  \footnote{By ``present'', we mean that the output is in the form of
    \clim{} presentations that are clickable.} the documents that
  correspond to the query.  Finally the user types the name of the
  application, but instead of giving a form as an argument, he or she
  clicks on the relevant presentation.
\item The user might already be interacting with the right
  application.  Therefore, he or she asks the application to read a
  different (or another) document.  By doing this, the application
  starts a ``document selector'' that allows the user to either type a
  \commonlisp{} form with the new document as its value, or to issue a
  request to the object store.  When the user selects the document, it
  becomes the reusult of the call to the document selector, and the
  application starts the execution on the new document.
\end{itemize}
