This project contains a UML model for a travel agency business leveraging class,
components, use case, activity, sequence and state diagrams.

First make sure you are in the 'Modeling' perspective.
If the 'Modeling' perspective is not active, in the title bar select Window > 
Open Perspective > Other > Modeling.

The TravelAgency project appears in the 'Model Explorer' view.  With UML 
Designer, models are stored in a Modeling Project and composed of at least two
files:
 * the data: contains the non-graphical definition of the model elements, it is 
the agency.uml file;
 * the representations: contains the graphical representations of the model 
elements, it is the representations.aird file.

You can navigate to the existing diagrams by selecting items under the 
'representations.aird' file.

For example if you double-click on representations.aird > UML Structural 
Modeling > Class Diagram > entities, the example class diagram will be opened in
a new editor.