RelationTreeModel extends AbstractTreeTableModel implements ISemanticalRelationProvider { public TreePath addGroupEntry() { final UUID groupId = UUID.randomUUID(); this.relationGroups.put(groupId, new LinkedList<>()); final TreePath rootPath = new TreePath(this.getRoot()); this.modelSupport.fireChildAdded(rootPath, this.relationGroups.size() - 1, groupId); return rootPath.pathByAddingChild(groupId); } RelationTreeModel(final ISemanticalRelationProvider relationProvider); @Override List<List<RelationTemplate>> provideRelationTemplates(); @Override Object getChild(final Object parent, final int index); @Override int getChildCount(final Object parent); @Override boolean isLeaf(final Object node); @Override int getIndexOfChild(final Object parent, final Object child); @Override int getColumnCount(); @Override String getColumnName(final int columnIndex); @Override Class<?> getColumnClass(final int columnIndex); @Override boolean isCellEditable(final Object node, final int columnIndex); @Override String getValueAt(final Object node, final int columnIndex); @Override void setValueAt(final Object value, final Object node, final int column); TreePath addGroupEntry(); RelationTemplate getTemplateAtPath(final TreePath path); TreePath addTemplateEntryToGroup(final TreePath groupPath); void updateTemplateEntry(final TreePath targetPath, final RelationTemplate newState); void moveEntry(final TreePath targetPath, final boolean moveDown); void removeEntry(final TreePath targetPath);  }
@Test public void testAddGroupEntry() { final TreePath newEntry = this.model.addGroupEntry(); final Object root = this.model.getRoot(); Assert.assertEquals(4, this.model.getChildCount(root)); final Object newGroupNode = this.model.getChild(root, 3); Assert.assertEquals(new TreePath(new Object[] { root, newGroupNode }), newEntry); }