Accessing TextGrid Data Structures from your Lab plugin

last modified on Jul 28, 2015

As mentioned before, you will typically just implement Eclipse tooling – see the corresponding documentation and tutorials for that. This section hints at some important concepts to access TextGrid specific data structures in the Lab.

TextGridObject

Instead of files and folders, TextGrid uses objects that bundle some content with a set of metadata. Each object has a TextGrid URI (like textgrid:47k11.0) that uniquely identifies the object.

In the TextGridLab, there is a data structure called TextGridObject which represents one of those objects. In one Lab instance, there will be at most one TextGridObject per object and there are factory methods that produce TextGridObjects from URIs, out of the blue, or from metadata blobs.

Accessing actual metadata

Each TextGridObject has a .getMetadata() getter that retrieves a copy of the metadata and a corresponding setter that updates the object's metadata. The makeMetadataPersistent() method can be used to push the metadata to the repository explicitly, but metadata is also updated whenever you save the object's contents using the standard methods described below.

There are also some helper methods to deal with specific frequently-used metadata fields.

Accessing an object's content

We offer an object's content in the same way as Eclipse offers access to files in its workspace: Using Eclipse's IFile interface.

Adapter Pattern

Eclipse makes heavy use of the adapter pattern to convert between objects. This allows for less tight coupling between classes than inheritance or common interfaces. It works by using a global adapter manager which maintains a list of adapter factories that can convert between objects and convenience methods (adaptableObject.getAdapter(targetClass)) to access this.

Thus, conversion between the layers works by using the adapter pattern as provided by Eclipse.

I.E., if you have a TextGridObject and need an IFile,

TextGridObject textGridObject;
/* ... fill textGridObject ... */
IFile file = (IFile) textGridObject.getAdapter(IFile.class);
if (file != null)
  /* do something with file */

or vice versa

  IFile file;
/* ... fill file ... */
TextGridObject textGridObject = (TextGridObject) file.getAdaptor(TextGridObject.class);

The IFiles have methods for reading and writing and they can also be passed, e.g., to plain Eclipse editors (by means of a IFileEditorInput, which is a standard Eclipse interface that can also be adapted to (and from) directly from TextGridObjects).

Accessing other TextGrid services

The info.textgrid.lab.core.model plugin contains APIs for accessing the basic object and project structure, see the API documentation for details. If you need to interact directly with TextGrid services, you will find the respective client libraries in the Lab as well. For TG-search, there is a wrapper and a bunch of utility classes. You might also look into the UI utilities for, e.g., GUI elements that represent search results.

Configuring TextGrid services, and AAI

If you do not find ready-made client factories in the corresponding wrapper plugins and need to work with the core service APIs, you'll need to provide an endpoint (the address where the service is deployed) and a session id.

The endpoint is available via the Configuration Service.

To get the session id, call RBACSession.getInstance().getSID(boolean). If you pass true, this might trigger a login dialog. If the function returns an empty string, the user has not logged in – passing on the empty string to functions that require a session id still allows to access public ressources.