<!DOCTYPE html>
<html lang="en">
  <head>
    
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
    <link rel="stylesheet" href="https://www.eclipse.org/elk/css/elk.css">
    <link rel="stylesheet" href="https://www.eclipse.org/elk/css/prism.css">

    <title>ELK Metadata Language (ELK)</title>

    
    
  </head>
  <body>

<nav class="navbar navbar-toggleable-md navbar-inverse">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="https://www.eclipse.org/elk/">Eclipse Layout Kernel</a>
  <div class="collapse navbar-collapse" id="navbarCollapse">
    <ul class="navbar-nav mr-auto">

      
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../downloads.html">Downloads</a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../gettingstarted.html">Getting Started</a>
        </li>
      
        
        <li class="nav-item active">
          <a class="nav-link" href="../../documentation.html">Documentation <span class="sr-only">(current)</span></a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../reference.html">Reference</a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../support.html">Support</a>
        </li>
      

    </ul>
  </div>
</nav>


<div class="container px-3 py-5">


<div class="row">
  <div class="col-sm-9">
    <h1>ELK Metadata Language</h1>

    

<p>As described <a href="../../documentation/tooldevelopers/usingplainjavalayout.html">in other parts of the documentation</a>, the <em>Eclipse Layout Kernel</em> relies on metadata about all available layout algorithms and the layout options they support. Supplying metadata for your layout algorithm is done by writing an <em>ELK Metadata File</em> in our textual metadata language. The file is used by the ELK SDK to generate the following Java classes:</p>

<ul>
<li>An <code>ILayoutMetaDataProvider</code> that contains <code>IProperty</code> objects for each layout option you declare, along with a method that registers these options and layout algorithm categories with the <code>LayoutMetaDataService</code>. It is this class that needs to be registered through the <code>META-INF/services/ILayoutMetaDataProvider</code> file.</li>
<li>One <code>ILayoutMetaDataProvider</code> for each algorithm you declare. This contains one <code>IProperty</code> object for each layout option your algorithm supports (with the configured default value), as well as a method that registers your algorithm and its supported options with the <code>LayoutMetaDataService</code>. You should use the <code>IProperty</code> objects in this class to retrieve layout option values to ensure that you get correct defaults if an option is not set. These classes do not have to be registered with ELK&rsquo;s extension point because they are automatically registered through the main metadata class.</li>
</ul>

<p>This page explains how to write a metadata file. See the end of the page for an example metadata file of a very simple layout algorithm. (Pro-tip: Reading the previous sentence in action-movie-trailer-narrator voice makes it more compelling.)</p>

<h2 id="creating-and-registering-your-metadata-file">Creating and Registering Your Metadata File</h2>

<p>Follow these steps to add a metadata file to your layout algorithm project:</p>

<ol>
<li>Right-click your project&rsquo;s base package (which should have the same name as your plug-in project), and click <em>New - File</em>. Note that the base package cannot be empty (of course, you would never use the default empty package anyway since that&rsquo;s bad style now, would you&hellip;).</li>
<li>Give your file a sensible name (which is usually the name of your algorithm), and add the file extension <code>.melk</code>. Click <em>Finish</em>.</li>
<li>If Eclipse asks you whether you want to add the <em>Xtext nature</em> to your project, click <em>Yes</em>.</li>

<li><p>The ELK SDK needs some basic information in your file to generate your
<code>ILayoutMetaDataProvider</code>:</p>

<pre><code class="language-melk">package package.the.melk.file.is.in

bundle {
    // Change the following line according to what you want the
    // package and name of your meta data provider to be
    metadataClass options.MetaDataProvider
}
</code></pre>

<p>See below for details on what this is doing.</p></li>

<li><p>Add a folder <code>META-INF/services</code> inside one of your project&rsquo;s source folders (by default, we put it right inside of the <code>src</code> folder).</p></li>

<li><p>In that folder, create a file named <code>ILayoutMetaDataProvider</code>.</p></li>

<li><p>In that file, add a single line of text which contains the fully qualified name of the <code>ILayoutMetaDataProvider</code> that was generated for you by the ELK SDK.</p></li>

<li><p>Save and close the editor.</p></li>
</ol>

<h2 id="the-metadata-language">The Metadata Language</h2>

<p>The ELK metadata language contains everything you need to make the following information available to ELK:</p>

<ul>
<li>Which layout algorithms your plug-in provides, and which classes implement them.</li>
<li>Which layout options your plug-in contributes, and which layout options your algorithms support.</li>
<li>Which layout algorithm categories your plug-in contributes, and which of them your algorithms belong to.</li>
</ul>

<p>The basic layout of a metadata file looks something like this:</p>

<pre><code class="language-plain">&lt;package declaration&gt;

&lt;imports section&gt;

&lt;bundle information&gt;

&lt;metadata declarations&gt;
</code></pre>

<p>The package declaration and imports section work the same way as they do in Java: the package declaration indicates where the metadata file lies, and the imports import classes used in the file&rsquo;s declarations.The rest of this page will walk you through the remaining parts.</p>

<p><strong>Note:</strong> Feel free to use comments. The metadata language supports Java-style single-line comments (<code>//</code>) and multi-line comments (<code>/* */</code>).</p>

<h3 id="bundle-information">Bundle Information</h3>

<p>To be able to turn your metadata file into an <code>ILayoutMetaDataProvider</code>, ELK needs some basic information. This is what the bundle information section is all about. Here&rsquo;s what it would look like for a typical metadata file:</p>

<pre><code class="language-melk">/**
 * An optional bunch of Javadoc that will end up as the Javadoc for the
 * generated class.
 */
bundle {
    // The sub-package and name of the ILayoutMetaDataProvider that will be
    // generated for you. This is required for the generation process to
    // work.
    metadataClass properties.AwesomeOptions

    // A prefix that will automatically be added to the IDs of new layout
    // options declared in this metadata file. To save your a bit of typing.
    // Not strictly required, but highly recommended.
    idPrefix org.eclipse.elk.awesome
}
</code></pre>

<h3 id="options">Options</h3>

<p>While <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">this section of our documentation</a> describes what layout options are and how to use them, this section focuses on making their mere existence known to the world. Doing so will cause the ELK SDK to generate <code>IProperty</code> constants in your generated <code>ILayoutMetaDataProvider</code> that you can use <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">as described</a> to set layout option values. An option declaration can become rather complex, so here&rsquo;s what it generally looks like (we will go into the missing details below):</p>

<pre><code class="language-melk">// The option's ID, appended to the idPrefix declared in the bundle information
&lt;deprecated&gt; &lt;modifier&gt; option myLayoutOptionId : &lt;type&gt; {
    // A user-readable label for the layout option
    label &quot;Wobblyness Factor&quot;

    // A short user-readable description. This will also become the property
    // constant's Javadoc comment.
    description
        &quot;Controls the overall wobblyness of edges when connected
         to wobbles.&quot;

    // An optional default value used when the option is not configured
    // for a given graph. Of course, the given expression must evaluate
    // to the layout option's type as specified above.
    default = Direction.UNDEFINED

    // Optional lower and upper bounds option values must satisfy to be
    // valid. These must be comparable to the layout option's type as
    // specified above.
    lowerBound = 3
    upperBound = 5

    // Which graph elements the option can be meaningfully applied to.
    targets &lt;targets&gt;

    // An optional list of an arbitrary number of alternate IDs your
    // layout option should be accessible under. You should probably
    // not use this. We introduced this feature to ease the process of
    // transitioning when our project became the Eclipse Layout Kernel,
    // which caused all layout option IDs to change.
    legacyIds the.first.old.id.of.our.option,
              the.second.old.id.of.our.option

    // Some layout options only make sense if another option has a certain
    // value. Add a 'requires' declaration to each such dependency.
    requires some.other.layout.option.id == 42
}
</code></pre>

<p>Let&rsquo;s go through what the sample code didn&rsquo;t explain:</p>

<ul>
<li><p><code>&lt;deprecated&gt;</code></p>

<p>Prepending the option declaration with the <code>deprecated</code> keyword will mark the generated property constant as being deprecated in its Javadoc comment.</p></li>

<li><p><code>&lt;modifier&gt;</code></p>

<p>Option declarations support the following modifiers, of which one can be used:</p>

<table>
<thead>
<tr>
<th>Modifier</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>advanced</code></td>
<td> Advanced layout options are not shown in the <em>Layout</em> view by default. The user has to explicitly instruct the view to show advanced layout options.</td>
</tr>

<tr>
<td><code>programmatic</code></td>
<td>Programmatic layout options are not shown in the <em>Layout</em> view at all, but only set through programmatic layout configuration. The reason is often that they are either highly specialized, or that values of their data type cannot be properly entered in the layout view.</td>
</tr>

<tr>
<td><code>output</code></td>
<td>Output options are not really layout options at all, but are used by layout algorithms to annotate the input graph with further layout information that could not be returned otherwise. Not being input options at all, these options are of course not shown in the layout view.</td>
</tr>

<tr>
<td><code>global</code></td>
<td>A layout option that is global can be understood as a layout option that guides ELK&rsquo;s implementation of the layout process rather than influencing what a single layout algorithm does. You should not need to declare global options.</td>
</tr>
</tbody>
</table></li>

<li><p><code>&lt;type&gt;</code></p>

<p>The data type of a layout option. This can be any valid and visible Java type. Note that primitive types will be replaced by their object counterparts (for example, <code>int</code> will become <code>Integer</code>).</p></li>

<li><p><code>&lt;targets&gt;</code></p>

<p>Defines which graph elements a layout option can meaningfully be applied to. This mainly influences which layout options the <em>Layout</em> view shows depending on the currently selected diagram element. An option can have zero or more targets, defined as a comma-separated list. The following are valid targets:</p>

<table>
<thead>
<tr>
<th>Target</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>parents</code></td>
<td>The option makes sense for nodes that contain further nodes themselves (<em>parent nodes</em>).</td>
</tr>

<tr>
<td><code>nodes</code></td>
<td>The option makes sense for nodes (which also includes parent nodes).</td>
</tr>

<tr>
<td><code>edges</code></td>
<td>The option makes sense for edges.</td>
</tr>

<tr>
<td><code>ports</code></td>
<td>The option makes sense for ports.</td>
</tr>

<tr>
<td><code>labels</code></td>
<td>The option makes sense for labels.</td>
</tr>
</tbody>
</table>

<p>Note that there is nothing that stops programmers from setting a port option on a node. All you are saying with your declaration is that doing so won&rsquo;t make any difference because you will only interpret the option when it is set on ports.</p></li>
</ul>

<h4 id="grouping-layout-options">Grouping Layout Options</h4>

<p>Everyone likes things to be neat and tidy. Well, alright, <em>we</em> like things to be neat and tidy, which is why related options can be grouped together:</p>

<pre><code class="language-melk">group thegroupname {
    // Your options and nested groups go here
}
</code></pre>

<p>Groups do not just make the metadata file more readable, but also have an effect on the identifiers of your options: all the names of groups your options are in will be placed between the option ID prefix and the option&rsquo;s actual name, thus reflecting the grouping in option IDs as well.</p>

<h4 id="a-note-on-enumerations">A Note on Enumerations</h4>

<p>Layout options may well have an enumeration value type. Just as layout options can be declared to be advanced, this may also be true for enumeration values. Take for example a layout algorithm that offers different implementations of a certain feature. The implementation to be used is specified through a layout option that enumerates all possibilities. However, let us assume that some of the implementations are not quite ready for the public. (Homework assignment: work out five reasons why this could be the case.) The corresponding enumeration values can be annotated to make this clear:</p>

<pre><code class="language-java">public enum Strategy {
    WORKS_ALWAYS,
    WORKS_ON_SUNDAYS,
    @AdvancedPropertyValue
    WORKS_IF_YOU_ARE_CAREFUL,
    @ExperimentalPropertyValue
    WORKS_IN_EXPERIMENTAL_CONDITIONS
}
</code></pre>

<h3 id="categories">Categories</h3>

<p>Each layout algorithm can be assigned to a layout algorithm category. The categorization is for example used by the layout algorithm selection dialog or the documentation. While ELK already provides a number of predefined categories, this is how you would define your own:</p>

<pre><code class="language-melk">// The category's ID, appended to the idPrefix declared in the bundle information
category awesome {
    // A short category label that can be shown to users.
    label &quot;Awesome Algorithms&quot;

    description
        &quot;A not-too-long but totally meaningful description of what this category
         of layout algorithms is all about. Will be shown to users.&quot;
}
</code></pre>

<h3 id="algorithms">Algorithms</h3>

<p>Of course, everything we have done so far was simply in support of the main act: declaring the layout algorithms you have worked hard to develop (just to find out that there&rsquo;s hundreds of little details you got wrong; we&rsquo;ve been there&hellip;). Here&rsquo;s what an algorithm declaration looks like:</p>

<pre><code class="language-melk">// The algorithm's ID
algorithm algorithmid(&lt;class&gt;) {
    // User-readable short name and description for the algorithm
    label &quot;Excellent Algorithm&quot;

    description
        &quot;A brief and completely sensible description of what this algorithm
         does. Will be shown to users.&quot;

    // Optional name of the ILayoutMetaDataProvider class generated for this
    // algorithm
    metadataClass &lt;metadataClass&gt;

    // Optional validator class called by ELK before actually running the
    // layout algorithm.
    validator &lt;validatorClass&gt;

    // Optional path to an image that provides a preview of the kinds of
    // layouts this algorithm will produce. Relative to the plug-in's
    // root folder.
    preview path/to/preview/image.png

    // Optional ID of a category of layout algorithms this algorithm belongs to.
    category the.category.id

    // List of graph features this algorithm explicitly supports (see below)
    features &lt;features&gt;

    // Declarations for each layout option this algorithm supports (see below)
    &lt;supportedOptions&gt;
}
</code></pre>

<p>Three details deserve more explanation:</p>

<ul>
<li><p><code>class</code></p>

<p>The main class that provides the entry to your layout algorithm. This must be a subclass of <code>AbstractLayoutProvider</code> and may have to be imported in your metadata file&rsquo;s import section. <code>AbstractLayoutProvider</code> has an <code>initialize(String)</code> method that expects a <code>String</code> parameter to customize its behavior. You can define that parameter&rsquo;s value for your algorithm like this:</p>

<pre><code class="language-melk">algorithm myAlgorithm(TheAbstractLayoutProviderSubclass#TheParamterValue)
</code></pre></li>

<li><p><code>metadataClass</code></p>

<p>The metadata class will contain the property constants you should use to access your algorithm&rsquo;s property values. If no name is specified, a class with a default name will be generated in the package specified by the metadata file. <em>This class name must be distinct from any other metadata class name, both for algorithms and for the bundle itself.</em></p></li>

<li><p><code>validatorClass</code></p>

<p>Layout algorithms may have certain requirements concerning the graphs they are run on, including connectivity, hierarchy, or simlpy configuration. Instead of checking the input graph&rsquo;s validity in the algorithm itself, a validator class can be specified that is run automatically when layout is invoked through the <code>DiagramLayoutEngine</code>. The class must implement the <code>org.eclipse.elk.core.validation.IValidatingGraphElementVisitor</code> interface.</p></li>

<li><p><code>features</code></p>

<p>This is a comma-separated list of structural graph features that an algorithm explicitly supports. Most of these declarations are purely informational, but graph layout engines might decide to change the layout graph passed to your algorithm depending on whether it supports the original graph&rsquo;s features or not. At the time of writing, these are the possible graph features:</p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>clusters</code></td>
<td> <strong>TODO: Document</strong></td>
</tr>

<tr>
<td><code>compound</code></td>
<td>Whether an algorithm supports the layout of hierarchical graphs. If it does not, the ELK graph layout engine will only ever give the algorithm a single level of hierarchy to be laid out at a time, regardless of what the user requests.</td>
</tr>

<tr>
<td><code>disconnected</code></td>
<td>Whether an algorithm has explicit support for disconnected components (groups of nodes without connection to other groups of nodes).</td>
</tr>

<tr>
<td><code>edge_labels</code></td>
<td> Whether an algorithm knows how to place edge labels or not. A graph layout engine may decide to run a post-processing on your algorithm&rsquo;s result to place edge labels afterwards.</td>
</tr>

<tr>
<td><code>inside_self_loops</code></td>
<td>Whether an algorithm supports routing a self loop through the inside of a node instead of around it.</td>
</tr>

<tr>
<td><code>multi_edges</code></td>
<td>Whether an algorithm supports edges that have the same source and target.</td>
</tr>

<tr>
<td><code>ports</code></td>
<td>Whether an algorithm supports edges connected to nodes through explicit ports.</td>
</tr>

<tr>
<td><code>self_loops</code></td>
<td>Whether an algorithm supports self loops (edges that connect a node to itself).</td>
</tr>
</tbody>
</table></li>

<li><p><code>supportedOptions</code></p>

<p>Algorithms declare which layout options they support, either with their default values as originally declared or with overridden default values. Each supported option ends up as an <code>IProperty</code> constant in the algorithm&rsquo;s layout meta data provider, complete with correct default values. These constants should be used to retrieve option values from within the algorithm code.</p>

<p>An option support declaration looks like this:</p>

<pre><code class="language-melk">supports the.option.id          // Standard default value
supports the.option.id = 42     // Overridden default value
</code></pre></li>
</ul>

<h2 id="example">Example</h2>

<p>The following is an example metadata file for a very simple layout algorithm:</p>

<pre><code class="language-melk">package cds.layout.simple

import cds.layout.simple.SimpleLayoutProvider
import org.eclipse.elk.core.math.ElkPadding

bundle {
    metadataClass options.SimpleMetaDataProvider
    idPrefix cds.layout.simple
}

option reverseInput : boolean {
    label &quot;Reverse Input&quot;
    description
        &quot;True if nodes should be placed in reverse order of their
        appearance in the graph.&quot;
    default = false
    targets parents
}

algorithm simple(SimpleLayoutProvider) {
    label &quot;Simple Layout Algorithm&quot;
    description
        &quot;This layout provider places nodes along a horizontal or a vertical line.&quot;
    metadataClass options.SimpleOptions

    supports reverseInput
    supports org.eclipse.elk.padding = new ElkPadding(10)
    supports org.eclipse.elk.spacing.edgeEdge = 5
    supports org.eclipse.elk.spacing.edgeNode = 10
    supports org.eclipse.elk.spacing.nodeNode = 10
}
</code></pre>

<p>Note how we override the default value of several properties for this algorithm.</p>

  </div>

  <div class="secnav col-sm-3">
  <ul>
    
    
      
    
      
    
      
        




  
  <a href="../../documentation/tooldevelopers.html">
    <li class="navlevel-1">
      Tool Developers
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/graphdatastructure.html">
    <li class="navlevel-2">
      Graph Data Structure
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/graphdatastructure/coordinatesystem.html">
    <li class="navlevel-3">
      Coordinate System
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">
    <li class="navlevel-3">
      Layout Options
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/jsonformat.html">
    <li class="navlevel-3">
      JSON Format
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/elktextformat.html">
    <li class="navlevel-3">
      ELK Text Format
    </li>
  </a>
  


  

  
  <a href="../../documentation/tooldevelopers/usingalgorithmsdirectly.html">
    <li class="navlevel-2">
      Using Algorithms Directly
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingplainjavalayout.html">
    <li class="navlevel-2">
      Using Plain Java Layout
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout.html">
    <li class="navlevel-2">
      Using Eclipse Layout
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/connectingtoelk.html">
    <li class="navlevel-3">
      Connecting to ELK
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/advancedconfiguration.html">
    <li class="navlevel-3">
      Advanced Configuration
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/layoutviewsupport.html">
    <li class="navlevel-3">
      Layout View Support
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/dependencyinjection.html">
    <li class="navlevel-3">
      Dependency Injection
    </li>
  </a>
  


  


  

  
  <a href="../../documentation/algorithmdevelopers.html">
    <li class="navlevel-1">
      Algorithm Developers
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/gettingeclipseready.html">
    <li class="navlevel-2">
      Getting Eclipse Ready
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/creatinganewproject.html">
    <li class="navlevel-2">
      Creating a New Project
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/metadatalanguage.html">
    <li class="navlevel-2 active">
      ELK Metadata Language
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/metadatalanguage/automaticbuilds.html">
    <li class="navlevel-3">
      Automatic Builds
    </li>
  </a>
  


  

  
  <a href="../../documentation/algorithmdevelopers/algorithmimplementation.html">
    <li class="navlevel-2">
      Algorithm Implementation
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/algorithmimplementation/algorithmstructure.html">
    <li class="navlevel-3">
      Structuring Algorithms
    </li>
  </a>
  


  

  
  <a href="../../documentation/algorithmdevelopers/algorithmdebugging.html">
    <li class="navlevel-2">
      Algorithm Debugging
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/randomgraphs.html">
    <li class="navlevel-2">
      Random Graph Generation
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/unittesting.html">
    <li class="navlevel-2">
      Unit Tests
    </li>
  </a>
  


  

  
  <a href="../../documentation/contributors.html">
    <li class="navlevel-1">
      ELK Contributors
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/contributors/developmentsetup.html">
    <li class="navlevel-2">
      Development Setup
    </li>
  </a>
  

  
  <a href="../../documentation/contributors/developmentworkflow.html">
    <li class="navlevel-2">
      Development Workflow
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/contributors/developmentworkflow/installingwithoomph.html">
    <li class="navlevel-3">
      Installing With Oomph
    </li>
  </a>
  


  

  
  <a href="../../documentation/contributors/buildingelk.html">
    <li class="navlevel-2">
      Building ELK
    </li>
  </a>
  


  


      
    
      
    
      
    
  </ul>

  <div class="incubation-egg">
    <a href="https://www.eclipse.org/projects/what-is-incubation.php">
      <img src="https://www.eclipse.org/images/egg-incubation.png" alt="Incubation" />
    </a>
  </div>
</div>

</div>

    </div>
    <footer role="contentinfo">
      <div class="container">
        <div class="row">
            <div class="col">
              <span class="hidden-print">
                <a href="https://www.eclipse.org"><img class="logo-eclipse-white img-responsive" alt="logo" src="../../img/eclipse_foundation_logo.svg"/></a>
              </span>
            </div>
            <div class="col">
              
            </div>
          </div>
        <div class="row">
          <div class="col hidden-print">
            <a href="http://www.eclipse.org/">Eclipse Foundation</a><br/>
            <a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
            <a href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
            <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
            <a href="http://www.eclipse.org/legal">Legal</a>
          </div>
          <div class="col">
              <p class="copyright-text">Copyright &copy; Eclipse Foundation, Inc. All Rights Reserved.</p>
          </div>
        </div>
      </div>

    </footer>

    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
    <script src="https://www.eclipse.org/elk/js/prism.js"></script>

    
    <script>$(function() { $('table').addClass('table'); })</script>
  </body>
</html>
