GMF Diagram Partitioning
The goal of this tutorial is to be able to create a GMF editor, where you can expand certain boxes to edit their contents, like so:

This tutorial was based on an excellent Eclipse news posting (reposted) and another discussion. Also see GMF, GMF Troubleshooting and Creating a new GMF Editor.
If you want to add nodes within a node itself, try the second part of the GMF tutorial: http://wiki.eclipse.org/GMF_Tutorial_Part_2
- Create your source.ecore
 - We are using the following example .ecore:
 
- Create your source.genmodel
 - Make sure you set the package
 - Right click .genmodel and generate model code
 - Right click .genmodel and generate edit code
 
Now we create the super diagramming code.
- Generate super.gmfgraph from source.genmodel
 - Right click source.genmodel and select New > GMF > Simple Graphical Definition Model
 - Select the root container object
 - Only specify the creation of nodes that will actually exist
 - In our case: 

 - WebApplication as the root
 - DataTable as a node
 - DataTable.name as a label
 - Generate super.gmftool from super.gmfgraph
 - Right click super.gmfgraph and select New > GMF > Simple Tooling Definition Model
 - Select the root container object
 - Only specify the creation of nodes that will actually exist
 - In our case: 

 - WebApplication as the root
 - DataTable as a node
 - Generate super.gmfmap from super.gmftool
 - Right click super.gmftool and select New > GMF > Guide Mapping Model Creation
 - Select the root container object
 - Remove invalid links and nodes
 - In our case we remove DataColumn, because WebApplication cannot contain them
 - Generate super.gmfgen from super.gmfmap
 - Right click super.gmfmap and select Create Generator
 - Generate the diagram code to test everything is working OK (see [GMF Troubleshooting](/wiki/GMF_Troubleshooting))
 
We have created the super diagramming code, now we want to generate the sub-diagramming code.
- Generate sub.gmfgraph from source.genmodel
 - Select the sub container object
 - Only specify the creation of nodes that will actually exist
 - In our case:

 - DataTable as the root
 - DataColumn as a node
 - DataColumn.name as a label
 - DataColumn.type as a label
 - Generate sub.gmftool from sub.gmfgraph
 - Select the sub container object
 - Only specify the creation of nodes that will actually exist
 - In our case:
 - DataTable as the root
 - DataColumn as a node
 - Generate sub.gmfmap from sub.gmftool
 - Select the sub container object
 - Remove invalid links and nodes
 - Generate sub.gmfgen from sub.gmfmap
 - Right click super.gmfmap and select Create Generator
 
We now need to do some configuration to link the two diagram codes together.
- First, we need to make sub.gmfgen unique:
 - Change _sub.gmfgen > Gen Editor Generator > Domain File Extension_
 - Change _sub.gmfgen > Gen Editor Generator > ModelID_ [1]
 - Change _sub.gmfgen > Gen Editor Generator > Package Name Prefix_
 - Change _sub.gmfgen > Gen Editor Generator > Plugin Diagram > ID_
 - Change _sub.gmfgen > Gen Editor Generator > Plugin Diagram > Name_
 - Look at the value for _sub.gmfgen > Gen Editor Generator > Gen Editor View > ID_
 - Now, link them together:
 - Open super.gmfgen
 - Go to the corresponding _super.gmfgen > Gen Editor Generator > Gen Diagram > Gen Top Level Node_ for the sub element
 - Right click the node and create a new _Open Diagram Behaviour_
 - On the new node, set the following properties:
 - Change _Diagram Kind_ to _sub.gmfgen > Gen Editor Generator > ModelID_ [1]
 - Change _Editor ID_ to _sub.gmfgen > Gen Editor Generator > Gen Editor View > ID_
 - If you have more than one diagram editor for _super.gmfgen_, make sure you also make _Edit Policy Class Name_ unique in _sub.gmfgen > Gen Editor Generator > Gen Editor View > ID_
 
Finally we can get everything working:
Generate the diagram code from BOTH super.gmfgen and sub.gmfgen- You now need to start a new Eclipse application which includes BOTH of these new packages
 
This setup will allow users to create the following type of ecore XML:
<?xml version="1.0" encoding="UTF-8"?>
<org.openiaml.test.two:WebApplication xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.openiaml.test.two="http://openiaml.org/two">
  <tables name="my table">
    <columns name="my column"/>
  </tables>
</org.openiaml.test.two:WebApplication>
If you have any issues, look into GMF Troubleshooting.