diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.classpath b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.classpath
new file mode 100644
index 0000000..22f3064
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.project b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.project
new file mode 100644
index 0000000..ed48dfe
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.infra.core.architecture.cdo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+        <buildCommand>
+            <name>org.eclipse.jdt.core.javabuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.pde.ManifestBuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.pde.SchemaBuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.oomph.version.VersionBuilder</name>
+            <arguments>
+                <dictionary>
+                    <key>check.maven.pom</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>ignore.lower.bound.dependency.ranges</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>release.path</key>
+                    <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+                </dictionary>
+            </arguments>
+        </buildCommand>
+    </buildSpec>
+    <natures>
+        <nature>org.eclipse.pde.PluginNature</nature>
+        <nature>org.eclipse.jdt.core.javanature</nature>
+        <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+        <nature>org.eclipse.oomph.version.VersionNature</nature>
+    </natures>
+</projectDescription>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.resources.prefs b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..896a9a5
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
\ No newline at end of file
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.runtime.prefs b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.core.prefs b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2411532
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,294 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=260
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.ui.prefs b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..ba7542e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,127 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License 2.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n *\n * Contributors\:\n *   CEA LIST - Initial API and implementation\n *   \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.pde.api.tools.prefs b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..b2260f8
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,104 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_FIELD=Warning
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Ignore
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_ANNOTATION=Ignore
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Enabled
+changed_execution_env=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_report_major_without_breaking_change=Error
+incompatible_api_component_version_report_minor_without_api_change=Error
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/META-INF/MANIFEST.MF b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e6c2798
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.core.architecture.cdo;singleton:=true
+Automatic-Module-Name: org.eclipse.papyrus.infra.core.architecture.cdo
+Bundle-Version: 2.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.core.architecture.cdo
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.12.0,3.0.0)",
+ org.eclipse.gmf.runtime.emf.type.core;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.jdt.core;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.papyrus.infra.types;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.emf;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.papyrus.infra.core.architecture;bundle-version="[2.1.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/about.html b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/about.html
new file mode 100644
index 0000000..3e183aa
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>November 30, 2017</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/build.properties b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/build.properties
new file mode 100644
index 0000000..543fdec
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/build.properties
@@ -0,0 +1,23 @@
+* Copyright (c) 2017 CEA LIST.
+# 
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License 2.0
+#  which accompanies this distribution, and is available at
+#  https://www.eclipse.org/legal/epl-2.0/
+#
+#  SPDX-License-Identifier: EPL-2.0
+#  
+#  Contributors:
+#  Maged Elaasar - Initial API and implementation
+#  
+# 
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.aird b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.aird
new file mode 100644
index 0000000..6069591
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.aird
@@ -0,0 +1,977 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis xmi:id="_xGjjUO0AEeaf8aQEde1Z1Q" selectedViews="_ya3q4O0AEeaf8aQEde1Z1Q _ybEfMO0AEeaf8aQEde1Z1Q _ybFtUO0AEeaf8aQEde1Z1Q _ybMbAO0AEeaf8aQEde1Z1Q" version="11.1.0.201608251200">
+    <semanticResources>Architecture.ecore</semanticResources>
+    <semanticResources>http://www.eclipse.org/emf/2002/Ecore</semanticResources>
+    <semanticResources>platform:/resource/org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.ecore</semanticResources>
+    <semanticResources>Architecture.genmodel</semanticResources>
+    <semanticResources>platform:/resource/org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.genmodel</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" xmi:id="_ya3q4O0AEeaf8aQEde1Z1Q">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" xmi:id="_5z_NgO0AEeaf8aQEde1Z1Q" name="architecture class diagram" representation="_5z_0kO0AEeaf8aQEde1Z1Q">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+        <target xmi:type="ecore:EPackage" href="Architecture.ecore#/"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" xmi:id="_ybEfMO0AEeaf8aQEde1Z1Q">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Review']"/>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" xmi:id="_ybFtUO0AEeaf8aQEde1Z1Q">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']"/>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" xmi:id="_ybMbAO0AEeaf8aQEde1Z1Q">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Generation']"/>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram xmi:id="_5z_0kO0AEeaf8aQEde1Z1Q" name="architecture class diagram">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_5z_0ke0AEeaf8aQEde1Z1Q" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_5z_0ku0AEeaf8aQEde1Z1Q">
+        <computedStyleDescriptions xmi:type="style:BundledImageDescription" xmi:id="_7Qb9YO0AEeaf8aQEde1Z1Q" labelExpression="service:render" labelAlignment="LEFT" tooltipExpression="service:renderTooltip" sizeComputationExpression="1">
+          <borderColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <labelFormat>bold</labelFormat>
+          <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <color xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:BundledImageDescription" xmi:id="_7QirEO0AEeaf8aQEde1Z1Q" labelExpression="service:render" labelAlignment="LEFT" tooltipExpression="service:renderTooltip" sizeComputationExpression="1">
+          <borderColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          <color xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:BundledImageDescription" xmi:id="_7Qr1AO0AEeaf8aQEde1Z1Q" labelExpression="service:renderAsNode" labelAlignment="LEFT" tooltipExpression="service:renderTooltip" sizeComputationExpression="1">
+          <borderColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <labelFormat>bold</labelFormat>
+          <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <color xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_7SFjMO0AEeaf8aQEde1Z1Q" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <beginLabelStyleDescription xmi:type="style:BeginLabelStyleDescription" xmi:id="_7SFjMe0AEeaf8aQEde1Z1Q" showIcon="false" labelExpression="service:renderEOpposite">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </beginLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_7SFjMu0AEeaf8aQEde1Z1Q" showIcon="false" labelExpression="service:render">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_7SMQ4O0AEeaf8aQEde1Z1Q" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <beginLabelStyleDescription xmi:type="style:BeginLabelStyleDescription" xmi:id="_7SMQ4e0AEeaf8aQEde1Z1Q" showIcon="false" labelExpression="service:renderEOpposite">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </beginLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_7SMQ4u0AEeaf8aQEde1Z1Q" showIcon="false" labelExpression="service:render">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_53Qj8O0AEeaf8aQEde1Z1Q" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_53Qj8e0AEeaf8aQEde1Z1Q" type="Sirius" element="_5z_0kO0AEeaf8aQEde1Z1Q" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_7SZsQO0AEeaf8aQEde1Z1Q" type="2003" element="_7PdF8O0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SbhcO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7Sfy4O0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7StOQO0AEeaf8aQEde1Z1Q" type="3010" element="_7QZhIO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7StOQe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7StOQu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7St1UO0AEeaf8aQEde1Z1Q" type="3010" element="_7Qg14O0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7St1Ue0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7St1Uu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7St1U-0AEeaf8aQEde1Z1Q" type="3010" element="_7QiEAO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7St1VO0AEeaf8aQEde1Z1Q" fontColor="7490599" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7St1Ve0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7Sfy4e0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7Sfy4u0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SZsQe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SZsQu0AEeaf8aQEde1Z1Q" x="267" y="21" height="82"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SgZ8O0AEeaf8aQEde1Z1Q" type="2003" element="_7Pp6QO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7ShoEO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7ShoEe0AEeaf8aQEde1Z1Q" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7ShoEu0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7ShoE-0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SgZ8e0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SgZ8u0AEeaf8aQEde1Z1Q" x="123" y="117" height="57"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SiPIO0AEeaf8aQEde1Z1Q" type="2003" element="_7Ps9kO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SjdQO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7SjdQe0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7SucYO0AEeaf8aQEde1Z1Q" type="3010" element="_7QkgQO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SucYe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SucYu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7SucY-0AEeaf8aQEde1Z1Q" type="3010" element="_7QtDIO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SucZO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SucZe0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SjdQu0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7SjdQ-0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SiPIe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SiPIu0AEeaf8aQEde1Z1Q" x="324" y="270" height="66"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SkEUO0AEeaf8aQEde1Z1Q" type="2003" element="_7PvZ0O0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SkrYO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7SlScO0AEeaf8aQEde1Z1Q" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SlSce0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7SlScu0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SkEUe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SkEUu0AEeaf8aQEde1Z1Q" x="126" y="274" height="57"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SlSc-0AEeaf8aQEde1Z1Q" type="2003" element="_7PxPAO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7Sl5gO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7Sl5ge0AEeaf8aQEde1Z1Q" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SmgkO0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7Smgke0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SlSdO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SlSde0AEeaf8aQEde1Z1Q" x="123" y="432" height="57"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7Smgku0AEeaf8aQEde1Z1Q" type="2003" element="_7PzEMO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SnHoO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7SnHoe0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7SvDcO0AEeaf8aQEde1Z1Q" type="3010" element="_7Qu4UO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SvDce0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SvDcu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SnHou0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7SnHo-0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7Smgk-0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SmglO0AEeaf8aQEde1Z1Q" x="600" y="432" height="57"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SnHpO0AEeaf8aQEde1Z1Q" type="2003" element="_7P1gcO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SnusO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7So80O0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7SvqgO0AEeaf8aQEde1Z1Q" type="3010" element="_7QxUkO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7Svqge0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7Svqgu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7So80e0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7So80u0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SnHpe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SnHpu0AEeaf8aQEde1Z1Q" x="339" y="432" height="57"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7So80-0AEeaf8aQEde1Z1Q" type="2003" element="_7P5x4O0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7Spj4O0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7Spj4e0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7Svqg-0AEeaf8aQEde1Z1Q" type="3010" element="_7QyisO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SvqhO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7Svqhe0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7SwRkO0AEeaf8aQEde1Z1Q" type="3010" element="_7Q0X4O0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SwRke0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SwRku0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7SwRk-0AEeaf8aQEde1Z1Q" type="3010" element="_7Q0-8e0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SwRlO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SwRle0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7SwRlu0AEeaf8aQEde1Z1Q" type="3010" element="_7Q2NEO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7SwRl-0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7SwRmO0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7Sw4oO0AEeaf8aQEde1Z1Q" type="3010" element="_7Q3bMO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7Sw4oe0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7Sw4ou0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7Sw4o-0AEeaf8aQEde1Z1Q" type="3010" element="_7Q4pUO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7Sw4pO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7Sw4pe0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7Spj4u0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7Spj4-0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7So81O0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7So81e0AEeaf8aQEde1Z1Q" x="376" y="117"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SqK8O0AEeaf8aQEde1Z1Q" type="2003" element="_7P7nEO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SqK8-0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7SqyAO0AEeaf8aQEde1Z1Q" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SqyAe0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7SqyAu0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SqK8e0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SqK8u0AEeaf8aQEde1Z1Q" x="495" y="270" height="66"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7SqyA-0AEeaf8aQEde1Z1Q" type="2003" element="_7P9cQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7SrZEO0AEeaf8aQEde1Z1Q" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_7SrZEe0AEeaf8aQEde1Z1Q" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_7SxfsO0AEeaf8aQEde1Z1Q" type="3010" element="_7Q53cO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_7Sxfse0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7Sxfsu0AEeaf8aQEde1Z1Q"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_7SrZEu0AEeaf8aQEde1Z1Q"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_7SrZE-0AEeaf8aQEde1Z1Q"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7SqyBO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7SqyBe0AEeaf8aQEde1Z1Q" x="234" y="189" height="55"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_anAukPaMEeazb43LOF1y5w" type="2003" element="_amJL4PaMEeazb43LOF1y5w">
+          <children xmi:type="notation:Node" xmi:id="_anjhIPaMEeazb43LOF1y5w" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ankIMPaMEeazb43LOF1y5w" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_NLxcAPaNEeazb43LOF1y5w" type="3010" element="_7Q7FkO0AEeaf8aQEde1Z1Q">
+              <styles xmi:type="notation:FontStyle" xmi:id="_NLxcAfaNEeazb43LOF1y5w" fontName=".SF NS Text" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_NLxcAvaNEeazb43LOF1y5w"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ankIMfaMEeazb43LOF1y5w"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ankIMvaMEeazb43LOF1y5w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_anAukfaMEeazb43LOF1y5w" fontName=".SF NS Text" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_anAukvaMEeazb43LOF1y5w" x="234" y="351" height="57"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_53Qj8u0AEeaf8aQEde1Z1Q"/>
+        <edges xmi:type="notation:Edge" xmi:id="_7S-UAO0AEeaf8aQEde1Z1Q" type="4001" element="_7REPgO0AEeaf8aQEde1Z1Q" source="_7SkEUO0AEeaf8aQEde1Z1Q" target="_7SlSc-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TAwQO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TAwQe0AEeaf8aQEde1Z1Q" x="38" y="33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TB-YO0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TB-Ye0AEeaf8aQEde1Z1Q" x="39" y="-7"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TDMgO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TDMge0AEeaf8aQEde1Z1Q" x="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7S-UAe0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7S-UAu0AEeaf8aQEde1Z1Q" fontColor="7490599" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7S-UA-0AEeaf8aQEde1Z1Q" points="[-60, -10, 61, -122]$[-60, 93, 61, -19]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TQA0O0AEeaf8aQEde1Z1Q" id="(1.0,1.1878787425648083)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TQn4O0AEeaf8aQEde1Z1Q" id="(0.0,0.3563636363636364)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TQn4e0AEeaf8aQEde1Z1Q" type="4001" element="_7Rvk8O0AEeaf8aQEde1Z1Q" source="_7Smgku0AEeaf8aQEde1Z1Q" target="_7SlSc-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TRO8O0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TRO8e0AEeaf8aQEde1Z1Q" x="198" y="13"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TR2AO0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TR2Ae0AEeaf8aQEde1Z1Q" x="45" y="-9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TR2Au0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TR2A-0AEeaf8aQEde1Z1Q" x="-2" y="36"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TQn4u0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TQn4-0AEeaf8aQEde1Z1Q" fontColor="7490599" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TQn5O0AEeaf8aQEde1Z1Q" points="[-58, -3, 537, -23]$[-58, 19, 537, -1]$[-535, 19, 60, -1]$[-535, -3, 60, -23]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TSdEO0AEeaf8aQEde1Z1Q" id="(1.0,1.069090909090909)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TSdEe0AEeaf8aQEde1Z1Q" id="(0.0,1.4254545454545455)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TSdEu0AEeaf8aQEde1Z1Q" type="4001" element="_7RxaIO0AEeaf8aQEde1Z1Q" source="_7Smgku0AEeaf8aQEde1Z1Q" target="_7SnHpO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TTEIO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TTEIe0AEeaf8aQEde1Z1Q" x="12" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TTEIu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TTEI-0AEeaf8aQEde1Z1Q" x="85" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TTEJO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TTEJe0AEeaf8aQEde1Z1Q" x="14" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TSdE-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TSdFO0AEeaf8aQEde1Z1Q" fontColor="7490599" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TSdFe0AEeaf8aQEde1Z1Q" points="[-118, -3, 261, -29]$[-261, -3, 118, -29]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TTrMO0AEeaf8aQEde1Z1Q" id="(1.0,0.7127272727272728)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TTrMe0AEeaf8aQEde1Z1Q" id="(0.0,1.1878786066228695)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TTrMu0AEeaf8aQEde1Z1Q" type="4001" element="_7RyBM-0AEeaf8aQEde1Z1Q" source="_7SnHpO0AEeaf8aQEde1Z1Q" target="_7SlSc-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TUSQO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TUSQe0AEeaf8aQEde1Z1Q" x="12" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TUSQu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TUSQ-0AEeaf8aQEde1Z1Q" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TU5UO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TU5Ue0AEeaf8aQEde1Z1Q" x="3" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TTrM-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TTrNO0AEeaf8aQEde1Z1Q" fontColor="7490599" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TTrNe0AEeaf8aQEde1Z1Q" points="[-118, -5, 216, -31]$[-216, -5, 118, -31]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TU5Uu0AEeaf8aQEde1Z1Q" id="(1.0,0.5939395751953125)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TU5U-0AEeaf8aQEde1Z1Q" id="(0.0,1.069090909090909)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TU5VO0AEeaf8aQEde1Z1Q" type="4001" element="_7R0dcO0AEeaf8aQEde1Z1Q" source="_7SgZ8O0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TVgYO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TVgYe0AEeaf8aQEde1Z1Q" x="-2" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TVgYu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TVgY-0AEeaf8aQEde1Z1Q" x="-18" y="53"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TVgZO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TVgZe0AEeaf8aQEde1Z1Q" x="2" y="-31"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TU5Ve0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TU5Vu0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TU5V-0AEeaf8aQEde1Z1Q" points="[-14, -39, -40, 69]$[-14, -65, -40, 43]$[26, -65, 0, 43]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TWHcO0AEeaf8aQEde1Z1Q" id="(1.0,0.7127272727272728)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TWHce0AEeaf8aQEde1Z1Q" id="(0.0,0.3499999732971191)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TWHcu0AEeaf8aQEde1Z1Q" type="4001" element="_7R5V8O0AEeaf8aQEde1Z1Q" source="_7SiPIO0AEeaf8aQEde1Z1Q" target="_7So80-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TWugO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TWuge0AEeaf8aQEde1Z1Q" x="-4" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TWugu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TWug-0AEeaf8aQEde1Z1Q" x="4" y="-5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TWuhO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TWuhe0AEeaf8aQEde1Z1Q" x="-12"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TWHc-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TWHdO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TWHde0AEeaf8aQEde1Z1Q" points="[-58, -32, 40, 78]$[-58, -60, 40, 50]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TXVkO0AEeaf8aQEde1Z1Q" id="(1.0,0.5104168224334716)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TXVke0AEeaf8aQEde1Z1Q" id="(0.0,0.6000000961183563)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TXVku0AEeaf8aQEde1Z1Q" type="4001" element="_7R7LIO0AEeaf8aQEde1Z1Q" source="_7SkEUO0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TX8oO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TX8oe0AEeaf8aQEde1Z1Q" x="-194" y="3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TX8ou0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TX8o-0AEeaf8aQEde1Z1Q" x="-14" y="12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TX8pO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TX8pe0AEeaf8aQEde1Z1Q" x="12" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TXVk-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TXVlO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TXVle0AEeaf8aQEde1Z1Q" points="[-118, 0, -141, 271]$[-193, 0, -216, 271]$[-193, -246, -216, 25]$[23, -246, 0, 25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TYjsO0AEeaf8aQEde1Z1Q" id="(1.0,0.5939393033114347)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TYjse0AEeaf8aQEde1Z1Q" id="(0.0,0.1750000801086426)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TYjsu0AEeaf8aQEde1Z1Q" type="4001" element="_7R8ZQO0AEeaf8aQEde1Z1Q" source="_7SlSc-0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TZKwO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TZKwe0AEeaf8aQEde1Z1Q" x="-40" y="-8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TZKwu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TZKw-0AEeaf8aQEde1Z1Q" x="-108" y="-5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TZKxO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TZKxe0AEeaf8aQEde1Z1Q" x="-114" y="43"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TYjs-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TYjtO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TYjte0AEeaf8aQEde1Z1Q" points="[-118, -4, -144, 414]$[-208, -4, -234, 414]$[-208, -444, -234, -26]$[26, -444, 0, -26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TZx0O0AEeaf8aQEde1Z1Q" id="(1.0,0.8909090909090909)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TZx0e0AEeaf8aQEde1Z1Q" id="(0.0,0.5250000534057617)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TZx0u0AEeaf8aQEde1Z1Q" type="4001" element="_7R9nYO0AEeaf8aQEde1Z1Q" source="_7Smgku0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TZx1u0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TaY4O0AEeaf8aQEde1Z1Q" x="-284" y="14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TaY4e0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TaY4u0AEeaf8aQEde1Z1Q" x="-76"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TaY4-0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TaY5O0AEeaf8aQEde1Z1Q" x="-181" y="-217"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TZx0-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TZx1O0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TZx1e0AEeaf8aQEde1Z1Q" points="[-37, -78, 414, 327]$[-37, -450, 414, -45]$[-330, -450, 121, -45]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TaY5e0AEeaf8aQEde1Z1Q" id="(1.0,1.4254545454545455)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TaY5u0AEeaf8aQEde1Z1Q" id="(0.0,1.0500001068115234)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7Ta_8O0AEeaf8aQEde1Z1Q" type="4001" element="_7R-1gO0AEeaf8aQEde1Z1Q" source="_7SnHpO0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7Ta_9O0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Ta_9e0AEeaf8aQEde1Z1Q" x="-57" y="-1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7Ta_9u0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Ta_9-0AEeaf8aQEde1Z1Q" x="163" y="-50"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TbnAO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TbnAe0AEeaf8aQEde1Z1Q" x="-144" y="-175"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7Ta_8e0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7Ta_8u0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7Ta_8-0AEeaf8aQEde1Z1Q" points="[-58, -10, 132, 396]$[-58, -2, 132, 404]$[272, -2, 462, 404]$[272, -460, 462, -54]$[-69, -460, 121, -54]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TbnAu0AEeaf8aQEde1Z1Q" id="(1.0,1.1878786066228695)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TbnA-0AEeaf8aQEde1Z1Q" id="(0.0,0.8750000267028808)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TcOEO0AEeaf8aQEde1Z1Q" type="4001" element="_7SAqsO0AEeaf8aQEde1Z1Q" source="_7So80-0AEeaf8aQEde1Z1Q" target="_7SZsQO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TcOFO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TcOFe0AEeaf8aQEde1Z1Q" x="-3" y="-23"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7Tc1IO0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tc1Ie0AEeaf8aQEde1Z1Q" x="-15" y="18"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7Tc1Iu0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tc1I-0AEeaf8aQEde1Z1Q" x="-35" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TcOEe0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TcOEu0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TcOE-0AEeaf8aQEde1Z1Q" points="[-102, -62, 219, 40]$[-102, -88, 219, 14]$[-195, -88, 126, 14]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TdcMO0AEeaf8aQEde1Z1Q" id="(1.0,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TeDQO0AEeaf8aQEde1Z1Q" id="(0.0,0.7000001335144044)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TeDQe0AEeaf8aQEde1Z1Q" type="4001" element="_7SB40O0AEeaf8aQEde1Z1Q" source="_7SqK8O0AEeaf8aQEde1Z1Q" target="_7So80-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TeDRe0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TeDRu0AEeaf8aQEde1Z1Q" x="-7"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TeqUO0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TeqUe0AEeaf8aQEde1Z1Q" x="1" y="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TeqUu0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TeqU-0AEeaf8aQEde1Z1Q" x="-18" y="-9"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TeDQu0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TeDQ-0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TeDRO0AEeaf8aQEde1Z1Q" points="[-60, -48, 177, 104]$[-60, -76, 177, 76]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TeqVO0AEeaf8aQEde1Z1Q" id="(1.0,0.7656247663497925)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TeqVe0AEeaf8aQEde1Z1Q" id="(0.0,0.3999999038816437)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TeqVu0AEeaf8aQEde1Z1Q" type="4001" element="_7SDuAO0AEeaf8aQEde1Z1Q" source="_7SgZ8O0AEeaf8aQEde1Z1Q" target="_7SlSc-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TfRYO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TfRYe0AEeaf8aQEde1Z1Q" x="35"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TfRYu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TfRY-0AEeaf8aQEde1Z1Q" x="-41" y="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TfRZO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TfRZe0AEeaf8aQEde1Z1Q" x="41" y="5"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TeqV-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TeqWO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TeqWe0AEeaf8aQEde1Z1Q" points="[-118, -30, 0, -326]$[-145, -30, -27, -326]$[-145, 275, -27, -21]$[-118, 275, 0, -21]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tf4cO0AEeaf8aQEde1Z1Q" id="(1.0,1.069090909090909)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tf4ce0AEeaf8aQEde1Z1Q" id="(0.0,0.7127272727272728)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7Tf4cu0AEeaf8aQEde1Z1Q" type="4001" element="_7SGKQO0AEeaf8aQEde1Z1Q" source="_7SgZ8O0AEeaf8aQEde1Z1Q" target="_7So80-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7Tf4du0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tf4d-0AEeaf8aQEde1Z1Q" x="-40" y="19"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TgfgO0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tgfge0AEeaf8aQEde1Z1Q" x="15" y="14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7Tgfgu0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tgfg-0AEeaf8aQEde1Z1Q" x="-16" y="-13"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7Tf4c-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7Tf4dO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7Tf4de0AEeaf8aQEde1Z1Q" points="[0, -51, -135, 3]$[135, -51, 0, 3]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7TgfhO0AEeaf8aQEde1Z1Q" id="(1.0,1.4254545454545455)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tgfhe0AEeaf8aQEde1Z1Q" id="(0.0,0.19999995194082185)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7Tgfhu0AEeaf8aQEde1Z1Q" type="4001" element="_7SHYY-0AEeaf8aQEde1Z1Q" source="_7SgZ8O0AEeaf8aQEde1Z1Q" target="_7SkEUO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7ThGkO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ThGke0AEeaf8aQEde1Z1Q" x="34"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ThGku0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ThGk-0AEeaf8aQEde1Z1Q" x="7" y="38"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ThGlO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ThGle0AEeaf8aQEde1Z1Q" x="-2" y="46"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7Tgfh-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TgfiO0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7Tgfie0AEeaf8aQEde1Z1Q" points="[-52, 36, 63, -151]$[-52, 138, 63, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ThtoO0AEeaf8aQEde1Z1Q" id="(1.0,0.3563636363636364)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Thtoe0AEeaf8aQEde1Z1Q" id="(0.0,0.8909090909090909)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7TiUsO0AEeaf8aQEde1Z1Q" type="4001" element="_7SJNkO0AEeaf8aQEde1Z1Q" source="_7SiPIO0AEeaf8aQEde1Z1Q" target="_7SnHpO0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7Tji0O0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tji0e0AEeaf8aQEde1Z1Q" x="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TkJ4O0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TkJ4e0AEeaf8aQEde1Z1Q" x="-2" y="-41"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TkJ4u0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TkJ4-0AEeaf8aQEde1Z1Q" x="2" y="-59"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7TiUse0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7TiUsu0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7TiUs-0AEeaf8aQEde1Z1Q" points="[-87, -1, 48, -130]$[-87, 97, 48, -32]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tkw8O0AEeaf8aQEde1Z1Q" id="(1.0,1.0208336448669433)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tkw8e0AEeaf8aQEde1Z1Q" id="(0.0,0.5939395751953125)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7Tkw8u0AEeaf8aQEde1Z1Q" type="4001" element="_7SLCwO0AEeaf8aQEde1Z1Q" source="_7Smgku0AEeaf8aQEde1Z1Q" target="_7So80-0AEeaf8aQEde1Z1Q">
+          <children xmi:type="notation:Node" xmi:id="_7TlYAO0AEeaf8aQEde1Z1Q" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TlYAe0AEeaf8aQEde1Z1Q" x="-25"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7TlYAu0AEeaf8aQEde1Z1Q" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7TlYA-0AEeaf8aQEde1Z1Q" x="-34" y="-42"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7Tl_EO0AEeaf8aQEde1Z1Q" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Tl_Ee0AEeaf8aQEde1Z1Q" x="6" y="13"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7Tkw8-0AEeaf8aQEde1Z1Q" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7Tkw9O0AEeaf8aQEde1Z1Q" fontName=".SF NS Text" fontHeight="8" bold="true"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7Tkw9e0AEeaf8aQEde1Z1Q" points="[-75, -19, 267, 215]$[-75, -271, 267, -37]$[-133, -271, 209, -37]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tl_Eu0AEeaf8aQEde1Z1Q" id="(1.0,0.3563636363636364)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7Tl_E-0AEeaf8aQEde1Z1Q" id="(0.0,0.8000000480591781)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7PdF8O0AEeaf8aQEde1Z1Q" name="ADElement" tooltipText="" incomingEdges="_7R0dcO0AEeaf8aQEde1Z1Q _7R7LIO0AEeaf8aQEde1Z1Q _7R8ZQO0AEeaf8aQEde1Z1Q _7R9nYO0AEeaf8aQEde1Z1Q _7R-1gO0AEeaf8aQEde1Z1Q _7SAqsO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ADElement"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ADElement"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7Plo0O0AEeaf8aQEde1Z1Q" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QZhIO0AEeaf8aQEde1Z1Q" name="name : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/name"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/name"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7QgO0O0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" description="_7Qb9YO0AEeaf8aQEde1Z1Q">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Qg14O0AEeaf8aQEde1Z1Q" name="desciption : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/desciption"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/desciption"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Qhc8O0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QiEAO0AEeaf8aQEde1Z1Q" name="/qualifiedName : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/qualifiedName"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ADElement/qualifiedName"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7QjSIO0AEeaf8aQEde1Z1Q" labelColor="39,76,114" labelAlignment="LEFT" description="_7QirEO0AEeaf8aQEde1Z1Q"/>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7Pp6QO0AEeaf8aQEde1Z1Q" name="ArchitectureDomain" tooltipText="" outgoingEdges="_7R0dcO0AEeaf8aQEde1Z1Q _7SDuAO0AEeaf8aQEde1Z1Q _7SGKQO0AEeaf8aQEde1Z1Q _7SHYY-0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDomain"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDomain"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7PrIYO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7Ps9kO0AEeaf8aQEde1Z1Q" name="ArchitectureDescriptionLanguage" tooltipText="" outgoingEdges="_7R5V8O0AEeaf8aQEde1Z1Q _7SJNkO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionLanguage"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionLanguage"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7PuLsO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QkgQO0AEeaf8aQEde1Z1Q" name=" metamodel : EPackage" tooltipText="">
+        <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/metamodel"/>
+        <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/metamodel"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7QscEO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" description="_7Qr1AO0AEeaf8aQEde1Z1Q" color="114,159,207">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QtDIO0AEeaf8aQEde1Z1Q" name=" profiles : EPackage" tooltipText="">
+        <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/profiles"/>
+        <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/profiles"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7QtqMO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" color="114,159,207">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7PvZ0O0AEeaf8aQEde1Z1Q" name="Stakeholder" tooltipText="" outgoingEdges="_7REPgO0AEeaf8aQEde1Z1Q _7R7LIO0AEeaf8aQEde1Z1Q" incomingEdges="_7SHYY-0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//Stakeholder"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//Stakeholder"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7PwA4O0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7PxPAO0AEeaf8aQEde1Z1Q" name="Concern" tooltipText="" outgoingEdges="_7R8ZQO0AEeaf8aQEde1Z1Q" incomingEdges="_7REPgO0AEeaf8aQEde1Z1Q _7Rvk8O0AEeaf8aQEde1Z1Q _7RyBM-0AEeaf8aQEde1Z1Q _7SDuAO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//Concern"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//Concern"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7Px2EO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7PzEMO0AEeaf8aQEde1Z1Q" name="ArchitectureViewpoint" tooltipText="" outgoingEdges="_7Rvk8O0AEeaf8aQEde1Z1Q _7RxaIO0AEeaf8aQEde1Z1Q _7R9nYO0AEeaf8aQEde1Z1Q _7SLCwO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureViewpoint"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureViewpoint"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7P0SUO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Qu4UO0AEeaf8aQEde1Z1Q" name="id : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureViewpoint/id"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureViewpoint/id"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7QwGcO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" description="_7Qb9YO0AEeaf8aQEde1Z1Q">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7P1gcO0AEeaf8aQEde1Z1Q" name="RepresentationKind" tooltipText="" outgoingEdges="_7RyBM-0AEeaf8aQEde1Z1Q _7R-1gO0AEeaf8aQEde1Z1Q" incomingEdges="_7RxaIO0AEeaf8aQEde1Z1Q _7SJNkO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//RepresentationKind"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//RepresentationKind"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7P5K0O0AEeaf8aQEde1Z1Q" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QxUkO0AEeaf8aQEde1Z1Q" name="icon : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//RepresentationKind/icon"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//RepresentationKind/icon"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Qx7oO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7P5x4O0AEeaf8aQEde1Z1Q" name="ArchitectureContext" tooltipText="" outgoingEdges="_7SAqsO0AEeaf8aQEde1Z1Q" incomingEdges="_7R5V8O0AEeaf8aQEde1Z1Q _7SB40O0AEeaf8aQEde1Z1Q _7SGKQO0AEeaf8aQEde1Z1Q _7SLCwO0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureContext"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureContext"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7P7AAO0AEeaf8aQEde1Z1Q" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7QyisO0AEeaf8aQEde1Z1Q" name="id : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/id"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/id"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Qzw0O0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" description="_7Qb9YO0AEeaf8aQEde1Z1Q">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q0X4O0AEeaf8aQEde1Z1Q" name="icon : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/icon"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/icon"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q0-8O0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q0-8e0AEeaf8aQEde1Z1Q" name="extensionPrefix : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/extensionPrefix"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/extensionPrefix"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q1mAO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q2NEO0AEeaf8aQEde1Z1Q" name="creationCommandClass : EJavaClass" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/creationCommandClass"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/creationCommandClass"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q20IO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" description="_7Qb9YO0AEeaf8aQEde1Z1Q">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q3bMO0AEeaf8aQEde1Z1Q" name="conversionCommandClass : EJavaClass" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/conversionCommandClass"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureContext/conversionCommandClass"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q4CQO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q4pUO0AEeaf8aQEde1Z1Q" name=" elementTypes : ElementTypeSetConfiguration" tooltipText="">
+        <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/elementTypes"/>
+        <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/elementTypes"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q5QYO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT" color="114,159,207">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7P7nEO0AEeaf8aQEde1Z1Q" name="ArchitectureFramework" tooltipText="" outgoingEdges="_7SB40O0AEeaf8aQEde1Z1Q" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureFramework"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureFramework"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7P81MO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7P9cQO0AEeaf8aQEde1Z1Q" name="ArchitectureDescription" tooltipText="" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescription"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescription"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7P-qYO0AEeaf8aQEde1Z1Q" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q53cO0AEeaf8aQEde1Z1Q" name="contextId : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureDescription/contextId"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureDescription/contextId"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q6egO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7REPgO0AEeaf8aQEde1Z1Q" name="[0..*] concerns" sourceNode="_7PvZ0O0AEeaf8aQEde1Z1Q" targetNode="_7PxPAO0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//Stakeholder/concerns"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//Stakeholder/concerns"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7RuW0O0AEeaf8aQEde1Z1Q" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7RuW0e0AEeaf8aQEde1Z1Q" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7RuW0u0AEeaf8aQEde1Z1Q" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7Rvk8O0AEeaf8aQEde1Z1Q" name="[0..*] concerns" sourceNode="_7PzEMO0AEeaf8aQEde1Z1Q" targetNode="_7PxPAO0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/concerns"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/concerns"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7RwzEO0AEeaf8aQEde1Z1Q" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7RwzEe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7RwzEu0AEeaf8aQEde1Z1Q" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7RxaIO0AEeaf8aQEde1Z1Q" name="[0..*] representationKinds" sourceNode="_7PzEMO0AEeaf8aQEde1Z1Q" targetNode="_7P1gcO0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/representationKinds"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/representationKinds"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7RyBMO0AEeaf8aQEde1Z1Q" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7RyBMe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7RyBMu0AEeaf8aQEde1Z1Q" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7RyBM-0AEeaf8aQEde1Z1Q" name="[0..*] concerns" sourceNode="_7P1gcO0AEeaf8aQEde1Z1Q" targetNode="_7PxPAO0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//RepresentationKind/concerns"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//RepresentationKind/concerns"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7RyoQO0AEeaf8aQEde1Z1Q" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7RyoQe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7RyoQu0AEeaf8aQEde1Z1Q" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R0dcO0AEeaf8aQEde1Z1Q" sourceNode="_7Pp6QO0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDomain"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//ArchitectureDomain/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7R4u4O0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7R4u4e0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7R4u4u0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R5V8O0AEeaf8aQEde1Z1Q" sourceNode="_7Ps9kO0AEeaf8aQEde1Z1Q" targetNode="_7P5x4O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionLanguage"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//ArchitectureDescriptionLanguage/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7R6kEO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7R6kEe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7R6kEu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R7LIO0AEeaf8aQEde1Z1Q" sourceNode="_7PvZ0O0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//Stakeholder"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//Stakeholder/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7R7yMO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7R7yMe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7R7yMu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R8ZQO0AEeaf8aQEde1Z1Q" sourceNode="_7PxPAO0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//Concern"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//Concern/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7R9AUO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7R9AUe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7R9AUu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R9nYO0AEeaf8aQEde1Z1Q" sourceNode="_7PzEMO0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureViewpoint"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//ArchitectureViewpoint/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7R-OcO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7R-Oce0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7R-Ocu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7R-1gO0AEeaf8aQEde1Z1Q" sourceNode="_7P1gcO0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//RepresentationKind"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//RepresentationKind/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SADoO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SADoe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7SADou0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SAqsO0AEeaf8aQEde1Z1Q" sourceNode="_7P5x4O0AEeaf8aQEde1Z1Q" targetNode="_7PdF8O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureContext"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//ArchitectureContext/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SBRwO0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SBRwe0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7SBRwu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SB40O0AEeaf8aQEde1Z1Q" sourceNode="_7P7nEO0AEeaf8aQEde1Z1Q" targetNode="_7P5x4O0AEeaf8aQEde1Z1Q">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureFramework"/>
+      <semanticElements xmi:type="ecore:EGenericType" href="Architecture.ecore#//ArchitectureFramework/@eGenericSuperTypes.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SCf4O0AEeaf8aQEde1Z1Q" targetArrow="InputClosedArrow" routingStyle="manhattan">
+        <customFeatures>routingStyle</customFeatures>
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SCf4e0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_7SCf4u0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SDuAO0AEeaf8aQEde1Z1Q" sourceNode="_7Pp6QO0AEeaf8aQEde1Z1Q" targetNode="_7PxPAO0AEeaf8aQEde1Z1Q" beginLabel="[1..1] domain" endLabel="[0..*] concerns">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/concerns"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/concerns"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//Concern/domain"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SFjM-0AEeaf8aQEde1Z1Q" description="_7SFjMO0AEeaf8aQEde1Z1Q" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SFjNO0AEeaf8aQEde1Z1Q" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7SFjNe0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SGKQO0AEeaf8aQEde1Z1Q" sourceNode="_7Pp6QO0AEeaf8aQEde1Z1Q" targetNode="_7P5x4O0AEeaf8aQEde1Z1Q" beginLabel="[1..1] domain" endLabel="[0..*] contexts">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/contexts"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/contexts"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/domain"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SHYYO0AEeaf8aQEde1Z1Q" description="_7SFjMO0AEeaf8aQEde1Z1Q" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SHYYe0AEeaf8aQEde1Z1Q" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7SHYYu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SHYY-0AEeaf8aQEde1Z1Q" sourceNode="_7Pp6QO0AEeaf8aQEde1Z1Q" targetNode="_7PvZ0O0AEeaf8aQEde1Z1Q" beginLabel="[1..1] domain" endLabel="[0..*] stakeholders">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/stakeholders"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//Stakeholder/domain"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/stakeholders"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SImgO0AEeaf8aQEde1Z1Q" description="_7SFjMO0AEeaf8aQEde1Z1Q" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SImge0AEeaf8aQEde1Z1Q" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7SImgu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SJNkO0AEeaf8aQEde1Z1Q" sourceNode="_7Ps9kO0AEeaf8aQEde1Z1Q" targetNode="_7P1gcO0AEeaf8aQEde1Z1Q" beginLabel="[1..1] language" endLabel="[0..*] representationKinds">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/representationKinds"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//RepresentationKind/language"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/representationKinds"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SKbsO0AEeaf8aQEde1Z1Q" description="_7SFjMO0AEeaf8aQEde1Z1Q" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SKbse0AEeaf8aQEde1Z1Q" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7SKbsu0AEeaf8aQEde1Z1Q" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_7SLCwO0AEeaf8aQEde1Z1Q" sourceNode="_7PzEMO0AEeaf8aQEde1Z1Q" targetNode="_7P5x4O0AEeaf8aQEde1Z1Q" beginLabel="[0..*] viewpoints" endLabel="[1..1] context">
+      <target xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/context"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/context"/>
+      <semanticElements xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/viewpoints"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_7SMQ4-0AEeaf8aQEde1Z1Q" description="_7SMQ4O0AEeaf8aQEde1Z1Q" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <customFeatures>routingStyle</customFeatures>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_7SM38O0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>bold</labelFormat>
+        </beginLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_7SM38e0AEeaf8aQEde1Z1Q" showIcon="false">
+          <labelFormat>bold</labelFormat>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_amJL4PaMEeazb43LOF1y5w" name="ArchitectureDescriptionPreferences" tooltipText="" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionPreferences"/>
+      <semanticElements xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionPreferences"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_amKaAPaMEeazb43LOF1y5w" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_7Q7FkO0AEeaf8aQEde1Z1Q" name="viewpointIds : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureDescriptionPreferences/viewpointIds"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="Architecture.ecore#//ArchitectureDescriptionPreferences/viewpointIds"/>
+        <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_7Q7soO0AEeaf8aQEde1Z1Q" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_5z_0le0AEeaf8aQEde1Z1Q"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+    <target xmi:type="ecore:EPackage" href="Architecture.ecore#/"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore
new file mode 100644
index 0000000..a0a5bfd
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="architecture" nsURI="http://www.eclipse.org/papyrus/infra/core/architecture"
+    nsPrefix="architecture">
+  <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+    <details key="documentation" value="An architecture context is a method for customizing Papyrus for a given domain. It defines a regime for editing a Papyrus model semantically and notationally. The semantic editing is defined by a set of element type set configurations (from some domain), while the notational side is defined by a set of viewpoints consisting of a set of representation kinds (e.g., diagram kinds and table kinds) and other notational configurations...."/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="ADElement" abstract="true">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="The superclass of all architecture elements"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The unique id of the element"/>
+        <details key="propertyDescription" value="The unique id of the element"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The name of the element"/>
+        <details key="propertyDescription" value="The name of the element"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The description of the element"/>
+        <details key="propertyDescription" value="The description of the element"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="qualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" volatile="true" transient="true" derived="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The qualified name of the element"/>
+        <details key="propertyDescription" value="The qualified name of the element"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="icon" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The icon of the element specified using a platform plugin URI"/>
+        <details key="propertyDescription" value="The icon of the element specified using a platform plugin URI"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureDomain" eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A domain is the root of the architecture model. It can contains a collection of concerns, stakeholders, as well as contexts (which can be description languages and/or frameworks)."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stakeholders" upperBound="-1"
+        eType="#//Stakeholder" containment="true" eOpposite="#//Stakeholder/domain">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of stakeholders defined by the domain"/>
+        <details key="propertyDescription" value="The set of stakeholders defined by the domain"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="concerns" upperBound="-1"
+        eType="#//Concern" containment="true" eOpposite="#//Concern/domain">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of concerns defined by the domain"/>
+        <details key="propertyDescription" value="The set of concerns defined by the domain"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contexts" upperBound="-1"
+        eType="#//ArchitectureContext" containment="true" eOpposite="#//ArchitectureContext/domain">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of contexts defined by the domain"/>
+        <details key="propertyDescription" value="The set of contexts defined by the domain"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureDescriptionLanguage" eSuperTypes="#//ArchitectureContext">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A description language (from ISO 42010) represents in Papyrus a modeling language (e.g., UML, SysML). It has a unique id' that corresponds to that of an ''IClientContext from GMF. It references a metamodel, a set of profiles, a set of element type set configurations, a creation command (creates a model of this language), a conversion command (converts a model to this language), and and icon. It also has an optional extension prefix for its models. It can also contain a set of representation kinds (which can be either diagrams or tables) and a set of viewpoints."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="representationKinds" upperBound="-1"
+        eType="#//RepresentationKind" containment="true" eOpposite="#//RepresentationKind/language">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of representation kinds defined by the language"/>
+        <details key="propertyDescription" value="The set of representation kinds defined by the language"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="metamodel" lowerBound="1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The metamodel used by the language"/>
+        <details key="propertyDescription" value="The metamodel used by the language"/>
+        <details key="propertyCategory" value="Description Language"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="profiles" upperBound="-1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of UML profiles used by the language"/>
+        <details key="propertyDescription" value="The set of UML profiles used by the language"/>
+        <details key="propertyCategory" value="Description Language"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Stakeholder" eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A stakeholder (from ISO 42010) represents in Papyrus an archetype of users. It references a set of its concerns."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="concerns" upperBound="-1"
+        eType="#//Concern">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of concerns of the stakeholder"/>
+        <details key="propertyDescription" value="The set of concerns of the stakeholder"/>
+        <details key="propertyCategory" value="Stakeholder"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="domain" lowerBound="1"
+        eType="#//ArchitectureDomain" eOpposite="#//ArchitectureDomain/stakeholders">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The domain that defines the stakeholder"/>
+        <details key="propertyDescription" value="The domain that defines the stakeholder"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Concern" eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A concern (from ISO 42010) represents in Papyrus a matter of interest to some stakeholder."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="domain" lowerBound="1"
+        eType="#//ArchitectureDomain" eOpposite="#//ArchitectureDomain/concerns">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The domain that defines the concern"/>
+        <details key="propertyDescription" value="The domain that defines the concern"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureViewpoint" eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A viewpoint (from ISO 42010) in Papyrus references set of representation kinds, which can be diagrams or tables."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="concerns" upperBound="-1"
+        eType="#//Concern">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of concerns covered by the viewpoint"/>
+        <details key="propertyDescription" value="The set of concerns covered by the viewpoint"/>
+        <details key="propertyCategory" value="Viewpoint"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="representationKinds" upperBound="-1"
+        eType="#//RepresentationKind">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of representation kinds provided by the viewpoint"/>
+        <details key="propertyDescription" value="The set of representation kinds provided by the viewpoint"/>
+        <details key="propertyCategory" value="Viewpoint"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="context" lowerBound="1"
+        eType="#//ArchitectureContext" eOpposite="#//ArchitectureContext/viewpoints">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The context that defines the viewpoint"/>
+        <details key="propertyDescription" value="The context that defines the viewpoint"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RepresentationKind" abstract="true"
+      eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="The kind of representations defined by architectural contexts and that depict some information from a model"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="language" lowerBound="1"
+        eType="#//ArchitectureDescriptionLanguage" eOpposite="#//ArchitectureDescriptionLanguage/representationKinds">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The language that defines the representation kind"/>
+        <details key="propertyDescription" value="The language that defines the representation kind"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="concerns" upperBound="-1"
+        eType="#//Concern">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of concerns covered by the representation kind"/>
+        <details key="propertyDescription" value="The set of concerns covered by the representation kind"/>
+        <details key="propertyCategory" value="Representation Kind"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="grayedIcon" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The icon of the element specified using a platform plugin URI"/>
+        <details key="propertyDescription" value="The icon of the element specified using a platform plugin URI"/>
+        <details key="propertyCategory" value="Element"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureContext" abstract="true"
+      eSuperTypes="#//ADElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="The superclass of architectural description languages or architecture frameworks. It defines a collection of viewpoints on models."/>
+    </eAnnotations>
+    <eOperations name="ceationCommandClassExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="diagnostics" unique="false" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EDiagnosticChain"/>
+      <eParameters name="context" unique="false">
+        <eGenericType eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EMap">
+          <eTypeArguments eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EJavaObject"/>
+          <eTypeArguments eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EJavaObject"/>
+        </eGenericType>
+      </eParameters>
+    </eOperations>
+    <eOperations name="conversionCommandClassExists" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="diagnostics" unique="false" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EDiagnosticChain"/>
+      <eParameters name="context" unique="false">
+        <eGenericType eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EMap">
+          <eTypeArguments eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EJavaObject"/>
+          <eTypeArguments eClassifier="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EJavaObject"/>
+        </eGenericType>
+      </eParameters>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="viewpoints" upperBound="-1"
+        eType="#//ArchitectureViewpoint" containment="true" eOpposite="#//ArchitectureViewpoint/context">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of viewpoints defined by the context"/>
+        <details key="propertyDescription" value="The set of viewpoints defined by the context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultViewpoints" upperBound="-1"
+        eType="#//ArchitectureViewpoint">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of viewpoints that are selected for the context by default"/>
+        <details key="propertyDescription" value="The set of viewpoints that are selected for the context by default"/>
+        <details key="propertyCategory" value="Context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elementTypes" upperBound="-1"
+        eType="ecore:EClass ../../org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.ecore#//ElementTypeSetConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of element type set configurations that are used by the context (typically found in .elementtypesconfigurations resources)"/>
+        <details key="propertyDescription" value="The set of element type set configurations that are used by the context (typically found in .elementtypesconfigurations resources)"/>
+        <details key="propertyCategory" value="Context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="domain" lowerBound="1"
+        eType="#//ArchitectureDomain" eOpposite="#//ArchitectureDomain/contexts">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The domain that defines the context"/>
+        <details key="propertyDescription" value="The domain that defines the context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="extensionPrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The prefix of the file extension of the UML models applying this context (e.g., &lt;Name>.&lt;prefixExtension>.uml)"/>
+        <details key="propertyDescription" value="The prefix of the file extension of the UML models applying this context (e.g., &lt;Name>.&lt;prefixExtension>.uml)"/>
+        <details key="propertyCategory" value="Context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="creationCommandClass" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The fully qualified name of a command that creates models applying this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelCreationCommand inteface"/>
+        <details key="propertyDescription" value="The fully qualified name of a command that creates models applying this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelCreationCommand inteface"/>
+        <details key="propertyCategory" value="Context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="conversionCommandClass"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The fully qualified name of a command that refactors models that switched to this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelConversionCommand inteface"/>
+        <details key="propertyDescription" value="The fully qualified name of a command that refactors models that switched to this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelConversionCommand inteface"/>
+        <details key="propertyCategory" value="Context"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureFramework" eSuperTypes="#//ArchitectureContext">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A framework (from ISO 42010) represents in Papyrus a modeling framework (e.g., DoDAF). It has a unique id' that corresponds to that of an ''IClientContext from GMF. It references a set of element type set configurations, a creation command (creates a model of this framework), a conversion command (converts a model to this framework), and an icon. It also has an optional extension prefix for its models. It can also contain a set of viewpoints."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureDescription">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An element that is added to a DI model to record the id of the architecture context applied to a model set"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contextId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The id of the context applied to a UML model"/>
+        <details key="propertyDescription" value="The id of the context applied to a UML model"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArchitectureDescriptionPreferences">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An element that is added to a DI model to record the architecture preferences used by a model set"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="viewpointIds" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The set of ids of viewpoints enabled on a UML model"/>
+        <details key="propertyDescription" value="The set of ids of viewpoints enabled on a UML model"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore_diagram b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore_diagram
new file mode 100644
index 0000000..fca39ee
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.ecore_diagram
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_jPuUwLeqEearJ4erliAKEg" type="Ecore" measurementUnit="Pixel">
+  <children xmi:type="notation:Shape" xmi:id="_jpWVsLeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jph74LeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpnbcLeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpnbcbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpnbcreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpoCgLeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpoCgbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpoCgreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpoCg7eqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpoChLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpoChbeqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ADElement"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpWVsbeqEearJ4erliAKEg" x="234" y="63"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpopkLeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpopkreqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jppQoLeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jppQobeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jppQoreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jppQo7eqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jppQpLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jppQpbeqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jppQpreqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jppQp7eqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jppQqLeqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDomain"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpopkbeqEearJ4erliAKEg" x="99" y="198"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpqewLeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jprF0LeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jprF0beqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jprF0reqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jprF07eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jprF1LeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jprF1beqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jprF1reqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jprs4LeqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jprs4beqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jprs4reqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionLanguage"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpqewbeqEearJ4erliAKEg" x="270" y="378"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jprs47eqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpsT8LeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpsT8beqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpsT8reqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpsT87eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpsT9LeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpsT9beqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpsT9reqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpsT97eqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpsT-LeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpsT-beqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//Stakeholder"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jprs5LeqEearJ4erliAKEg" x="54" y="324" width="109"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jps7ALeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jps7AreqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jps7A7eqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jps7BLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jps7BbeqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jps7BreqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jps7B7eqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jps7CLeqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jps7CbeqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jps7CreqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jps7C7eqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//Concern"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jps7AbeqEearJ4erliAKEg" x="99" y="486" width="109"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jptiELeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpuJILeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpuJIbeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpuJIreqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpuJI7eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpuJJLeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpuJJbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpuJJreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpuwMLeqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpuwMbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpuwMreqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureViewpoint"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jptiEbeqEearJ4erliAKEg" x="513" y="486" width="172"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpvXQLeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpvXQreqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpvXQ7eqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpvXRLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpvXRbeqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpv-ULeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpv-UbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpv-UreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpv-U7eqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpv-VLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpv-VbeqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//RepresentationKind"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpvXQbeqEearJ4erliAKEg" x="297" y="486"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpv-VreqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpwlYLeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpwlYbeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpwlYreqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpwlY7eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpwlZLeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpwlZbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpwlZreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpxMcLeqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpxMcbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpxMcreqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureContext"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpv-V7eqEearJ4erliAKEg" x="351" y="171"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpxMc7eqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpxzgLeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpxzgbeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpxzgreqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpxzg7eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpxzhLeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpxzhbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpxzhreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpxzh7eqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpxziLeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpxzibeqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureFramework"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpxMdLeqEearJ4erliAKEg" x="450" y="378"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_jpyakLeqEearJ4erliAKEg" type="2001" fontName="Lucida Grande">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jpzBoLeqEearJ4erliAKEg" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpzBobeqEearJ4erliAKEg" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpzBoreqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpzBo7eqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpzBpLeqEearJ4erliAKEg" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpzBpbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpzBpreqEearJ4erliAKEg"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_jpzosLeqEearJ4erliAKEg" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_jpzosbeqEearJ4erliAKEg"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_jpzosreqEearJ4erliAKEg"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescription"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jpyakbeqEearJ4erliAKEg" x="414" y="36"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_UOZmMAP_EeeD5ZWpL2ysEA" type="2001" fontName=".SF NS Text">
+    <children xmi:type="notation:DecorationNode" xmi:id="_UOa0UAP_EeeD5ZWpL2ysEA" type="5001"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_UOa0UQP_EeeD5ZWpL2ysEA" type="7001">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_UOa0UgP_EeeD5ZWpL2ysEA"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_UOa0UwP_EeeD5ZWpL2ysEA"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_UOa0VAP_EeeD5ZWpL2ysEA" type="7002">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_UOa0VQP_EeeD5ZWpL2ysEA"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_UOa0VgP_EeeD5ZWpL2ysEA"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_UObbYAP_EeeD5ZWpL2ysEA" type="7003">
+      <styles xmi:type="notation:SortingStyle" xmi:id="_UObbYQP_EeeD5ZWpL2ysEA"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_UObbYgP_EeeD5ZWpL2ysEA"/>
+    </children>
+    <element xmi:type="ecore:EClass" href="Architecture.ecore#//ArchitectureDescriptionPreferences"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOZmMQP_EeeD5ZWpL2ysEA" x="-5" y="20"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_jPuUwbeqEearJ4erliAKEg"/>
+  <element xmi:type="ecore:EPackage" href="Architecture.ecore#/"/>
+  <edges xmi:type="notation:Connector" xmi:id="_jvgBALeqEearJ4erliAKEg" type="4003" source="_jpopkLeqEearJ4erliAKEg" target="_jprs47eqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jvgoELeqEearJ4erliAKEg" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jvgoEbeqEearJ4erliAKEg" x="24" y="34"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jvgoEreqEearJ4erliAKEg" type="6004">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jvgoE7eqEearJ4erliAKEg" x="-2" y="-18"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jvgBAbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/stakeholders"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jvgBAreqEearJ4erliAKEg" points="[-8, 0, 37, -74]$[-8, 74, 37, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B0LeqEearJ4erliAKEg" id="(0.4953271028037383,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B0beqEearJ4erliAKEg" id="(0.49295774647887325,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jv_wQLeqEearJ4erliAKEg" type="4003" source="_jpopkLeqEearJ4erliAKEg" target="_jps7ALeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwAXULeqEearJ4erliAKEg" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwAXUbeqEearJ4erliAKEg" x="96" y="-29"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwAXUreqEearJ4erliAKEg" type="6004">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwAXU7eqEearJ4erliAKEg" x="13" y="10"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jv_wQbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/concerns"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jv_wQreqEearJ4erliAKEg" points="[19, 0, 52, -200]$[19, 200, 52, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B1LeqEearJ4erliAKEg" id="(0.6635514018691588,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B1beqEearJ4erliAKEg" id="(0.35714285714285715,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwEBsLeqEearJ4erliAKEg" type="4003" source="_jpopkLeqEearJ4erliAKEg" target="_jpv-VreqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwEowLeqEearJ4erliAKEg" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwEowbeqEearJ4erliAKEg" x="46" y="14"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwEowreqEearJ4erliAKEg" type="6004">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwEow7eqEearJ4erliAKEg" x="-6" y="-13"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwEBsbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDomain/contexts"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwEBsreqEearJ4erliAKEg" points="[18, -34, -193, 45]$[163, -34, -48, 45]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzztbeqEearJ4erliAKEg" id="(0.8317757009345794,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy0awLeqEearJ4erliAKEg" id="(0.24299065420560748,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwITILeqEearJ4erliAKEg" type="4004" source="_jpopkLeqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwITIbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwITIreqEearJ4erliAKEg" points="[19, -52, -106, 135]$[19, -106, -106, 81]$[109, -106, -16, 81]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B0reqEearJ4erliAKEg" id="(0.24299065420560748,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1B07eqEearJ4erliAKEg" id="(0.12121212121212122,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwMkkLeqEearJ4erliAKEg" type="4003" source="_jpqewLeqEearJ4erliAKEg" target="_jpvXQLeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwMkk7eqEearJ4erliAKEg" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwMklLeqEearJ4erliAKEg" x="15" y="46"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwMklbeqEearJ4erliAKEg" type="6004">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwMklreqEearJ4erliAKEg" x="-5" y="-17"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwMkkbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureDescriptionLanguage/representationKinds"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwMkkreqEearJ4erliAKEg" points="[69, 0, -24, -56]$[69, 56, -24, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o4LeqEearJ4erliAKEg" id="(0.07272727272727272,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o4beqEearJ4erliAKEg" id="(0.7428571428571429,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwPn4LeqEearJ4erliAKEg" type="4004" source="_jpqewLeqEearJ4erliAKEg" target="_jpv-VreqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwPn4beqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwPn4reqEearJ4erliAKEg" points="[104, -52, -119, 180]$[104, -109, -119, 123]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzMpLeqEearJ4erliAKEg" id="(0.03636363636363636,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzzsLeqEearJ4erliAKEg" id="(0.7476635514018691,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwRdELeqEearJ4erliAKEg" type="4002" source="_jprs47eqEearJ4erliAKEg" target="_jps7ALeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwRdE7eqEearJ4erliAKEg" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwRdFLeqEearJ4erliAKEg" x="33" y="26"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwRdFbeqEearJ4erliAKEg" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwRdFreqEearJ4erliAKEg" x="-6" y="-16"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwRdEbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//Stakeholder/concerns"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwRdEreqEearJ4erliAKEg" points="[-29, 0, -5, -47]$[-29, 47, -5, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzMoLeqEearJ4erliAKEg" id="(0.6619718309859155,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzMobeqEearJ4erliAKEg" id="(0.17857142857142858,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwYKwLeqEearJ4erliAKEg" type="4004" source="_jprs47eqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwYKwbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwYKwreqEearJ4erliAKEg" points="[-23, -52, -201, 261]$[-23, -250, -201, 63]$[145, -250, -33, 63]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o4reqEearJ4erliAKEg" id="(0.323943661971831,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o47eqEearJ4erliAKEg" id="(0.25,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwanALeqEearJ4erliAKEg" type="4004" source="_jps7ALeqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwanAbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwanAreqEearJ4erliAKEg" points="[-54, -40, -184, 435]$[-117, -40, -247, 435]$[-117, -430, -247, 45]$[81, -430, -49, 45]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzzs7eqEearJ4erliAKEg" id="(0.5,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzztLeqEearJ4erliAKEg" id="(0.3712121212121212,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwccMLeqEearJ4erliAKEg" type="4002" source="_jptiELeqEearJ4erliAKEg" target="_jps7ALeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwccM7eqEearJ4erliAKEg" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwccNLeqEearJ4erliAKEg" x="183" y="17"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwccNbeqEearJ4erliAKEg" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwccNreqEearJ4erliAKEg" x="60" y="17"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwccMbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/concerns"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwccMreqEearJ4erliAKEg" points="[23, 0, 439, 52]$[23, 29, 439, 81]$[-418, 29, -2, 81]$[-418, 0, -2, 52]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P8LeqEearJ4erliAKEg" id="(0.2672413793103448,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P8beqEearJ4erliAKEg" id="(0.5178571428571429,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwgGkLeqEearJ4erliAKEg" type="4002" source="_jptiELeqEearJ4erliAKEg" target="_jpvXQLeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwgGk7eqEearJ4erliAKEg" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwgGlLeqEearJ4erliAKEg" x="5" y="-8"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwgGlbeqEearJ4erliAKEg" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwgGlreqEearJ4erliAKEg" x="1" y="13"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwgGkbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureViewpoint/representationKinds"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwgGkreqEearJ4erliAKEg" points="[-93, -25, 164, 27]$[-204, -25, 53, 27]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy0awbeqEearJ4erliAKEg" id="(0.5431034482758621,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy0awreqEearJ4erliAKEg" id="(0.49523809523809526,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwkYALeqEearJ4erliAKEg" type="4004" source="_jptiELeqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwkYAbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwkYAreqEearJ4erliAKEg" points="[31, -52, 353, 423]$[31, -412, 353, 63]$[-278, -412, 44, 63]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o5LeqEearJ4erliAKEg" id="(0.7672413793103449,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy1o5beqEearJ4erliAKEg" id="(0.6666666666666666,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwm0QLeqEearJ4erliAKEg" type="4002" source="_jpvXQLeqEearJ4erliAKEg" target="_jps7ALeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwm0Q7eqEearJ4erliAKEg" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwm0RLeqEearJ4erliAKEg" x="16" y="-14"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwm0RbeqEearJ4erliAKEg" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwm0RreqEearJ4erliAKEg" x="-6" y="13"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwm0QbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//RepresentationKind/concerns"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwm0QreqEearJ4erliAKEg" points="[-26, -25, 115, 27]$[-115, -25, 26, 27]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzMoreqEearJ4erliAKEg" id="(0.24761904761904763,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzMo7eqEearJ4erliAKEg" id="(0.7678571428571429,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwrswLeqEearJ4erliAKEg" type="4004" source="_jpvXQLeqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwrswbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwrswreqEearJ4erliAKEg" points="[29, 0, 78, 475]$[29, 41, 78, 516]$[344, 41, 393, 516]$[344, -430, 393, 45]$[17, -430, 66, 45]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P8reqEearJ4erliAKEg" id="(0.49523809523809526,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P87eqEearJ4erliAKEg" id="(0.5,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwuwELeqEearJ4erliAKEg" type="4003" source="_jpv-VreqEearJ4erliAKEg" target="_jptiELeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwuwE7eqEearJ4erliAKEg" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwuwFLeqEearJ4erliAKEg" x="171" y="31"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_jwuwFbeqEearJ4erliAKEg" type="6004">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jwuwFreqEearJ4erliAKEg" x="24" y="28"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwuwEbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/viewpoints"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwuwEreqEearJ4erliAKEg" points="[100, -69, -55, -261]$[208, -69, 53, -261]$[208, 192, 53, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyylkLeqEearJ4erliAKEg" id="(0.4953271028037383,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyylkbeqEearJ4erliAKEg" id="(0.5344827586206896,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jwyacLeqEearJ4erliAKEg" type="4004" source="_jpv-VreqEearJ4erliAKEg" target="_jpWVsLeqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jwyacbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jwyacreqEearJ4erliAKEg" points="[-33, -91, 122, 108]$[-33, -118, 122, 81]$[-133, -118, 22, 81]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P9LeqEearJ4erliAKEg" id="(0.7476635514018691,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jy2P9beqEearJ4erliAKEg" id="(0.8333333333333334,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_jw02sLeqEearJ4erliAKEg" type="4004" source="_jpxMc7eqEearJ4erliAKEg" target="_jpv-VreqEearJ4erliAKEg" routing="Rectilinear">
+    <styles xmi:type="notation:FontStyle" xmi:id="_jw02sbeqEearJ4erliAKEg" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jw02sreqEearJ4erliAKEg" points="[-32, -52, 64, 180]$[-32, -109, 64, 123]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzzsbeqEearJ4erliAKEg" id="(0.7851239669421488,1.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jyzzsreqEearJ4erliAKEg" id="(0.4953271028037383,0.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_nPrvwDGnEeeThtX0CLDTfA" type="4002" source="_jpv-VreqEearJ4erliAKEg" target="_jptiELeqEearJ4erliAKEg" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_nPsW0DGnEeeThtX0CLDTfA" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nPsW0TGnEeeThtX0CLDTfA" x="124" y="46"/>
+    </children>
+    <children xmi:type="notation:DecorationNode" xmi:id="_nPsW0jGnEeeThtX0CLDTfA" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nPsW0zGnEeeThtX0CLDTfA" x="11" y="28"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_nPrvwTGnEeeThtX0CLDTfA" fontName=".SF NS Text"/>
+    <element xmi:type="ecore:EReference" href="Architecture.ecore#//ArchitectureContext/defaultViewpoints"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nPrvwjGnEeeThtX0CLDTfA" points="[22, 3, -41, -263]$[58, 3, -5, -263]$[58, 237, -5, -29]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nPxPUDGnEeeThtX0CLDTfA" id="(0.8888888888888888,0.6341463414634146)"/>
+  </edges>
+</notation:Diagram>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.genmodel b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.genmodel
new file mode 100644
index 0000000..ef3d448
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.genmodel
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText=" Copyright (c) 2017 CEA LIST and others.&#xA;&#xA; All rights reserved. This program and the accompanying materials&#xA; are made available under the terms of the Eclipse Public License 2.0&#xA; which accompanies this distribution, and is available at&#xA; https://www.eclipse.org/legal/epl-2.0/&#xA;&#xA; SPDX-License-Identifier: EPL-2.0&#xA;&#xA; Contributors:&#xA; Maged Elaasar - Initial API and implementation"
+    modelDirectory="/org.eclipse.papyrus.infra.core.architecture/src-gen" editDirectory="/org.eclipse.papyrus.infra.core.architecture.edit/src-gen"
+    editorDirectory="" modelPluginID="org.eclipse.papyrus.infra.core.architecture"
+    modelName="Architecture" nonNLSMarkers="true" rootExtendsClass="org.eclipse.emf.internal.cdo.CDOObjectImpl"
+    testsDirectory="" importerID="org.eclipse.emf.importer.ecore" featureDelegation="Dynamic"
+    complianceLevel="8.0" copyrightFields="false" usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.genmodel#//types"
+    operationReflection="true" importOrganizing="true" cleanup="true">
+  <foreignModel>Architecture.ecore</foreignModel>
+  <genPackages prefix="Architecture" basePackage="org.eclipse.papyrus.infra.core"
+      disposableProviderFactory="true" extensibleProviderFactory="true" ecorePackage="Architecture.ecore#/">
+    <genClasses image="false" ecoreClass="Architecture.ecore#//ADElement">
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The unique id of the element"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ADElement/id"/>
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The name of the element"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ADElement/name"/>
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The description of the element"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ADElement/description"/>
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The qualified name of the element"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ADElement/qualifiedName"/>
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The icon of the element specified using a platform plugin URI"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ADElement/icon"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureDomain">
+      <genFeatures property="None" children="true" createChild="true" propertyDescription="The set of stakeholders defined by the domain"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDomain/stakeholders"/>
+      <genFeatures property="None" children="true" createChild="true" propertyDescription="The set of concerns defined by the domain"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDomain/concerns"/>
+      <genFeatures property="None" children="true" createChild="true" propertyDescription="The set of contexts defined by the domain"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDomain/contexts"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureDescriptionLanguage">
+      <genFeatures property="None" children="true" createChild="true" propertyDescription="The set of representation kinds defined by the language"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDescriptionLanguage/representationKinds"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Description Language"
+          propertyDescription="The metamodel used by the language" propertySortChoices="true"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDescriptionLanguage/metamodel"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Description Language"
+          propertyDescription="The set of UML profiles used by the language" propertySortChoices="true"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureDescriptionLanguage/profiles"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//Stakeholder">
+      <genFeatures notify="false" createChild="false" propertyCategory="Stakeholder"
+          propertyDescription="The set of concerns of the stakeholder" propertySortChoices="true"
+          ecoreFeature="ecore:EReference Architecture.ecore#//Stakeholder/concerns"/>
+      <genFeatures property="None" notify="false" createChild="false" propertyDescription="The domain that defines the stakeholder"
+          ecoreFeature="ecore:EReference Architecture.ecore#//Stakeholder/domain"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//Concern">
+      <genFeatures property="None" notify="false" createChild="false" propertyDescription="The domain that defines the concern"
+          ecoreFeature="ecore:EReference Architecture.ecore#//Concern/domain"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureViewpoint">
+      <genFeatures notify="false" createChild="false" propertyCategory="Viewpoint"
+          propertyDescription="The set of concerns covered by the viewpoint" propertySortChoices="true"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureViewpoint/concerns"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Viewpoint"
+          propertyDescription="The set of representation kinds provided by the viewpoint"
+          propertySortChoices="true" ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureViewpoint/representationKinds"/>
+      <genFeatures property="None" notify="false" createChild="false" propertyDescription="The context that defines the viewpoint"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureViewpoint/context"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="Architecture.ecore#//RepresentationKind">
+      <genFeatures property="None" notify="false" createChild="false" propertyDescription="The language that defines the representation kind"
+          ecoreFeature="ecore:EReference Architecture.ecore#//RepresentationKind/language"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Representation Kind"
+          propertyDescription="The set of concerns covered by the representation kind"
+          propertySortChoices="true" ecoreFeature="ecore:EReference Architecture.ecore#//RepresentationKind/concerns"/>
+      <genFeatures createChild="false" propertyCategory="Element" propertyDescription="The icon of the element specified using a platform plugin URI"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//RepresentationKind/grayedIcon"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="Architecture.ecore#//ArchitectureContext">
+      <genFeatures property="None" children="true" createChild="true" propertyDescription="The set of viewpoints defined by the context"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureContext/viewpoints"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Context" propertyDescription="The set of viewpoints that are selected for the context by default"
+          propertySortChoices="true" ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureContext/defaultViewpoints"/>
+      <genFeatures notify="false" createChild="false" propertyCategory="Context" propertyDescription="The set of element type set configurations that are used by the context (typically found in .elementtypesconfigurations resources)"
+          propertySortChoices="true" ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureContext/elementTypes"/>
+      <genFeatures property="None" notify="false" createChild="false" propertyDescription="The domain that defines the context"
+          ecoreFeature="ecore:EReference Architecture.ecore#//ArchitectureContext/domain"/>
+      <genFeatures createChild="false" propertyCategory="Context" propertyDescription="The prefix of the file extension of the UML models applying this context (e.g., &lt;Name>.&lt;prefixExtension>.uml)"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ArchitectureContext/extensionPrefix"/>
+      <genFeatures createChild="false" propertyCategory="Context" propertyDescription="The fully qualified name of a command that creates models applying this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelCreationCommand inteface"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ArchitectureContext/creationCommandClass"/>
+      <genFeatures createChild="false" propertyCategory="Context" propertyDescription="The fully qualified name of a command that refactors models that switched to this context. The command must implement the org.eclipse.papyrus.infra.architecture.commands.IModelConversionCommand inteface"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ArchitectureContext/conversionCommandClass"/>
+      <genOperations ecoreOperation="Architecture.ecore#//ArchitectureContext/ceationCommandClassExists">
+        <genParameters ecoreParameter="Architecture.ecore#//ArchitectureContext/ceationCommandClassExists/diagnostics"/>
+        <genParameters ecoreParameter="Architecture.ecore#//ArchitectureContext/ceationCommandClassExists/context"/>
+      </genOperations>
+      <genOperations ecoreOperation="Architecture.ecore#//ArchitectureContext/conversionCommandClassExists">
+        <genParameters ecoreParameter="Architecture.ecore#//ArchitectureContext/conversionCommandClassExists/diagnostics"/>
+        <genParameters ecoreParameter="Architecture.ecore#//ArchitectureContext/conversionCommandClassExists/context"/>
+      </genOperations>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureFramework"/>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureDescription">
+      <genFeatures createChild="false" propertyDescription="The id of the context applied to a UML model"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ArchitectureDescription/contextId"/>
+    </genClasses>
+    <genClasses ecoreClass="Architecture.ecore#//ArchitectureDescriptionPreferences">
+      <genFeatures createChild="false" propertyDescription="The set of ids of viewpoints enabled on a UML model"
+          ecoreFeature="ecore:EAttribute Architecture.ecore#//ArchitectureDescriptionPreferences/viewpointIds"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.uml b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.uml
new file mode 100644
index 0000000..4cadc77
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/Architecture.uml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+  <uml:Model xmi:id="_46bO0F_sEeecE-N4uvmt0g" name="architecture" URI="http://www.eclipse.org/papyrus/infra/core/architecture">
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bO0V_sEeecE-N4uvmt0g" name="ADElement" isAbstract="true">
+      <ownedAttribute xmi:id="_46bO0l_sEeecE-N4uvmt0g" name="id" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO01_sEeecE-N4uvmt0g" name="name" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO1F_sEeecE-N4uvmt0g" name="description" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO1V_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO1l_sEeecE-N4uvmt0g" name="qualifiedName" visibility="public" isOrdered="true" isReadOnly="true" isDerived="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO11_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO2F_sEeecE-N4uvmt0g" name="icon" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO2V_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bO2l_sEeecE-N4uvmt0g" name="ArchitectureDomain">
+      <generalization xmi:id="_46bO21_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bO3F_sEeecE-N4uvmt0g" name="stakeholders" type="_46bO5V_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_46bO8V_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO3V_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO3l_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO31_sEeecE-N4uvmt0g" name="concerns" type="_46bO61_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_46bO7l_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO4F_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO4V_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO4l_sEeecE-N4uvmt0g" name="contexts" type="_46bO8l_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_46bPM1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO41_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO5F_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bO5V_sEeecE-N4uvmt0g" name="Stakeholder">
+      <generalization xmi:id="_46bO5l_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bO51_sEeecE-N4uvmt0g" name="concerns" type="_46bO61_sEeecE-N4uvmt0g" isOrdered="true" association="_46bO71_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO6F_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO6V_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO6l_sEeecE-N4uvmt0g" name="domain" type="_46bO2l_sEeecE-N4uvmt0g" isOrdered="true" association="_46bO8V_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bO61_sEeecE-N4uvmt0g" name="Concern">
+      <generalization xmi:id="_46bO7F_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bO7V_sEeecE-N4uvmt0g" name="domain" type="_46bO2l_sEeecE-N4uvmt0g" isOrdered="true" association="_46bO7l_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bO7l_sEeecE-N4uvmt0g" memberEnd="_46bO31_sEeecE-N4uvmt0g _46bO7V_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bO71_sEeecE-N4uvmt0g" memberEnd="_46bO51_sEeecE-N4uvmt0g _46bO8F_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bO8F_sEeecE-N4uvmt0g" type="_46bO5V_sEeecE-N4uvmt0g" association="_46bO71_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bO8V_sEeecE-N4uvmt0g" memberEnd="_46bO3F_sEeecE-N4uvmt0g _46bO6l_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bO8l_sEeecE-N4uvmt0g" name="ArchitectureContext" isAbstract="true">
+      <generalization xmi:id="_46bO81_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bO9F_sEeecE-N4uvmt0g" name="viewpoints" type="_46bPC1_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_46bPLl_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO9V_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO9l_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO91_sEeecE-N4uvmt0g" name="defaultViewpoints" type="_46bPC1_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPL1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO-F_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO-V_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO-l_sEeecE-N4uvmt0g" name="elementTypes" isOrdered="true" association="_46bPMV_sEeecE-N4uvmt0g">
+        <type xmi:type="uml:Class" href="ElementTypesConfigurations.uml#_44q7UV_sEeecE-N4uvmt0g"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO-1_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bO_F_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bO_V_sEeecE-N4uvmt0g" name="domain" type="_46bO2l_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPM1_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bO_l_sEeecE-N4uvmt0g" name="extensionPrefix" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bO_1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bPAF_sEeecE-N4uvmt0g" name="creationCommandClass" visibility="public" type="_46bPBF_sEeecE-N4uvmt0g" isOrdered="true"/>
+      <ownedAttribute xmi:id="_46bPAV_sEeecE-N4uvmt0g" name="conversionCommandClass" visibility="public" type="_46bPCF_sEeecE-N4uvmt0g" isOrdered="true">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPAl_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <nestedClassifier xmi:type="uml:Class" xmi:id="_46bPA1_sEeecE-N4uvmt0g" name="Wildcard"/>
+      <nestedClassifier xmi:type="uml:PrimitiveType" xmi:id="_46bPBF_sEeecE-N4uvmt0g" name="EJavaClass_Wildcard">
+        <templateBinding xmi:id="_46bPBV_sEeecE-N4uvmt0g">
+          <parameterSubstitution xmi:id="_46bPBl_sEeecE-N4uvmt0g" actual="_46bPA1_sEeecE-N4uvmt0g">
+            <formal xmi:type="uml:ClassifierTemplateParameter" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EJavaClass-_ownedElement.0-_ownedParameter.0"/>
+          </parameterSubstitution>
+          <signature xmi:type="uml:RedefinableTemplateSignature" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EJavaClass-_ownedElement.0"/>
+        </templateBinding>
+      </nestedClassifier>
+      <nestedClassifier xmi:type="uml:Class" xmi:id="_46bPB1_sEeecE-N4uvmt0g" name="Wildcard"/>
+      <nestedClassifier xmi:type="uml:PrimitiveType" xmi:id="_46bPCF_sEeecE-N4uvmt0g" name="EJavaClass_Wildcard">
+        <templateBinding xmi:id="_46bPCV_sEeecE-N4uvmt0g">
+          <parameterSubstitution xmi:id="_46bPCl_sEeecE-N4uvmt0g" actual="_46bPB1_sEeecE-N4uvmt0g">
+            <formal xmi:type="uml:ClassifierTemplateParameter" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EJavaClass-_ownedElement.0-_ownedParameter.0"/>
+          </parameterSubstitution>
+          <signature xmi:type="uml:RedefinableTemplateSignature" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EJavaClass-_ownedElement.0"/>
+        </templateBinding>
+      </nestedClassifier>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPC1_sEeecE-N4uvmt0g" name="ArchitectureViewpoint">
+      <generalization xmi:id="_46bPDF_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bPDV_sEeecE-N4uvmt0g" name="concerns" type="_46bO61_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPFF_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPDl_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPD1_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bPEF_sEeecE-N4uvmt0g" name="representationKinds" type="_46bPFl_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPLF_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPEV_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPEl_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bPE1_sEeecE-N4uvmt0g" name="context" type="_46bO8l_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPLl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPFF_sEeecE-N4uvmt0g" memberEnd="_46bPDV_sEeecE-N4uvmt0g _46bPFV_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPFV_sEeecE-N4uvmt0g" type="_46bPC1_sEeecE-N4uvmt0g" association="_46bPFF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPFl_sEeecE-N4uvmt0g" name="RepresentationKind" isAbstract="true">
+      <generalization xmi:id="_46bPF1_sEeecE-N4uvmt0g" general="_46bO0V_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bPGF_sEeecE-N4uvmt0g" name="language" type="_46bPHF_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPJV_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bPGV_sEeecE-N4uvmt0g" name="concerns" type="_46bO61_sEeecE-N4uvmt0g" isOrdered="true" association="_46bPKl_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPGl_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPG1_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_3prHYMrzEem0O816XhrVeA" name="grayedIcon" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3prHYcrzEem0O816XhrVeA"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPHF_sEeecE-N4uvmt0g" name="ArchitectureDescriptionLanguage">
+      <generalization xmi:id="_46bPHV_sEeecE-N4uvmt0g" general="_46bO8l_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bPHl_sEeecE-N4uvmt0g" name="representationKinds" type="_46bPFl_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_46bPJV_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPH1_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPIF_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_46bPIV_sEeecE-N4uvmt0g" name="metamodel" isOrdered="true" association="_46bPJl_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_46bPIl_sEeecE-N4uvmt0g" name="profiles" isOrdered="true" association="_46bPKF_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPI1_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPJF_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPJV_sEeecE-N4uvmt0g" memberEnd="_46bPHl_sEeecE-N4uvmt0g _46bPGF_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPJl_sEeecE-N4uvmt0g" memberEnd="_46bPIV_sEeecE-N4uvmt0g _46bPJ1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPJ1_sEeecE-N4uvmt0g" type="_46bPHF_sEeecE-N4uvmt0g" association="_46bPJl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPKF_sEeecE-N4uvmt0g" memberEnd="_46bPIl_sEeecE-N4uvmt0g _46bPKV_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPKV_sEeecE-N4uvmt0g" type="_46bPHF_sEeecE-N4uvmt0g" association="_46bPKF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPKl_sEeecE-N4uvmt0g" memberEnd="_46bPGV_sEeecE-N4uvmt0g _46bPK1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPK1_sEeecE-N4uvmt0g" type="_46bPFl_sEeecE-N4uvmt0g" association="_46bPKl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPLF_sEeecE-N4uvmt0g" memberEnd="_46bPEF_sEeecE-N4uvmt0g _46bPLV_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPLV_sEeecE-N4uvmt0g" type="_46bPC1_sEeecE-N4uvmt0g" association="_46bPLF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPLl_sEeecE-N4uvmt0g" memberEnd="_46bO9F_sEeecE-N4uvmt0g _46bPE1_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPL1_sEeecE-N4uvmt0g" memberEnd="_46bO91_sEeecE-N4uvmt0g _46bPMF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPMF_sEeecE-N4uvmt0g" type="_46bO8l_sEeecE-N4uvmt0g" association="_46bPL1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPMV_sEeecE-N4uvmt0g" memberEnd="_46bO-l_sEeecE-N4uvmt0g _46bPMl_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_46bPMl_sEeecE-N4uvmt0g" type="_46bO8l_sEeecE-N4uvmt0g" association="_46bPMV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_46bPM1_sEeecE-N4uvmt0g" memberEnd="_46bO4l_sEeecE-N4uvmt0g _46bO_V_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPNF_sEeecE-N4uvmt0g" name="ArchitectureFramework">
+      <generalization xmi:id="_46bPNV_sEeecE-N4uvmt0g" general="_46bO8l_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPNl_sEeecE-N4uvmt0g" name="ArchitectureDescription">
+      <ownedAttribute xmi:id="_46bPN1_sEeecE-N4uvmt0g" name="contextId" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPOF_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_46bPOV_sEeecE-N4uvmt0g" name="ArchitectureDescriptionPreferences">
+      <ownedAttribute xmi:id="_46bPOl_sEeecE-N4uvmt0g" name="viewpointIds" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_46bPO1_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_46bPPF_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <profileApplication xmi:id="_46bPPV_sEeecE-N4uvmt0g">
+      <eAnnotations xmi:id="_46bPPl_sEeecE-N4uvmt0g" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+      </eAnnotations>
+      <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+    </profileApplication>
+  </uml:Model>
+  <Ecore:EPackage xmi:id="_46bPP1_sEeecE-N4uvmt0g" base_Package="_46bO0F_sEeecE-N4uvmt0g" nsPrefix="architecture" basePackage="org.eclipse.papyrus.infra.core"/>
+  <Ecore:EClass xmi:id="_46bPQF_sEeecE-N4uvmt0g" base_Class="_46bO0V_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPQV_sEeecE-N4uvmt0g" base_Class="_46bO2l_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPQl_sEeecE-N4uvmt0g" base_Property="_46bO3F_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPQ1_sEeecE-N4uvmt0g" base_Property="_46bO31_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPRF_sEeecE-N4uvmt0g" base_Property="_46bO4l_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPRV_sEeecE-N4uvmt0g" base_Class="_46bO5V_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPRl_sEeecE-N4uvmt0g" base_Property="_46bO51_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPR1_sEeecE-N4uvmt0g" base_Property="_46bO6l_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPSF_sEeecE-N4uvmt0g" base_Class="_46bO61_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPSV_sEeecE-N4uvmt0g" base_Property="_46bO7V_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPSl_sEeecE-N4uvmt0g" base_Class="_46bO8l_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPS1_sEeecE-N4uvmt0g" base_Property="_46bO9F_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPTF_sEeecE-N4uvmt0g" base_Property="_46bO91_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPTV_sEeecE-N4uvmt0g" base_Property="_46bO-l_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPTl_sEeecE-N4uvmt0g" base_Property="_46bO_V_sEeecE-N4uvmt0g"/>
+  <Ecore:EGenericType xmi:id="_46bPT1_sEeecE-N4uvmt0g" base_Class="_46bPA1_sEeecE-N4uvmt0g"/>
+  <Ecore:EGenericType xmi:id="_46bPUF_sEeecE-N4uvmt0g" base_DataType="_46bPBF_sEeecE-N4uvmt0g"/>
+  <Ecore:EGenericType xmi:id="_46bPUV_sEeecE-N4uvmt0g" base_Class="_46bPB1_sEeecE-N4uvmt0g"/>
+  <Ecore:EGenericType xmi:id="_46bPUl_sEeecE-N4uvmt0g" base_DataType="_46bPCF_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPU1_sEeecE-N4uvmt0g" base_Class="_46bPC1_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPVF_sEeecE-N4uvmt0g" base_Property="_46bPDV_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPVV_sEeecE-N4uvmt0g" base_Property="_46bPEF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPVl_sEeecE-N4uvmt0g" base_Property="_46bPE1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPV1_sEeecE-N4uvmt0g" base_Class="_46bPFl_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPWF_sEeecE-N4uvmt0g" base_Property="_46bPGF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPWV_sEeecE-N4uvmt0g" base_Property="_46bPGV_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPWl_sEeecE-N4uvmt0g" base_Class="_46bPHF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPW1_sEeecE-N4uvmt0g" base_Property="_46bPHl_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPXF_sEeecE-N4uvmt0g" base_Property="_46bPIV_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_46bPXV_sEeecE-N4uvmt0g" base_Property="_46bPIl_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPXl_sEeecE-N4uvmt0g" base_Class="_46bPNF_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPX1_sEeecE-N4uvmt0g" base_Class="_46bPNl_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_46bPYF_sEeecE-N4uvmt0g" base_Class="_46bPOV_sEeecE-N4uvmt0g"/>
+</xmi:XMI>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/ElementTypesConfigurations.uml b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/ElementTypesConfigurations.uml
new file mode 100644
index 0000000..18f519c
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/model/ElementTypesConfigurations.uml
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+  <uml:Model xmi:id="_44q7UF_sEeecE-N4uvmt0g" name="types" URI="http://www.eclipse.org/papyrus/infra/elementtypesconfigurations/1.2">
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7UV_sEeecE-N4uvmt0g" name="ElementTypeSetConfiguration">
+      <generalization xmi:id="_44q7Ul_sEeecE-N4uvmt0g" general="_44q7XF_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7U1_sEeecE-N4uvmt0g" name="elementTypeConfigurations" type="_44q7Y1_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7dl_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7VF_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7VV_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7Vl_sEeecE-N4uvmt0g" name="adviceBindingsConfigurations" type="_44q7eF_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7ol_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7V1_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7WF_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7WV_sEeecE-N4uvmt0g" name="metamodelNsURI" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+      <interfaceRealization xmi:id="_44q7Wl_sEeecE-N4uvmt0g" client="_44q7UV_sEeecE-N4uvmt0g" supplier="_44q7X1_sEeecE-N4uvmt0g" contract="_44q7X1_sEeecE-N4uvmt0g"/>
+      <interfaceRealization xmi:id="_44q7W1_sEeecE-N4uvmt0g" client="_44q7UV_sEeecE-N4uvmt0g" supplier="_44q7YV_sEeecE-N4uvmt0g" contract="_44q7YV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7XF_sEeecE-N4uvmt0g" name="ConfigurationElement" isAbstract="true">
+      <ownedAttribute xmi:id="_44q7XV_sEeecE-N4uvmt0g" name="description" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7Xl_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Interface" xmi:id="_44q7X1_sEeecE-N4uvmt0g" name="IdentifiedConfiguration">
+      <ownedAttribute xmi:id="_44q7YF_sEeecE-N4uvmt0g" name="identifier" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Interface" xmi:id="_44q7YV_sEeecE-N4uvmt0g" name="NamedConfiguration">
+      <ownedAttribute xmi:id="_44q7Yl_sEeecE-N4uvmt0g" name="name" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7Y1_sEeecE-N4uvmt0g" name="ElementTypeConfiguration" isAbstract="true">
+      <generalization xmi:id="_44q7ZF_sEeecE-N4uvmt0g" general="_44q7XF_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7ZV_sEeecE-N4uvmt0g" name="hint" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7Zl_sEeecE-N4uvmt0g"/>
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_44q7Z1_sEeecE-N4uvmt0g" value="">
+          <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        </defaultValue>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7aF_sEeecE-N4uvmt0g" name="kind" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7aV_sEeecE-N4uvmt0g"/>
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_44q7al_sEeecE-N4uvmt0g" value="org.eclipse.gmf.runtime.emf.type.core.IHintedType">
+          <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        </defaultValue>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7a1_sEeecE-N4uvmt0g" name="iconEntry" type="_44q7b1_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7dF_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7bF_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <interfaceRealization xmi:id="_44q7bV_sEeecE-N4uvmt0g" client="_44q7Y1_sEeecE-N4uvmt0g" supplier="_44q7X1_sEeecE-N4uvmt0g" contract="_44q7X1_sEeecE-N4uvmt0g"/>
+      <interfaceRealization xmi:id="_44q7bl_sEeecE-N4uvmt0g" client="_44q7Y1_sEeecE-N4uvmt0g" supplier="_44q7YV_sEeecE-N4uvmt0g" contract="_44q7YV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7b1_sEeecE-N4uvmt0g" name="IconEntry">
+      <ownedAttribute xmi:id="_44q7cF_sEeecE-N4uvmt0g" name="iconPath" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7cV_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7cl_sEeecE-N4uvmt0g" name="bundleId" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7c1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7dF_sEeecE-N4uvmt0g" memberEnd="_44q7a1_sEeecE-N4uvmt0g _44q7dV_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7dV_sEeecE-N4uvmt0g" type="_44q7Y1_sEeecE-N4uvmt0g" association="_44q7dF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7dl_sEeecE-N4uvmt0g" memberEnd="_44q7U1_sEeecE-N4uvmt0g _44q7d1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7d1_sEeecE-N4uvmt0g" type="_44q7UV_sEeecE-N4uvmt0g" association="_44q7dl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7eF_sEeecE-N4uvmt0g" name="AbstractAdviceBindingConfiguration" isAbstract="true">
+      <generalization xmi:id="_44q7eV_sEeecE-N4uvmt0g" general="_44q7gl_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7el_sEeecE-N4uvmt0g" name="target" type="_44q7Y1_sEeecE-N4uvmt0g" isOrdered="true" association="_44q7jl_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7e1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7fF_sEeecE-N4uvmt0g" name="containerConfiguration" type="_44q7kF_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7m1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7fV_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7fl_sEeecE-N4uvmt0g" name="matcherConfiguration" type="_44q7ll_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7nV_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7f1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7gF_sEeecE-N4uvmt0g" name="inheritance" visibility="public" type="_44q7n1_sEeecE-N4uvmt0g" isOrdered="true"/>
+      <interfaceRealization xmi:id="_44q7gV_sEeecE-N4uvmt0g" client="_44q7eF_sEeecE-N4uvmt0g" supplier="_44q7X1_sEeecE-N4uvmt0g" contract="_44q7X1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7gl_sEeecE-N4uvmt0g" name="AdviceConfiguration" isAbstract="true">
+      <generalization xmi:id="_44q7g1_sEeecE-N4uvmt0g" general="_44q7XF_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7hF_sEeecE-N4uvmt0g" name="before" type="_44q7gl_sEeecE-N4uvmt0g" isOrdered="true" association="_44q7il_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7hV_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7hl_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7h1_sEeecE-N4uvmt0g" name="after" type="_44q7gl_sEeecE-N4uvmt0g" isOrdered="true" association="_44q7jF_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7iF_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7iV_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7il_sEeecE-N4uvmt0g" memberEnd="_44q7hF_sEeecE-N4uvmt0g _44q7i1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7i1_sEeecE-N4uvmt0g" type="_44q7gl_sEeecE-N4uvmt0g" association="_44q7il_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7jF_sEeecE-N4uvmt0g" memberEnd="_44q7h1_sEeecE-N4uvmt0g _44q7jV_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7jV_sEeecE-N4uvmt0g" type="_44q7gl_sEeecE-N4uvmt0g" association="_44q7jF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7jl_sEeecE-N4uvmt0g" memberEnd="_44q7el_sEeecE-N4uvmt0g _44q7j1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7j1_sEeecE-N4uvmt0g" type="_44q7eF_sEeecE-N4uvmt0g" association="_44q7jl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7kF_sEeecE-N4uvmt0g" name="ContainerConfiguration">
+      <ownedAttribute xmi:id="_44q7kV_sEeecE-N4uvmt0g" name="containerMatcherConfiguration" type="_44q7ll_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7l1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7kl_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7k1_sEeecE-N4uvmt0g" name="eContainmentFeatures" isOrdered="true" association="_44q7mV_sEeecE-N4uvmt0g">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/Ecore.metamodel.uml#EReference"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7lF_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7lV_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7ll_sEeecE-N4uvmt0g" name="AbstractMatcherConfiguration" isAbstract="true"/>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7l1_sEeecE-N4uvmt0g" memberEnd="_44q7kV_sEeecE-N4uvmt0g _44q7mF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7mF_sEeecE-N4uvmt0g" type="_44q7kF_sEeecE-N4uvmt0g" association="_44q7l1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7mV_sEeecE-N4uvmt0g" memberEnd="_44q7k1_sEeecE-N4uvmt0g _44q7ml_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7ml_sEeecE-N4uvmt0g" type="_44q7kF_sEeecE-N4uvmt0g" association="_44q7mV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7m1_sEeecE-N4uvmt0g" memberEnd="_44q7fF_sEeecE-N4uvmt0g _44q7nF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7nF_sEeecE-N4uvmt0g" type="_44q7eF_sEeecE-N4uvmt0g" association="_44q7m1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7nV_sEeecE-N4uvmt0g" memberEnd="_44q7fl_sEeecE-N4uvmt0g _44q7nl_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7nl_sEeecE-N4uvmt0g" type="_44q7eF_sEeecE-N4uvmt0g" association="_44q7nV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Enumeration" xmi:id="_44q7n1_sEeecE-N4uvmt0g" name="InheritanceKind">
+      <ownedLiteral xmi:id="_44q7oF_sEeecE-N4uvmt0g" name="none"/>
+      <ownedLiteral xmi:id="_44q7oV_sEeecE-N4uvmt0g" name="all"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7ol_sEeecE-N4uvmt0g" memberEnd="_44q7Vl_sEeecE-N4uvmt0g _44q7o1_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7o1_sEeecE-N4uvmt0g" type="_44q7UV_sEeecE-N4uvmt0g" association="_44q7ol_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7pF_sEeecE-N4uvmt0g" name="SpecializationTypeConfiguration">
+      <generalization xmi:id="_44q7pV_sEeecE-N4uvmt0g" general="_44q7Y1_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7pl_sEeecE-N4uvmt0g" name="editHelperAdviceConfiguration" type="_44q7r1_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7sl_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7p1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7qF_sEeecE-N4uvmt0g" name="containerConfiguration" type="_44q7kF_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7s1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7qV_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7ql_sEeecE-N4uvmt0g" name="matcherConfiguration" type="_44q7ll_sEeecE-N4uvmt0g" isOrdered="true" aggregation="composite" association="_44q7tV_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7q1_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7rF_sEeecE-N4uvmt0g" name="specializedTypes" type="_44q7Y1_sEeecE-N4uvmt0g" isOrdered="true" association="_44q7t1_sEeecE-N4uvmt0g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7rV_sEeecE-N4uvmt0g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_44q7rl_sEeecE-N4uvmt0g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7r1_sEeecE-N4uvmt0g" name="AbstractEditHelperAdviceConfiguration" isAbstract="true">
+      <generalization xmi:id="_44q7sF_sEeecE-N4uvmt0g" general="_44q7gl_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7sV_sEeecE-N4uvmt0g" name="target" type="_44q7pF_sEeecE-N4uvmt0g" isOrdered="true" association="_44q7sl_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7sl_sEeecE-N4uvmt0g" memberEnd="_44q7pl_sEeecE-N4uvmt0g _44q7sV_sEeecE-N4uvmt0g"/>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7s1_sEeecE-N4uvmt0g" memberEnd="_44q7qF_sEeecE-N4uvmt0g _44q7tF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7tF_sEeecE-N4uvmt0g" type="_44q7pF_sEeecE-N4uvmt0g" association="_44q7s1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7tV_sEeecE-N4uvmt0g" memberEnd="_44q7ql_sEeecE-N4uvmt0g _44q7tl_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7tl_sEeecE-N4uvmt0g" type="_44q7pF_sEeecE-N4uvmt0g" association="_44q7tV_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7t1_sEeecE-N4uvmt0g" memberEnd="_44q7rF_sEeecE-N4uvmt0g _44q7uF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7uF_sEeecE-N4uvmt0g" type="_44q7pF_sEeecE-N4uvmt0g" association="_44q7t1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7uV_sEeecE-N4uvmt0g" name="MetamodelTypeConfiguration">
+      <generalization xmi:id="_44q7ul_sEeecE-N4uvmt0g" general="_44q7Y1_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7u1_sEeecE-N4uvmt0g" name="eClass" isOrdered="true" association="_44q7v1_sEeecE-N4uvmt0g">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/Ecore.metamodel.uml#EClass"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7vF_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:id="_44q7vV_sEeecE-N4uvmt0g" name="editHelperClassName" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_44q7vl_sEeecE-N4uvmt0g"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Association" xmi:id="_44q7v1_sEeecE-N4uvmt0g" memberEnd="_44q7u1_sEeecE-N4uvmt0g _44q7wF_sEeecE-N4uvmt0g">
+      <ownedEnd xmi:id="_44q7wF_sEeecE-N4uvmt0g" type="_44q7uV_sEeecE-N4uvmt0g" association="_44q7v1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7wV_sEeecE-N4uvmt0g" name="EditHelperAdviceConfiguration">
+      <generalization xmi:id="_44q7wl_sEeecE-N4uvmt0g" general="_44q7r1_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7w1_sEeecE-N4uvmt0g" name="editHelperAdviceClassName" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7xF_sEeecE-N4uvmt0g" name="AdviceBindingConfiguration">
+      <generalization xmi:id="_44q7xV_sEeecE-N4uvmt0g" general="_44q7eF_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7xl_sEeecE-N4uvmt0g" name="editHelperAdviceClassName" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7x1_sEeecE-N4uvmt0g" name="MatcherConfiguration">
+      <generalization xmi:id="_44q7yF_sEeecE-N4uvmt0g" general="_44q7ll_sEeecE-N4uvmt0g"/>
+      <ownedAttribute xmi:id="_44q7yV_sEeecE-N4uvmt0g" name="matcherClassName" visibility="public" isOrdered="true">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7yl_sEeecE-N4uvmt0g" name="ExternallyRegisteredType">
+      <generalization xmi:id="_44q7y1_sEeecE-N4uvmt0g" general="_44q7Y1_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_44q7zF_sEeecE-N4uvmt0g" name="ExternallyRegisteredAdvice">
+      <generalization xmi:id="_44q7zV_sEeecE-N4uvmt0g" general="_44q7xF_sEeecE-N4uvmt0g"/>
+    </packagedElement>
+    <profileApplication xmi:id="_44q7zl_sEeecE-N4uvmt0g">
+      <eAnnotations xmi:id="_44q7z1_sEeecE-N4uvmt0g" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+      </eAnnotations>
+      <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+    </profileApplication>
+  </uml:Model>
+  <Ecore:EPackage xmi:id="_44q70F_sEeecE-N4uvmt0g" base_Package="_44q7UF_sEeecE-N4uvmt0g" nsPrefix="elementtypesconfigurations" basePackage="org.eclipse.papyrus.infra"/>
+  <Ecore:EClass xmi:id="_44q70V_sEeecE-N4uvmt0g" base_Class="_44q7UV_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q70l_sEeecE-N4uvmt0g" base_Property="_44q7U1_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q701_sEeecE-N4uvmt0g" base_Property="_44q7Vl_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q71F_sEeecE-N4uvmt0g" base_Class="_44q7XF_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q71V_sEeecE-N4uvmt0g" base_Interface="_44q7X1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q71l_sEeecE-N4uvmt0g" base_Interface="_44q7YV_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q711_sEeecE-N4uvmt0g" base_Class="_44q7Y1_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q72F_sEeecE-N4uvmt0g" base_Property="_44q7a1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q72V_sEeecE-N4uvmt0g" base_Class="_44q7b1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q72l_sEeecE-N4uvmt0g" base_Class="_44q7eF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q721_sEeecE-N4uvmt0g" base_Property="_44q7el_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q73F_sEeecE-N4uvmt0g" base_Property="_44q7fF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q73V_sEeecE-N4uvmt0g" base_Property="_44q7fl_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q73l_sEeecE-N4uvmt0g" base_Class="_44q7gl_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q731_sEeecE-N4uvmt0g" base_Property="_44q7hF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q74F_sEeecE-N4uvmt0g" base_Property="_44q7h1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44q74V_sEeecE-N4uvmt0g" base_Class="_44q7kF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q74l_sEeecE-N4uvmt0g" base_Property="_44q7kV_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44q741_sEeecE-N4uvmt0g" base_Property="_44q7k1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44riYF_sEeecE-N4uvmt0g" base_Class="_44q7ll_sEeecE-N4uvmt0g"/>
+  <Ecore:EEnum xmi:id="_44riYV_sEeecE-N4uvmt0g" base_Enumeration="_44q7n1_sEeecE-N4uvmt0g"/>
+  <Ecore:EEnumLiteral xmi:id="_44riYl_sEeecE-N4uvmt0g" base_EnumerationLiteral="_44q7oF_sEeecE-N4uvmt0g" literal="none"/>
+  <Ecore:EEnumLiteral xmi:id="_44riY1_sEeecE-N4uvmt0g" base_EnumerationLiteral="_44q7oV_sEeecE-N4uvmt0g" literal="all"/>
+  <Ecore:EClass xmi:id="_44riZF_sEeecE-N4uvmt0g" base_Class="_44q7pF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44riZV_sEeecE-N4uvmt0g" base_Property="_44q7pl_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44riZl_sEeecE-N4uvmt0g" base_Property="_44q7qF_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44riZ1_sEeecE-N4uvmt0g" base_Property="_44q7ql_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44riaF_sEeecE-N4uvmt0g" base_Property="_44q7rF_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44riaV_sEeecE-N4uvmt0g" base_Class="_44q7r1_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44rial_sEeecE-N4uvmt0g" base_Property="_44q7sV_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44ria1_sEeecE-N4uvmt0g" base_Class="_44q7uV_sEeecE-N4uvmt0g"/>
+  <Ecore:EReference xmi:id="_44ribF_sEeecE-N4uvmt0g" base_Property="_44q7u1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44ribV_sEeecE-N4uvmt0g" base_Class="_44q7wV_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44ribl_sEeecE-N4uvmt0g" base_Class="_44q7xF_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44rib1_sEeecE-N4uvmt0g" base_Class="_44q7x1_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44ricF_sEeecE-N4uvmt0g" base_Class="_44q7yl_sEeecE-N4uvmt0g"/>
+  <Ecore:EClass xmi:id="_44ricV_sEeecE-N4uvmt0g" base_Class="_44q7zF_sEeecE-N4uvmt0g"/>
+</xmi:XMI>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.properties b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.properties
new file mode 100644
index 0000000..15ff81a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.properties
@@ -0,0 +1,16 @@
+* Copyright (c) 2017 CEA LIST.
+# 
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License 2.0
+#  which accompanies this distribution, and is available at
+#  https://www.eclipse.org/legal/epl-2.0/
+#
+#  SPDX-License-Identifier: EPL-2.0
+#  
+#  Contributors:
+#  Maged Elaasar - Initial API and implementation
+#  
+# 
+
+pluginName = Architecture Model (CDO Version)
+providerName=Eclipse Modeling Project
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.xml b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.xml
new file mode 100644
index 0000000..017a4a6
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/plugin.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+* Copyright (c) 2020 CEA LIST.
+ 
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License 2.0
+  which accompanies this distribution, and is available at
+  https://www.eclipse.org/legal/epl-2.0/
+
+  SPDX-License-Identifier: EPL-2.0
+  
+  Contributors:
+  Eike Stepper - Initial API and implementation
+  
+ 
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.factory_override">
+    <factory
+        uri="http://www.eclipse.org/papyrus/infra/core/architecture"
+        class="org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureFactoryImpl"
+        predecessor="org.eclipse.papyrus.infra.core.architecture.impl.ArchitectureFactoryImpl" />
+    </extension>
+
+</plugin>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/pom.xml b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/pom.xml
new file mode 100644
index 0000000..c3fa630
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.papyrus.cdo</groupId>
+		<artifactId>org.eclipse.papyrus.cdo-bundles</artifactId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.papyrus.infra.core.architecture.cdo</artifactId>
+	<version>2.1.0-SNAPSHOT</version>
+	<packaging>eclipse-plugin</packaging>
+</project>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ADElementImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ADElementImpl.java
new file mode 100644
index 0000000..5da1c11
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ADElementImpl.java
@@ -0,0 +1,329 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.papyrus.infra.core.architecture.ADElement;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>AD Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ADElementImpl#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ADElementImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ADElementImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ADElementImpl#getQualifiedName <em>Qualified Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ADElementImpl#getIcon <em>Icon</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ADElementImpl extends CDOObjectImpl implements ADElement {
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DESCRIPTION_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getQualifiedName() <em>Qualified Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getQualifiedName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String QUALIFIED_NAME_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getIcon() <em>Icon</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getIcon()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ICON_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ADElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.AD_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getId() {
+		return (String) eDynamicGet(ArchitecturePackage.AD_ELEMENT__ID, ArchitecturePackage.Literals.AD_ELEMENT__ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setId(String newId) {
+		eDynamicSet(ArchitecturePackage.AD_ELEMENT__ID, ArchitecturePackage.Literals.AD_ELEMENT__ID, newId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getName() {
+		return (String) eDynamicGet(ArchitecturePackage.AD_ELEMENT__NAME, ArchitecturePackage.Literals.AD_ELEMENT__NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setName(String newName) {
+		eDynamicSet(ArchitecturePackage.AD_ELEMENT__NAME, ArchitecturePackage.Literals.AD_ELEMENT__NAME, newName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getDescription() {
+		return (String) eDynamicGet(ArchitecturePackage.AD_ELEMENT__DESCRIPTION, ArchitecturePackage.Literals.AD_ELEMENT__DESCRIPTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setDescription(String newDescription) {
+		eDynamicSet(ArchitecturePackage.AD_ELEMENT__DESCRIPTION, ArchitecturePackage.Literals.AD_ELEMENT__DESCRIPTION, newDescription);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String getQualifiedName() {
+		String qualifiedName = getName();
+		ADElement parent = (ADElement) eContainer();
+		while (parent != null) {
+			qualifiedName = parent.getName() + "::" + qualifiedName;
+			parent = (ADElement) parent.eContainer();
+		}
+		return qualifiedName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getIcon() {
+		return (String) eDynamicGet(ArchitecturePackage.AD_ELEMENT__ICON, ArchitecturePackage.Literals.AD_ELEMENT__ICON, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setIcon(String newIcon) {
+		eDynamicSet(ArchitecturePackage.AD_ELEMENT__ICON, ArchitecturePackage.Literals.AD_ELEMENT__ICON, newIcon);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ArchitecturePackage.AD_ELEMENT__ID:
+			return getId();
+		case ArchitecturePackage.AD_ELEMENT__NAME:
+			return getName();
+		case ArchitecturePackage.AD_ELEMENT__DESCRIPTION:
+			return getDescription();
+		case ArchitecturePackage.AD_ELEMENT__QUALIFIED_NAME:
+			return getQualifiedName();
+		case ArchitecturePackage.AD_ELEMENT__ICON:
+			return getIcon();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ArchitecturePackage.AD_ELEMENT__ID:
+			setId((String) newValue);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__NAME:
+			setName((String) newValue);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__DESCRIPTION:
+			setDescription((String) newValue);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__ICON:
+			setIcon((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ArchitecturePackage.AD_ELEMENT__ID:
+			setId(ID_EDEFAULT);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__DESCRIPTION:
+			setDescription(DESCRIPTION_EDEFAULT);
+			return;
+		case ArchitecturePackage.AD_ELEMENT__ICON:
+			setIcon(ICON_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ArchitecturePackage.AD_ELEMENT__ID:
+			return ID_EDEFAULT == null ? getId() != null : !ID_EDEFAULT.equals(getId());
+		case ArchitecturePackage.AD_ELEMENT__NAME:
+			return NAME_EDEFAULT == null ? getName() != null : !NAME_EDEFAULT.equals(getName());
+		case ArchitecturePackage.AD_ELEMENT__DESCRIPTION:
+			return DESCRIPTION_EDEFAULT == null ? getDescription() != null : !DESCRIPTION_EDEFAULT.equals(getDescription());
+		case ArchitecturePackage.AD_ELEMENT__QUALIFIED_NAME:
+			return QUALIFIED_NAME_EDEFAULT == null ? getQualifiedName() != null : !QUALIFIED_NAME_EDEFAULT.equals(getQualifiedName());
+		case ArchitecturePackage.AD_ELEMENT__ICON:
+			return ICON_EDEFAULT == null ? getIcon() != null : !ICON_EDEFAULT.equals(getIcon());
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // ADElementImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureContextImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureContextImpl.java
new file mode 100644
index 0000000..6d8d58e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureContextImpl.java
@@ -0,0 +1,546 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.emf.ecore.util.EObjectValidator;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureContext;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureViewpoint;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+import org.eclipse.papyrus.infra.core.architecture.util.ArchitectureValidator;
+import org.eclipse.papyrus.infra.types.ElementTypeSetConfiguration;
+import org.osgi.framework.Bundle;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Context</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getViewpoints <em>Viewpoints</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getDefaultViewpoints <em>Default Viewpoints</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getElementTypes <em>Element Types</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getDomain <em>Domain</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getExtensionPrefix <em>Extension Prefix</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getCreationCommandClass <em>Creation Command Class</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureContextImpl#getConversionCommandClass <em>Conversion Command Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ArchitectureContextImpl extends ADElementImpl implements ArchitectureContext {
+	/**
+	 * The default value of the '{@link #getExtensionPrefix() <em>Extension Prefix</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see #getExtensionPrefix()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String EXTENSION_PREFIX_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getCreationCommandClass() <em>Creation Command Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see #getCreationCommandClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CREATION_COMMAND_CLASS_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getConversionCommandClass() <em>Conversion Command Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see #getConversionCommandClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CONVERSION_COMMAND_CLASS_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected ArchitectureContextImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ArchitectureViewpoint> getViewpoints() {
+		return (EList<ArchitectureViewpoint>) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__VIEWPOINTS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ArchitectureViewpoint> getDefaultViewpoints() {
+		return (EList<ArchitectureViewpoint>) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ElementTypeSetConfiguration> getElementTypes() {
+		return (EList<ElementTypeSetConfiguration>) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__ELEMENT_TYPES, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__ELEMENT_TYPES, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String getExtensionPrefix() {
+		return (String) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setExtensionPrefix(String newExtensionPrefix) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX, newExtensionPrefix);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String getCreationCommandClass() {
+		return (String) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setCreationCommandClass(String newCreationCommandClass) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS, newCreationCommandClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String getConversionCommandClass() {
+		return (String) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setConversionCommandClass(String newConversionCommandClass) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS, newConversionCommandClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	@Override
+	public boolean ceationCommandClassExists(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		String creationCommandClass = getCreationCommandClass();
+		if (creationCommandClass != null) {
+			boolean exists = false;
+
+			URI uri = eResource().getURI();
+			if (uri.isPlatformPlugin()) {
+				String bundleName = uri.segment(1);
+				Bundle bundle = Platform.getBundle(bundleName);
+				try {
+					exists = bundle.loadClass(creationCommandClass) != null;
+				} catch (ClassNotFoundException e) {
+					/* ignore */
+				}
+			} else if (uri.isPlatformResource()) {
+				String projectName = uri.segment(1);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				IJavaProject javaProject = JavaCore.create(project);
+				try {
+					exists = javaProject.findType(creationCommandClass) != null;
+				} catch (JavaModelException e) {
+					/* ignore */
+				}
+			}
+
+			if (!exists) {
+				if (diagnostics != null) {
+					diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
+							ArchitectureValidator.DIAGNOSTIC_SOURCE,
+							ArchitectureValidator.ARCHITECTURE_CONTEXT__CEATION_COMMAND_CLASS_EXISTS,
+							EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "ceationCommandClassExists", EObjectValidator.getObjectLabel(this, context) }), //$NON-NLS-1$ //$NON-NLS-2$
+							new Object[] { this }));
+				}
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	@Override
+	public boolean conversionCommandClassExists(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		String conversionCommandClass = getConversionCommandClass();
+		if (conversionCommandClass != null) {
+			boolean exists = false;
+
+			URI uri = eResource().getURI();
+			if (uri.isPlatformPlugin()) {
+				String bundleName = uri.segment(1);
+				Bundle bundle = Platform.getBundle(bundleName);
+				try {
+					exists = bundle.loadClass(conversionCommandClass) != null;
+				} catch (ClassNotFoundException e) {
+					/* ignore */
+				}
+			} else if (uri.isPlatformResource()) {
+				String projectName = uri.segment(1);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				IJavaProject javaProject = JavaCore.create(project);
+				try {
+					exists = javaProject.findType(conversionCommandClass) != null;
+				} catch (JavaModelException e) {
+					/* ignore */
+				}
+			}
+
+			if (!exists) {
+				if (diagnostics != null) {
+					diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
+							ArchitectureValidator.DIAGNOSTIC_SOURCE,
+							ArchitectureValidator.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS_EXISTS,
+							EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "conversionCommandClassExists", EObjectValidator.getObjectLabel(this, context) }), //$NON-NLS-1$ //$NON-NLS-2$
+							new Object[] { this }));
+				}
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDomain getDomain() {
+		return (ArchitectureDomain) eDynamicGet(ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__DOMAIN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public NotificationChain basicSetDomain(ArchitectureDomain newDomain, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject) newDomain, ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setDomain(ArchitectureDomain newDomain) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN, ArchitecturePackage.Literals.ARCHITECTURE_CONTEXT__DOMAIN, newDomain);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			return ((InternalEList<InternalEObject>) (InternalEList<?>) getViewpoints()).basicAdd(otherEnd, msgs);
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			if (eInternalContainer() != null) {
+				msgs = eBasicRemoveFromContainer(msgs);
+			}
+			return basicSetDomain((ArchitectureDomain) otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			return ((InternalEList<?>) getViewpoints()).basicRemove(otherEnd, msgs);
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			return basicSetDomain(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			return eInternalContainer().eInverseRemove(this, ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS, ArchitectureDomain.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			return getViewpoints();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS:
+			return getDefaultViewpoints();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__ELEMENT_TYPES:
+			return getElementTypes();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			return getDomain();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX:
+			return getExtensionPrefix();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS:
+			return getCreationCommandClass();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS:
+			return getConversionCommandClass();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			getViewpoints().clear();
+			getViewpoints().addAll((Collection<? extends ArchitectureViewpoint>) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS:
+			getDefaultViewpoints().clear();
+			getDefaultViewpoints().addAll((Collection<? extends ArchitectureViewpoint>) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__ELEMENT_TYPES:
+			getElementTypes().clear();
+			getElementTypes().addAll((Collection<? extends ElementTypeSetConfiguration>) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			setDomain((ArchitectureDomain) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX:
+			setExtensionPrefix((String) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS:
+			setCreationCommandClass((String) newValue);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS:
+			setConversionCommandClass((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			getViewpoints().clear();
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS:
+			getDefaultViewpoints().clear();
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__ELEMENT_TYPES:
+			getElementTypes().clear();
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			setDomain((ArchitectureDomain) null);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX:
+			setExtensionPrefix(EXTENSION_PREFIX_EDEFAULT);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS:
+			setCreationCommandClass(CREATION_COMMAND_CLASS_EDEFAULT);
+			return;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS:
+			setConversionCommandClass(CONVERSION_COMMAND_CLASS_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS:
+			return !getViewpoints().isEmpty();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DEFAULT_VIEWPOINTS:
+			return !getDefaultViewpoints().isEmpty();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__ELEMENT_TYPES:
+			return !getElementTypes().isEmpty();
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__DOMAIN:
+			return getDomain() != null;
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__EXTENSION_PREFIX:
+			return EXTENSION_PREFIX_EDEFAULT == null ? getExtensionPrefix() != null : !EXTENSION_PREFIX_EDEFAULT.equals(getExtensionPrefix());
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CREATION_COMMAND_CLASS:
+			return CREATION_COMMAND_CLASS_EDEFAULT == null ? getCreationCommandClass() != null : !CREATION_COMMAND_CLASS_EDEFAULT.equals(getCreationCommandClass());
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT__CONVERSION_COMMAND_CLASS:
+			return CONVERSION_COMMAND_CLASS_EDEFAULT == null ? getConversionCommandClass() != null : !CONVERSION_COMMAND_CLASS_EDEFAULT.equals(getConversionCommandClass());
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT___CEATION_COMMAND_CLASS_EXISTS__DIAGNOSTICCHAIN_MAP:
+			return ceationCommandClassExists((DiagnosticChain) arguments.get(0), (Map<Object, Object>) arguments.get(1));
+		case ArchitecturePackage.ARCHITECTURE_CONTEXT___CONVERSION_COMMAND_CLASS_EXISTS__DIAGNOSTICCHAIN_MAP:
+			return conversionCommandClassExists((DiagnosticChain) arguments.get(0), (Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} // ArchitectureContextImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionImpl.java
new file mode 100644
index 0000000..fad428a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionImpl.java
@@ -0,0 +1,154 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescription;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Description</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDescriptionImpl#getContextId <em>Context Id</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArchitectureDescriptionImpl extends CDOObjectImpl implements ArchitectureDescription {
+	/**
+	 * The default value of the '{@link #getContextId() <em>Context Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContextId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CONTEXT_ID_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureDescriptionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getContextId() {
+		return (String)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION__CONTEXT_ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setContextId(String newContextId) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION__CONTEXT_ID, newContextId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID:
+				return getContextId();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID:
+				setContextId((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID:
+				setContextId(CONTEXT_ID_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION__CONTEXT_ID:
+				return CONTEXT_ID_EDEFAULT == null ? getContextId() != null : !CONTEXT_ID_EDEFAULT.equals(getContextId());
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArchitectureDescriptionImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionLanguageImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionLanguageImpl.java
new file mode 100644
index 0000000..c4d7f9c
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionLanguageImpl.java
@@ -0,0 +1,231 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.RepresentationKind;
+import org.eclipse.papyrus.infra.core.architecture.impl.ArchitectureContextImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Description Language</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDescriptionLanguageImpl#getRepresentationKinds <em>Representation Kinds</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDescriptionLanguageImpl#getMetamodel <em>Metamodel</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDescriptionLanguageImpl#getProfiles <em>Profiles</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArchitectureDescriptionLanguageImpl extends ArchitectureContextImpl implements ArchitectureDescriptionLanguage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureDescriptionLanguageImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<RepresentationKind> getRepresentationKinds() {
+		return (EList<RepresentationKind>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EPackage getMetamodel() {
+		return (EPackage)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EPackage basicGetMetamodel() {
+		return (EPackage)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setMetamodel(EPackage newMetamodel) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL, newMetamodel);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<EPackage> getProfiles() {
+		return (EList<EPackage>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getRepresentationKinds()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				return ((InternalEList<?>)getRepresentationKinds()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				return getRepresentationKinds();
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL:
+				if (resolve) {
+					return getMetamodel();
+				}
+				return basicGetMetamodel();
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES:
+				return getProfiles();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				getRepresentationKinds().clear();
+				getRepresentationKinds().addAll((Collection<? extends RepresentationKind>)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL:
+				setMetamodel((EPackage)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES:
+				getProfiles().clear();
+				getProfiles().addAll((Collection<? extends EPackage>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				getRepresentationKinds().clear();
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL:
+				setMetamodel((EPackage)null);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES:
+				getProfiles().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS:
+				return !getRepresentationKinds().isEmpty();
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__METAMODEL:
+				return basicGetMetamodel() != null;
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__PROFILES:
+				return !getProfiles().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArchitectureDescriptionLanguageImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionPreferencesImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionPreferencesImpl.java
new file mode 100644
index 0000000..b66902f
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDescriptionPreferencesImpl.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionPreferences;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Description Preferences</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDescriptionPreferencesImpl#getViewpointIds <em>Viewpoint Ids</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArchitectureDescriptionPreferencesImpl extends CDOObjectImpl implements ArchitectureDescriptionPreferences {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureDescriptionPreferencesImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_PREFERENCES;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<String> getViewpointIds() {
+		return (EList<String>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS, ArchitecturePackage.Literals.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS:
+				return getViewpointIds();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS:
+				getViewpointIds().clear();
+				getViewpointIds().addAll((Collection<? extends String>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS:
+				getViewpointIds().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES__VIEWPOINT_IDS:
+				return !getViewpointIds().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArchitectureDescriptionPreferencesImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDomainImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDomainImpl.java
new file mode 100644
index 0000000..d382779
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureDomainImpl.java
@@ -0,0 +1,221 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureContext;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.Stakeholder;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Domain</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDomainImpl#getStakeholders <em>Stakeholders</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDomainImpl#getConcerns <em>Concerns</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureDomainImpl#getContexts <em>Contexts</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArchitectureDomainImpl extends ADElementImpl implements ArchitectureDomain {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureDomainImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_DOMAIN;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Stakeholder> getStakeholders() {
+		return (EList<Stakeholder>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS, ArchitecturePackage.Literals.ARCHITECTURE_DOMAIN__STAKEHOLDERS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Concern> getConcerns() {
+		return (EList<Concern>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS, ArchitecturePackage.Literals.ARCHITECTURE_DOMAIN__CONCERNS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ArchitectureContext> getContexts() {
+		return (EList<ArchitectureContext>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS, ArchitecturePackage.Literals.ARCHITECTURE_DOMAIN__CONTEXTS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getStakeholders()).basicAdd(otherEnd, msgs);
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getConcerns()).basicAdd(otherEnd, msgs);
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getContexts()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				return ((InternalEList<?>)getStakeholders()).basicRemove(otherEnd, msgs);
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				return ((InternalEList<?>)getConcerns()).basicRemove(otherEnd, msgs);
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				return ((InternalEList<?>)getContexts()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				return getStakeholders();
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				return getConcerns();
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				return getContexts();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				getStakeholders().clear();
+				getStakeholders().addAll((Collection<? extends Stakeholder>)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				getConcerns().clear();
+				getConcerns().addAll((Collection<? extends Concern>)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				getContexts().clear();
+				getContexts().addAll((Collection<? extends ArchitectureContext>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				getStakeholders().clear();
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				getConcerns().clear();
+				return;
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				getContexts().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS:
+				return !getStakeholders().isEmpty();
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS:
+				return !getConcerns().isEmpty();
+			case ArchitecturePackage.ARCHITECTURE_DOMAIN__CONTEXTS:
+				return !getContexts().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArchitectureDomainImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFactoryImpl.java
new file mode 100644
index 0000000..a26b15a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFactoryImpl.java
@@ -0,0 +1,221 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescription;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionPreferences;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureFactory;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureFramework;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureViewpoint;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.Stakeholder;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ArchitectureFactoryImpl extends EFactoryImpl implements ArchitectureFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static ArchitectureFactory init() {
+		try {
+			ArchitectureFactory theArchitectureFactory = (ArchitectureFactory) EPackage.Registry.INSTANCE.getEFactory(ArchitecturePackage.eNS_URI);
+			if (theArchitectureFactory != null) {
+				return theArchitectureFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ArchitectureFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ArchitectureFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case ArchitecturePackage.ARCHITECTURE_DOMAIN:
+			return createArchitectureDomain();
+		case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE:
+			return createArchitectureDescriptionLanguage();
+		case ArchitecturePackage.STAKEHOLDER:
+			return createStakeholder();
+		case ArchitecturePackage.CONCERN:
+			return createConcern();
+		case ArchitecturePackage.ARCHITECTURE_VIEWPOINT:
+			return createArchitectureViewpoint();
+		case ArchitecturePackage.ARCHITECTURE_FRAMEWORK:
+			return createArchitectureFramework();
+		case ArchitecturePackage.ARCHITECTURE_DESCRIPTION:
+			return createArchitectureDescription();
+		case ArchitecturePackage.ARCHITECTURE_DESCRIPTION_PREFERENCES:
+			return createArchitectureDescriptionPreferences();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDomain createArchitectureDomain() {
+		ArchitectureDomainImpl architectureDomain = new ArchitectureDomainImpl();
+		return architectureDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDescriptionLanguage createArchitectureDescriptionLanguage() {
+		ArchitectureDescriptionLanguageImpl architectureDescriptionLanguage = new ArchitectureDescriptionLanguageImpl();
+		return architectureDescriptionLanguage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Stakeholder createStakeholder() {
+		StakeholderImpl stakeholder = new StakeholderImpl();
+		return stakeholder;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Concern createConcern() {
+		ConcernImpl concern = new ConcernImpl();
+		return concern;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureViewpoint createArchitectureViewpoint() {
+		ArchitectureViewpointImpl architectureViewpoint = new ArchitectureViewpointImpl();
+		return architectureViewpoint;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureFramework createArchitectureFramework() {
+		ArchitectureFrameworkImpl architectureFramework = new ArchitectureFrameworkImpl();
+		return architectureFramework;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDescription createArchitectureDescription() {
+		ArchitectureDescriptionImpl architectureDescription = new ArchitectureDescriptionImpl();
+		return architectureDescription;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDescriptionPreferences createArchitectureDescriptionPreferences() {
+		ArchitectureDescriptionPreferencesImpl architectureDescriptionPreferences = new ArchitectureDescriptionPreferencesImpl();
+		return architectureDescriptionPreferences;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ArchitecturePackage getArchitecturePackage() {
+		return (ArchitecturePackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ArchitecturePackage getPackage() {
+		return ArchitecturePackage.eINSTANCE;
+	}
+
+} // ArchitectureFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFrameworkImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFrameworkImpl.java
new file mode 100644
index 0000000..80bf5fe
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureFrameworkImpl.java
@@ -0,0 +1,50 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ * 
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *  
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *  
+ * 
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureFramework;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.impl.ArchitectureContextImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Framework</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ArchitectureFrameworkImpl extends ArchitectureContextImpl implements ArchitectureFramework {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureFrameworkImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_FRAMEWORK;
+	}
+
+} //ArchitectureFrameworkImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureViewpointImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureViewpointImpl.java
new file mode 100644
index 0000000..78cac92
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ArchitectureViewpointImpl.java
@@ -0,0 +1,245 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureContext;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureViewpoint;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.RepresentationKind;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Viewpoint</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureViewpointImpl#getConcerns <em>Concerns</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureViewpointImpl#getRepresentationKinds <em>Representation Kinds</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ArchitectureViewpointImpl#getContext <em>Context</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArchitectureViewpointImpl extends ADElementImpl implements ArchitectureViewpoint {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArchitectureViewpointImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Concern> getConcerns() {
+		return (EList<Concern>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONCERNS, ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__CONCERNS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<RepresentationKind> getRepresentationKinds() {
+		return (EList<RepresentationKind>)eDynamicGet(ArchitecturePackage.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS, ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ArchitectureContext getContext() {
+		return (ArchitectureContext)eDynamicGet(ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT, ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__CONTEXT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetContext(ArchitectureContext newContext, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newContext, ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setContext(ArchitectureContext newContext) {
+		eDynamicSet(ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT, ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__CONTEXT, newContext);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				if (eInternalContainer() != null) {
+					msgs = eBasicRemoveFromContainer(msgs);
+				}
+				return basicSetContext((ArchitectureContext)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				return basicSetContext(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				return eInternalContainer().eInverseRemove(this, ArchitecturePackage.ARCHITECTURE_CONTEXT__VIEWPOINTS, ArchitectureContext.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONCERNS:
+				return getConcerns();
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS:
+				return getRepresentationKinds();
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				return getContext();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONCERNS:
+				getConcerns().clear();
+				getConcerns().addAll((Collection<? extends Concern>)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS:
+				getRepresentationKinds().clear();
+				getRepresentationKinds().addAll((Collection<? extends RepresentationKind>)newValue);
+				return;
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				setContext((ArchitectureContext)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONCERNS:
+				getConcerns().clear();
+				return;
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS:
+				getRepresentationKinds().clear();
+				return;
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				setContext((ArchitectureContext)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONCERNS:
+				return !getConcerns().isEmpty();
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS:
+				return !getRepresentationKinds().isEmpty();
+			case ArchitecturePackage.ARCHITECTURE_VIEWPOINT__CONTEXT:
+				return getContext() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArchitectureViewpointImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ConcernImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ConcernImpl.java
new file mode 100644
index 0000000..4d24b15
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/ConcernImpl.java
@@ -0,0 +1,193 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Concern</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.ConcernImpl#getDomain <em>Domain</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ConcernImpl extends ADElementImpl implements Concern {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ConcernImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.CONCERN;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDomain getDomain() {
+		return (ArchitectureDomain)eDynamicGet(ArchitecturePackage.CONCERN__DOMAIN, ArchitecturePackage.Literals.CONCERN__DOMAIN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDomain(ArchitectureDomain newDomain, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newDomain, ArchitecturePackage.CONCERN__DOMAIN, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDomain(ArchitectureDomain newDomain) {
+		eDynamicSet(ArchitecturePackage.CONCERN__DOMAIN, ArchitecturePackage.Literals.CONCERN__DOMAIN, newDomain);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				if (eInternalContainer() != null) {
+					msgs = eBasicRemoveFromContainer(msgs);
+				}
+				return basicSetDomain((ArchitectureDomain)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				return basicSetDomain(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				return eInternalContainer().eInverseRemove(this, ArchitecturePackage.ARCHITECTURE_DOMAIN__CONCERNS, ArchitectureDomain.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				return getDomain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				setDomain((ArchitectureDomain)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				setDomain((ArchitectureDomain)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.CONCERN__DOMAIN:
+				return getDomain() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ConcernImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/RepresentationKindImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/RepresentationKindImpl.java
new file mode 100644
index 0000000..0cc7fb8
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/RepresentationKindImpl.java
@@ -0,0 +1,261 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.RepresentationKind;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Representation Kind</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.RepresentationKindImpl#getLanguage <em>Language</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.RepresentationKindImpl#getConcerns <em>Concerns</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.RepresentationKindImpl#getGrayedIcon <em>Grayed Icon</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class RepresentationKindImpl extends ADElementImpl implements RepresentationKind {
+	/**
+	 * The default value of the '{@link #getGrayedIcon() <em>Grayed Icon</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGrayedIcon()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String GRAYED_ICON_EDEFAULT = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RepresentationKindImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.REPRESENTATION_KIND;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Concern> getConcerns() {
+		return (EList<Concern>)eDynamicGet(ArchitecturePackage.REPRESENTATION_KIND__CONCERNS, ArchitecturePackage.Literals.REPRESENTATION_KIND__CONCERNS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getGrayedIcon() {
+		return (String)eDynamicGet(ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON, ArchitecturePackage.Literals.REPRESENTATION_KIND__GRAYED_ICON, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setGrayedIcon(String newGrayedIcon) {
+		eDynamicSet(ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON, ArchitecturePackage.Literals.REPRESENTATION_KIND__GRAYED_ICON, newGrayedIcon);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDescriptionLanguage getLanguage() {
+		return (ArchitectureDescriptionLanguage)eDynamicGet(ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE, ArchitecturePackage.Literals.REPRESENTATION_KIND__LANGUAGE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLanguage(ArchitectureDescriptionLanguage newLanguage, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newLanguage, ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLanguage(ArchitectureDescriptionLanguage newLanguage) {
+		eDynamicSet(ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE, ArchitecturePackage.Literals.REPRESENTATION_KIND__LANGUAGE, newLanguage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				if (eInternalContainer() != null) {
+					msgs = eBasicRemoveFromContainer(msgs);
+				}
+				return basicSetLanguage((ArchitectureDescriptionLanguage)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				return basicSetLanguage(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				return eInternalContainer().eInverseRemove(this, ArchitecturePackage.ARCHITECTURE_DESCRIPTION_LANGUAGE__REPRESENTATION_KINDS, ArchitectureDescriptionLanguage.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				return getLanguage();
+			case ArchitecturePackage.REPRESENTATION_KIND__CONCERNS:
+				return getConcerns();
+			case ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON:
+				return getGrayedIcon();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				setLanguage((ArchitectureDescriptionLanguage)newValue);
+				return;
+			case ArchitecturePackage.REPRESENTATION_KIND__CONCERNS:
+				getConcerns().clear();
+				getConcerns().addAll((Collection<? extends Concern>)newValue);
+				return;
+			case ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON:
+				setGrayedIcon((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				setLanguage((ArchitectureDescriptionLanguage)null);
+				return;
+			case ArchitecturePackage.REPRESENTATION_KIND__CONCERNS:
+				getConcerns().clear();
+				return;
+			case ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON:
+				setGrayedIcon(GRAYED_ICON_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.REPRESENTATION_KIND__LANGUAGE:
+				return getLanguage() != null;
+			case ArchitecturePackage.REPRESENTATION_KIND__CONCERNS:
+				return !getConcerns().isEmpty();
+			case ArchitecturePackage.REPRESENTATION_KIND__GRAYED_ICON:
+				return GRAYED_ICON_EDEFAULT == null ? getGrayedIcon() != null : !GRAYED_ICON_EDEFAULT.equals(getGrayedIcon());
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RepresentationKindImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/StakeholderImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/StakeholderImpl.java
new file mode 100644
index 0000000..fc8fce1
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.core.architecture.cdo/src/org/eclipse/papyrus/infra/core/architecture/cdo/StakeholderImpl.java
@@ -0,0 +1,221 @@
+/**
+* Copyright (c) 2017 CEA LIST.
+ *
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *  Maged Elaasar - Initial API and implementation
+ *
+ *
+ */
+package org.eclipse.papyrus.infra.core.architecture.cdo;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain;
+import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.infra.core.architecture.Concern;
+import org.eclipse.papyrus.infra.core.architecture.Stakeholder;
+import org.eclipse.papyrus.infra.core.architecture.impl.ADElementImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stakeholder</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.StakeholderImpl#getConcerns <em>Concerns</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.core.architecture.cdo.StakeholderImpl#getDomain <em>Domain</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class StakeholderImpl extends ADElementImpl implements Stakeholder {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StakeholderImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArchitecturePackage.Literals.STAKEHOLDER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Concern> getConcerns() {
+		return (EList<Concern>)eDynamicGet(ArchitecturePackage.STAKEHOLDER__CONCERNS, ArchitecturePackage.Literals.STAKEHOLDER__CONCERNS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ArchitectureDomain getDomain() {
+		return (ArchitectureDomain)eDynamicGet(ArchitecturePackage.STAKEHOLDER__DOMAIN, ArchitecturePackage.Literals.STAKEHOLDER__DOMAIN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDomain(ArchitectureDomain newDomain, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newDomain, ArchitecturePackage.STAKEHOLDER__DOMAIN, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDomain(ArchitectureDomain newDomain) {
+		eDynamicSet(ArchitecturePackage.STAKEHOLDER__DOMAIN, ArchitecturePackage.Literals.STAKEHOLDER__DOMAIN, newDomain);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				if (eInternalContainer() != null) {
+					msgs = eBasicRemoveFromContainer(msgs);
+				}
+				return basicSetDomain((ArchitectureDomain)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				return basicSetDomain(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				return eInternalContainer().eInverseRemove(this, ArchitecturePackage.ARCHITECTURE_DOMAIN__STAKEHOLDERS, ArchitectureDomain.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__CONCERNS:
+				return getConcerns();
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				return getDomain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__CONCERNS:
+				getConcerns().clear();
+				getConcerns().addAll((Collection<? extends Concern>)newValue);
+				return;
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				setDomain((ArchitectureDomain)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__CONCERNS:
+				getConcerns().clear();
+				return;
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				setDomain((ArchitectureDomain)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArchitecturePackage.STAKEHOLDER__CONCERNS:
+				return !getConcerns().isEmpty();
+			case ArchitecturePackage.STAKEHOLDER__DOMAIN:
+				return getDomain() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //StakeholderImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.classpath b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.project b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.project
new file mode 100644
index 0000000..f997d05
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.infra.nattable.model.cdo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.resources.prefs b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..896a9a5
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
\ No newline at end of file
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.runtime.prefs b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.core.prefs b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e622598
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,297 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=260
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.ui.prefs b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..ba7542e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,127 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License 2.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n *\n * Contributors\:\n *   CEA LIST - Initial API and implementation\n *   \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.pde.api.tools.prefs b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..b2260f8
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,104 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_FIELD=Warning
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Ignore
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_ANNOTATION=Ignore
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Enabled
+changed_execution_env=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_report_major_without_breaking_change=Error
+incompatible_api_component_version_report_minor_without_api_change=Error
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/META-INF/MANIFEST.MF b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a8d997f
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/META-INF/MANIFEST.MF
@@ -0,0 +1,34 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.types;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.emf.expressions;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.emf;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.ecore;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.nattable.model;bundle-version="[4.2.0,5.0.0)"
+Export-Package: org.eclipse.papyrus.infra.nattable.model.cdo,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl,
+ org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Bundle-Version: 4.2.0.qualifier
+Bundle-Localization: plugin
+Bundle-Name: %pluginName
+Bundle-Activator: org.eclipse.papyrus.infra.nattable.model.cdo.Activator
+Bundle-ManifestVersion: 2
+Bundle-Description: %pluginDescription
+Bundle-SymbolicName: org.eclipse.papyrus.infra.nattable.model.cdo;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.nattable.model.cdo
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/about.html b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/about.html
new file mode 100644
index 0000000..ef2872f
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>November 30, 2017</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/build.properties b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/build.properties
new file mode 100644
index 0000000..7663594
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2013 CEA LIST.
+# 
+# 
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecore b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecore
new file mode 100644
index 0000000..9e60e12
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecore
@@ -0,0 +1,1098 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="nattable" nsURI="http://www.eclipse.org/papyrus/nattable/model"
+    nsPrefix="nattable">
+  <eAnnotations source="http://www.eclipse.org/OCL/Import">
+    <details key="ecore" value="http://www.eclipse.org/emf/2002/Ecore#/"/>
+  </eAnnotations>
+  <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+    <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="Table" eSuperTypes="#//nattableconfiguration/TableNamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="currentRowAxisInHistory currentColumnAxisInHistory currentAxisProvidersTypes"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+      <details key="currentRowAxisInHistory" value="rowAxisProvidersHistory->includes(currentRowAxisProvider)"/>
+      <details key="currentColumnAxisInHistory" value="columnAxisProvidersHistory->includes(currentColumnAxisProvider)"/>
+      <details key="currentAxisProvidersTypes" value="not (currentRowAxisProvider.oclIsKindOf(nattableaxisprovider::ISlaveAxisProvider) and currentColumnAxisProvider.oclIsKindOf(nattableaxisprovider::ISlaveAxisProvider))"/>
+    </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="This object represents the table. It is used to save the interesting informations of the graphical table.&#xD;&#xA;&#xD;&#xA;The currentAxisProviders can be : Master/Master, Master/Slave, Slave/Master and never Slave/Slave."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="context" lowerBound="1"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The context is used for two things : &#xD;&#xA;&lt;ul> &lt;li>&quot;virtual&quot; parent to display the table in the Papyrus Model Explorer &lt;/li>&#xD;&#xA;&lt;li>container of the objects created in the table&lt;/li>&#xD;&#xA;&lt;/ul> &#xD;&#xA;The context can't be null;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="owner" lowerBound="1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="prototype" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tableConfiguration" lowerBound="1"
+        eType="#//nattableconfiguration/TableConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Reference the configuration used by the table. This field can't be null."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="invertAxis" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="If true, the axis will be inverted on the screen. When the user inverts the axis, &#xD;&#xA;only this boolean is changed. We must not invert the currentRowAxis and the currentColumnAxis neither the histories or the AxisConfiguration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="columnAxisProvidersHistory"
+        lowerBound="1" upperBound="-1" eType="#//nattableaxisprovider/AbstractAxisProvider"
+        containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This list contains all the columns configurations already used by the user and saved in this list by him."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rowAxisProvidersHistory"
+        lowerBound="1" upperBound="-1" eType="#//nattableaxisprovider/AbstractAxisProvider"
+        containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This list contains all the rowsconfigurations already used by the user and saved in this list by him."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="localRowHeaderAxisConfiguration"
+        eType="#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration" containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This field contains the row headerAxisConfiguration. It could be null. &#xD;&#xA;In this case we use the row TableHeaderAxisConfiguration stored in the TableConfiguration of this table."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="localColumnHeaderAxisConfiguration"
+        eType="#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration" containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This field contains the columnheaderAxisConfiguration. It could be null. &#xD;&#xA;In this case we use the column TableHeaderAxisConfiguration stored in the TableConfiguration of this table."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentRowAxisProvider"
+        lowerBound="1" eType="#//nattableaxisprovider/AbstractAxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="References the current row AxisProvider used in the table.&#xD;&#xA;The value must be owned by rowAxisProviderHistory"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentColumnAxisProvider"
+        lowerBound="1" eType="#//nattableaxisprovider/AbstractAxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="References the current column AxisProvider used in the table.&#xD;&#xA;The value must be owned by column AxisProviderHistory"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cells" upperBound="-1"
+        eType="#//nattablecell/Cell" containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Cells of the table. They are used when the value to display can't be deduced of&#xD;&#xA;the intersection of the row and the column."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ownedCellEditorConfigurations"
+        eType="#//nattablecelleditor/ICellEditorConfiguration" containment="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="In some case (Matrix Table for example), the table can have celleditor configuration."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tableKindId" lowerBound="1"
+        eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eSubpackages name="nattableconfiguration" nsURI="http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration"
+      nsPrefix="nattableconfiguration">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+      <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+      <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    </eAnnotations>
+    <eClassifiers xsi:type="ecore:EClass" name="TableNamedElement" abstract="true"
+        eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract Element used in this metamodel for named element which have a description."/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+        <details key="constraints" value="nonEmptyName"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="nonEmptyName" value="not (name.oclIsUndefined() or name = '')"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The description of the named element."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The name of the named element."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="TableConfiguration" eSuperTypes="#//nattableconfiguration/TableNamedElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+        <details key="constraints" value="defaultRowAxisProviderExistsInCollection defaultColumnAxisProviderExistsInCollection defaultAxisProvidersTypes typeNonNullNonEmpty iconPath"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="defaultRowAxisProviderExistsInCollection" value="rowAxisProviders->includes(defaultRowAxisProvider)"/>
+        <details key="defaultColumnAxisProviderExistsInCollection" value="columnAxisProviders->includes(defaultColumnAxisProvider)"/>
+        <details key="typeNonNullNonEmpty" value="not (type.oclIsUndefined() or type = '')"/>
+        <details key="iconPath" value="not (iconPath.oclIsUndefined() or iconPath = '')"/>
+        <details key="defaultAxisProvidersTypes" value="not (defaultRowAxisProvider.oclIsKindOf(nattableaxisprovider::ISlaveAxisProvider) and defaultColumnAxisProvider.oclIsKindOf(nattableaxisprovider::ISlaveAxisProvider))"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This object is used to configure a table. To create a new type of table, you must create &#xD;&#xA;a new file *.nattableConfiguration and register it using the extension point org.eclipse.papyrus.infra.nattable.configuration&#xD;&#xA;&#xD;&#xA;the defaultAxisProviders can be : Master/Master, Master/Slave, Slave/Master and never Slave/Slave."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The type of the table. This value is used to be able to open/close easily the table editor in Papyrus. &#xD;&#xA;Moreover it allows to distinghuish easily the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="iconPath" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The path of the icon to use for the table which references this TableConfiguration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="creationTester" eType="#//nattabletester/AbstractTableTester"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value could be null. The tester is used to know if this tableConfiguration can be used&#xD;&#xA;to create a new table using as context the selected element."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="cellEditorDeclaration"
+          lowerBound="1" eType="#//nattableconfiguration/CellEditorDeclaration" defaultValueLiteral="COLUMN">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. Indicates how the CellEditor must be declared. &#xD;&#xA;In the common table, we display features as columns and objects as line. &#xD;&#xA;In this case the cell editors are specific to features, so the cell editor must be declared on the columns."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="rowHeaderAxisConfiguration"
+          lowerBound="1" eType="#//nattableaxisconfiguration/TableHeaderAxisConfiguration"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. Gives the initial row configuration of the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="columnHeaderAxisConfiguration"
+          lowerBound="1" eType="#//nattableaxisconfiguration/TableHeaderAxisConfiguration"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. Gives the initial column configuration of the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="columnAxisProviders"
+          lowerBound="1" upperBound="-1" eType="#//nattableaxisprovider/AbstractAxisProvider"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This list can't be empty. Contains list of possible column AxisProvider for the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="rowAxisProviders" lowerBound="1"
+          upperBound="-1" eType="#//nattableaxisprovider/AbstractAxisProvider" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This list can't be empty. Contains a list of possible row AxisProvider for the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultRowAxisProvider"
+          lowerBound="1" eType="#//nattableaxisprovider/AbstractAxisProvider">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. References the Axis Provider to use by default for rows."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="defaultColumnAxisProvider"
+          lowerBound="1" eType="#//nattableaxisprovider/AbstractAxisProvider">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. References the Axis Provider to use by default for columns."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="ownedCellEditorConfigurations"
+          eType="#//nattablecelleditor/ICellEditorConfiguration" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="In some case (Matrix Table for example), the table can have celleditor configuration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="CellEditorDeclaration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Indicates how the CellEditor must be declared. &#xD;&#xA;In the common table, we display features as columns and objects as line. &#xD;&#xA;In this case the cell editors are specific to features, so the cell editor must be declared on the columns."/>
+      </eAnnotations>
+      <eLiterals name="COLUMN"/>
+      <eLiterals name="ROW" value="1"/>
+      <eLiterals name="CELL" value="2"/>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattableaxisprovider" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider"
+      nsPrefix="nattableaxisprovider">
+    <eClassifiers xsi:type="ecore:EClass" name="AbstractAxisProvider" abstract="true"
+        eSuperTypes="#//nattableconfiguration/TableNamedElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract Element for the AxisProvider. This one only provides a method getAxis()."/>
+      </eAnnotations>
+      <eOperations name="getAxis" upperBound="-1" eType="#//nattableaxis/IAxis">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This method must returns the IAxis owned by the AxisProvider.&#xD;&#xA;Warning, in case of syncrhonized table, the list often will be empty. This method&#xD;&#xA;only returns the IAxis serialized in the model. Displayed elements are not necessary serialized.&#xD;&#xA;"/>
+        </eAnnotations>
+      </eOperations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IMasterAxisProvider" abstract="true"
+        interface="true" eSuperTypes="#//nattableaxisprovider/AxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Interface used to distinghuish master axis provider from slave axis provider. &#xD;&#xA;The master are able to disconnect the slave."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="disconnectSlave" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="if true, the slave won't be updated when the elements owned by the master will be changed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="sources" upperBound="-1"
+          eType="#//nattablewrapper/IWrapper" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field is used by Matrix Table. it replaces the context of the table as provider for the axis."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ISlaveAxisProvider" abstract="true"
+        interface="true" eSuperTypes="#//nattableaxisprovider/AxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Interface used to distinghuish the master from the slave axis provider."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="AxisProvider" abstract="true" eSuperTypes="#//nattableaxisprovider/AbstractAxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="AbstractAxisProvider. This one owns IAxis"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axis" upperBound="-1"
+          eType="#//nattableaxis/IAxis" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="IAxis owned by the AxisProvider. The list can be empty in case of synchronized table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="SlaveObjectAxisProvider" eSuperTypes="#//nattableaxisprovider/ISlaveAxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Concret implementation of ISlaveAxisProvider"/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="MasterObjectAxisProvider" eSuperTypes="#//nattableaxisprovider/IMasterAxisProvider">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Concret implementation of IMasterAxisProvider"/>
+      </eAnnotations>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattablelabelprovider" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattablecontentprovider"
+      nsPrefix="nattablelabelprovider">
+    <eClassifiers xsi:type="ecore:EClass" name="ILabelProviderConfiguration" abstract="true"
+        interface="true" eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common Interface for LabelProviderConfiguration"/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureLabelProviderConfiguration"
+        eSuperTypes="#//nattablelabelprovider/ObjectLabelProviderConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="LabelProviderConfiguration for Feature. In case of Feature. we have two display options : &#xD;&#xA;&lt;ul>&lt;li>display the icon of the feature &lt;/li> &#xD;&#xA;&lt;li>display the label of the feature &lt;/li>&#xD;&#xA;&lt;li>display the multiplicity of the feature &lt;/li>&#xD;&#xA;&lt;li>display the type of the feature &lt;/li>&#xD;&#xA;&lt;li>display the '/' for isDerived of the feature &lt;/li>&#xD;&#xA;&lt;li>display the name of the feature &lt;/li>&#xD;&#xA; &lt;/ul>"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayIsDerived" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the '/' for isDerived"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayType" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the typeof the feature"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayMultiplicity"
+          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the multiplicity of the feature"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the name of the feature"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ObjectLabelProviderConfiguration"
+        eSuperTypes="#//nattablelabelprovider/ILabelProviderConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="LabelProviderConfiguration for Object. In case of Object we have two display options : &#xD;&#xA;&lt;ul>&lt;li>display the icon of the object&lt;/li> &#xD;&#xA;&lt;li>display the label of the object&lt;/li> &lt;/ul>"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayIcon" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the icon of the object"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayLabel" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, we will display the label of the object"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="OperationLabelProviderConfiguration"
+        eSuperTypes="#//nattablelabelprovider/ObjectLabelProviderConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="LabelProviderConfiguration for Operation. In case of Operation, we have four display options : &#xD;&#xA;&lt;ul>&lt;li>display the icon of the Operation&lt;/li> &#xD;&#xA;&lt;li>display the label of the Operation&lt;/li>&#xD;&#xA;&lt;li>display the multiplicity of the Operation&lt;/li>&#xD;&#xA;&lt;li>display the type of the Operation&lt;/li>&#xD;&#xA;&lt;li>display the '/' for isDerived of the feature &lt;/li>&#xD;&#xA;&lt;li>display the name of the feature &lt;/li>&#xD;&#xA; &lt;/ul>"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayType" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayMultiplicity"
+          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayName" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true"/>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattableaxisconfiguration" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration"
+      nsPrefix="nattableaxisconfiguration">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+      <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+      <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    </eAnnotations>
+    <eClassifiers xsi:type="ecore:EClass" name="AbstractHeaderAxisConfiguration" abstract="true"
+        eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract Class for the HeaderAxisConfiguration. This class provides : &#xD;&#xA;&lt;ul>&lt;li>informations on the appearance of the header&lt;/li>&#xD;&#xA;&lt;li> a list of label configuration which can be used by the header&lt;/li>&#xD;&#xA;&lt;li> a list of axisConfiguration. These axis configuration are used to provide the contents of the axis&lt;/li>&#xD;&#xA;&lt;/ul>"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="indexStyle" lowerBound="1"
+          eType="#//nattableaxisconfiguration/AxisIndexStyle">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. Indicates how to display the index of the Axis : using letter or using number."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayLabel" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, the label header will be displayed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayFilter" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="false">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true AND if the axisConfiguration is used as column, the row filter will be displayed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayIndex" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, the index header will be displayed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="ownedLabelConfigurations"
+          upperBound="-1" eType="#//nattablelabelprovider/ILabelProviderConfiguration"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The list of the possible label configuration, referenced by the axis configuration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="ownedAxisConfigurations"
+          upperBound="-1" eType="#//nattableaxisconfiguration/IAxisConfiguration"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The list of the owned axis configuration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="AxisManagerRepresentation" eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This class is used to represents in the model the java Axis Manager."/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+        <details key="constraints" value="nonEmptyAxisManager"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="nonEmptyAxisManager" value="not (axisManagerId.oclIsUndefined() or axisManagerId = '')"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="axisManagerId" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This id allows to find the Java Axis Manager represented by this element.&#xD;&#xA;To find it you must use AxisManagerFactory.INSTANCE.getAxisManager(AxisManagerRepresentation)&#xD;&#xA;To register a Java Axis Manager,you must use the extension point  : org.eclipse.papyrus.infra.nattable.axismanager"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="labelProviderContext"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The context on which the label provider to use for this AxisManagerRepresentation are declared.&#xD;&#xA;(see the Papyrus Label Provider Service for further informations)"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="headerLabelConfiguration"
+          lowerBound="1" eType="#//nattablelabelprovider/ILabelProviderConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The label provider configuration to use for the header of the axis provided by the represented AxisManager"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="specificAxisConfigurations"
+          upperBound="-1" eType="#//nattableaxisconfiguration/IAxisConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="A list of specific configurations to use for this axis."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="AxisManagerConfiguration" eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This object allows to define and configure a Java AxisManager"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="localHeaderLabelConfiguration"
+          eType="#//nattablelabelprovider/ILabelProviderConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Reference the local header label configuration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axisManager" lowerBound="1"
+          eType="#//nattableaxisconfiguration/AxisManagerRepresentation">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This value can't be null. the axis manager representation"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="localSpecificConfigurations"
+          upperBound="-1" eType="#//nattableaxisconfiguration/IAxisConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="specific configurations for the axis manager."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="TableHeaderAxisConfiguration" eSuperTypes="#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+        <details key="constraints" value="axisManagersIdUnique"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="axisManagersIdUnique" value="axisManagers->forAll(am1 : AxisManagerRepresentation | ( (axisManagers->excluding (am1))->forAll(am2 : AxisManagerRepresentation | am1.axisManagerId&lt;>am2.axisManagerId) ))"/>
+      </eAnnotations>
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Defines the configuration of the axis in the TableConfiguration"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axisManagers" lowerBound="1"
+          upperBound="-1" eType="#//nattableaxisconfiguration/AxisManagerRepresentation"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This list can't be empty. The list of the AxisManager used to fill the axis."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="LocalTableHeaderAxisConfiguration"
+        eSuperTypes="#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Define the configuration of the axis (rows or columns) in the table."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axisManagerConfigurations"
+          upperBound="-1" eType="#//nattableaxisconfiguration/AxisManagerConfiguration"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This list contains the configuration of the axis managers used in the table."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IAxisConfiguration" abstract="true"
+        interface="true" eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Comon Interface for axis configuration."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureAxisConfiguration" eSuperTypes="#//nattableaxisconfiguration/IAxisConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Configuration to use for Axis representing features"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="showOnlyCommonFeature"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, only the common features will be displayed on the axis."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IFillingConfiguration" abstract="true"
+        interface="true" eSuperTypes="#//nattableaxisconfiguration/IAxisConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Comon Interface for filling configurations."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeatureValueFillingConfiguration"
+        eSuperTypes="#//nattableaxisconfiguration/IFillingConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Configuration used to fill the table listening a feature of the context of the table"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="listenFeature" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStructuralFeature">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field can't be null. References the feature of the context of the table to listen.&#xD;&#xA;It is possible that the context doesn't have this feature."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IPasteConfiguration" eSuperTypes="#//nattableaxisconfiguration/IAxisConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common Interface for the paste configuration."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="postActions" upperBound="-1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field references post actions, using a string to do during the paste, after the creation of the element. "/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="detachedMode" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="If true, the created elements will be added at the end of the paste and the set values&#xD;&#xA;won't be do using the service edit"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="PasteEObjectConfiguration" eSuperTypes="#//nattableaxisconfiguration/IPasteConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Configuration to use to paste EObject in the table."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="pastedElementId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The String representing the EClass of the elements to create (see papyrus services types for further information)"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="pasteElementContainementFeature"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStructuralFeature">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field references the feature of the context of the table in which the created element will be added."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axisIdentifier" eType="#//nattableaxis/IAxis"
+          containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="AxisIndexStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Enumeration used to describe the possible style of the index of the headers."/>
+      </eAnnotations>
+      <eLiterals name="ALPHABETIC" value="1">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Index Headers count will be : A-B-C-...Y-Z-AA-AB-..."/>
+        </eAnnotations>
+      </eLiterals>
+      <eLiterals name="NUMERIC">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Index Headers count will be : 1-2-3-..."/>
+        </eAnnotations>
+      </eLiterals>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="TreeFillingConfiguration" eSuperTypes="#//nattableaxisconfiguration/IFillingConfiguration">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="axisUsedAsAxisProvider"
+          lowerBound="1" eType="#//nattableaxis/IAxis" containment="true"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="pasteConfiguration" eType="#//nattableaxisconfiguration/PasteEObjectConfiguration"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="depth" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="labelProvider" lowerBound="1"
+          eType="#//nattablelabelprovider/ILabelProviderConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="le label provider used to display string and image for this level in the tree"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="labelProviderContext"
+          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="filterRule" eType="ecore:EClass ../../org.eclipse.papyrus.infra.emf.expressions/model/expressions.ecore#//booleanexpressions/IBooleanEObjectExpression"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field is used to filter the elements to show for this depth. &#xD;&#xA;Only element matching the filter will be returned."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattabletester" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattabletester"
+      nsPrefix="nattabletester">
+    <eClassifiers xsi:type="ecore:EClass" name="AbstractTableTester" abstract="true"
+        eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract class for the tester."/>
+      </eAnnotations>
+      <eOperations name="getTester" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Returns an object representing the tester"/>
+        </eAnnotations>
+      </eOperations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="JavaTableTester" eSuperTypes="#//nattabletester/AbstractTableTester">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This class allows to references a JavaTableTester. The Java class is declared with an id, using the extension point org.eclipse.papyrus.infra.nattable.tester.&#xD;&#xA;The field tester must be the id declared in this extension point."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="tester" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The id of the java tester declared using the extension point org.eclispe.papyrus.infra.nattable.tester"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattableaxis" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis"
+      nsPrefix="nattableaxis">
+    <eClassifiers xsi:type="ecore:EClass" name="IAxis" abstract="true" interface="true"
+        eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common interface for the axis of the table. (An axis is a specific row or a specific column)"/>
+      </eAnnotations>
+      <eOperations name="getElement" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Returns the elements represented by the IAxis"/>
+        </eAnnotations>
+      </eOperations>
+      <eOperations name="getLocalLabelConfiguration" eType="#//nattablelabelprovider/ILabelProviderConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Returns the local label configuration to use for this IAxis. This configuration&#xD;&#xA;will override the label configuration defined in the AxisManagerConfiguration."/>
+        </eAnnotations>
+      </eOperations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="manager" eType="#//nattableaxisconfiguration/AxisManagerRepresentation">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field can't be null. Reference the axis manager providing this IAxis."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="alias" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="An element can be displayed using an alias instead of its real name."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ITreeItemAxis" abstract="true" interface="true"
+        eSuperTypes="#//nattableaxis/IAxis">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//nattableaxis/ITreeItemAxis"
+          eOpposite="#//nattableaxis/ITreeItemAxis/children"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="expanded" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          transient="true" defaultValueLiteral="false"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
+          eType="#//nattableaxis/ITreeItemAxis" derived="true" eOpposite="#//nattableaxis/ITreeItemAxis/parent"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IdAxis" abstract="true" eSuperTypes="#//nattableaxis/IAxis">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This obejct allows to reference an element using a string instead of referencing it directly."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IdTreeItemAxis" eSuperTypes="#//nattableaxis/IdAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectAxis" eSuperTypes="#//nattableaxis/ObjectAxis">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This IAxis allows to reference an EObject."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectTreeItemAxis" eSuperTypes="#//nattableaxis/EObjectAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureAxis" abstract="true" eSuperTypes="#//nattableaxis/IAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract class used to reference features."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="localLabelConfiguration"
+          eType="#//nattablelabelprovider/FeatureLabelProviderConfiguration" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Returns the local label configuration to use for this IAxis. This configuration&#xD;&#xA;will override the label configuration defined in the AxisManagerConfiguration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="OperationAxis" abstract="true" eSuperTypes="#//nattableaxis/IAxis">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="localLabelConfiguration"
+          eType="#//nattablelabelprovider/OperationLabelProviderConfiguration" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureTreeItemAxis" abstract="true"
+        eSuperTypes="#//nattableaxis/FeatureAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="OperationTreeItemAxis" abstract="true"
+        eSuperTypes="#//nattableaxis/OperationAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="ObjectAxis" abstract="true" eSuperTypes="#//nattableaxis/IAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Abstract class used to reference object"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="localLabelConfiguration"
+          eType="#//nattablelabelprovider/ObjectLabelProviderConfiguration" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Returns the local label configuration to use for this IAxis. This configuration&#xD;&#xA;will override the label configuration defined in the AxisManagerConfiguration."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ObjectTreeItemAxis" abstract="true"
+        eSuperTypes="#//nattableaxis/ObjectAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureIdAxis" eSuperTypes="#//nattableaxis/IdAxis #//nattableaxis/FeatureAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="IAxis used to represent feature using a string."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="FeatureIdTreeItemAxis" eSuperTypes="#//nattableaxis/FeatureIdAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeatureAxis" eSuperTypes="#//nattableaxis/FeatureAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="IAxis used to reference EMF EStructuralFeature."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStructuralFeature">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The represented EStructuralFeature."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EOperationAxis" eSuperTypes="#//nattableaxis/OperationAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="IAxis used to reference EMF EOperation."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EOperation"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EStructuralFeatureTreeItemAxis" eSuperTypes="#//nattableaxis/EStructuralFeatureAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="EOperationTreeItemAxis" eSuperTypes="#//nattableaxis/EOperationAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="ObjectIdAxis" eSuperTypes="#//nattableaxis/IdAxis #//nattableaxis/ObjectAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="IAxis used to represent object using a string."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ObjectIdTreeItemAxis" eSuperTypes="#//nattableaxis/ObjectIdAxis #//nattableaxis/ITreeItemAxis"/>
+    <eClassifiers xsi:type="ecore:EClass" name="AxisGroup" eSuperTypes="#//nattableaxis/IAxis">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="groupedAxis" upperBound="-1"
+          eType="#//nattableaxis/IAxis"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="OperationIdAxis" eSuperTypes="#//nattableaxis/IdAxis #//nattableaxis/OperationAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="IAxis used to represent operation using a string."/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="OperationIdTreeItemAxis" eSuperTypes="#//nattableaxis/ITreeItemAxis #//nattableaxis/OperationIdAxis">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="ITreeItemAxis used to represent operation using a string."/>
+      </eAnnotations>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattablecell" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattablecell"
+      nsPrefix="nattablecell">
+    <eClassifiers xsi:type="ecore:EClass" name="Cell" eSuperTypes="../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Cell elements used to store specific information which can't be stored in the edited model"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="columnWrapper" lowerBound="1"
+          eType="#//nattablecell/ICellAxisWrapper" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The column element on which this cell must be displayed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="rowWrapper" lowerBound="1"
+          eType="#//nattablecell/ICellAxisWrapper" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The row element on which this cell must be displayed."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="problems" upperBound="-1"
+          eType="#//nattableproblem/Problem" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="a list of problem founds on this cell"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ICellAxisWrapper" abstract="true"
+        interface="true" eSuperTypes="../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This class encapsulates the real axis object."/>
+      </eAnnotations>
+      <eOperations name="getElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="Return the wrapped object"/>
+        </eAnnotations>
+      </eOperations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectAxisWrapper" eSuperTypes="#//nattablecell/ICellAxisWrapper">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Wrapper for EObject"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The wrapped element"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IdAxisWrapper" eSuperTypes="#//nattablecell/ICellAxisWrapper">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Wrapper for Id"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The id used to identifies an element."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattableproblem" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattableproblem"
+      nsPrefix="nattableproblem">
+    <eClassifiers xsi:type="ecore:EClass" name="Problem" eSuperTypes="#//nattableconfiguration/TableNamedElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A problem"/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="StringResolutionProblem" eSuperTypes="#//nattableproblem/Problem">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This kind of problem is used when the user set a value as a text in a Cell and the system can't convert this string value into the correct type"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="valueAsString" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The text which is the source of the problem"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unresolvedString" lowerBound="1"
+          upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="the text or a substring of it, which is the source of the problem"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattablestyle" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattablestyle"
+      nsPrefix="nattablestyle">
+    <eClassifiers xsi:type="ecore:EClass" name="Style" abstract="true" interface="true"
+        eSuperTypes="../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Style from which all substyles originate"/>
+      </eAnnotations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="NamedStyle" eSuperTypes="#//nattablestyle/Style">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="used to represent character and paragraph styles"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="CellTextAlignment">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Alignment of the text inside its cell"/>
+      </eAnnotations>
+      <eLiterals name="TOP_LEFT" value="1" literal="TOP_LEFT"/>
+      <eLiterals name="TOP_CENTER" value="2" literal="TOP_CENTER"/>
+      <eLiterals name="TOP_RIGHT" value="3" literal="TOP_RIGHT"/>
+      <eLiterals name="MIDDLE_LEFT" value="4" literal="MIDDLE_LEFT"/>
+      <eLiterals name="MIDDLE_CENTER" value="5" literal="MIDDLE_CENTER"/>
+      <eLiterals name="MIDDLE_RIGHT" value="6" literal="MIDDLE_RIGHT"/>
+      <eLiterals name="BOTTOM_LEFT" value="7" literal="BOTTOM_LEFT"/>
+      <eLiterals name="BOTTOM_CENTER" value="8" literal="BOTTOM_CENTER"/>
+      <eLiterals name="BOTTOM_RIGHT" value="9" literal="BOTTOM_RIGHT"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="FontStyle" eSuperTypes="#//nattablestyle/Style">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Font style of the cell's text"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontColor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          defaultValueLiteral="0"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          defaultValueLiteral="Tahoma"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontHeight" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+          defaultValueLiteral="9"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="bold" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="italic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="underline" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="false"/>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="strikeThrough" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+          defaultValueLiteral="false"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="CellTextStyle" eSuperTypes="#//nattablestyle/Style">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Text representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="alignment" eType="#//nattablestyle/CellTextAlignment"
+          defaultValueLiteral="MIDDLE_LEFT"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IntValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Int representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="intValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IntListValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Int lists representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="intListValue" unique="false"
+          upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="BooleanValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Boolean representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="booleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="BooleanListValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Boolean lists representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="booleanListValue" unique="false"
+          upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="DoubleValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Double representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="doubleValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="DoubleListValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Double lists representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="doubleListValue" unique="false"
+          upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="StringValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="String representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="StringListValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="String lists representation"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringListValue" unique="false"
+          upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="StyledElement" abstract="true" eSuperTypes="../../org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement">
+      <eOperations name="getNamedStyle" eType="#//nattablestyle/NamedStyle">
+        <eParameters name="eClass" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EClass"/>
+        <eParameters name="name" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+      </eOperations>
+      <eOperations name="getStyle" eType="#//nattablestyle/Style">
+        <eParameters name="eClass" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EClass"/>
+      </eOperations>
+      <eOperations name="createStyle" eType="#//nattablestyle/Style">
+        <eParameters name="eClass" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EClass"/>
+      </eOperations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="styles" upperBound="-1"
+          eType="#//nattablestyle/Style" containment="true"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="TableDisplayStyle" eSuperTypes="#//nattablestyle/Style">
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayStyle" lowerBound="1"
+          eType="#//nattablestyle/DisplayStyle" defaultValueLiteral="NORMAL"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="DisplayStyle">
+      <eLiterals name="NORMAL" literal="NORMAL"/>
+      <eLiterals name="HIERARCHIC_SINGLE_TREE_COLUMN" value="1" literal="HIERARCHIC_SINGLE_TREE_COLUMN"/>
+      <eLiterals name="HIERARCHIC_MULTI_TREE_COLUMN" value="2" literal="HIERARCHIC_MULTI_TREE_COLUMN"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="eObjectValue" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectListValueStyle" eSuperTypes="#//nattablestyle/NamedStyle">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="eObjectValue" upperBound="-1"
+          eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"/>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattablecelleditor" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattablecelleditor"
+      nsPrefix="nattablecelleditor">
+    <eClassifiers xsi:type="ecore:EClass" name="ICellEditorConfiguration" abstract="true"
+        interface="true" eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common interface for all cell editor configuration."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="cellEditorId" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+          iD="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The id of the celleditor."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="GenericRelationshipMatrixCellEditorConfiguration"
+        eSuperTypes="#//nattablecelleditor/IMatrixCellEditorConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Concret implementation of IMatrixRelationshipCellEditorConfiguration"/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="#//nattablecelleditor/MatrixRelationShipDirection"
+          defaultValueLiteral="FROM_ROW_TO_COLUMN"/>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="cellContentsFilter" eType="ecore:EClass ../../org.eclipse.papyrus.infra.emf.expressions/model/expressions.ecore#//booleanexpressions/IBooleanEObjectExpression"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field allows to the user to filter the contents of the cells."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="editedElement" eType="ecore:EClass ../../org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.ecore#//ElementTypeConfiguration">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field allows to define the kind of element to edit in the cell."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="relationshipOwnerStrategy"
+          lowerBound="1" eType="#//nattablecelleditor/MatrixRelationShipOwnerStrategy"
+          defaultValueLiteral="DEFAULT">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field is used to define the owner of relationships created editing the matrix."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="relationshipOwner" eType="#//nattablewrapper/IWrapper"
+          containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field is used only when the relationshipOwnerStrategy is set to Other."/>
+        </eAnnotations>
+      </eStructuralFeatures>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="relationshipOwnerFeature"
+          eType="#//nattableaxis/IAxis" containment="true">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This field is used only when the relationshipOwnerStrategy is set to Other.&#xD;&#xA;It will be used, if required, to define the feature in the relationshipOwner which will owns the created relationship"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="MatrixRelationShipDirection">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This Enumeration is used to define the direction of the relationship to display in the cell. &#xD;&#xA;In case of directed relationship and NONE selected, the cell won't be editable.&#xD;&#xA;In case of non directed relationship and a direction selected, we will use get(0) and get(1) to define a fake orientation."/>
+      </eAnnotations>
+      <eLiterals name="NONE" literal="NONE"/>
+      <eLiterals name="FROM_ROW_TO_COLUMN" value="1" literal="FROM_ROW_TO_COLUMN"/>
+      <eLiterals name="FROM_COLUMN_TO_ROW" value="2" literal="FROM_COLUMN_TO_ROW"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EEnum" name="MatrixRelationShipOwnerStrategy">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This Enumeration is used to define the owner of relationships created editing the matrix."/>
+      </eAnnotations>
+      <eLiterals name="DEFAULT" literal="DEFAULT"/>
+      <eLiterals name="TABLE_CONTEXT" value="1" literal="TABLE_CONTEXT"/>
+      <eLiterals name="ROW_OWNER" value="2" literal="ROW_OWNER"/>
+      <eLiterals name="ROW_AS_OWNER" value="3" literal="ROW_AS_OWNER"/>
+      <eLiterals name="COLUMN_OWNER" value="4" literal="COLUMN_OWNER"/>
+      <eLiterals name="COLUMN_AS_OWNER" value="5" literal="COLUMN_AS_OWNER"/>
+      <eLiterals name="OTHER" value="6" literal="OTHER"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IMatrixCellEditorConfiguration" abstract="true"
+        interface="true" eSuperTypes="#//nattablecelleditor/ICellEditorConfiguration">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common interface for all Matrix cell editor."/>
+      </eAnnotations>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="nattablewrapper" nsURI="http://www.eclipse.org/papyrus/nattable/model/table/nattablewrapper"
+      nsPrefix="nattablewrapper">
+    <eClassifiers xsi:type="ecore:EClass" name="IWrapper" abstract="true" interface="true"
+        eSuperTypes="#//nattablestyle/StyledElement">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Common interface for all wrapped. The wrapper is used to be able to reference an&#xD;&#xA;object which is not necessary an EObject. In this case, it could be referenced by as string."/>
+      </eAnnotations>
+      <eOperations name="getElement" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="This method returns the wrapped element, but without solving it."/>
+        </eAnnotations>
+      </eOperations>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="EObjectWrapper" eSuperTypes="#//nattablewrapper/IWrapper">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This class allows to wrap EObject."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
+          eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="IdWrapper" eSuperTypes="#//nattablewrapper/IWrapper">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This class allows to reference an object identified by a string."/>
+      </eAnnotations>
+      <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" lowerBound="1"
+          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+        <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+          <details key="documentation" value="The wrapped element is referenced by a String"/>
+        </eAnnotations>
+      </eStructuralFeatures>
+    </eClassifiers>
+  </eSubpackages>
+</ecore:EPackage>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecorediag b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecorediag
new file mode 100644
index 0000000..24a6bd5
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.ecorediag
@@ -0,0 +1,1001 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_UypeIJewEeKr0Yypv4rfLA" type="EcoreTools" name="nattable.ecorediag" measurementUnit="Pixel">
+  <children xmi:type="notation:Node" xmi:id="_EfChwKHtEeKNUa7kbzEWsw" type="1005">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA4KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA4aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMSwKHtEeKNUa7kbzEWsw" type="4010"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMSwaHtEeKNUa7kbzEWsw" type="5008">
+      <children xmi:type="notation:Node" xmi:id="_hJG1UqH0EeKNUa7kbzEWsw" type="2006">
+        <element xmi:type="ecore:EEnumLiteral" href="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle/ALPHABETIC"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_hJG1U6H0EeKNUa7kbzEWsw"/>
+      </children>
+      <children xmi:type="notation:Node" xmi:id="_hJG1UKH0EeKNUa7kbzEWsw" type="2006">
+        <element xmi:type="ecore:EEnumLiteral" href="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle/NUMERIC"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_hJG1UaH0EeKNUa7kbzEWsw"/>
+      </children>
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMSwqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMSw6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMSxKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfChwaHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EEnum" href="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfChwqHtEeKNUa7kbzEWsw" x="10" y="910"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMSxaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA4qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA46HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMSyKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMSyaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMSyqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMSy6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMSzKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfMSzaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMSzqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMSz6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMS0KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMSxqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/EStructuralFeatureAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMSx6HtEeKNUa7kbzEWsw" x="1010" y="1430" width="183"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMS3aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA5qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA56HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMS4KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMS4aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMS4qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMS46HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMS5KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfMS5aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMS5qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMS56HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMS6KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMS3qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/IAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMS36HtEeKNUa7kbzEWsw" x="1400" y="1255"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMS6aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA6KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA6aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMS7KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMS7aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMS7qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMS76HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMS8KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfMS8aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMS8qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMS86HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMS9KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMS6qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/AbstractAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMS66HtEeKNUa7kbzEWsw" x="2085" y="590" width="298" height="143"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMTDaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA7qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA76HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMTEKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMTEaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMTEqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMTE6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMTFKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfMTFaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMTFqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMTF6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMTGKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMTDqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/TableHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMTD6HtEeKNUa7kbzEWsw" x="1890" y="160"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMTGaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA8KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA8aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfMTHKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfMTHaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMTHqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMTH6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMTIKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfMTIaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfMTIqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfMTI6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfMTJKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMTGqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMTG6HtEeKNUa7kbzEWsw" x="295" y="1255"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfMTJaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA8qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA86HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVcsKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVcsaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVcsqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVcs6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVctKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVctaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVctqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVct6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVcuKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfMTJqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattablelabelprovider/ObjectLabelProviderConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfMTJ6HtEeKNUa7kbzEWsw" x="415" y="925"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVcuaHtEeKNUa7kbzEWsw" type="1005">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA9KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA9aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVcvKHtEeKNUa7kbzEWsw" type="4010"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVcvaHtEeKNUa7kbzEWsw" type="5008">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVcvqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVcv6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVcwKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVcuqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EEnum" href="nattable.ecore#//nattableconfiguration/CellEditorDeclaration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVcu6HtEeKNUa7kbzEWsw" x="15" y="750"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVczaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA-KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA-aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVc0KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVc0aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc0qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc06HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc1KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVc1aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc1qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc16HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc2KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVczqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVcz6HtEeKNUa7kbzEWsw" x="1315" y="395"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVc2aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA-qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA-6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVc3KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVc3aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc3qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc36HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc4KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVc4aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc4qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc46HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc5KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVc2qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/EObjectAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVc26HtEeKNUa7kbzEWsw" x="1595" y="1595"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVc5aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA_KHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA_aHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVc6KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVc6aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc6qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc66HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc7KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVc7aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc7qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc76HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc8KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVc5qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattabletester/JavaTableTester"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVc56HtEeKNUa7kbzEWsw" x="2400" y="465"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVc8aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGA_qHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGA_6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVc9KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVc9aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc9qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc96HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc-KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVc-aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVc-qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVc-6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVc_KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVc8qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVc86HtEeKNUa7kbzEWsw" x="850" y="400" width="228" height="88"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVc_aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBAKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBAaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVdAKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVdAaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVdAqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVdA6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVdBKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVdBaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVdBqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVdB6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVdCKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVc_qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/ObjectAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVc_6HtEeKNUa7kbzEWsw" x="1605" y="1435"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVdCaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBAqHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBA6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EfVdDKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EfVdDaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVdDqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVdD6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVdEKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EfVdEaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EfVdEqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EfVdE6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EfVdFKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVdCqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVdC6HtEeKNUa7kbzEWsw" x="1425" y="610"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EfVdLaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBCKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBCaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffNsKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffNsaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffNsqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffNs6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffNtKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffNtaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffNtqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffNt6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffNuKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EfVdLqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/IAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EfVdL6HtEeKNUa7kbzEWsw" x="80" y="355" height="93"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffNxaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBDKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBDaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffNyKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffNyaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffNyqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffNy6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffNzKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffNzaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffNzqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffNz6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN0KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffNxqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/FeatureIdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffNx6HtEeKNUa7kbzEWsw" x="1255" y="1595"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffN3aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBEKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBEaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffN4KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffN4aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN4qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN46HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN5KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffN5aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN5qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN56HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN6KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffN3qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/ObjectIdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffN36HtEeKNUa7kbzEWsw" x="1425" y="1595"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffN6aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBEqHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBE6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffN7KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffN7aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN7qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN76HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN8KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffN8aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN8qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN86HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN9KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffN6qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/FeatureAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffN66HtEeKNUa7kbzEWsw" x="1245" y="1435"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffN9aHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBFKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBFaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffN-KHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffN-aHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN-qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN-6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffN_KHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffN_aHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffN_qHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffN_6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOAKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffN9qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/IdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffN96HtEeKNUa7kbzEWsw" x="1415" y="1435"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffOAaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBFqHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBF6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffOBKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffOBaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOBqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOB6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOCKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffOCaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOCqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOC6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffODKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffOAqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/FeatureAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffOA6HtEeKNUa7kbzEWsw" x="55" y="560"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffODaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBGKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBGaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffOEKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffOEaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOEqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOE6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOFKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffOFaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOFqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOF6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOGKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffODqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattabletester/AbstractTableTester"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffOD6HtEeKNUa7kbzEWsw" x="2415" y="300" width="208"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffOJaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBHKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBHaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffOKKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffOKaHtEeKNUa7kbzEWsw" type="5001">
+      <children xmi:type="notation:Node" xmi:id="_hJZwTqH0EeKNUa7kbzEWsw" type="2001">
+        <element xmi:type="ecore:EAttribute" href="nattable.ecore#//nattableconfiguration/TableNamedElement/description"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_hJZwT6H0EeKNUa7kbzEWsw"/>
+      </children>
+      <children xmi:type="notation:Node" xmi:id="_hJZwTKH0EeKNUa7kbzEWsw" type="2001">
+        <element xmi:type="ecore:EAttribute" href="nattable.ecore#//nattableconfiguration/TableNamedElement/name"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_hJZwTaH0EeKNUa7kbzEWsw"/>
+      </children>
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOKqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOK6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOLKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffOLaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOLqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOL6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOMKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffOJqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableconfiguration/TableNamedElement"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffOJ6HtEeKNUa7kbzEWsw" x="2550" y="140"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffOMaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBHqHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBH6HtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffONKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffONaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffONqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffON6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOOKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffOOaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOOqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOO6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOPKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffOMqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/AxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffOM6HtEeKNUa7kbzEWsw" x="1455" y="765"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_EffOPaHtEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EkGBIKHtEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EkGBIaHtEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_EffOQKHtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_EffOQaHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffOQqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOQ6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffORKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EffORaHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_EffORqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_EffOR6HtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_EffOSKHtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_EffOPqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableconfiguration/TableConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EffOP6HtEeKNUa7kbzEWsw" x="2585" y="565" height="187"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_Ek_YwKHtEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_Ek_Yw6HtEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_Ek_YxKHtEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_Ek_YxaHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_Ek_YxqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_Ek_Yx6HtEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Ek_YyKHtEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_Ek_YyaHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_Ek_YyqHtEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_Ek_Yy6HtEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_Ek_YwaHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//Table"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ek_YwqHtEeKNUa7kbzEWsw" x="2535" y="1080" height="146"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_rlVcQKH3EeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_rlyIMKH3EeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_rlyIMaH3EeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_rlVcQ6H3EeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_rlVcRKH3EeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_rlVcRaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_rlVcRqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_rlVcR6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_rlVcSKH3EeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_rlVcSaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_rlVcSqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_rlVcS6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_rlVcQaH3EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rlVcQqH3EeKNUa7kbzEWsw" x="785" y="1080"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_xjigEKH3EeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xklB4KH3EeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xklB4aH3EeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_xjigE6H3EeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_xjigFKH3EeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjigFaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjigFqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjigF6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_xjigGKH3EeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjigGaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjigGqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjigG6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_xjigEaH3EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/MasterObjectAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xjigEqH3EeKNUa7kbzEWsw" x="1510" y="1170"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_xjigHKH3EeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xklB4qH3EeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xklB46H3EeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_xjigH6H3EeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_xjigIKH3EeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjigIaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjigIqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjigI6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_xjigJKH3EeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjigJaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjigJqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjigJ6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_xjigHaH3EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/SlaveObjectAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xjigHqH3EeKNUa7kbzEWsw" x="1730" y="1170"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_xjrqDKH3EeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xklB6KH3EeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xklB6aH3EeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_xjrqD6H3EeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_xjrqEKH3EeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjrqEaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjrqEqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjrqE6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_xjrqFKH3EeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjrqFaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjrqFqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjrqF6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_xjrqDaH3EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/IMasterAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xjrqDqH3EeKNUa7kbzEWsw" x="1505" y="965"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_xjrqJKH3EeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xklB7KH3EeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xklB7aH3EeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_xjrqJ6H3EeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_xjrqKKH3EeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjrqKaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjrqKqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjrqK6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_xjrqLKH3EeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_xjrqLaH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_xjrqLqH3EeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_xjrqL6H3EeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_xjrqJaH3EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/ISlaveAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xjrqJqH3EeKNUa7kbzEWsw" x="1735" y="965"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_UypeIZewEeKr0Yypv4rfLA"/>
+  <element xmi:type="ecore:EPackage" href="nattable.ecore#/"/>
+  <edges xmi:type="notation:Edge" xmi:id="_EghvgKHtEeKNUa7kbzEWsw" type="3003" source="_EfMSxaHtEeKNUa7kbzEWsw" target="_EffN6aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EghvgaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EghvgqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eghvg6HtEeKNUa7kbzEWsw" points="[4, 9, -119, -33]$[92, 9, -31, -33]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8EqHtEeKNUa7kbzEWsw" id="(0.9731543624161074,0.36666666666666664)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8E6HtEeKNUa7kbzEWsw" id="(0.2882882882882883,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrghKHtEeKNUa7kbzEWsw" type="3002" source="_EffOMaHtEeKNUa7kbzEWsw" target="_EfMS3aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EgrgiKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EgrgiaHtEeKNUa7kbzEWsw" x="8" y="53"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EgrgiqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Egrgi6HtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrghaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrghqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisprovider/AxisProvider/axis"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgh6HtEeKNUa7kbzEWsw" points="[4, 58, -32, -432]$[36, 490, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGDaHtEeKNUa7kbzEWsw" id="(0.18633540372670807,0.9666666666666667)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGDqHtEeKNUa7kbzEWsw" id="(0.22849462365591397,0.08602150537634409)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgjKHtEeKNUa7kbzEWsw" type="3003" source="_EffN9aHtEeKNUa7kbzEWsw" target="_EfMS3aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgjaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgjqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgj6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 94]$[0, -94, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGCaHtEeKNUa7kbzEWsw" id="(0.49612403100775193,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGCqHtEeKNUa7kbzEWsw" id="(0.21739130434782608,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgkKHtEeKNUa7kbzEWsw" type="3003" source="_EffN6aHtEeKNUa7kbzEWsw" target="_EfMS3aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgkaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgkqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgk6HtEeKNUa7kbzEWsw" points="[0, 0, -112, 94]$[0, -30, -112, 64]$[112, -30, 0, 64]$[112, -94, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8BKHtEeKNUa7kbzEWsw" id="(0.7477477477477478,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8BaHtEeKNUa7kbzEWsw" id="(0.10869565217391304,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrglKHtEeKNUa7kbzEWsw" type="3003" source="_EfVc_aHtEeKNUa7kbzEWsw" target="_EfMS3aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrglaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrglqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgl6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 94]$[0, -94, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8FKHtEeKNUa7kbzEWsw" id="(0.4954954954954955,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8FaHtEeKNUa7kbzEWsw" id="(0.7065217391304348,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgmKHtEeKNUa7kbzEWsw" type="3003" source="_EfMS6aHtEeKNUa7kbzEWsw" target="_EffOJaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgmaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgmqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgm6HtEeKNUa7kbzEWsw" points="[1, 0, -282, 442]$[1, -483, -282, -41]$[243, -483, -40, -41]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8CqHtEeKNUa7kbzEWsw" id="(0.7515527950310559,0.014705882352941176)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8C6HtEeKNUa7kbzEWsw" id="(0.2469879518072289,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgnKHtEeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EgrgoKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EgrgoaHtEeKNUa7kbzEWsw" x="-93" y="24"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EgrgoqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Egrgo6HtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgnaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgnqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/columnAxisProviders"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgn6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 111]$[0, -111, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8IKHtEeKNUa7kbzEWsw" id="(0.021052631578947368,0.29411764705882354)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8IaHtEeKNUa7kbzEWsw" id="(0.9295302013422819,0.14685314685314685)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgpKHtEeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EgrgqKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EgrgqaHtEeKNUa7kbzEWsw" x="-93" y="15"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EgrgqqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Egrgq6HtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgpaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgpqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/rowAxisProviders"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgp6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 111]$[0, -111, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8FqHtEeKNUa7kbzEWsw" id="(0.017543859649122806,0.42780748663101603)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8F6HtEeKNUa7kbzEWsw" id="(0.9362416107382551,0.3776223776223776)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgrKHtEeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EgrgsKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EgrgsaHtEeKNUa7kbzEWsw" x="-56" y="-20"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EgrgsqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Egrgs6HtEeKNUa7kbzEWsw" x="23" y="-20"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgraHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgrqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/defaultRowAxisProvider"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgr6HtEeKNUa7kbzEWsw" points="[-3, -19, 71, 510]$[-73, -523, 1, 6]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8GqHtEeKNUa7kbzEWsw" id="(0.04912280701754386,0.7549019607843137)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8G6HtEeKNUa7kbzEWsw" id="(0.9832214765100671,0.7972027972027972)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EgrgtKHtEeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EgrguKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EgrguaHtEeKNUa7kbzEWsw" x="-81" y="12"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EgrguqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Egrgu6HtEeKNUa7kbzEWsw" x="7" y="12"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EgrgtaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EgrgtqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/defaultColumnAxisProvider"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Egrgt6HtEeKNUa7kbzEWsw" points="[0, -3, 27, 510]$[-27, -507, 0, 6]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8HKHtEeKNUa7kbzEWsw" id="(0.0,0.6203208556149733)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8HaHtEeKNUa7kbzEWsw" id="(0.9563758389261745,0.6363636363636364)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Eg0qcKHtEeKNUa7kbzEWsw" type="3003" source="_EffOMaHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Eg0qcaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Eg0qcqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eg0qc6HtEeKNUa7kbzEWsw" points="[0, 0, 31, 155]$[0, -69, 31, 86]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGD6HtEeKNUa7kbzEWsw" id="(0.6645962732919255,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGEKHtEeKNUa7kbzEWsw" id="(0.10067114093959731,0.3916083916083916)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Eg0qjKHtEeKNUa7kbzEWsw" type="3003" source="_EfMTDaHtEeKNUa7kbzEWsw" target="_EfVdCaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Eg0qjaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Eg0qjqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eg0qj6HtEeKNUa7kbzEWsw" points="[13, 8, 198, -412]$[13, 130, 198, -290]$[-161, 130, 24, -290]$[-161, 405, 24, -15]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGA6HtEeKNUa7kbzEWsw" id="(0.36180904522613067,0.8666666666666667)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGBKHtEeKNUa7kbzEWsw" id="(0.7115384615384616,0.13445378151260504)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Eg-bfKHtEeKNUa7kbzEWsw" type="3003" source="_EfMTGaHtEeKNUa7kbzEWsw" target="_EfMTJaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Eg-bfaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Eg-bfqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eg-bf6HtEeKNUa7kbzEWsw" points="[-53, 0, -81, 264]$[-53, -288, -81, -24]$[9, -288, -19, -24]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzF96HtEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzF-KHtEeKNUa7kbzEWsw" id="(0.091324200913242,0.8)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Eg-bgKHtEeKNUa7kbzEWsw" type="3002" source="_EffN6aHtEeKNUa7kbzEWsw" target="_EfMTGaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_Eg-bhKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Eg-bhaHtEeKNUa7kbzEWsw" x="-12" y="-83"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Eg-bhqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Eg-bh6HtEeKNUa7kbzEWsw" x="-32" y="-37"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Eg-bgaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Eg-bgqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/FeatureAxis/localLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eg-bg6HtEeKNUa7kbzEWsw" points="[-9, 58, 813, 121]$[-9, 95, 813, 158]$[-822, 95, 0, 158]$[-822, -63, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8BqHtEeKNUa7kbzEWsw" id="(0.4954954954954955,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8B6HtEeKNUa7kbzEWsw" id="(0.8214285714285714,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Eg-bjKHtEeKNUa7kbzEWsw" type="3002" source="_EfVc_aHtEeKNUa7kbzEWsw" target="_EfMTJaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_Eg-bkKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Eg-bkaHtEeKNUa7kbzEWsw" x="84" y="84"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Eg-bkqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Eg-bk6HtEeKNUa7kbzEWsw" x="44" y="15"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Eg-bjaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Eg-bjqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/ObjectAxis/localLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Eg-bj6HtEeKNUa7kbzEWsw" points="[0, 0, 1127, 427]$[0, -45, 1127, 382]$[-1136, -45, -9, 382]$[-1136, -427, -9, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGGaHtEeKNUa7kbzEWsw" id="(0.7477477477477478,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGGqHtEeKNUa7kbzEWsw" id="(0.6666666666666666,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhHlYKHtEeKNUa7kbzEWsw" type="3002" source="_EfVczaHtEeKNUa7kbzEWsw" target="_EfVc8aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EhHlZKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EhHlZaHtEeKNUa7kbzEWsw" x="-42" y="-89"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EhHlZqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EhHlZ6HtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhHlYaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhHlYqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration/axisManagerConfigurations"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhHlY6HtEeKNUa7kbzEWsw" points="[-12, 1, 286, -14]$[-261, 13, 37, -2]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8AKHtEeKNUa7kbzEWsw" id="(0.056768558951965066,0.8)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8AaHtEeKNUa7kbzEWsw" id="(0.8947368421052632,0.5568181818181818)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhHlaKHtEeKNUa7kbzEWsw" type="3003" source="_EfVczaHtEeKNUa7kbzEWsw" target="_EfVdCaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhHlaaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhHlaqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhHla6HtEeKNUa7kbzEWsw" points="[0, 0, -255, 239]$[0, -209, -255, 30]$[255, -209, 0, 30]$[255, -239, 0, 0]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGHKHtEeKNUa7kbzEWsw" id="(0.3317307692307692,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhHlbKHtEeKNUa7kbzEWsw" type="3003" source="_EfVc2aHtEeKNUa7kbzEWsw" target="_EfVc_aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhHlbaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhHlbqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhHlb6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 102]$[0, -102, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzF9aHtEeKNUa7kbzEWsw" id="(0.4954954954954955,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzF9qHtEeKNUa7kbzEWsw" id="(0.4144144144144144,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhHlcKHtEeKNUa7kbzEWsw" type="3003" source="_EfVc5aHtEeKNUa7kbzEWsw" target="_EffODaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhHlcaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhHlcqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhHlc6HtEeKNUa7kbzEWsw" points="[0, 0, 254, 111]$[0, -30, 254, 81]$[-254, -30, 0, 81]$[-254, -111, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGAaHtEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGAqHtEeKNUa7kbzEWsw" id="(0.25,0.9264705882352942)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhRWeKHtEeKNUa7kbzEWsw" type="3003" source="_EffN3aHtEeKNUa7kbzEWsw" target="_EfVc_aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhRWeaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhRWeqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhRWe6HtEeKNUa7kbzEWsw" points="[0, 0, -120, 102]$[0, -30, -120, 72]$[120, -30, 0, 72]$[120, -102, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGE6HtEeKNUa7kbzEWsw" id="(0.7477477477477478,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGFKHtEeKNUa7kbzEWsw" id="(0.2072072072072072,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhbHdKHtEeKNUa7kbzEWsw" type="3003" source="_EffOAaHtEeKNUa7kbzEWsw" target="_EfVdLaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhbHdaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhbHdqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhbHd6HtEeKNUa7kbzEWsw" points="[-3, 0, 19, 114]$[-3, -114, 19, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGB6HtEeKNUa7kbzEWsw" id="(0.2931726907630522,0.014705882352941176)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGCKHtEeKNUa7kbzEWsw" id="(0.25,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhkRUKHtEeKNUa7kbzEWsw" type="3003" source="_EffNxaHtEeKNUa7kbzEWsw" target="_EffN9aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhkRUaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhkRUqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhkRU6HtEeKNUa7kbzEWsw" points="[0, 0, -111, 94]$[0, -30, -111, 64]$[111, -30, 0, 64]$[111, -94, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8DKHtEeKNUa7kbzEWsw" id="(0.7477477477477478,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8DaHtEeKNUa7kbzEWsw" id="(0.24806201550387597,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhkRVKHtEeKNUa7kbzEWsw" type="3003" source="_EffNxaHtEeKNUa7kbzEWsw" target="_EffN6aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhkRVaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhkRVqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhkRV6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 102]$[0, -102, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8DqHtEeKNUa7kbzEWsw" id="(0.4954954954954955,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8D6HtEeKNUa7kbzEWsw" id="(0.5765765765765766,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhkRWKHtEeKNUa7kbzEWsw" type="3003" source="_EffN3aHtEeKNUa7kbzEWsw" target="_EffN9aHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhkRWaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhkRWqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhkRW6HtEeKNUa7kbzEWsw" points="[0, 0, 0, 94]$[0, -94, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGEaHtEeKNUa7kbzEWsw" id="(0.4954954954954955,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGEqHtEeKNUa7kbzEWsw" id="(0.49612403100775193,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhuCUKHtEeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EffODaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_EhuCVKHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EhuCVaHtEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_EhuCVqHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_EhuCV6HtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhuCUaHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhuCUqHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/creationTester"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhuCU6HtEeKNUa7kbzEWsw" points="[0, 0, 89, 284]$[-89, -284, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8IqHtEeKNUa7kbzEWsw" id="(0.05964912280701754,0.0427807486631016)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ejp8I6HtEeKNUa7kbzEWsw" id="(0.8920454545454546,0.9705882352941176)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_EhuCWKHtEeKNUa7kbzEWsw" type="3003" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EffOJaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EhuCWaHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_EhuCWqHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EhuCW6HtEeKNUa7kbzEWsw" points="[-169, 0, 1, 431]$[-169, -427, 1, 4]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGIaHtEeKNUa7kbzEWsw" id="(0.9403508771929825,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EjzGIqHtEeKNUa7kbzEWsw" id="(0.8012048192771084,0.9529411764705882)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Ek_YzqHtEeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EffOPaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y0qHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y06HtEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y1KHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y1aHtEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Ek_Yz6HtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Ek_Y0KHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/tableConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Ek_Y0aHtEeKNUa7kbzEWsw" points="[9, -10, 0, 336]$[9, -340, 0, 6]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ir5h8KHtEeKNUa7kbzEWsw" id="(0.8552631578947368,0.07534246575342465)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kbepMKHtEeKNUa7kbzEWsw" id="(0.3087719298245614,0.9411764705882353)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Ek_Y1qHtEeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y2qHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y26HtEeKNUa7kbzEWsw" x="-335" y="102"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y3KHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y3aHtEeKNUa7kbzEWsw" x="-325" y="20"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Ek_Y16HtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Ek_Y2KHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/columnAxisProvidersHistory"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Ek_Y2aHtEeKNUa7kbzEWsw" points="[-146, 0, 271, 460]$[-411, 0, 6, 460]$[-411, -453, 6, 7]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7tvZUKHuEeKNUa7kbzEWsw" id="(0.9736842105263158,0.726027397260274)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6fePYKHuEeKNUa7kbzEWsw" id="(0.6073825503355704,0.8970588235294118)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_Ek_Y3qHtEeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y4qHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y46HtEeKNUa7kbzEWsw" x="-356" y="129"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Ek_Y5KHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ek_Y5aHtEeKNUa7kbzEWsw" x="-356" y="37"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Ek_Y36HtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Ek_Y4KHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/rowAxisProvidersHistory"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Ek_Y4aHtEeKNUa7kbzEWsw" points="[-145, 0, 308, 485]$[-445, 0, 8, 485]$[-445, -480, 8, 5]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8EDnkKHuEeKNUa7kbzEWsw" id="(0.9671052631578947,0.910958904109589)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__1i8MKHuEeKNUa7kbzEWsw" id="(0.4798657718120805,0.9264705882352942)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_ElJJ0KHtEeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_ElJJ1KHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ElJJ1aHtEeKNUa7kbzEWsw" x="-309" y="104"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_ElJJ1qHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ElJJ16HtEeKNUa7kbzEWsw" x="-308" y="19"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_ElJJ0aHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ElJJ0qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/currentRowAxisProvider"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ElJJ06HtEeKNUa7kbzEWsw" points="[-137, 0, 235, 423]$[-372, 0, 0, 423]$[-372, -420, 0, 3]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3ETwEKHuEeKNUa7kbzEWsw" id="(0.9144736842105263,0.4931506849315068)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AyW7AKH1EeKNUa7kbzEWsw" id="(0.7281879194630873,0.9558823529411765)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_ElJJ2KHtEeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfMS6aHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_ElJJ3KHtEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ElJJ3aHtEeKNUa7kbzEWsw" x="-235" y="120"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_ElJJ3qHtEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ElJJ36HtEeKNUa7kbzEWsw" x="-230" y="31"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_ElJJ2aHtEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ElJJ2qHtEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/currentColumnAxisProvider"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ElJJ26HtEeKNUa7kbzEWsw" points="[-90, 0, 197, 386]$[-287, 0, 0, 386]$[-287, -384, 0, 2]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0FtQ8KHuEeKNUa7kbzEWsw" id="(0.6052631578947368,0.2465753424657534)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vXzXYKHuEeKNUa7kbzEWsw" id="(0.8557046979865772,0.9705882352941176)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_ElJJ4KHtEeKNUa7kbzEWsw" type="3003" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EffOJaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_ElJJ4aHtEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ElJJ4qHtEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ElJJ46HtEeKNUa7kbzEWsw" points="[5, 40, -4, 1013]$[315, 40, 306, 1013]$[315, -931, 306, 42]$[34, -931, 25, 42]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zdYFoKHuEeKNUa7kbzEWsw" id="(0.9671052631578947,0.2328767123287671)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a_dasKHtEeKNUa7kbzEWsw" id="(0.8493975903614458,0.011764705882352941)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_FIJaHKH2EeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMTDaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_FIJaIKH2EeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FIJaIaH2EeKNUa7kbzEWsw" x="-118" y="-19"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_FIJaIqH2EeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FIJaI6H2EeKNUa7kbzEWsw" x="-3" y="-24"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_FIJaHaH2EeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_FIJaHqH2EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/rowHeaderAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FIJaH6H2EeKNUa7kbzEWsw" points="[0, -7, 691, 404]$[0, -493, 691, -82]$[-682, -493, 9, -82]$[-682, -412, 9, -1]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JJrV0KH2EeKNUa7kbzEWsw" id="(0.5578947368421052,0.0427807486631016)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a5to8KH2EeKNUa7kbzEWsw" id="(0.8190954773869347,0.03333333333333333)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_FIJaJKH2EeKNUa7kbzEWsw" type="3002" source="_EffOPaHtEeKNUa7kbzEWsw" target="_EfMTDaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_FIJaKKH2EeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FIJaKaH2EeKNUa7kbzEWsw" x="-31" y="28"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_FITLEKH2EeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FITLEaH2EeKNUa7kbzEWsw" x="79" y="13"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_FIJaJaH2EeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_FIJaJqH2EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableconfiguration/TableConfiguration/columnHeaderAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FIJaJ6H2EeKNUa7kbzEWsw" points="[-7, -8, 798, 384]$[-7, -518, 798, -126]$[-805, -518, 0, -126]$[-805, -413, 0, -21]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PMCg4KH2EeKNUa7kbzEWsw" id="(0.9438596491228071,0.0481283422459893)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OSd0kKH2EeKNUa7kbzEWsw" id="(0.7989949748743719,0.36666666666666664)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_hoQknKH2EeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfVczaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_hoQkoKH2EeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hoQkoaH2EeKNUa7kbzEWsw" x="-955" y="189"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hoQkoqH2EeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hoQko6H2EeKNUa7kbzEWsw" x="-949" y="65"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_hoQknaH2EeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_hoQknqH2EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/localRowHeaderAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hoQkn6H2EeKNUa7kbzEWsw" points="[7, 5, 915, 798]$[7, 211, 915, 1004]$[-598, 211, 310, 1004]$[-608, -793, 300, 0]$[-906, -793, 2, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NyG_cKJ4EeKNUa7kbzEWsw" id="(0.7894736842105263,0.9657534246575342)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Uz2j4KJ4EeKNUa7kbzEWsw" id="(0.9912663755458515,0.45)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_hoQkpKH2EeKNUa7kbzEWsw" type="3002" source="_Ek_YwKHtEeKNUa7kbzEWsw" target="_EfVczaHtEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_hoQkqKH2EeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hoQkqaH2EeKNUa7kbzEWsw" x="-394" y="-888"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hoQkqqH2EeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hoQkq6H2EeKNUa7kbzEWsw" x="-246" y="-893"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_hoQkpaH2EeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_hoQkpqH2EeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//Table/localColumnHeaderAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hoQkp6H2EeKNUa7kbzEWsw" points="[1, 6, 843, 815]$[1, 131, 843, 940]$[-480, 131, 362, 940]$[-480, -803, 362, 6]$[-838, -803, 4, 6]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NTAooKJ4EeKNUa7kbzEWsw" id="(0.3355263157894737,0.958904109589041)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m2_6UKH2EeKNUa7kbzEWsw" id="(0.982532751091703,0.16666666666666666)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_xj1bAqH3EeKNUa7kbzEWsw" type="3003" source="_xjigEKH3EeKNUa7kbzEWsw" target="_xjrqDKH3EeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_xj1bA6H3EeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_xj1bBKH3EeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xj1bBaH3EeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xkbQ4KH3EeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xkbQ4aH3EeKNUa7kbzEWsw" id="(0.4968944099378882,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_xj_MAKH3EeKNUa7kbzEWsw" type="3003" source="_xjigHKH3EeKNUa7kbzEWsw" target="_xjrqJKH3EeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_xj_MAaH3EeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_xj_MAqH3EeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xj_MA6H3EeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xkbQ4qH3EeKNUa7kbzEWsw" id="(0.4968944099378882,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xkbQ46H3EeKNUa7kbzEWsw" id="(0.4968944099378882,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_xj_MGKH3EeKNUa7kbzEWsw" type="3003" source="_xjrqDKH3EeKNUa7kbzEWsw" target="_EffOMaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_xj_MGaH3EeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_xj_MGqH3EeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xj_MG6H3EeKNUa7kbzEWsw" points="[1, 0, -1734, -700]$[1663, 671, -72, -29]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_xkIV-KH3EeKNUa7kbzEWsw" type="3003" source="_xjrqJKH3EeKNUa7kbzEWsw" target="_EffOMaHtEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_xkIV-aH3EeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_xkIV-qH3EeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xkIV-6H3EeKNUa7kbzEWsw" points="[1, 0, -1734, -700]$[1663, 671, -72, -29]"/>
+  </edges>
+</notation:Diagram>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.genmodel b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.genmodel
new file mode 100644
index 0000000..5c8ebe9
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattable.genmodel
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2013 CEA LIST.&#xA;&#xA; All rights reserved. This program and the accompanying materials&#xA; are made available under the terms of the Eclipse Public License 2.0&#xA; which accompanies this distribution, and is available at&#xA; https://www.eclipse.org/legal/epl-2.0/&#xA;&#xA; SPDX-License-Identifier: EPL-2.0&#xA;&#xA; Contributors:&#xA; Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation"
+    modelDirectory="/org.eclipse.papyrus.infra.nattable.model/src-gen" creationIcons="false"
+    editDirectory="/org.eclipse.papyrus.infra.nattable.model.edit/src-gen" editorDirectory="/org.eclipse.papyrus.infra.nattable.model.editor/src-gen"
+    modelPluginID="org.eclipse.papyrus.infra.nattable.model" modelName="Nattable"
+    nonNLSMarkers="true" rootExtendsClass="org.eclipse.emf.internal.cdo.CDOObjectImpl"
+    testsDirectory="" importerID="org.eclipse.emf.importer.ecore" featureDelegation="Dynamic"
+    complianceLevel="5.0" copyrightFields="false" usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.papyrus.infra.types/model/ElementTypesConfigurations.genmodel#//types ../../org.eclipse.papyrus.infra.emf.expressions/model/expressions.genmodel#//expressions"
+    operationReflection="true" importOrganizing="true" cleanup="true">
+  <foreignModel>nattable.ecore</foreignModel>
+  <genPackages prefix="Nattable" basePackage="org.eclipse.papyrus.infra.nattable.model"
+      disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="nattable.ecore#/">
+    <genClasses ecoreClass="nattable.ecore#//Table">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/context"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/owner"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/prototype"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/tableConfiguration"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//Table/invertAxis"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/columnAxisProvidersHistory"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/rowAxisProvidersHistory"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/localRowHeaderAxisConfiguration"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/localColumnHeaderAxisConfiguration"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/currentRowAxisProvider"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/currentColumnAxisProvider"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/cells"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//Table/ownedCellEditorConfigurations"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//Table/tableKindId"/>
+    </genClasses>
+    <nestedGenPackages prefix="Nattableconfiguration" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" ecorePackage="nattable.ecore#//nattableconfiguration">
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattableconfiguration/CellEditorDeclaration">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattableconfiguration/CellEditorDeclaration/COLUMN"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattableconfiguration/CellEditorDeclaration/ROW"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattableconfiguration/CellEditorDeclaration/CELL"/>
+      </genEnums>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableconfiguration/TableNamedElement">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableconfiguration/TableNamedElement/description"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableconfiguration/TableNamedElement/name"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableconfiguration/TableConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableconfiguration/TableConfiguration/type"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableconfiguration/TableConfiguration/iconPath"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/creationTester"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableconfiguration/TableConfiguration/cellEditorDeclaration"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/rowHeaderAxisConfiguration"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/columnHeaderAxisConfiguration"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/columnAxisProviders"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/rowAxisProviders"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/defaultRowAxisProvider"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/defaultColumnAxisProvider"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableconfiguration/TableConfiguration/ownedCellEditorConfigurations"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattableaxisprovider" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattableaxisprovider">
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisprovider/AbstractAxisProvider">
+        <genOperations ecoreOperation="nattable.ecore#//nattableaxisprovider/AbstractAxisProvider/getAxis"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisprovider/IMasterAxisProvider">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisprovider/IMasterAxisProvider/disconnectSlave"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisprovider/IMasterAxisProvider/sources"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisprovider/ISlaveAxisProvider"/>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisprovider/AxisProvider">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisprovider/AxisProvider/axis"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisprovider/SlaveObjectAxisProvider"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisprovider/MasterObjectAxisProvider"/>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattablelabelprovider" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattablelabelprovider">
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablelabelprovider/ILabelProviderConfiguration"/>
+      <genClasses ecoreClass="nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration/displayIsDerived"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration/displayType"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration/displayMultiplicity"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration/displayName"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablelabelprovider/ObjectLabelProviderConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/ObjectLabelProviderConfiguration/displayIcon"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/ObjectLabelProviderConfiguration/displayLabel"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablelabelprovider/OperationLabelProviderConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/OperationLabelProviderConfiguration/displayType"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/OperationLabelProviderConfiguration/displayMultiplicity"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablelabelprovider/OperationLabelProviderConfiguration/displayName"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattableaxisconfiguration" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        extensibleProviderFactory="true" childCreationExtenders="true" ecorePackage="nattable.ecore#//nattableaxisconfiguration">
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle/ALPHABETIC"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle/NUMERIC"/>
+      </genEnums>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/indexStyle"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/displayLabel"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/displayFilter"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/displayIndex"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/ownedLabelConfigurations"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/ownedAxisConfigurations"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/AxisManagerRepresentation">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AxisManagerRepresentation/axisManagerId"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/AxisManagerRepresentation/labelProviderContext"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AxisManagerRepresentation/headerLabelConfiguration"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AxisManagerRepresentation/specificAxisConfigurations"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/localHeaderLabelConfiguration"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/axisManager"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/localSpecificConfigurations"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/TableHeaderAxisConfiguration">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/TableHeaderAxisConfiguration/axisManagers"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration/axisManagerConfigurations"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisconfiguration/IAxisConfiguration"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/FeatureAxisConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/FeatureAxisConfiguration/showOnlyCommonFeature"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxisconfiguration/IFillingConfiguration"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/EStructuralFeatureValueFillingConfiguration">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/EStructuralFeatureValueFillingConfiguration/listenFeature"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/IPasteConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/IPasteConfiguration/postActions"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/IPasteConfiguration/detachedMode"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/PasteEObjectConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/PasteEObjectConfiguration/pastedElementId"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/PasteEObjectConfiguration/pasteElementContainementFeature"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/PasteEObjectConfiguration/axisIdentifier"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/axisUsedAsAxisProvider"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/pasteConfiguration"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/depth"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/labelProvider"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/labelProviderContext"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxisconfiguration/TreeFillingConfiguration/filterRule"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattabletester" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattabletester">
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattabletester/AbstractTableTester">
+        <genOperations ecoreOperation="nattable.ecore#//nattabletester/AbstractTableTester/getTester"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattabletester/JavaTableTester">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattabletester/JavaTableTester/tester"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattableaxis" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattableaxis">
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/IAxis">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/IAxis/manager"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxis/IAxis/alias"/>
+        <genOperations ecoreOperation="nattable.ecore#//nattableaxis/IAxis/getElement"/>
+        <genOperations ecoreOperation="nattable.ecore#//nattableaxis/IAxis/getLocalLabelConfiguration"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/ITreeItemAxis">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/ITreeItemAxis/parent"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxis/ITreeItemAxis/expanded"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/ITreeItemAxis/children"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/IdAxis">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableaxis/IdAxis/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/IdTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EObjectAxis">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/EObjectAxis/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EObjectTreeItemAxis"/>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/FeatureAxis">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/FeatureAxis/localLabelConfiguration"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/OperationAxis">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/OperationAxis/localLabelConfiguration"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/FeatureTreeItemAxis"/>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/OperationTreeItemAxis"/>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/ObjectAxis">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/ObjectAxis/localLabelConfiguration"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattableaxis/ObjectTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/FeatureIdAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/FeatureIdTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EStructuralFeatureAxis">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/EStructuralFeatureAxis/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EOperationAxis">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/EOperationAxis/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EStructuralFeatureTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/EOperationTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/ObjectIdAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/ObjectIdTreeItemAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/AxisGroup">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattableaxis/AxisGroup/groupedAxis"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/OperationIdAxis"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableaxis/OperationIdTreeItemAxis"/>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattablecell" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattablecell">
+      <genClasses ecoreClass="nattable.ecore#//nattablecell/Cell">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablecell/Cell/columnWrapper"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablecell/Cell/rowWrapper"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablecell/Cell/problems"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablecell/ICellAxisWrapper">
+        <genOperations ecoreOperation="nattable.ecore#//nattablecell/ICellAxisWrapper/getElement"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablecell/EObjectAxisWrapper">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablecell/EObjectAxisWrapper/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablecell/IdAxisWrapper">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablecell/IdAxisWrapper/element"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattableproblem" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattableproblem">
+      <genClasses ecoreClass="nattable.ecore#//nattableproblem/Problem"/>
+      <genClasses ecoreClass="nattable.ecore#//nattableproblem/StringResolutionProblem">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableproblem/StringResolutionProblem/valueAsString"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattableproblem/StringResolutionProblem/unresolvedString"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattablestyle" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattablestyle">
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattablestyle/CellTextAlignment">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/TOP_LEFT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/TOP_CENTER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/TOP_RIGHT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/MIDDLE_LEFT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/MIDDLE_CENTER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/MIDDLE_RIGHT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/BOTTOM_LEFT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/BOTTOM_CENTER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/CellTextAlignment/BOTTOM_RIGHT"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattablestyle/DisplayStyle">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/DisplayStyle/NORMAL"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/DisplayStyle/HIERARCHIC_SINGLE_TREE_COLUMN"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablestyle/DisplayStyle/HIERARCHIC_MULTI_TREE_COLUMN"/>
+      </genEnums>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablestyle/Style"/>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/NamedStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/NamedStyle/name"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/FontStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/fontColor"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/fontName"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/fontHeight"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/bold"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/italic"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/underline"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/FontStyle/strikeThrough"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/CellTextStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/CellTextStyle/alignment"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/IntValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/IntValueStyle/intValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/IntListValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/IntListValueStyle/intListValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/BooleanValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/BooleanValueStyle/booleanValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/BooleanListValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/BooleanListValueStyle/booleanListValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/DoubleValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/DoubleValueStyle/doubleValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/DoubleListValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/DoubleListValueStyle/doubleListValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/StringValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/StringValueStyle/stringValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/StringListValueStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/StringListValueStyle/stringListValue"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablestyle/StyledElement">
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablestyle/StyledElement/styles"/>
+        <genOperations ecoreOperation="nattable.ecore#//nattablestyle/StyledElement/getNamedStyle">
+          <genParameters ecoreParameter="nattable.ecore#//nattablestyle/StyledElement/getNamedStyle/eClass"/>
+          <genParameters ecoreParameter="nattable.ecore#//nattablestyle/StyledElement/getNamedStyle/name"/>
+        </genOperations>
+        <genOperations ecoreOperation="nattable.ecore#//nattablestyle/StyledElement/getStyle">
+          <genParameters ecoreParameter="nattable.ecore#//nattablestyle/StyledElement/getStyle/eClass"/>
+        </genOperations>
+        <genOperations ecoreOperation="nattable.ecore#//nattablestyle/StyledElement/createStyle">
+          <genParameters ecoreParameter="nattable.ecore#//nattablestyle/StyledElement/createStyle/eClass"/>
+        </genOperations>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/TableDisplayStyle">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablestyle/TableDisplayStyle/displayStyle"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/EObjectValueStyle">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablestyle/EObjectValueStyle/eObjectValue"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablestyle/EObjectListValueStyle">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablestyle/EObjectListValueStyle/eObjectValue"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattablecelleditor" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        extensibleProviderFactory="true" childCreationExtenders="true" ecorePackage="nattable.ecore#//nattablecelleditor">
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattablecelleditor/MatrixRelationShipDirection">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipDirection/NONE"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipDirection/FROM_ROW_TO_COLUMN"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipDirection/FROM_COLUMN_TO_ROW"/>
+      </genEnums>
+      <genEnums typeSafeEnumCompatible="false" ecoreEnum="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy">
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/DEFAULT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/TABLE_CONTEXT"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/ROW_OWNER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/ROW_AS_OWNER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/COLUMN_OWNER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/COLUMN_AS_OWNER"/>
+        <genEnumLiterals ecoreEnumLiteral="nattable.ecore#//nattablecelleditor/MatrixRelationShipOwnerStrategy/OTHER"/>
+      </genEnums>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablecelleditor/ICellEditorConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablecelleditor/ICellEditorConfiguration/cellEditorId"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/direction"/>
+        <genFeatures children="true" createChild="true" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/cellContentsFilter"/>
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/editedElement"/>
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/relationshipOwnerStrategy"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/relationshipOwner"/>
+        <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nattable.ecore#//nattablecelleditor/GenericRelationshipMatrixCellEditorConfiguration/relationshipOwnerFeature"/>
+      </genClasses>
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablecelleditor/IMatrixCellEditorConfiguration"/>
+    </nestedGenPackages>
+    <nestedGenPackages prefix="Nattablewrapper" basePackage="org.eclipse.papyrus.infra.nattable.model.nattable"
+        disposableProviderFactory="true" multipleEditorPages="false" generateModelWizard="false"
+        ecorePackage="nattable.ecore#//nattablewrapper">
+      <genClasses image="false" ecoreClass="nattable.ecore#//nattablewrapper/IWrapper">
+        <genOperations ecoreOperation="nattable.ecore#//nattablewrapper/IWrapper/getElement"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablewrapper/EObjectWrapper">
+        <genFeatures notify="false" createChild="false" propertySortChoices="true"
+            ecoreFeature="ecore:EReference nattable.ecore#//nattablewrapper/EObjectWrapper/element"/>
+      </genClasses>
+      <genClasses ecoreClass="nattable.ecore#//nattablewrapper/IdWrapper">
+        <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nattable.ecore#//nattablewrapper/IdWrapper/element"/>
+      </genClasses>
+    </nestedGenPackages>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxis.ecorediag b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxis.ecorediag
new file mode 100644
index 0000000..63cb5ea
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxis.ecorediag
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_UypeIJewEeKr0Yypv4rfLA" type="EcoreTools" name="nattableaxis.ecorediag" measurementUnit="Pixel">
+  <children xmi:type="notation:Node" xmi:id="_e_NAAKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAA6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NABKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NABaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NABqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAB6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NACKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NACaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NACqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAC6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NAAaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/FeatureIdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NAAqHoEeKNUa7kbzEWsw" x="755" y="525"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NADKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAD6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NAEKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAEaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAEqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAE6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NAFKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAFaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAFqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAF6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NADaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/ObjectIdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NADqHoEeKNUa7kbzEWsw" x="590" y="525"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NAGKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAG6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NAHKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAHaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAHqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAH6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NAIKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAIaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAIqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAI6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NAGaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/ObjectAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NAGqHoEeKNUa7kbzEWsw" x="500" y="350"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NAJKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAJ6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NAKKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAKaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAKqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAK6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NALKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NALaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NALqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAL6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NAJaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/FeatureAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NAJqHoEeKNUa7kbzEWsw" x="850" y="350"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NAMKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAM6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NANKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NANaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NANqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAN6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NAOKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAOaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAOqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAO6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NAMaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/IdAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NAMqHoEeKNUa7kbzEWsw" x="665" y="350"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NAPKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAP6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NAQKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAQaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAQqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAQ6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NARKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NARaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NARqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAR6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NAPaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/IAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NAPqHoEeKNUa7kbzEWsw" x="455" y="220"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_NASKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_NAS6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_NATKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NATaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NATqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAT6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_NAUKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_NAUaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_NAUqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_NAU6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_NASaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/EStructuralFeatureAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_NASqHoEeKNUa7kbzEWsw" x="920" y="525"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_e_WxAKHoEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_e_WxA6HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_e_WxBKHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_WxBaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_WxBqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_WxB6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_e_WxCKHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_e_WxCaHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_e_WxCqHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_e_WxC6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_e_WxAaHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/EObjectAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e_WxAqHoEeKNUa7kbzEWsw" x="430" y="460"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_hgnz4KHoEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hhEf0KHoEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hhEf0aHoEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_hgnz46HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_hgnz5KHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_hgnz5aHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_hgnz5qHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_hgnz56HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hgnz6KHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_hgnz6aHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_hgnz6qHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_hgnz66HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_hgnz4aHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hgnz4qHoEeKNUa7kbzEWsw" x="880" y="700"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_kA2U8KHoEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kBTA4KHoEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kBTA4aHoEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_kA2U86HoEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_kA2U9KHoEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_kA2U9aHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_kA2U9qHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_kA2U96HoEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_kA2U-KHoEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_kA2U-aHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_kA2U-qHoEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_kA2U-6HoEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_kA2U8aHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kA2U8qHoEeKNUa7kbzEWsw" x="250" y="625"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_g0n0EKHpEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_g06vAKHpEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g06vAaHpEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_g0n0E6HpEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_g0n0FKHpEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_g0n0FaHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_g0n0FqHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_g0n0F6HpEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_g0n0GKHpEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_g0n0GaHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_g0n0GqHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_g0n0G6HpEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_g0n0EaHpEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattablelabelprovider/FeatureLabelProviderConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_g0n0EqHpEeKNUa7kbzEWsw" x="825" y="-15"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_hPGwoKHpEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hPZrkKHpEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hPZrkaHpEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_hPGwo6HpEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_hPGwpKHpEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_hPGwpaHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_hPGwpqHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_hPGwp6HpEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hPGwqKHpEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_hPGwqaHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_hPGwqqHpEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_hPGwq6HpEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_hPGwoaHpEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattablelabelprovider/ObjectLabelProviderConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hPGwoqHpEeKNUa7kbzEWsw" x="75" y="-15"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_UypeIZewEeKr0Yypv4rfLA"/>
+  <element xmi:type="ecore:EPackage" href="nattable.ecore#//nattableaxis"/>
+  <edges xmi:type="notation:Edge" xmi:id="_e_f68KHoEeKNUa7kbzEWsw" type="3003" source="_e_NAAKHoEeKNUa7kbzEWsw" target="_e_NAMKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_f68aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_f68qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_f686HoEeKNUa7kbzEWsw" points="[0, 0, 41, 60]$[0, -30, 41, 30]$[-41, -30, 0, 30]$[-41, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX6KHoEeKNUa7kbzEWsw" id="(0.3333333333333333,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX6aHoEeKNUa7kbzEWsw" id="(0.6666666666666666,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_f69KHoEeKNUa7kbzEWsw" type="3003" source="_e_NAAKHoEeKNUa7kbzEWsw" target="_e_NAJKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_f69aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_f69qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_f696HoEeKNUa7kbzEWsw" points="[0, 0, -62, 68]$[0, -30, -62, 38]$[62, -30, 0, 38]$[62, -68, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX6qHoEeKNUa7kbzEWsw" id="(0.6666666666666666,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX66HoEeKNUa7kbzEWsw" id="(0.3333333333333333,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_pr8KHoEeKNUa7kbzEWsw" type="3003" source="_e_NADKHoEeKNUa7kbzEWsw" target="_e_NAMKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_pr8aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_pr8qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_pr86HoEeKNUa7kbzEWsw" points="[0, 0, -44, 60]$[0, -30, -44, 30]$[44, -30, 0, 30]$[44, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX5KHoEeKNUa7kbzEWsw" id="(0.6666666666666666,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX5aHoEeKNUa7kbzEWsw" id="(0.3333333333333333,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_pr9KHoEeKNUa7kbzEWsw" type="3003" source="_e_NADKHoEeKNUa7kbzEWsw" target="_e_NAGKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_pr9aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_pr9qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_pr96HoEeKNUa7kbzEWsw" points="[0, 0, 59, 68]$[0, -30, 59, 38]$[-59, -30, 0, 38]$[-59, -68, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX5qHoEeKNUa7kbzEWsw" id="(0.3333333333333333,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX56HoEeKNUa7kbzEWsw" id="(0.6666666666666666,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_pr-KHoEeKNUa7kbzEWsw" type="3003" source="_e_NAGKHoEeKNUa7kbzEWsw" target="_e_NAPKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_pr-aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_pr-qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_pr-6HoEeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX7KHoEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX7aHoEeKNUa7kbzEWsw" id="(0.2608695652173913,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_pr_KHoEeKNUa7kbzEWsw" type="3003" source="_e_WxAKHoEeKNUa7kbzEWsw" target="_e_NAGKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_pr_aHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_pr_qHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_pr_6HoEeKNUa7kbzEWsw" points="[0, 0, -52, 68]$[0, -30, -52, 38]$[52, -30, 0, 38]$[52, -68, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX4KHoEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX4aHoEeKNUa7kbzEWsw" id="(0.3333333333333333,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_psAKHoEeKNUa7kbzEWsw" type="3003" source="_e_NASKHoEeKNUa7kbzEWsw" target="_e_NAJKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_psAaHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_psAqHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_psA6HoEeKNUa7kbzEWsw" points="[0, 0, 54, 68]$[0, -30, 54, 38]$[-54, -30, 0, 38]$[-54, -68, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX7qHoEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX76HoEeKNUa7kbzEWsw" id="(0.6666666666666666,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_e_psBKHoEeKNUa7kbzEWsw" type="3003" source="_e_NAMKHoEeKNUa7kbzEWsw" target="_e_NAPKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_e_psBaHoEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_e_psBqHoEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e_psB6HoEeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX4qHoEeKNUa7kbzEWsw" id="(0.49612403100775193,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fAGX46HoEeKNUa7kbzEWsw" id="(0.7364130434782609,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_hg6u0KHoEeKNUa7kbzEWsw" type="3002" source="_e_NASKHoEeKNUa7kbzEWsw" target="_hgnz4KHoEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_hg6u1KHoEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hg6u1aHoEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hg6u1qHoEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hg6u16HoEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_hg6u0aHoEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_hg6u0qHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/EStructuralFeatureAxis/element"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hg6u06HoEeKNUa7kbzEWsw" points="[-42, -20, 934, 461]$[-975, -481, 1, 0]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_kBJ28KHoEeKNUa7kbzEWsw" type="3002" source="_e_WxAKHoEeKNUa7kbzEWsw" target="_kA2U8KHoEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_kBJ29KHoEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_kBJ29aHoEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_kBJ29qHoEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_kBJ296HoEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_kBJ28aHoEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_kBJ28qHoEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/EObjectAxis/element"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kBJ286HoEeKNUa7kbzEWsw" points="[-21, -20, 460, 461]$[-480, -480, 1, 1]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_AtBlgKHpEeKNUa7kbzEWsw" type="3003" source="_e_NAJKHoEeKNUa7kbzEWsw" target="_e_NAPKHoEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_AtBlgaHpEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_AtBlgqHpEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AtBlg6HpEeKNUa7kbzEWsw" points="[39, -12, 85, 76]$[39, -97, 85, -9]$[-40, -97, 6, -9]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AtBlhKHpEeKNUa7kbzEWsw" id="(0.11764705882352941,0.3023255813953488)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Td64sKHpEeKNUa7kbzEWsw" id="(0.9836956521739131,0.8235294117647058)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_g0w-AqHpEeKNUa7kbzEWsw" type="3002" source="_e_NAJKHoEeKNUa7kbzEWsw" target="_g0n0EKHpEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_g0w-BqHpEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_g0w-B6HpEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_g0w-CKHpEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_g0w-CaHpEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_g0w-A6HpEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_g0w-BKHpEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/FeatureAxis/localLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_g0w-BaHpEeKNUa7kbzEWsw" points="[-50, -21, 851, 350]$[-900, -371, 1, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jnSwAKHpEeKNUa7kbzEWsw" id="(0.9117647058823529,0.11627906976744186)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_hPP6kKHpEeKNUa7kbzEWsw" type="3002" source="_e_NAGKHoEeKNUa7kbzEWsw" target="_hPGwoKHpEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_hPP6lKHpEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hPP6laHpEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_hPP6lqHpEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hPP6l6HpEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_hPP6kaHpEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_hPP6kqHpEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxis/ObjectAxis/localLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hPP6k6HpEeKNUa7kbzEWsw" points="[-50, 0, 317, 344]$[-367, 0, 0, 344]$[-367, -302, 0, 42]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_hPP6mKHpEeKNUa7kbzEWsw" type="3003" source="_g0n0EKHpEeKNUa7kbzEWsw" target="_hPGwoKHpEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_hPP6maHpEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_hPP6mqHpEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hPP6m6HpEeKNUa7kbzEWsw" points="[-111, -39, 1091, 387]$[-1201, -426, 1, 0]"/>
+  </edges>
+</notation:Diagram>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxisprovider.ecorediag b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxisprovider.ecorediag
new file mode 100644
index 0000000..1fc01ed
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableaxisprovider.ecorediag
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_UypeIJewEeKr0Yypv4rfLA" type="EcoreTools" name="nattable.ecorediag" measurementUnit="Pixel">
+  <children xmi:type="notation:Node" xmi:id="_0KgVkKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0KgVk6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KgVlKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVlaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVlqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVl6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KgVmKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVmaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVmqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVm6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KgVkaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/ISynchronizedAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KgVkqHnEeKNUa7kbzEWsw" x="345" y="335"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KgVnKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0KgVn6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KgVoKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVoaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVoqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVo6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KgVpKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVpaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVpqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVp6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KgVnaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/EStructuralFeatureValueAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KgVnqHnEeKNUa7kbzEWsw" x="320" y="585" width="373"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KgVqKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0KgVq6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KgVrKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVraHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVrqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVr6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KgVsKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVsaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVsqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVs6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KgVqaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/SlaveObjectAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KgVqqHnEeKNUa7kbzEWsw" x="135" y="440"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KgVwKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0KgVw6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KgVxKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVxaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVxqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVx6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KgVyKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgVyaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgVyqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgVy6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KgVwaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/MasterEObjectAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KgVwqHnEeKNUa7kbzEWsw" x="535" y="475"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KgVzKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0KgVz6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KgV0KHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KgV0aHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KgV0qHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0KgV06HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KpfgKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfgaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfgqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfg6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KgVzaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/AbstractAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KgVzqHnEeKNUa7kbzEWsw" x="465" y="120"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KpfhKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0Kpfh6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KpfiKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfiaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfiqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfi6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KpfjKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfjaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfjqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfj6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KpfhaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/AxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KpfhqHnEeKNUa7kbzEWsw" x="480" y="230"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KpfkKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0Kpfk6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KpflKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpflaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpflqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfl6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KpfmKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfmaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfmqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfm6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KpfkaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/ISlaveAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KpfkqHnEeKNUa7kbzEWsw" x="160" y="335"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_0KpfnKHnEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_0Kpfn6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_0KpfoKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfoaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfoqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfo6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_0KpfpKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_0KpfpaHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_0KpfpqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_0Kpfp6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_0KpfnaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/IMasterAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0KpfnqHnEeKNUa7kbzEWsw" x="570" y="335"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_9Ll7kKHnEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_9L5dkqHnEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_9L5dk6HnEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_9Ll7k6HnEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_9Ll7lKHnEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_9Ll7laHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_9Ll7lqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_9Ll7l6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_9Ll7mKHnEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_9Ll7maHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_9Ll7mqHnEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_9Ll7m6HnEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_9Ll7kaHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9Ll7kqHnEeKNUa7kbzEWsw" x="965" y="495" height="210"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_lHzcUKHwEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lIGXSKHwEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_lIGXSaHwEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_lH9NUKHwEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_lH9NUaHwEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_lH9NUqHwEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_lH9NU6HwEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_lH9NVKHwEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_lH9NVaHwEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_lH9NVqHwEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_lH9NV6HwEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_lH9NWKHwEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_lHzcUaHwEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxis/IAxis"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lHzcUqHwEeKNUa7kbzEWsw" x="40" y="100"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_atztMKHxEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_atztM6HxEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_atztNKHxEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_atztNaHxEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_atztNqHxEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_atztN6HxEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_atztOKHxEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_atztOaHxEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_atztOqHxEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_atztO6HxEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_atztMaHxEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisprovider/MasterObjectAxisProvider"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_atztMqHxEeKNUa7kbzEWsw" x="565" y="410"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_UypeIZewEeKr0Yypv4rfLA"/>
+  <element xmi:type="ecore:EPackage" href="nattable.ecore#//nattableaxisprovider"/>
+  <edges xmi:type="notation:Edge" xmi:id="_0K9BgKHnEeKNUa7kbzEWsw" type="3003" source="_0KgVkKHnEeKNUa7kbzEWsw" target="_0KpfhKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0K9BgaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0K9BgqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0K9Bg6HnEeKNUa7kbzEWsw" points="[0, 0, -91, 60]$[0, -30, -91, 30]$[91, -30, 0, 30]$[91, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3ZKHnEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3ZaHnEeKNUa7kbzEWsw" id="(0.39215686274509803,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0K9BhKHnEeKNUa7kbzEWsw" type="3003" source="_0KgVnKHnEeKNUa7kbzEWsw" target="_0KgVkKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0K9BhaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0K9BhqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0K9Bh6HnEeKNUa7kbzEWsw" points="[0, 0, 0, 171]$[0, -171, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0LsoYKHnEeKNUa7kbzEWsw" id="(0.289544235924933,0.13953488372093023)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0LsoYaHnEeKNUa7kbzEWsw" id="(0.5,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0K9BiKHnEeKNUa7kbzEWsw" type="3003" source="_0KgVnKHnEeKNUa7kbzEWsw" target="_0KgVwKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0K9BiaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0K9BiqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0K9Bi6HnEeKNUa7kbzEWsw" points="[10, -2, 77, 64]$[10, -63, 77, 3]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3cKHnEeKNUa7kbzEWsw" id="(0.8900804289544236,0.06976744186046512)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3caHnEeKNUa7kbzEWsw" id="(0.2737430167597765,0.9411764705882353)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0K9BjKHnEeKNUa7kbzEWsw" type="3003" source="_0KgVqKHnEeKNUa7kbzEWsw" target="_0KpfkKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0K9BjaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0K9BjqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0K9Bj6HnEeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3YqHnEeKNUa7kbzEWsw" id="(0.49760765550239233,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3Y6HnEeKNUa7kbzEWsw" id="(0.4959349593495935,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0LGLeKHnEeKNUa7kbzEWsw" type="3003" source="_0KgVwKHnEeKNUa7kbzEWsw" target="_atztMKHxEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0LGLeaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0LGLeqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0LGLe6HnEeKNUa7kbzEWsw" points="[-32, 0, 68, 59]$[-32, -24, 68, 35]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3bKHnEeKNUa7kbzEWsw" id="(0.7486033519553073,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3baHnEeKNUa7kbzEWsw" id="(0.01744186046511628,0.16279069767441862)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0LGLfKHnEeKNUa7kbzEWsw" type="3003" source="_0KpfhKHnEeKNUa7kbzEWsw" target="_0KgVzKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0LGLfaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0LGLfqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0LGLf6HnEeKNUa7kbzEWsw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3ZqHnEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3Z6HnEeKNUa7kbzEWsw" id="(0.49635036496350365,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0LGLgKHnEeKNUa7kbzEWsw" type="3003" source="_0KpfnKHnEeKNUa7kbzEWsw" target="_0KpfhKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0LGLgaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0LGLgqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0LGLg6HnEeKNUa7kbzEWsw" points="[0, 0, 61, 70]$[0, -84, 61, -14]$[-56, -84, 5, -14]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3YKHnEeKNUa7kbzEWsw" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3YaHnEeKNUa7kbzEWsw" id="(0.9509803921568627,0.8604651162790697)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_0LGLhKHnEeKNUa7kbzEWsw" type="3003" source="_0KpfkKHnEeKNUa7kbzEWsw" target="_0KpfhKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_0LGLhaHnEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_0LGLhqHnEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0LGLh6HnEeKNUa7kbzEWsw" points="[0, 0, -278, 60]$[0, -30, -278, 30]$[278, -30, 0, 30]$[278, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3aKHnEeKNUa7kbzEWsw" id="(0.4959349593495935,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0Li3aaHnEeKNUa7kbzEWsw" id="(0.19607843137254902,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_9LvslqHnEeKNUa7kbzEWsw" type="3002" source="_0KgVnKHnEeKNUa7kbzEWsw" target="_9Ll7kKHnEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_9LvsmqHnEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9Lvsm6HnEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_9LvsnKHnEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9LvsnaHnEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_9Lvsl6HnEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_9LvsmKHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisprovider/EStructuralFeatureValueAxisProvider/listenFeature"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9LvsmaHnEeKNUa7kbzEWsw" points="[-15, -20, 416, 551]$[-430, -570, 1, 1]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_9LvsnqHnEeKNUa7kbzEWsw" type="3002" source="_0KgVwKHnEeKNUa7kbzEWsw" target="_9Ll7kKHnEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_9LvsoqHnEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9Lvso6HnEeKNUa7kbzEWsw" x="-86" y="-20"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_9L5dkKHnEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9L5dkaHnEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_9Lvsn6HnEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_9LvsoKHnEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisprovider/MasterEObjectAxisProvider/pastedElementContainmentFeature"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9LvsoaHnEeKNUa7kbzEWsw" points="[89, 21, -360, -86]$[342, 81, -107, -26]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lpCrsKHxEeKNUa7kbzEWsw" id="(0.9832402234636871,0.8627450980392157)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lRZAsKHxEeKNUa7kbzEWsw" id="(0.055299539170506916,0.08717948717948718)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_lIGXQKHwEeKNUa7kbzEWsw" type="3002" source="_0KpfhKHnEeKNUa7kbzEWsw" target="_lHzcUKHwEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_lIGXRKHwEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_lIGXRaHwEeKNUa7kbzEWsw" x="9" y="-47"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_lIGXRqHwEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_lIGXR6HwEeKNUa7kbzEWsw" x="9" y="31"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_lIGXQaHwEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_lIGXQqHwEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisprovider/AxisProvider/axis"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lIGXQ6HwEeKNUa7kbzEWsw" points="[-50, 0, 257, 109]$[-307, 0, 0, 109]$[-307, -67, 0, 42]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_dhhyAKHxEeKNUa7kbzEWsw" type="3003" source="_atztMKHxEeKNUa7kbzEWsw" target="_0KpfnKHnEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_dhhyAaHxEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_dhhyAqHxEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dhhyA6HxEeKNUa7kbzEWsw" points="[-19, -20, 36, 40]$[-53, -75, 2, -15]"/>
+  </edges>
+</notation:Diagram>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableonfiguration.ecorediag b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableonfiguration.ecorediag
new file mode 100644
index 0000000..48a147a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/model/nattableonfiguration.ecorediag
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_UypeIJewEeKr0Yypv4rfLA" type="EcoreTools" name="nattableaxisconfiguration" measurementUnit="Pixel">
+  <children xmi:type="notation:Node" xmi:id="_3EuuMKHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4fMKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fMaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fMqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fM6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fNKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4fNaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fNqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fN6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fOKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3EuuMaHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3EuuMqHrEeKNUa7kbzEWsw" x="565" y="225" height="68"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4fOaHrEeKNUa7kbzEWsw" type="1005">
+    <children xmi:type="notation:Node" xmi:id="_3E4fPKHrEeKNUa7kbzEWsw" type="4010"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fPaHrEeKNUa7kbzEWsw" type="5008">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fPqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fP6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fQKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4fOqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EEnum" href="nattable.ecore#//nattableaxisconfiguration/AxisIndexStyle"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4fO6HrEeKNUa7kbzEWsw" x="20" y="20"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4fQaHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4fRKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fRaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fRqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fR6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fSKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4fSaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fSqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fS6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fTKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4fQqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4fQ6HrEeKNUa7kbzEWsw" x="1050" y="345"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4fWaHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4fXKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fXaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fXqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fX6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fYKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4fYaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fYqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fY6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fZKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4fWqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/FeatureAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4fW6HrEeKNUa7kbzEWsw" x="95" y="550" width="198" height="78"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4fZaHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4faKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4faaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4faqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fa6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fbKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4fbaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fbqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fb6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fcKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4fZqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4fZ6HrEeKNUa7kbzEWsw" x="855" y="235"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4fcaHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4fdKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fdaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fdqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fd6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4feKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4feaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4feqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fe6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4ffKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4fcqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/IAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4fc6HrEeKNUa7kbzEWsw" x="115" y="395"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3E4ffaHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3E4fgKHrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3E4fgaHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fgqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fg6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fhKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3E4fhaHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3E4fhqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3E4fh6HrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3E4fiKHrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3E4ffqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/AxisManager"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3E4ff6HrEeKNUa7kbzEWsw" x="575" y="105"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_3FCQMKHrEeKNUa7kbzEWsw" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_3FCQM6HrEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_3FCQNKHrEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3FCQNaHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3FCQNqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3FCQN6HrEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FCQOKHrEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_3FCQOaHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3FCQOqHrEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3FCQO6HrEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_3FCQMaHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattableaxisconfiguration/TableHeaderAxisConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3FCQMqHrEeKNUa7kbzEWsw" x="865" y="125" width="283"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_VWNvsKHsEeKNUa7kbzEWsw" type="1001">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VWgqoKHsEeKNUa7kbzEWsw" source="Shortcut">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VWgqoaHsEeKNUa7kbzEWsw" key="modelID" value="EcoreTools"/>
+    </eAnnotations>
+    <children xmi:type="notation:Node" xmi:id="_VWNvs6HsEeKNUa7kbzEWsw" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_VWNvtKHsEeKNUa7kbzEWsw" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_VWNvtaHsEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_VWNvtqHsEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_VWNvt6HsEeKNUa7kbzEWsw"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_VWNvuKHsEeKNUa7kbzEWsw" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_VWNvuaHsEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_VWNvuqHsEeKNUa7kbzEWsw"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_VWNvu6HsEeKNUa7kbzEWsw"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_VWNvsaHsEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="nattable.ecore#//nattablelabelprovider/AbstractLabelConfiguration"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VWNvsqHsEeKNUa7kbzEWsw" x="260" y="265" width="208" height="103"/>
+  </children>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_UypeIZewEeKr0Yypv4rfLA"/>
+  <element xmi:type="ecore:EPackage" href="nattable.ecore#//nattableaxisconfiguration"/>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLIKHrEeKNUa7kbzEWsw" type="3002" source="_3EuuMKHrEeKNUa7kbzEWsw" target="_3E4ffaHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FVLJKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLJaHrEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FVLJqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLJ6HrEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLIaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLIqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/axisManager"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLI6HrEeKNUa7kbzEWsw" points="[0, 0, 0, 111]$[0, -111, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BBKHrEeKNUa7kbzEWsw" id="(0.4971751412429379,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BBaHrEeKNUa7kbzEWsw" id="(0.49645390070921985,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLKKHrEeKNUa7kbzEWsw" type="3002" source="_3EuuMKHrEeKNUa7kbzEWsw" target="_3E4fcaHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FVLLKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLLaHrEeKNUa7kbzEWsw" x="-19" y="32"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FVLLqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLL6HrEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLKaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLKqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/localSpecificConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLK6HrEeKNUa7kbzEWsw" points="[0, 21, 426, -149]$[0, 170, 426, 0]$[-412, 170, 14, 0]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BEaHrEeKNUa7kbzEWsw" id="(0.889763779527559,0.5116279069767442)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLMKHrEeKNUa7kbzEWsw" type="3002" source="_3E4fZaHrEeKNUa7kbzEWsw" target="_3EuuMKHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FVLNKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLNaHrEeKNUa7kbzEWsw" x="-98" y="39"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FVLNqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLN6HrEeKNUa7kbzEWsw" x="-2" y="14"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLMaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLMqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/LocalTableHeaderAxisConfiguration/axisManagerConfigurations"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLM6HrEeKNUa7kbzEWsw" points="[0, 0, -420, 60]$[420, -60, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BDKHrEeKNUa7kbzEWsw" id="(0.7467248908296943,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BDaHrEeKNUa7kbzEWsw" id="(0.903954802259887,0.45588235294117646)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLOKHrEeKNUa7kbzEWsw" type="3002" source="_3E4fQaHrEeKNUa7kbzEWsw" target="_3E4fcaHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FVLPKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLPaHrEeKNUa7kbzEWsw" x="-4" y="-52"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FVLPqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FVLP6HrEeKNUa7kbzEWsw" x="3" y="-27"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLOaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLOqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/ownedAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLO6HrEeKNUa7kbzEWsw" points="[0, 9, 915, -4]$[-650, 9, 265, -4]$[-810, 9, 105, -4]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BBqHrEeKNUa7kbzEWsw" id="(0.0,0.7843137254901961)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BB6HrEeKNUa7kbzEWsw" id="(0.16535433070866143,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLQKHrEeKNUa7kbzEWsw" type="3003" source="_3FCQMKHrEeKNUa7kbzEWsw" target="_3E4fQaHrEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLQaHrEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLQqHrEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLQ6HrEeKNUa7kbzEWsw" points="[6, 5, -109, -279]$[6, 184, -109, -100]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BCqHrEeKNUa7kbzEWsw" id="(0.7985865724381626,0.8837209302325582)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BC6HrEeKNUa7kbzEWsw" id="(0.75,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FVLRKHrEeKNUa7kbzEWsw" type="3003" source="_3E4fZaHrEeKNUa7kbzEWsw" target="_3E4fQaHrEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FVLRaHrEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FVLRqHrEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FVLR6HrEeKNUa7kbzEWsw" points="[0, 0, 0, 163]$[0, -163, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BDqHrEeKNUa7kbzEWsw" id="(0.4978165938864629,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BD6HrEeKNUa7kbzEWsw" id="(0.038461538461538464,0.6372549019607843)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FeVEKHrEeKNUa7kbzEWsw" type="3003" source="_3E4fWaHrEeKNUa7kbzEWsw" target="_3E4fcaHrEeKNUa7kbzEWsw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FeVEaHrEeKNUa7kbzEWsw" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FeVEqHrEeKNUa7kbzEWsw" fontName="Segoe UI"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FeVE6HrEeKNUa7kbzEWsw" points="[-10, -38, 6, 122]$[-10, -152, 6, 8]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BAaHrEeKNUa7kbzEWsw" id="(0.49606299212598426,0.813953488372093)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FeVFKHrEeKNUa7kbzEWsw" type="3002" source="_3E4ffaHrEeKNUa7kbzEWsw" target="_3E4fcaHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FeVGKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FeVGaHrEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FeVGqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FeVG6HrEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FeVFaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FeVFqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AxisManager/specificAxisConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FeVF6HrEeKNUa7kbzEWsw" points="[-69, 0, 398, -331]$[-467, 0, 0, -331]$[-467, 290, 0, -41]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BAqHrEeKNUa7kbzEWsw" id="(0.49645390070921985,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BA6HrEeKNUa7kbzEWsw" id="(0.49606299212598426,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_3FeVHKHrEeKNUa7kbzEWsw" type="3002" source="_3FCQMKHrEeKNUa7kbzEWsw" target="_3E4ffaHrEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_3FeVIKHrEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FeVIaHrEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_3FeVIqHrEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3FeVI6HrEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3FeVHaHrEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_3FeVHqHrEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/TableHeaderAxisConfiguration/axisManagers"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3FeVH6HrEeKNUa7kbzEWsw" points="[0, 0, -180, 111]$[129, -61, -51, 50]$[180, -111, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BCKHrEeKNUa7kbzEWsw" id="(0.6633165829145728,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3F7BCaHrEeKNUa7kbzEWsw" id="(0.9290780141843972,0.6666666666666666)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_VWXgsKHsEeKNUa7kbzEWsw" type="3002" source="_3E4fQaHrEeKNUa7kbzEWsw" target="_VWNvsKHsEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_VWXgtKHsEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgtaHsEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_VWXgtqHsEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgt6HsEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_VWXgsaHsEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_VWXgsqHsEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AbstractHeaderAxisConfiguration/ownedLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VWXgs6HsEeKNUa7kbzEWsw" points="[-103, -44, 856, 362]$[-958, -406, 1, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ivJfsKHsEeKNUa7kbzEWsw" id="(0.04807692307692308,0.14705882352941177)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jcYZIKHsEeKNUa7kbzEWsw" id="(0.9615384615384616,0.8640776699029126)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_VWXguKHsEeKNUa7kbzEWsw" type="3002" source="_3E4ffaHrEeKNUa7kbzEWsw" target="_VWNvsKHsEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_VWXgvKHsEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgvaHsEeKNUa7kbzEWsw" x="-10" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_VWXgvqHsEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgv6HsEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_VWXguaHsEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_VWXguqHsEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AxisManager/headerLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VWXgu6HsEeKNUa7kbzEWsw" points="[-69, 0, 212, -186]$[-281, 0, 0, -186]$[-281, 136, 0, -50]"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_VWXgwKHsEeKNUa7kbzEWsw" type="3002" source="_3EuuMKHrEeKNUa7kbzEWsw" target="_VWNvsKHsEeKNUa7kbzEWsw">
+    <children xmi:type="notation:Node" xmi:id="_VWXgxKHsEeKNUa7kbzEWsw" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgxaHsEeKNUa7kbzEWsw" x="-116" y="-41"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_VWXgxqHsEeKNUa7kbzEWsw" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VWXgx6HsEeKNUa7kbzEWsw" x="10" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_VWXgwaHsEeKNUa7kbzEWsw" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_VWXgwqHsEeKNUa7kbzEWsw" fontColor="4210752" fontName="Segoe UI" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="nattable.ecore#//nattableaxisconfiguration/AxisManagerConfiguration/localHeaderLabelConfiguration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VWXgw6HsEeKNUa7kbzEWsw" points="[-37, -20, 421, 236]$[-457, -256, 1, 0]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lvqqYKHsEeKNUa7kbzEWsw" id="(0.9423076923076923,0.0970873786407767)"/>
+  </edges>
+</notation:Diagram>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.properties b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.properties
new file mode 100644
index 0000000..5c5fdbe
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2020 CEA LIST.
+# 
+# 
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+# 
+# Contributors:
+# 	Eike Stepper - Initial API and implementation
+
+pluginName = Papyrus Nattable Model (CDO Version)
+providerName = Eclipse Modeling Project
+
+pluginDescription=This plugin provides the metamodel used by the nattable editor.
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.xml b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.xml
new file mode 100644
index 0000000..7121b3b
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/plugin.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2020 CEA LIST.
+ 
+ 
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ https://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+ 
+ Contributors:
+ 	Eike Stepper - Initial API and implementation
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.NattableFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.impl.NattableFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.NattableconfigurationFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.impl.NattableconfigurationFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl.NattableaxisproviderFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.impl.NattableaxisproviderFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattablecontentprovider"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.NattablelabelproviderFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.impl.NattablelabelproviderFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.NattableaxisconfigurationFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.impl.NattableaxisconfigurationFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattabletester"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl.NattabletesterFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.impl.NattabletesterFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.NattableaxisFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.impl.NattableaxisFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattablecell"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.NattablecellFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.impl.NattablecellFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattableproblem"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl.NattableproblemFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.impl.NattableproblemFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattablestyle"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.NattablestyleFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.impl.NattablestyleFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattablecelleditor"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.NattablecelleditorFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.impl.NattablecelleditorFactoryImpl"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            uri="http://www.eclipse.org/papyrus/nattable/model/table/nattablewrapper"
+            class="org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl.NattablewrapperFactoryImpl"
+            predecessor="org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.impl.NattablewrapperFactoryImpl"/>
+   </extension>
+
+</plugin>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/pom.xml b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/pom.xml
new file mode 100644
index 0000000..de4f6ef
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>org.eclipse.papyrus.cdo-bundles</artifactId>
+		<groupId>org.eclipse.papyrus.cdo</groupId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.papyrus.infra.nattable.model.cdo</artifactId>
+	<version>4.2.0-SNAPSHOT</version>
+	<packaging>eclipse-plugin</packaging>
+</project>
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/Activator.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/Activator.java
new file mode 100644
index 0000000..bef03be
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/Activator.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2013, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Christian W. Damus - bug 485220
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.nattable.model.cdo;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.nattable.model.cdo"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	@Override
+	public void start(final BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	@Override
+	public void stop(final BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+}
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/NattableFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/NattableFactoryImpl.java
new file mode 100644
index 0000000..52d3298
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/NattableFactoryImpl.java
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.NattableFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.NattablePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.Table;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class NattableFactoryImpl extends EFactoryImpl implements NattableFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public static NattableFactory init() {
+		try {
+			NattableFactory theNattableFactory = (NattableFactory) EPackage.Registry.INSTANCE.getEFactory(NattablePackage.eNS_URI);
+			if (theNattableFactory != null) {
+				return theNattableFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public NattableFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case NattablePackage.TABLE:
+			return createTable();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Table createTable() {
+		TableImpl table = new TableImpl();
+		return table;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public NattablePackage getNattablePackage() {
+		return (NattablePackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablePackage getPackage() {
+		return NattablePackage.eINSTANCE;
+	}
+} // NattableFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/TableImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/TableImpl.java
new file mode 100644
index 0000000..d1a38f7
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/impl/TableImpl.java
@@ -0,0 +1,714 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableNamedElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.NattablePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.Table;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.LocalTableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AbstractAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.Cell;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.ICellEditorConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getContext <em>Context</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getOwner <em>Owner</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getPrototype <em>Prototype</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getTableConfiguration <em>Table Configuration</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#isInvertAxis <em>Invert Axis</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getColumnAxisProvidersHistory <em>Column Axis Providers History</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getRowAxisProvidersHistory <em>Row Axis Providers History</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getLocalRowHeaderAxisConfiguration <em>Local Row Header Axis Configuration</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getLocalColumnHeaderAxisConfiguration <em>Local Column Header Axis Configuration</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getCurrentRowAxisProvider <em>Current Row Axis Provider</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getCurrentColumnAxisProvider <em>Current Column Axis Provider</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getCells <em>Cells</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getOwnedCellEditorConfigurations <em>Owned Cell Editor Configurations</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.impl.TableImpl#getTableKindId <em>Table Kind Id</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TableImpl extends TableNamedElementImpl implements Table {
+
+	/**
+	 * The default value of the '{@link #isInvertAxis() <em>Invert Axis</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isInvertAxis()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean INVERT_AXIS_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #getTableKindId() <em>Table Kind Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getTableKindId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TABLE_KIND_ID_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablePackage.Literals.TABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject getContext() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__CONTEXT - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CONTEXT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EObject basicGetContext() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__CONTEXT - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CONTEXT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setContext(EObject newContext) {
+		eDynamicSet(NattablePackage.TABLE__CONTEXT - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CONTEXT, newContext);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject getOwner() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__OWNER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__OWNER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EObject basicGetOwner() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__OWNER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__OWNER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setOwner(EObject newOwner) {
+		eDynamicSet(NattablePackage.TABLE__OWNER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__OWNER, newOwner);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject getPrototype() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__PROTOTYPE - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__PROTOTYPE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EObject basicGetPrototype() {
+		return (EObject) eDynamicGet(NattablePackage.TABLE__PROTOTYPE - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__PROTOTYPE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setPrototype(EObject newPrototype) {
+		eDynamicSet(NattablePackage.TABLE__PROTOTYPE - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__PROTOTYPE, newPrototype);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public TableConfiguration getTableConfiguration() {
+		return (TableConfiguration) eDynamicGet(NattablePackage.TABLE__TABLE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__TABLE_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TableConfiguration basicGetTableConfiguration() {
+		return (TableConfiguration) eDynamicGet(NattablePackage.TABLE__TABLE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__TABLE_CONFIGURATION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setTableConfiguration(TableConfiguration newTableConfiguration) {
+		eDynamicSet(NattablePackage.TABLE__TABLE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__TABLE_CONFIGURATION, newTableConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isInvertAxis() {
+		return (Boolean) eDynamicGet(NattablePackage.TABLE__INVERT_AXIS - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__INVERT_AXIS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setInvertAxis(boolean newInvertAxis) {
+		eDynamicSet(NattablePackage.TABLE__INVERT_AXIS - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__INVERT_AXIS, newInvertAxis);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AbstractAxisProvider> getColumnAxisProvidersHistory() {
+		return (EList<AbstractAxisProvider>) eDynamicGet(NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AbstractAxisProvider> getRowAxisProvidersHistory() {
+		return (EList<AbstractAxisProvider>) eDynamicGet(NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__ROW_AXIS_PROVIDERS_HISTORY, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public LocalTableHeaderAxisConfiguration getLocalRowHeaderAxisConfiguration() {
+		return (LocalTableHeaderAxisConfiguration) eDynamicGet(NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalRowHeaderAxisConfiguration(LocalTableHeaderAxisConfiguration newLocalRowHeaderAxisConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newLocalRowHeaderAxisConfiguration, NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setLocalRowHeaderAxisConfiguration(LocalTableHeaderAxisConfiguration newLocalRowHeaderAxisConfiguration) {
+		eDynamicSet(NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION, newLocalRowHeaderAxisConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public LocalTableHeaderAxisConfiguration getLocalColumnHeaderAxisConfiguration() {
+		return (LocalTableHeaderAxisConfiguration) eDynamicGet(NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalColumnHeaderAxisConfiguration(LocalTableHeaderAxisConfiguration newLocalColumnHeaderAxisConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newLocalColumnHeaderAxisConfiguration, NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setLocalColumnHeaderAxisConfiguration(LocalTableHeaderAxisConfiguration newLocalColumnHeaderAxisConfiguration) {
+		eDynamicSet(NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION, newLocalColumnHeaderAxisConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public AbstractAxisProvider getCurrentRowAxisProvider() {
+		return (AbstractAxisProvider) eDynamicGet(NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_ROW_AXIS_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public AbstractAxisProvider basicGetCurrentRowAxisProvider() {
+		return (AbstractAxisProvider) eDynamicGet(NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_ROW_AXIS_PROVIDER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setCurrentRowAxisProvider(AbstractAxisProvider newCurrentRowAxisProvider) {
+		eDynamicSet(NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_ROW_AXIS_PROVIDER, newCurrentRowAxisProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public AbstractAxisProvider getCurrentColumnAxisProvider() {
+		return (AbstractAxisProvider) eDynamicGet(NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_COLUMN_AXIS_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public AbstractAxisProvider basicGetCurrentColumnAxisProvider() {
+		return (AbstractAxisProvider) eDynamicGet(NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_COLUMN_AXIS_PROVIDER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setCurrentColumnAxisProvider(AbstractAxisProvider newCurrentColumnAxisProvider) {
+		eDynamicSet(NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CURRENT_COLUMN_AXIS_PROVIDER, newCurrentColumnAxisProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Cell> getCells() {
+		return (EList<Cell>) eDynamicGet(NattablePackage.TABLE__CELLS - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__CELLS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ICellEditorConfiguration getOwnedCellEditorConfigurations() {
+		return (ICellEditorConfiguration) eDynamicGet(NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NotificationChain basicSetOwnedCellEditorConfigurations(ICellEditorConfiguration newOwnedCellEditorConfigurations, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newOwnedCellEditorConfigurations, NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setOwnedCellEditorConfigurations(ICellEditorConfiguration newOwnedCellEditorConfigurations) {
+		eDynamicSet(NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS, newOwnedCellEditorConfigurations);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getTableKindId() {
+		return (String) eDynamicGet(NattablePackage.TABLE__TABLE_KIND_ID - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__TABLE_KIND_ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setTableKindId(String newTableKindId) {
+		eDynamicSet(NattablePackage.TABLE__TABLE_KIND_ID - ESTATIC_FEATURE_COUNT, NattablePackage.Literals.TABLE__TABLE_KIND_ID, newTableKindId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY:
+			return ((InternalEList<?>) getColumnAxisProvidersHistory()).basicRemove(otherEnd, msgs);
+		case NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY:
+			return ((InternalEList<?>) getRowAxisProvidersHistory()).basicRemove(otherEnd, msgs);
+		case NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION:
+			return basicSetLocalRowHeaderAxisConfiguration(null, msgs);
+		case NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION:
+			return basicSetLocalColumnHeaderAxisConfiguration(null, msgs);
+		case NattablePackage.TABLE__CELLS:
+			return ((InternalEList<?>) getCells()).basicRemove(otherEnd, msgs);
+		case NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS:
+			return basicSetOwnedCellEditorConfigurations(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablePackage.TABLE__CONTEXT:
+			if (resolve) {
+				return getContext();
+			}
+			return basicGetContext();
+		case NattablePackage.TABLE__OWNER:
+			if (resolve) {
+				return getOwner();
+			}
+			return basicGetOwner();
+		case NattablePackage.TABLE__PROTOTYPE:
+			if (resolve) {
+				return getPrototype();
+			}
+			return basicGetPrototype();
+		case NattablePackage.TABLE__TABLE_CONFIGURATION:
+			if (resolve) {
+				return getTableConfiguration();
+			}
+			return basicGetTableConfiguration();
+		case NattablePackage.TABLE__INVERT_AXIS:
+			return isInvertAxis();
+		case NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY:
+			return getColumnAxisProvidersHistory();
+		case NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY:
+			return getRowAxisProvidersHistory();
+		case NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION:
+			return getLocalRowHeaderAxisConfiguration();
+		case NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION:
+			return getLocalColumnHeaderAxisConfiguration();
+		case NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER:
+			if (resolve) {
+				return getCurrentRowAxisProvider();
+			}
+			return basicGetCurrentRowAxisProvider();
+		case NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER:
+			if (resolve) {
+				return getCurrentColumnAxisProvider();
+			}
+			return basicGetCurrentColumnAxisProvider();
+		case NattablePackage.TABLE__CELLS:
+			return getCells();
+		case NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS:
+			return getOwnedCellEditorConfigurations();
+		case NattablePackage.TABLE__TABLE_KIND_ID:
+			return getTableKindId();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablePackage.TABLE__CONTEXT:
+			setContext((EObject) newValue);
+			return;
+		case NattablePackage.TABLE__OWNER:
+			setOwner((EObject) newValue);
+			return;
+		case NattablePackage.TABLE__PROTOTYPE:
+			setPrototype((EObject) newValue);
+			return;
+		case NattablePackage.TABLE__TABLE_CONFIGURATION:
+			setTableConfiguration((TableConfiguration) newValue);
+			return;
+		case NattablePackage.TABLE__INVERT_AXIS:
+			setInvertAxis((Boolean) newValue);
+			return;
+		case NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY:
+			getColumnAxisProvidersHistory().clear();
+			getColumnAxisProvidersHistory().addAll((Collection<? extends AbstractAxisProvider>) newValue);
+			return;
+		case NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY:
+			getRowAxisProvidersHistory().clear();
+			getRowAxisProvidersHistory().addAll((Collection<? extends AbstractAxisProvider>) newValue);
+			return;
+		case NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION:
+			setLocalRowHeaderAxisConfiguration((LocalTableHeaderAxisConfiguration) newValue);
+			return;
+		case NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION:
+			setLocalColumnHeaderAxisConfiguration((LocalTableHeaderAxisConfiguration) newValue);
+			return;
+		case NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER:
+			setCurrentRowAxisProvider((AbstractAxisProvider) newValue);
+			return;
+		case NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER:
+			setCurrentColumnAxisProvider((AbstractAxisProvider) newValue);
+			return;
+		case NattablePackage.TABLE__CELLS:
+			getCells().clear();
+			getCells().addAll((Collection<? extends Cell>) newValue);
+			return;
+		case NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS:
+			setOwnedCellEditorConfigurations((ICellEditorConfiguration) newValue);
+			return;
+		case NattablePackage.TABLE__TABLE_KIND_ID:
+			setTableKindId((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablePackage.TABLE__CONTEXT:
+			setContext((EObject) null);
+			return;
+		case NattablePackage.TABLE__OWNER:
+			setOwner((EObject) null);
+			return;
+		case NattablePackage.TABLE__PROTOTYPE:
+			setPrototype((EObject) null);
+			return;
+		case NattablePackage.TABLE__TABLE_CONFIGURATION:
+			setTableConfiguration((TableConfiguration) null);
+			return;
+		case NattablePackage.TABLE__INVERT_AXIS:
+			setInvertAxis(INVERT_AXIS_EDEFAULT);
+			return;
+		case NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY:
+			getColumnAxisProvidersHistory().clear();
+			return;
+		case NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY:
+			getRowAxisProvidersHistory().clear();
+			return;
+		case NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION:
+			setLocalRowHeaderAxisConfiguration((LocalTableHeaderAxisConfiguration) null);
+			return;
+		case NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION:
+			setLocalColumnHeaderAxisConfiguration((LocalTableHeaderAxisConfiguration) null);
+			return;
+		case NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER:
+			setCurrentRowAxisProvider((AbstractAxisProvider) null);
+			return;
+		case NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER:
+			setCurrentColumnAxisProvider((AbstractAxisProvider) null);
+			return;
+		case NattablePackage.TABLE__CELLS:
+			getCells().clear();
+			return;
+		case NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS:
+			setOwnedCellEditorConfigurations((ICellEditorConfiguration) null);
+			return;
+		case NattablePackage.TABLE__TABLE_KIND_ID:
+			setTableKindId(TABLE_KIND_ID_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablePackage.TABLE__CONTEXT:
+			return basicGetContext() != null;
+		case NattablePackage.TABLE__OWNER:
+			return basicGetOwner() != null;
+		case NattablePackage.TABLE__PROTOTYPE:
+			return basicGetPrototype() != null;
+		case NattablePackage.TABLE__TABLE_CONFIGURATION:
+			return basicGetTableConfiguration() != null;
+		case NattablePackage.TABLE__INVERT_AXIS:
+			return isInvertAxis() != INVERT_AXIS_EDEFAULT;
+		case NattablePackage.TABLE__COLUMN_AXIS_PROVIDERS_HISTORY:
+			return !getColumnAxisProvidersHistory().isEmpty();
+		case NattablePackage.TABLE__ROW_AXIS_PROVIDERS_HISTORY:
+			return !getRowAxisProvidersHistory().isEmpty();
+		case NattablePackage.TABLE__LOCAL_ROW_HEADER_AXIS_CONFIGURATION:
+			return getLocalRowHeaderAxisConfiguration() != null;
+		case NattablePackage.TABLE__LOCAL_COLUMN_HEADER_AXIS_CONFIGURATION:
+			return getLocalColumnHeaderAxisConfiguration() != null;
+		case NattablePackage.TABLE__CURRENT_ROW_AXIS_PROVIDER:
+			return basicGetCurrentRowAxisProvider() != null;
+		case NattablePackage.TABLE__CURRENT_COLUMN_AXIS_PROVIDER:
+			return basicGetCurrentColumnAxisProvider() != null;
+		case NattablePackage.TABLE__CELLS:
+			return !getCells().isEmpty();
+		case NattablePackage.TABLE__OWNED_CELL_EDITOR_CONFIGURATIONS:
+			return getOwnedCellEditorConfigurations() != null;
+		case NattablePackage.TABLE__TABLE_KIND_ID:
+			return TABLE_KIND_ID_EDEFAULT == null ? getTableKindId() != null : !TABLE_KIND_ID_EDEFAULT.equals(getTableKindId());
+		}
+		return super.eIsSet(featureID);
+	}
+} // TableImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/AxisGroupImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/AxisGroupImpl.java
new file mode 100644
index 0000000..fb84ad4
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/AxisGroupImpl.java
@@ -0,0 +1,255 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.AxisGroup;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Axis Group</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.AxisGroupImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.AxisGroupImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.AxisGroupImpl#getGroupedAxis <em>Grouped Axis</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AxisGroupImpl extends StyledElementImpl implements AxisGroup {
+
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AxisGroupImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.AXIS_GROUP;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.AXIS_GROUP__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.AXIS_GROUP__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.AXIS_GROUP__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.AXIS_GROUP__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.AXIS_GROUP__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<IAxis> getGroupedAxis() {
+		return (EList<IAxis>)eDynamicGet(NattableaxisPackage.AXIS_GROUP__GROUPED_AXIS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.AXIS_GROUP__GROUPED_AXIS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getElement() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILabelProviderConfiguration getLocalLabelConfiguration() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.AXIS_GROUP__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.AXIS_GROUP__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.AXIS_GROUP__GROUPED_AXIS:
+				return getGroupedAxis();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.AXIS_GROUP__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.AXIS_GROUP__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.AXIS_GROUP__GROUPED_AXIS:
+				getGroupedAxis().clear();
+				getGroupedAxis().addAll((Collection<? extends IAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.AXIS_GROUP__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.AXIS_GROUP__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.AXIS_GROUP__GROUPED_AXIS:
+				getGroupedAxis().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.AXIS_GROUP__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.AXIS_GROUP__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.AXIS_GROUP__GROUPED_AXIS:
+				return !getGroupedAxis().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisPackage.AXIS_GROUP___GET_ELEMENT:
+				return getElement();
+			case NattableaxisPackage.AXIS_GROUP___GET_LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // AxisGroupImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectAxisImpl.java
new file mode 100644
index 0000000..cf55583
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectAxisImpl.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EObjectAxisImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EObjectAxisImpl extends ObjectAxisImpl implements EObjectAxis {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObjectAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.EOBJECT_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject getElement() {
+		return (EObject)eDynamicGet(NattableaxisPackage.EOBJECT_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOBJECT_AXIS__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetElement() {
+		return (EObject)eDynamicGet(NattableaxisPackage.EOBJECT_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOBJECT_AXIS__ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setElement(EObject newElement) {
+		eDynamicSet(NattableaxisPackage.EOBJECT_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOBJECT_AXIS__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_AXIS__ELEMENT:
+				if (resolve) return getElement();
+				return basicGetElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_AXIS__ELEMENT:
+				setElement((EObject)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_AXIS__ELEMENT:
+				setElement((EObject)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_AXIS__ELEMENT:
+				return basicGetElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // EObjectAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectTreeItemAxisImpl.java
new file mode 100644
index 0000000..eb573ec
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EObjectTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EObjectTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EObjectTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EObjectTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EObjectTreeItemAxisImpl extends EObjectAxisImpl implements EObjectTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObjectTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.EOBJECT_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // EObjectTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationAxisImpl.java
new file mode 100644
index 0000000..c49ef0e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationAxisImpl.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EOperation Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EOperationAxisImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EOperationAxisImpl extends OperationAxisImpl implements EOperationAxis {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EOperationAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.EOPERATION_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getElement() {
+		return (EOperation)eDynamicGet(NattableaxisPackage.EOPERATION_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOPERATION_AXIS__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation basicGetElement() {
+		return (EOperation)eDynamicGet(NattableaxisPackage.EOPERATION_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOPERATION_AXIS__ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setElement(EOperation newElement) {
+		eDynamicSet(NattableaxisPackage.EOPERATION_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.EOPERATION_AXIS__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_AXIS__ELEMENT:
+				if (resolve) return getElement();
+				return basicGetElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_AXIS__ELEMENT:
+				setElement((EOperation)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_AXIS__ELEMENT:
+				setElement((EOperation)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_AXIS__ELEMENT:
+				return basicGetElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //EOperationAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationTreeItemAxisImpl.java
new file mode 100644
index 0000000..004e153
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EOperationTreeItemAxisImpl.java
@@ -0,0 +1,291 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EOperation Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EOperationTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EOperationTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EOperationTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EOperationTreeItemAxisImpl extends EOperationAxisImpl implements EOperationTreeItemAxis {
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EOperationTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.EOPERATION_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //EOperationTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureAxisImpl.java
new file mode 100644
index 0000000..81809b4
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureAxisImpl.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EStructural Feature Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EStructuralFeatureAxisImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EStructuralFeatureAxisImpl extends FeatureAxisImpl implements EStructuralFeatureAxis {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EStructuralFeatureAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.ESTRUCTURAL_FEATURE_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeature getElement() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ESTRUCTURAL_FEATURE_AXIS__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EStructuralFeature basicGetElement() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ESTRUCTURAL_FEATURE_AXIS__ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setElement(EStructuralFeature newElement) {
+		eDynamicSet(NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ESTRUCTURAL_FEATURE_AXIS__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT:
+				if (resolve) return getElement();
+				return basicGetElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT:
+				setElement((EStructuralFeature)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT:
+				setElement((EStructuralFeature)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS__ELEMENT:
+				return basicGetElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // EStructuralFeatureAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureTreeItemAxisImpl.java
new file mode 100644
index 0000000..fa4cb11
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/EStructuralFeatureTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EStructural Feature Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EStructuralFeatureTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EStructuralFeatureTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.EStructuralFeatureTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EStructuralFeatureTreeItemAxisImpl extends EStructuralFeatureAxisImpl implements EStructuralFeatureTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EStructuralFeatureTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // EStructuralFeatureTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureAxisImpl.java
new file mode 100644
index 0000000..046aecf
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureAxisImpl.java
@@ -0,0 +1,272 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.FeatureLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureAxisImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureAxisImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class FeatureAxisImpl extends StyledElementImpl implements FeatureAxis {
+
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.FEATURE_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.FEATURE_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.FEATURE_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.FEATURE_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.FEATURE_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.FEATURE_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (FeatureLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(FeatureLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLocalLabelConfiguration(FeatureLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getElement() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_AXIS__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.FEATURE_AXIS__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_AXIS__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((FeatureLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.FEATURE_AXIS__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((FeatureLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_AXIS__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.FEATURE_AXIS__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisPackage.FEATURE_AXIS___GET_ELEMENT:
+				return getElement();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // FeatureAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdAxisImpl.java
new file mode 100644
index 0000000..478d8b1
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdAxisImpl.java
@@ -0,0 +1,192 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.FeatureLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Id Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureIdAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FeatureIdAxisImpl extends IdAxisImpl implements FeatureIdAxis {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureIdAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.FEATURE_ID_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (FeatureLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(FeatureLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLocalLabelConfiguration(FeatureLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((FeatureLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((FeatureLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == FeatureAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == FeatureAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.FEATURE_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.FEATURE_ID_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // FeatureIdAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdTreeItemAxisImpl.java
new file mode 100644
index 0000000..834c894
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureIdTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Id Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureIdTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureIdTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureIdTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FeatureIdTreeItemAxisImpl extends FeatureIdAxisImpl implements FeatureIdTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureIdTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.FEATURE_ID_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // FeatureIdTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureTreeItemAxisImpl.java
new file mode 100644
index 0000000..59c86cf
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/FeatureTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.FeatureTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class FeatureTreeItemAxisImpl extends FeatureAxisImpl implements FeatureTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.FEATURE_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.FEATURE_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // FeatureTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdAxisImpl.java
new file mode 100644
index 0000000..d49d27b
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdAxisImpl.java
@@ -0,0 +1,256 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Id Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdAxisImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdAxisImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdAxisImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class IdAxisImpl extends StyledElementImpl implements IdAxis {
+
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getElement() <em>Element</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ELEMENT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.ID_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.ID_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.ID_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.ID_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.ID_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.ID_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getElement() {
+		return (String)eDynamicGet(NattableaxisPackage.ID_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ID_AXIS__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setElement(String newElement) {
+		eDynamicSet(NattableaxisPackage.ID_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ID_AXIS__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILabelProviderConfiguration getLocalLabelConfiguration() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_AXIS__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.ID_AXIS__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.ID_AXIS__ELEMENT:
+				return getElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.ID_AXIS__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.ID_AXIS__ELEMENT:
+				setElement((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.ID_AXIS__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.ID_AXIS__ELEMENT:
+				setElement(ELEMENT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_AXIS__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.ID_AXIS__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.ID_AXIS__ELEMENT:
+				return ELEMENT_EDEFAULT == null ? getElement() != null : !ELEMENT_EDEFAULT.equals(getElement());
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisPackage.ID_AXIS___GET_LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // IdAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdTreeItemAxisImpl.java
new file mode 100644
index 0000000..b64113b
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/IdTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Id Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.IdTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IdTreeItemAxisImpl extends IdAxisImpl implements IdTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.ID_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ID_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ID_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ID_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // IdTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/NattableaxisFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/NattableaxisFactoryImpl.java
new file mode 100644
index 0000000..7e5dbb4
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/NattableaxisFactoryImpl.java
@@ -0,0 +1,273 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.AxisGroup;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EObjectTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EOperationTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.EStructuralFeatureTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.FeatureIdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectIdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationIdTreeItemAxis;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattableaxisFactoryImpl extends EFactoryImpl implements NattableaxisFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattableaxisFactory init() {
+		try {
+			NattableaxisFactory theNattableaxisFactory = (NattableaxisFactory)EPackage.Registry.INSTANCE.getEFactory(NattableaxisPackage.eNS_URI);
+			if (theNattableaxisFactory != null) {
+				return theNattableaxisFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableaxisFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattableaxisFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattableaxisPackage.ID_TREE_ITEM_AXIS: return createIdTreeItemAxis();
+			case NattableaxisPackage.EOBJECT_AXIS: return createEObjectAxis();
+			case NattableaxisPackage.EOBJECT_TREE_ITEM_AXIS: return createEObjectTreeItemAxis();
+			case NattableaxisPackage.FEATURE_ID_AXIS: return createFeatureIdAxis();
+			case NattableaxisPackage.FEATURE_ID_TREE_ITEM_AXIS: return createFeatureIdTreeItemAxis();
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_AXIS: return createEStructuralFeatureAxis();
+			case NattableaxisPackage.EOPERATION_AXIS: return createEOperationAxis();
+			case NattableaxisPackage.ESTRUCTURAL_FEATURE_TREE_ITEM_AXIS: return createEStructuralFeatureTreeItemAxis();
+			case NattableaxisPackage.EOPERATION_TREE_ITEM_AXIS: return createEOperationTreeItemAxis();
+			case NattableaxisPackage.OBJECT_ID_AXIS: return createObjectIdAxis();
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS: return createObjectIdTreeItemAxis();
+			case NattableaxisPackage.AXIS_GROUP: return createAxisGroup();
+			case NattableaxisPackage.OPERATION_ID_AXIS: return createOperationIdAxis();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS: return createOperationIdTreeItemAxis();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public IdTreeItemAxis createIdTreeItemAxis() {
+		IdTreeItemAxisImpl idTreeItemAxis = new IdTreeItemAxisImpl();
+		return idTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObjectAxis createEObjectAxis() {
+		EObjectAxisImpl eObjectAxis = new EObjectAxisImpl();
+		return eObjectAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObjectTreeItemAxis createEObjectTreeItemAxis() {
+		EObjectTreeItemAxisImpl eObjectTreeItemAxis = new EObjectTreeItemAxisImpl();
+		return eObjectTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureIdAxis createFeatureIdAxis() {
+		FeatureIdAxisImpl featureIdAxis = new FeatureIdAxisImpl();
+		return featureIdAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureIdTreeItemAxis createFeatureIdTreeItemAxis() {
+		FeatureIdTreeItemAxisImpl featureIdTreeItemAxis = new FeatureIdTreeItemAxisImpl();
+		return featureIdTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeatureAxis createEStructuralFeatureAxis() {
+		EStructuralFeatureAxisImpl eStructuralFeatureAxis = new EStructuralFeatureAxisImpl();
+		return eStructuralFeatureAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperationAxis createEOperationAxis() {
+		EOperationAxisImpl eOperationAxis = new EOperationAxisImpl();
+		return eOperationAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeatureTreeItemAxis createEStructuralFeatureTreeItemAxis() {
+		EStructuralFeatureTreeItemAxisImpl eStructuralFeatureTreeItemAxis = new EStructuralFeatureTreeItemAxisImpl();
+		return eStructuralFeatureTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperationTreeItemAxis createEOperationTreeItemAxis() {
+		EOperationTreeItemAxisImpl eOperationTreeItemAxis = new EOperationTreeItemAxisImpl();
+		return eOperationTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ObjectIdAxis createObjectIdAxis() {
+		ObjectIdAxisImpl objectIdAxis = new ObjectIdAxisImpl();
+		return objectIdAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ObjectIdTreeItemAxis createObjectIdTreeItemAxis() {
+		ObjectIdTreeItemAxisImpl objectIdTreeItemAxis = new ObjectIdTreeItemAxisImpl();
+		return objectIdTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisGroup createAxisGroup() {
+		AxisGroupImpl axisGroup = new AxisGroupImpl();
+		return axisGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationIdAxis createOperationIdAxis() {
+		OperationIdAxisImpl operationIdAxis = new OperationIdAxisImpl();
+		return operationIdAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationIdTreeItemAxis createOperationIdTreeItemAxis() {
+		OperationIdTreeItemAxisImpl operationIdTreeItemAxis = new OperationIdTreeItemAxisImpl();
+		return operationIdTreeItemAxis;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattableaxisPackage getNattableaxisPackage() {
+		return (NattableaxisPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattableaxisPackage getPackage() {
+		return NattableaxisPackage.eINSTANCE;
+	}
+} // NattableaxisFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectAxisImpl.java
new file mode 100644
index 0000000..cfc1dc3
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectAxisImpl.java
@@ -0,0 +1,272 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ObjectLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Object Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectAxisImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectAxisImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ObjectAxisImpl extends StyledElementImpl implements ObjectAxis {
+
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ObjectAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OBJECT_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OBJECT_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OBJECT_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.OBJECT_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.OBJECT_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.OBJECT_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ObjectLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (ObjectLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(ObjectLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLocalLabelConfiguration(ObjectLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getElement() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_AXIS__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.OBJECT_AXIS__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_AXIS__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((ObjectLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.OBJECT_AXIS__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((ObjectLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_AXIS__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.OBJECT_AXIS__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisPackage.OBJECT_AXIS___GET_ELEMENT:
+				return getElement();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // ObjectAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdAxisImpl.java
new file mode 100644
index 0000000..c6b840d
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdAxisImpl.java
@@ -0,0 +1,192 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ObjectLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Object Id Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectIdAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ObjectIdAxisImpl extends IdAxisImpl implements ObjectIdAxis {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ObjectIdAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OBJECT_ID_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ObjectLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (ObjectLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(ObjectLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLocalLabelConfiguration(ObjectLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((ObjectLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((ObjectLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ObjectAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ObjectAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.OBJECT_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OBJECT_ID_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // ObjectIdAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdTreeItemAxisImpl.java
new file mode 100644
index 0000000..ec00308
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectIdTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectIdTreeItemAxis;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Object Id Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectIdTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectIdTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectIdTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ObjectIdTreeItemAxisImpl extends ObjectIdAxisImpl implements ObjectIdTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ObjectIdTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OBJECT_ID_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.OBJECT_ID_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // ObjectIdTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectTreeItemAxisImpl.java
new file mode 100644
index 0000000..7b63170
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/ObjectTreeItemAxisImpl.java
@@ -0,0 +1,296 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ObjectTreeItemAxis;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Object Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.ObjectTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ObjectTreeItemAxisImpl extends ObjectAxisImpl implements ObjectTreeItemAxis {
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ObjectTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OBJECT_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.OBJECT_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+} // ObjectTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationAxisImpl.java
new file mode 100644
index 0000000..ab0d4c8
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationAxisImpl.java
@@ -0,0 +1,265 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Operation Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationAxisImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationAxisImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class OperationAxisImpl extends StyledElementImpl implements OperationAxis {
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OPERATION_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OPERATION_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OPERATION_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.OPERATION_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.OPERATION_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.OPERATION_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (OperationLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getElement() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_AXIS__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.OPERATION_AXIS__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_AXIS__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.OPERATION_AXIS__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_AXIS__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.OPERATION_AXIS__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisPackage.OPERATION_AXIS___GET_ELEMENT:
+				return getElement();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //OperationAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdAxisImpl.java
new file mode 100644
index 0000000..ec8a596
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdAxisImpl.java
@@ -0,0 +1,189 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *  Contributors:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Operation Id Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OperationIdAxisImpl extends IdAxisImpl implements OperationIdAxis {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationIdAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OPERATION_ID_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (OperationLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == OperationAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == OperationAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OPERATION_ID_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //OperationIdAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdTreeItemAxisImpl.java
new file mode 100644
index 0000000..546429a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationIdTreeItemAxisImpl.java
@@ -0,0 +1,472 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *  Contributors:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationIdAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationIdTreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Operation Id Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getManager <em>Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getAlias <em>Alias</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getElement <em>Element</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationIdTreeItemAxisImpl#getLocalLabelConfiguration <em>Local Label Configuration</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OperationIdTreeItemAxisImpl extends StyledElementImpl implements OperationIdTreeItemAxis {
+	/**
+	 * The default value of the '{@link #getAlias() <em>Alias</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAlias()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ALIAS_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #getElement() <em>Element</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ELEMENT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationIdTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OPERATION_ID_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation getManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setManager(AxisManagerRepresentation newManager) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__MANAGER, newManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getAlias() {
+		return (String)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAlias(String newAlias) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.IAXIS__ALIAS, newAlias);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getElement() {
+		return (String)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ID_AXIS__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setElement(String newElement) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ID_AXIS__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationLabelProviderConfiguration getLocalLabelConfiguration() {
+		return (OperationLabelProviderConfiguration)eDynamicGet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newLocalLabelConfiguration, NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLocalLabelConfiguration(OperationLabelProviderConfiguration newLocalLabelConfiguration) {
+		eDynamicSet(NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION, newLocalLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return basicSetLocalLabelConfiguration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER:
+				if (resolve) return getManager();
+				return basicGetManager();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS:
+				return getAlias();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT:
+				return getElement();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS:
+				setAlias((String)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT:
+				setElement((String)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER:
+				setManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS:
+				setAlias(ALIAS_EDEFAULT);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT:
+				setElement(ELEMENT_EDEFAULT);
+				return;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION:
+				setLocalLabelConfiguration((OperationLabelProviderConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__MANAGER:
+				return basicGetManager() != null;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ALIAS:
+				return ALIAS_EDEFAULT == null ? getAlias() != null : !ALIAS_EDEFAULT.equals(getAlias());
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT:
+				return ELEMENT_EDEFAULT == null ? getElement() != null : !ELEMENT_EDEFAULT.equals(getElement());
+			case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION:
+				return getLocalLabelConfiguration() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == IdAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT: return NattableaxisPackage.ID_AXIS__ELEMENT;
+				default: return -1;
+			}
+		}
+		if (baseClass == OperationAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		if (baseClass == OperationIdAxis.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == IdAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ID_AXIS__ELEMENT: return NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__ELEMENT;
+				default: return -1;
+			}
+		}
+		if (baseClass == OperationAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.OPERATION_AXIS__LOCAL_LABEL_CONFIGURATION: return NattableaxisPackage.OPERATION_ID_TREE_ITEM_AXIS__LOCAL_LABEL_CONFIGURATION;
+				default: return -1;
+			}
+		}
+		if (baseClass == OperationIdAxis.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //OperationIdTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationTreeItemAxisImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationTreeItemAxisImpl.java
new file mode 100644
index 0000000..922b2a6
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxis/impl/OperationTreeItemAxisImpl.java
@@ -0,0 +1,291 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.ITreeItemAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.NattableaxisPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.OperationTreeItemAxis;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Operation Tree Item Axis</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationTreeItemAxisImpl#getParent <em>Parent</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationTreeItemAxisImpl#isExpanded <em>Expanded</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxis.impl.OperationTreeItemAxisImpl#getChildren <em>Children</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class OperationTreeItemAxisImpl extends OperationAxisImpl implements OperationTreeItemAxis {
+	/**
+	 * The default value of the '{@link #isExpanded() <em>Expanded</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isExpanded()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean EXPANDED_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationTreeItemAxisImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisPackage.Literals.OPERATION_TREE_ITEM_AXIS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis getParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ITreeItemAxis basicGetParent() {
+		return (ITreeItemAxis)eDynamicGet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetParent(ITreeItemAxis newParent, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newParent, NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParent(ITreeItemAxis newParent) {
+		eDynamicSet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__PARENT, newParent);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isExpanded() {
+		return (Boolean)eDynamicGet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExpanded(boolean newExpanded) {
+		eDynamicSet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__EXPANDED, newExpanded);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EList<ITreeItemAxis> getChildren() {
+		return (EList<ITreeItemAxis>)eDynamicGet(NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN - ESTATIC_FEATURE_COUNT, NattableaxisPackage.Literals.ITREE_ITEM_AXIS__CHILDREN, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				ITreeItemAxis parent = basicGetParent();
+				if (parent != null)
+					msgs = ((InternalEObject)parent).eInverseRemove(this, NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN, ITreeItemAxis.class, msgs);
+				return basicSetParent((ITreeItemAxis)otherEnd, msgs);
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				return basicSetParent(null, msgs);
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				if (resolve) return getParent();
+				return basicGetParent();
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded();
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return getChildren();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded((Boolean)newValue);
+				return;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				getChildren().addAll((Collection<? extends ITreeItemAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				setParent((ITreeItemAxis)null);
+				return;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED:
+				setExpanded(EXPANDED_EDEFAULT);
+				return;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				getChildren().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT:
+				return basicGetParent() != null;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED:
+				return isExpanded() != EXPANDED_EDEFAULT;
+			case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN:
+				return !getChildren().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (derivedFeatureID) {
+				case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT: return NattableaxisPackage.ITREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == ITreeItemAxis.class) {
+			switch (baseFeatureID) {
+				case NattableaxisPackage.ITREE_ITEM_AXIS__PARENT: return NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__PARENT;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__EXPANDED: return NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__EXPANDED;
+				case NattableaxisPackage.ITREE_ITEM_AXIS__CHILDREN: return NattableaxisPackage.OPERATION_TREE_ITEM_AXIS__CHILDREN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //OperationTreeItemAxisImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AbstractHeaderAxisConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AbstractHeaderAxisConfigurationImpl.java
new file mode 100644
index 0000000..c06ad00
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AbstractHeaderAxisConfigurationImpl.java
@@ -0,0 +1,338 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AbstractHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisIndexStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Header Axis Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#getIndexStyle <em>Index Style</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#isDisplayLabel <em>Display Label</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#isDisplayFilter <em>Display Filter</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#isDisplayIndex <em>Display Index</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#getOwnedLabelConfigurations <em>Owned Label Configurations</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AbstractHeaderAxisConfigurationImpl#getOwnedAxisConfigurations <em>Owned Axis Configurations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class AbstractHeaderAxisConfigurationImpl extends StyledElementImpl implements AbstractHeaderAxisConfiguration {
+
+	/**
+	 * The default value of the '{@link #getIndexStyle() <em>Index Style</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIndexStyle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final AxisIndexStyle INDEX_STYLE_EDEFAULT = AxisIndexStyle.ALPHABETIC;
+
+	/**
+	 * The default value of the '{@link #isDisplayLabel() <em>Display Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_LABEL_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayFilter() <em>Display Filter</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayFilter()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_FILTER_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #isDisplayIndex() <em>Display Index</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayIndex()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_INDEX_EDEFAULT = true;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbstractHeaderAxisConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisIndexStyle getIndexStyle() {
+		return (AxisIndexStyle)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIndexStyle(AxisIndexStyle newIndexStyle) {
+		eDynamicSet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE, newIndexStyle);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayLabel() {
+		return (Boolean)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayLabel(boolean newDisplayLabel) {
+		eDynamicSet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL, newDisplayLabel);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayFilter() {
+		return (Boolean)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayFilter(boolean newDisplayFilter) {
+		eDynamicSet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER, newDisplayFilter);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayIndex() {
+		return (Boolean)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayIndex(boolean newDisplayIndex) {
+		eDynamicSet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX, newDisplayIndex);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<ILabelProviderConfiguration> getOwnedLabelConfigurations() {
+		return (EList<ILabelProviderConfiguration>)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<IAxisConfiguration> getOwnedAxisConfigurations() {
+		return (EList<IAxisConfiguration>)eDynamicGet(NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS:
+				return ((InternalEList<?>)getOwnedLabelConfigurations()).basicRemove(otherEnd, msgs);
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS:
+				return ((InternalEList<?>)getOwnedAxisConfigurations()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE:
+				return getIndexStyle();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL:
+				return isDisplayLabel();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER:
+				return isDisplayFilter();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX:
+				return isDisplayIndex();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS:
+				return getOwnedLabelConfigurations();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS:
+				return getOwnedAxisConfigurations();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE:
+				setIndexStyle((AxisIndexStyle)newValue);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL:
+				setDisplayLabel((Boolean)newValue);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER:
+				setDisplayFilter((Boolean)newValue);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX:
+				setDisplayIndex((Boolean)newValue);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS:
+				getOwnedLabelConfigurations().clear();
+				getOwnedLabelConfigurations().addAll((Collection<? extends ILabelProviderConfiguration>)newValue);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS:
+				getOwnedAxisConfigurations().clear();
+				getOwnedAxisConfigurations().addAll((Collection<? extends IAxisConfiguration>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE:
+				setIndexStyle(INDEX_STYLE_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL:
+				setDisplayLabel(DISPLAY_LABEL_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER:
+				setDisplayFilter(DISPLAY_FILTER_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX:
+				setDisplayIndex(DISPLAY_INDEX_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS:
+				getOwnedLabelConfigurations().clear();
+				return;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS:
+				getOwnedAxisConfigurations().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__INDEX_STYLE:
+				return getIndexStyle() != INDEX_STYLE_EDEFAULT;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_LABEL:
+				return isDisplayLabel() != DISPLAY_LABEL_EDEFAULT;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_FILTER:
+				return isDisplayFilter() != DISPLAY_FILTER_EDEFAULT;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__DISPLAY_INDEX:
+				return isDisplayIndex() != DISPLAY_INDEX_EDEFAULT;
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_LABEL_CONFIGURATIONS:
+				return !getOwnedLabelConfigurations().isEmpty();
+			case NattableaxisconfigurationPackage.ABSTRACT_HEADER_AXIS_CONFIGURATION__OWNED_AXIS_CONFIGURATIONS:
+				return !getOwnedAxisConfigurations().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // AbstractHeaderAxisConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerConfigurationImpl.java
new file mode 100644
index 0000000..385e3ed
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerConfigurationImpl.java
@@ -0,0 +1,214 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Axis Manager Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerConfigurationImpl#getLocalHeaderLabelConfiguration <em>Local Header Label Configuration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerConfigurationImpl#getAxisManager <em>Axis Manager</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerConfigurationImpl#getLocalSpecificConfigurations <em>Local Specific Configurations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AxisManagerConfigurationImpl extends StyledElementImpl implements AxisManagerConfiguration {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AxisManagerConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILabelProviderConfiguration getLocalHeaderLabelConfiguration() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ILabelProviderConfiguration basicGetLocalHeaderLabelConfiguration() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLocalHeaderLabelConfiguration(ILabelProviderConfiguration newLocalHeaderLabelConfiguration) {
+		eDynamicSet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION, newLocalHeaderLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation getAxisManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisManagerRepresentation basicGetAxisManager() {
+		return (AxisManagerRepresentation)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAxisManager(AxisManagerRepresentation newAxisManager) {
+		eDynamicSet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER, newAxisManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<IAxisConfiguration> getLocalSpecificConfigurations() {
+		return (EList<IAxisConfiguration>)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION:
+				if (resolve) return getLocalHeaderLabelConfiguration();
+				return basicGetLocalHeaderLabelConfiguration();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER:
+				if (resolve) return getAxisManager();
+				return basicGetAxisManager();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS:
+				return getLocalSpecificConfigurations();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION:
+				setLocalHeaderLabelConfiguration((ILabelProviderConfiguration)newValue);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER:
+				setAxisManager((AxisManagerRepresentation)newValue);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS:
+				getLocalSpecificConfigurations().clear();
+				getLocalSpecificConfigurations().addAll((Collection<? extends IAxisConfiguration>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION:
+				setLocalHeaderLabelConfiguration((ILabelProviderConfiguration)null);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER:
+				setAxisManager((AxisManagerRepresentation)null);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS:
+				getLocalSpecificConfigurations().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_HEADER_LABEL_CONFIGURATION:
+				return basicGetLocalHeaderLabelConfiguration() != null;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__AXIS_MANAGER:
+				return basicGetAxisManager() != null;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION__LOCAL_SPECIFIC_CONFIGURATIONS:
+				return !getLocalSpecificConfigurations().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // AxisManagerConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerRepresentationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerRepresentationImpl.java
new file mode 100644
index 0000000..8803ace
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/AxisManagerRepresentationImpl.java
@@ -0,0 +1,254 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Axis Manager Representation</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerRepresentationImpl#getAxisManagerId <em>Axis Manager Id</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerRepresentationImpl#getLabelProviderContext <em>Label Provider Context</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerRepresentationImpl#getHeaderLabelConfiguration <em>Header Label Configuration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.AxisManagerRepresentationImpl#getSpecificAxisConfigurations <em>Specific Axis Configurations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AxisManagerRepresentationImpl extends StyledElementImpl implements AxisManagerRepresentation {
+
+	/**
+	 * The default value of the '{@link #getAxisManagerId() <em>Axis Manager Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAxisManagerId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String AXIS_MANAGER_ID_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getLabelProviderContext() <em>Label Provider Context</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLabelProviderContext()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LABEL_PROVIDER_CONTEXT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AxisManagerRepresentationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getAxisManagerId() {
+		return (String)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAxisManagerId(String newAxisManagerId) {
+		eDynamicSet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID, newAxisManagerId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getLabelProviderContext() {
+		return (String)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLabelProviderContext(String newLabelProviderContext) {
+		eDynamicSet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT, newLabelProviderContext);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILabelProviderConfiguration getHeaderLabelConfiguration() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ILabelProviderConfiguration basicGetHeaderLabelConfiguration() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setHeaderLabelConfiguration(ILabelProviderConfiguration newHeaderLabelConfiguration) {
+		eDynamicSet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION, newHeaderLabelConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<IAxisConfiguration> getSpecificAxisConfigurations() {
+		return (EList<IAxisConfiguration>)eDynamicGet(NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID:
+				return getAxisManagerId();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT:
+				return getLabelProviderContext();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION:
+				if (resolve) return getHeaderLabelConfiguration();
+				return basicGetHeaderLabelConfiguration();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS:
+				return getSpecificAxisConfigurations();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID:
+				setAxisManagerId((String)newValue);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT:
+				setLabelProviderContext((String)newValue);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION:
+				setHeaderLabelConfiguration((ILabelProviderConfiguration)newValue);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS:
+				getSpecificAxisConfigurations().clear();
+				getSpecificAxisConfigurations().addAll((Collection<? extends IAxisConfiguration>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID:
+				setAxisManagerId(AXIS_MANAGER_ID_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT:
+				setLabelProviderContext(LABEL_PROVIDER_CONTEXT_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION:
+				setHeaderLabelConfiguration((ILabelProviderConfiguration)null);
+				return;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS:
+				getSpecificAxisConfigurations().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__AXIS_MANAGER_ID:
+				return AXIS_MANAGER_ID_EDEFAULT == null ? getAxisManagerId() != null : !AXIS_MANAGER_ID_EDEFAULT.equals(getAxisManagerId());
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__LABEL_PROVIDER_CONTEXT:
+				return LABEL_PROVIDER_CONTEXT_EDEFAULT == null ? getLabelProviderContext() != null : !LABEL_PROVIDER_CONTEXT_EDEFAULT.equals(getLabelProviderContext());
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__HEADER_LABEL_CONFIGURATION:
+				return basicGetHeaderLabelConfiguration() != null;
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION__SPECIFIC_AXIS_CONFIGURATIONS:
+				return !getSpecificAxisConfigurations().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // AxisManagerRepresentationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/EStructuralFeatureValueFillingConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/EStructuralFeatureValueFillingConfigurationImpl.java
new file mode 100644
index 0000000..f63995f
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/EStructuralFeatureValueFillingConfigurationImpl.java
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.EStructuralFeatureValueFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EStructural Feature Value Filling Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.EStructuralFeatureValueFillingConfigurationImpl#getListenFeature <em>Listen Feature</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EStructuralFeatureValueFillingConfigurationImpl extends StyledElementImpl implements EStructuralFeatureValueFillingConfiguration {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EStructuralFeatureValueFillingConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeature getListenFeature() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EStructuralFeature basicGetListenFeature() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setListenFeature(EStructuralFeature newListenFeature) {
+		eDynamicSet(NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE, newListenFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE:
+				if (resolve) return getListenFeature();
+				return basicGetListenFeature();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE:
+				setListenFeature((EStructuralFeature)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE:
+				setListenFeature((EStructuralFeature)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION__LISTEN_FEATURE:
+				return basicGetListenFeature() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // EStructuralFeatureValueFillingConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/FeatureAxisConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/FeatureAxisConfigurationImpl.java
new file mode 100644
index 0000000..fb94483
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/FeatureAxisConfigurationImpl.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.FeatureAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Axis Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.FeatureAxisConfigurationImpl#isShowOnlyCommonFeature <em>Show Only Common Feature</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FeatureAxisConfigurationImpl extends StyledElementImpl implements FeatureAxisConfiguration {
+
+	/**
+	 * The default value of the '{@link #isShowOnlyCommonFeature() <em>Show Only Common Feature</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isShowOnlyCommonFeature()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean SHOW_ONLY_COMMON_FEATURE_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureAxisConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.FEATURE_AXIS_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isShowOnlyCommonFeature() {
+		return (Boolean)eDynamicGet(NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setShowOnlyCommonFeature(boolean newShowOnlyCommonFeature) {
+		eDynamicSet(NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE, newShowOnlyCommonFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE:
+				return isShowOnlyCommonFeature();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE:
+				setShowOnlyCommonFeature((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE:
+				setShowOnlyCommonFeature(SHOW_ONLY_COMMON_FEATURE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION__SHOW_ONLY_COMMON_FEATURE:
+				return isShowOnlyCommonFeature() != SHOW_ONLY_COMMON_FEATURE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // FeatureAxisConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/IPasteConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/IPasteConfigurationImpl.java
new file mode 100644
index 0000000..249992a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/IPasteConfigurationImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IPasteConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>IPaste Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.IPasteConfigurationImpl#getPostActions <em>Post Actions</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.IPasteConfigurationImpl#isDetachedMode <em>Detached Mode</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IPasteConfigurationImpl extends StyledElementImpl implements IPasteConfiguration {
+
+	/**
+	 * The default value of the '{@link #isDetachedMode() <em>Detached Mode</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDetachedMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DETACHED_MODE_EDEFAULT = true;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPasteConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.IPASTE_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<String> getPostActions() {
+		return (EList<String>)eDynamicGet(NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__POST_ACTIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.IPASTE_CONFIGURATION__POST_ACTIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDetachedMode() {
+		return (Boolean)eDynamicGet(NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.IPASTE_CONFIGURATION__DETACHED_MODE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDetachedMode(boolean newDetachedMode) {
+		eDynamicSet(NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.IPASTE_CONFIGURATION__DETACHED_MODE, newDetachedMode);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__POST_ACTIONS:
+				return getPostActions();
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE:
+				return isDetachedMode();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__POST_ACTIONS:
+				getPostActions().clear();
+				getPostActions().addAll((Collection<? extends String>)newValue);
+				return;
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE:
+				setDetachedMode((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__POST_ACTIONS:
+				getPostActions().clear();
+				return;
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE:
+				setDetachedMode(DETACHED_MODE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__POST_ACTIONS:
+				return !getPostActions().isEmpty();
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION__DETACHED_MODE:
+				return isDetachedMode() != DETACHED_MODE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // IPasteConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/LocalTableHeaderAxisConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/LocalTableHeaderAxisConfigurationImpl.java
new file mode 100644
index 0000000..bff0824
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/LocalTableHeaderAxisConfigurationImpl.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.LocalTableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Local Table Header Axis Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.LocalTableHeaderAxisConfigurationImpl#getAxisManagerConfigurations <em>Axis Manager Configurations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LocalTableHeaderAxisConfigurationImpl extends AbstractHeaderAxisConfigurationImpl implements LocalTableHeaderAxisConfiguration {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LocalTableHeaderAxisConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AxisManagerConfiguration> getAxisManagerConfigurations() {
+		return (EList<AxisManagerConfiguration>)eDynamicGet(NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS:
+				return ((InternalEList<?>)getAxisManagerConfigurations()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS:
+				return getAxisManagerConfigurations();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS:
+				getAxisManagerConfigurations().clear();
+				getAxisManagerConfigurations().addAll((Collection<? extends AxisManagerConfiguration>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS:
+				getAxisManagerConfigurations().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGER_CONFIGURATIONS:
+				return !getAxisManagerConfigurations().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // LocalTableHeaderAxisConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/NattableaxisconfigurationFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/NattableaxisconfigurationFactoryImpl.java
new file mode 100644
index 0000000..ae659ac
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/NattableaxisconfigurationFactoryImpl.java
@@ -0,0 +1,264 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisIndexStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.EStructuralFeatureValueFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.FeatureAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.IPasteConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.LocalTableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TreeFillingConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattableaxisconfigurationFactoryImpl extends EFactoryImpl implements NattableaxisconfigurationFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattableaxisconfigurationFactory init() {
+		try {
+			NattableaxisconfigurationFactory theNattableaxisconfigurationFactory = (NattableaxisconfigurationFactory)EPackage.Registry.INSTANCE.getEFactory(NattableaxisconfigurationPackage.eNS_URI);
+			if (theNattableaxisconfigurationFactory != null) {
+				return theNattableaxisconfigurationFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableaxisconfigurationFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattableaxisconfigurationFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_REPRESENTATION: return createAxisManagerRepresentation();
+			case NattableaxisconfigurationPackage.AXIS_MANAGER_CONFIGURATION: return createAxisManagerConfiguration();
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION: return createTableHeaderAxisConfiguration();
+			case NattableaxisconfigurationPackage.LOCAL_TABLE_HEADER_AXIS_CONFIGURATION: return createLocalTableHeaderAxisConfiguration();
+			case NattableaxisconfigurationPackage.FEATURE_AXIS_CONFIGURATION: return createFeatureAxisConfiguration();
+			case NattableaxisconfigurationPackage.ESTRUCTURAL_FEATURE_VALUE_FILLING_CONFIGURATION: return createEStructuralFeatureValueFillingConfiguration();
+			case NattableaxisconfigurationPackage.IPASTE_CONFIGURATION: return createIPasteConfiguration();
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION: return createPasteEObjectConfiguration();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION: return createTreeFillingConfiguration();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattableaxisconfigurationPackage.AXIS_INDEX_STYLE:
+				return createAxisIndexStyleFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattableaxisconfigurationPackage.AXIS_INDEX_STYLE:
+				return convertAxisIndexStyleToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerRepresentation createAxisManagerRepresentation() {
+		AxisManagerRepresentationImpl axisManagerRepresentation = new AxisManagerRepresentationImpl();
+		return axisManagerRepresentation;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AxisManagerConfiguration createAxisManagerConfiguration() {
+		AxisManagerConfigurationImpl axisManagerConfiguration = new AxisManagerConfigurationImpl();
+		return axisManagerConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TableHeaderAxisConfiguration createTableHeaderAxisConfiguration() {
+		TableHeaderAxisConfigurationImpl tableHeaderAxisConfiguration = new TableHeaderAxisConfigurationImpl();
+		return tableHeaderAxisConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public LocalTableHeaderAxisConfiguration createLocalTableHeaderAxisConfiguration() {
+		LocalTableHeaderAxisConfigurationImpl localTableHeaderAxisConfiguration = new LocalTableHeaderAxisConfigurationImpl();
+		return localTableHeaderAxisConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureAxisConfiguration createFeatureAxisConfiguration() {
+		FeatureAxisConfigurationImpl featureAxisConfiguration = new FeatureAxisConfigurationImpl();
+		return featureAxisConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeatureValueFillingConfiguration createEStructuralFeatureValueFillingConfiguration() {
+		EStructuralFeatureValueFillingConfigurationImpl eStructuralFeatureValueFillingConfiguration = new EStructuralFeatureValueFillingConfigurationImpl();
+		return eStructuralFeatureValueFillingConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public IPasteConfiguration createIPasteConfiguration() {
+		IPasteConfigurationImpl iPasteConfiguration = new IPasteConfigurationImpl();
+		return iPasteConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public PasteEObjectConfiguration createPasteEObjectConfiguration() {
+		PasteEObjectConfigurationImpl pasteEObjectConfiguration = new PasteEObjectConfigurationImpl();
+		return pasteEObjectConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TreeFillingConfiguration createTreeFillingConfiguration() {
+		TreeFillingConfigurationImpl treeFillingConfiguration = new TreeFillingConfigurationImpl();
+		return treeFillingConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AxisIndexStyle createAxisIndexStyleFromString(EDataType eDataType, String initialValue) {
+		AxisIndexStyle result = AxisIndexStyle.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertAxisIndexStyleToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattableaxisconfigurationPackage getNattableaxisconfigurationPackage() {
+		return (NattableaxisconfigurationPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattableaxisconfigurationPackage getPackage() {
+		return NattableaxisconfigurationPackage.eINSTANCE;
+	}
+} // NattableaxisconfigurationFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/PasteEObjectConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/PasteEObjectConfigurationImpl.java
new file mode 100644
index 0000000..7033d46
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/PasteEObjectConfigurationImpl.java
@@ -0,0 +1,240 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Paste EObject Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.PasteEObjectConfigurationImpl#getPastedElementId <em>Pasted Element Id</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.PasteEObjectConfigurationImpl#getPasteElementContainementFeature <em>Paste Element Containement Feature</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.PasteEObjectConfigurationImpl#getAxisIdentifier <em>Axis Identifier</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class PasteEObjectConfigurationImpl extends IPasteConfigurationImpl implements PasteEObjectConfiguration {
+
+	/**
+	 * The default value of the '{@link #getPastedElementId() <em>Pasted Element Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPastedElementId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PASTED_ELEMENT_ID_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PasteEObjectConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getPastedElementId() {
+		return (String)eDynamicGet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setPastedElementId(String newPastedElementId) {
+		eDynamicSet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID, newPastedElementId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EStructuralFeature getPasteElementContainementFeature() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EStructuralFeature basicGetPasteElementContainementFeature() {
+		return (EStructuralFeature)eDynamicGet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setPasteElementContainementFeature(EStructuralFeature newPasteElementContainementFeature) {
+		eDynamicSet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE, newPasteElementContainementFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IAxis getAxisIdentifier() {
+		return (IAxis)eDynamicGet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetAxisIdentifier(IAxis newAxisIdentifier, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newAxisIdentifier, NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAxisIdentifier(IAxis newAxisIdentifier) {
+		eDynamicSet(NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER, newAxisIdentifier);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER:
+				return basicSetAxisIdentifier(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID:
+				return getPastedElementId();
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE:
+				if (resolve) return getPasteElementContainementFeature();
+				return basicGetPasteElementContainementFeature();
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER:
+				return getAxisIdentifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID:
+				setPastedElementId((String)newValue);
+				return;
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE:
+				setPasteElementContainementFeature((EStructuralFeature)newValue);
+				return;
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER:
+				setAxisIdentifier((IAxis)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID:
+				setPastedElementId(PASTED_ELEMENT_ID_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE:
+				setPasteElementContainementFeature((EStructuralFeature)null);
+				return;
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER:
+				setAxisIdentifier((IAxis)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTED_ELEMENT_ID:
+				return PASTED_ELEMENT_ID_EDEFAULT == null ? getPastedElementId() != null : !PASTED_ELEMENT_ID_EDEFAULT.equals(getPastedElementId());
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__PASTE_ELEMENT_CONTAINEMENT_FEATURE:
+				return basicGetPasteElementContainementFeature() != null;
+			case NattableaxisconfigurationPackage.PASTE_EOBJECT_CONFIGURATION__AXIS_IDENTIFIER:
+				return getAxisIdentifier() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // PasteEObjectConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TableHeaderAxisConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TableHeaderAxisConfigurationImpl.java
new file mode 100644
index 0000000..f066631
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TableHeaderAxisConfigurationImpl.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.AxisManagerRepresentation;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Header Axis Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TableHeaderAxisConfigurationImpl#getAxisManagers <em>Axis Managers</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TableHeaderAxisConfigurationImpl extends AbstractHeaderAxisConfigurationImpl implements TableHeaderAxisConfiguration {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableHeaderAxisConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.TABLE_HEADER_AXIS_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AxisManagerRepresentation> getAxisManagers() {
+		return (EList<AxisManagerRepresentation>)eDynamicGet(NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS:
+				return ((InternalEList<?>)getAxisManagers()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS:
+				return getAxisManagers();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS:
+				getAxisManagers().clear();
+				getAxisManagers().addAll((Collection<? extends AxisManagerRepresentation>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS:
+				getAxisManagers().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TABLE_HEADER_AXIS_CONFIGURATION__AXIS_MANAGERS:
+				return !getAxisManagers().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // TableHeaderAxisConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TreeFillingConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TreeFillingConfigurationImpl.java
new file mode 100644
index 0000000..c979798
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisconfiguration/impl/TreeFillingConfigurationImpl.java
@@ -0,0 +1,368 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.emf.expressions.booleanexpressions.IBooleanEObjectExpression;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.NattableaxisconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.PasteEObjectConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TreeFillingConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ILabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Tree Filling Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getAxisUsedAsAxisProvider <em>Axis Used As Axis Provider</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getPasteConfiguration <em>Paste Configuration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getDepth <em>Depth</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getLabelProvider <em>Label Provider</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getLabelProviderContext <em>Label Provider Context</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisconfiguration.impl.TreeFillingConfigurationImpl#getFilterRule <em>Filter Rule</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TreeFillingConfigurationImpl extends StyledElementImpl implements TreeFillingConfiguration {
+
+	/**
+	 * The default value of the '{@link #getDepth() <em>Depth</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDepth()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int DEPTH_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getLabelProviderContext() <em>Label Provider Context</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLabelProviderContext()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LABEL_PROVIDER_CONTEXT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeFillingConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public IAxis getAxisUsedAsAxisProvider() {
+		return (IAxis)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetAxisUsedAsAxisProvider(IAxis newAxisUsedAsAxisProvider, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newAxisUsedAsAxisProvider, NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setAxisUsedAsAxisProvider(IAxis newAxisUsedAsAxisProvider) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER, newAxisUsedAsAxisProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public PasteEObjectConfiguration getPasteConfiguration() {
+		return (PasteEObjectConfiguration)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PasteEObjectConfiguration basicGetPasteConfiguration() {
+		return (PasteEObjectConfiguration)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setPasteConfiguration(PasteEObjectConfiguration newPasteConfiguration) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION, newPasteConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int getDepth() {
+		return (Integer)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__DEPTH, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDepth(int newDepth) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__DEPTH, newDepth);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILabelProviderConfiguration getLabelProvider() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ILabelProviderConfiguration basicGetLabelProvider() {
+		return (ILabelProviderConfiguration)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLabelProvider(ILabelProviderConfiguration newLabelProvider) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER, newLabelProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getLabelProviderContext() {
+		return (String)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setLabelProviderContext(String newLabelProviderContext) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT, newLabelProviderContext);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IBooleanEObjectExpression getFilterRule() {
+		return (IBooleanEObjectExpression)eDynamicGet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__FILTER_RULE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetFilterRule(IBooleanEObjectExpression newFilterRule, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newFilterRule, NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFilterRule(IBooleanEObjectExpression newFilterRule) {
+		eDynamicSet(NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE - ESTATIC_FEATURE_COUNT, NattableaxisconfigurationPackage.Literals.TREE_FILLING_CONFIGURATION__FILTER_RULE, newFilterRule);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER:
+				return basicSetAxisUsedAsAxisProvider(null, msgs);
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE:
+				return basicSetFilterRule(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER:
+				return getAxisUsedAsAxisProvider();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION:
+				if (resolve) return getPasteConfiguration();
+				return basicGetPasteConfiguration();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH:
+				return getDepth();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER:
+				if (resolve) return getLabelProvider();
+				return basicGetLabelProvider();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT:
+				return getLabelProviderContext();
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE:
+				return getFilterRule();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER:
+				setAxisUsedAsAxisProvider((IAxis)newValue);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION:
+				setPasteConfiguration((PasteEObjectConfiguration)newValue);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH:
+				setDepth((Integer)newValue);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER:
+				setLabelProvider((ILabelProviderConfiguration)newValue);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT:
+				setLabelProviderContext((String)newValue);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE:
+				setFilterRule((IBooleanEObjectExpression)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER:
+				setAxisUsedAsAxisProvider((IAxis)null);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION:
+				setPasteConfiguration((PasteEObjectConfiguration)null);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH:
+				setDepth(DEPTH_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER:
+				setLabelProvider((ILabelProviderConfiguration)null);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT:
+				setLabelProviderContext(LABEL_PROVIDER_CONTEXT_EDEFAULT);
+				return;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE:
+				setFilterRule((IBooleanEObjectExpression)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__AXIS_USED_AS_AXIS_PROVIDER:
+				return getAxisUsedAsAxisProvider() != null;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__PASTE_CONFIGURATION:
+				return basicGetPasteConfiguration() != null;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__DEPTH:
+				return getDepth() != DEPTH_EDEFAULT;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER:
+				return basicGetLabelProvider() != null;
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__LABEL_PROVIDER_CONTEXT:
+				return LABEL_PROVIDER_CONTEXT_EDEFAULT == null ? getLabelProviderContext() != null : !LABEL_PROVIDER_CONTEXT_EDEFAULT.equals(getLabelProviderContext());
+			case NattableaxisconfigurationPackage.TREE_FILLING_CONFIGURATION__FILTER_RULE:
+				return getFilterRule() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // TreeFillingConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AbstractAxisProviderImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AbstractAxisProviderImpl.java
new file mode 100644
index 0000000..aa921ea
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AbstractAxisProviderImpl.java
@@ -0,0 +1,79 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableNamedElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AbstractAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Axis Provider</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public abstract class AbstractAxisProviderImpl extends TableNamedElementImpl implements AbstractAxisProvider {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbstractAxisProviderImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisproviderPackage.Literals.ABSTRACT_AXIS_PROVIDER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EList<IAxis> getAxis() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattableaxisproviderPackage.ABSTRACT_AXIS_PROVIDER___GET_AXIS:
+				return getAxis();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // AbstractAxisProviderImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AxisProviderImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AxisProviderImpl.java
new file mode 100644
index 0000000..eebd93c
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/AxisProviderImpl.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Axis Provider</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl.AxisProviderImpl#getAxis <em>Axis</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class AxisProviderImpl extends AbstractAxisProviderImpl implements AxisProvider {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AxisProviderImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisproviderPackage.Literals.AXIS_PROVIDER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<IAxis> getAxis() {
+		return (EList<IAxis>)eDynamicGet(NattableaxisproviderPackage.AXIS_PROVIDER__AXIS - ESTATIC_FEATURE_COUNT, NattableaxisproviderPackage.Literals.AXIS_PROVIDER__AXIS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.AXIS_PROVIDER__AXIS:
+				return ((InternalEList<?>)getAxis()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.AXIS_PROVIDER__AXIS:
+				return getAxis();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.AXIS_PROVIDER__AXIS:
+				getAxis().clear();
+				getAxis().addAll((Collection<? extends IAxis>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.AXIS_PROVIDER__AXIS:
+				getAxis().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.AXIS_PROVIDER__AXIS:
+				return !getAxis().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // AxisProviderImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/MasterObjectAxisProviderImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/MasterObjectAxisProviderImpl.java
new file mode 100644
index 0000000..26acf46
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/MasterObjectAxisProviderImpl.java
@@ -0,0 +1,186 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.MasterObjectAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.IWrapper;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Master Object Axis Provider</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl.MasterObjectAxisProviderImpl#isDisconnectSlave <em>Disconnect Slave</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl.MasterObjectAxisProviderImpl#getSources <em>Sources</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MasterObjectAxisProviderImpl extends AxisProviderImpl implements MasterObjectAxisProvider {
+
+	/**
+	 * The default value of the '{@link #isDisconnectSlave() <em>Disconnect Slave</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisconnectSlave()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISCONNECT_SLAVE_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MasterObjectAxisProviderImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisproviderPackage.Literals.MASTER_OBJECT_AXIS_PROVIDER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisconnectSlave() {
+		return (Boolean)eDynamicGet(NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE - ESTATIC_FEATURE_COUNT, NattableaxisproviderPackage.Literals.IMASTER_AXIS_PROVIDER__DISCONNECT_SLAVE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisconnectSlave(boolean newDisconnectSlave) {
+		eDynamicSet(NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE - ESTATIC_FEATURE_COUNT, NattableaxisproviderPackage.Literals.IMASTER_AXIS_PROVIDER__DISCONNECT_SLAVE, newDisconnectSlave);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EList<IWrapper> getSources() {
+		return (EList<IWrapper>)eDynamicGet(NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES - ESTATIC_FEATURE_COUNT, NattableaxisproviderPackage.Literals.IMASTER_AXIS_PROVIDER__SOURCES, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES:
+				return ((InternalEList<?>)getSources()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE:
+				return isDisconnectSlave();
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES:
+				return getSources();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE:
+				setDisconnectSlave((Boolean)newValue);
+				return;
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES:
+				getSources().clear();
+				getSources().addAll((Collection<? extends IWrapper>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE:
+				setDisconnectSlave(DISCONNECT_SLAVE_EDEFAULT);
+				return;
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES:
+				getSources().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__DISCONNECT_SLAVE:
+				return isDisconnectSlave() != DISCONNECT_SLAVE_EDEFAULT;
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER__SOURCES:
+				return !getSources().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // MasterObjectAxisProviderImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/NattableaxisproviderFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/NattableaxisproviderFactoryImpl.java
new file mode 100644
index 0000000..f5fe52c
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/NattableaxisproviderFactoryImpl.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.MasterObjectAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.SlaveObjectAxisProvider;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattableaxisproviderFactoryImpl extends EFactoryImpl implements NattableaxisproviderFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattableaxisproviderFactory init() {
+		try {
+			NattableaxisproviderFactory theNattableaxisproviderFactory = (NattableaxisproviderFactory)EPackage.Registry.INSTANCE.getEFactory(NattableaxisproviderPackage.eNS_URI);
+			if (theNattableaxisproviderFactory != null) {
+				return theNattableaxisproviderFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableaxisproviderFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattableaxisproviderFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattableaxisproviderPackage.SLAVE_OBJECT_AXIS_PROVIDER: return createSlaveObjectAxisProvider();
+			case NattableaxisproviderPackage.MASTER_OBJECT_AXIS_PROVIDER: return createMasterObjectAxisProvider();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public SlaveObjectAxisProvider createSlaveObjectAxisProvider() {
+		SlaveObjectAxisProviderImpl slaveObjectAxisProvider = new SlaveObjectAxisProviderImpl();
+		return slaveObjectAxisProvider;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public MasterObjectAxisProvider createMasterObjectAxisProvider() {
+		MasterObjectAxisProviderImpl masterObjectAxisProvider = new MasterObjectAxisProviderImpl();
+		return masterObjectAxisProvider;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattableaxisproviderPackage getNattableaxisproviderPackage() {
+		return (NattableaxisproviderPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattableaxisproviderPackage getPackage() {
+		return NattableaxisproviderPackage.eINSTANCE;
+	}
+} // NattableaxisproviderFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/SlaveObjectAxisProviderImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/SlaveObjectAxisProviderImpl.java
new file mode 100644
index 0000000..da1a981
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableaxisprovider/impl/SlaveObjectAxisProviderImpl.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableaxisprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.NattableaxisproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.SlaveObjectAxisProvider;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Slave Object Axis Provider</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class SlaveObjectAxisProviderImpl extends AxisProviderImpl implements SlaveObjectAxisProvider {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SlaveObjectAxisProviderImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableaxisproviderPackage.Literals.SLAVE_OBJECT_AXIS_PROVIDER;
+	}
+} // SlaveObjectAxisProviderImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/CellImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/CellImpl.java
new file mode 100644
index 0000000..c221641
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/CellImpl.java
@@ -0,0 +1,268 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.Cell;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.ICellAxisWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.NattablecellPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.Problem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Cell</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.CellImpl#getColumnWrapper <em>Column Wrapper</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.CellImpl#getRowWrapper <em>Row Wrapper</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.CellImpl#getProblems <em>Problems</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class CellImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements Cell {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected CellImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablecellPackage.Literals.CELL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public ICellAxisWrapper getColumnWrapper() {
+		return (ICellAxisWrapper) eDynamicGet(NattablecellPackage.CELL__COLUMN_WRAPPER - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.CELL__COLUMN_WRAPPER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public NotificationChain basicSetColumnWrapper(ICellAxisWrapper newColumnWrapper, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newColumnWrapper, NattablecellPackage.CELL__COLUMN_WRAPPER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setColumnWrapper(ICellAxisWrapper newColumnWrapper) {
+		eDynamicSet(NattablecellPackage.CELL__COLUMN_WRAPPER - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.CELL__COLUMN_WRAPPER, newColumnWrapper);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public ICellAxisWrapper getRowWrapper() {
+		return (ICellAxisWrapper) eDynamicGet(NattablecellPackage.CELL__ROW_WRAPPER - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.CELL__ROW_WRAPPER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public NotificationChain basicSetRowWrapper(ICellAxisWrapper newRowWrapper, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newRowWrapper, NattablecellPackage.CELL__ROW_WRAPPER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setRowWrapper(ICellAxisWrapper newRowWrapper) {
+		eDynamicSet(NattablecellPackage.CELL__ROW_WRAPPER - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.CELL__ROW_WRAPPER, newRowWrapper);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Problem> getProblems() {
+		return (EList<Problem>) eDynamicGet(NattablecellPackage.CELL__PROBLEMS - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.CELL__PROBLEMS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case NattablecellPackage.CELL__COLUMN_WRAPPER:
+			return basicSetColumnWrapper(null, msgs);
+		case NattablecellPackage.CELL__ROW_WRAPPER:
+			return basicSetRowWrapper(null, msgs);
+		case NattablecellPackage.CELL__PROBLEMS:
+			return ((InternalEList<?>) getProblems()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablecellPackage.CELL__COLUMN_WRAPPER:
+			return getColumnWrapper();
+		case NattablecellPackage.CELL__ROW_WRAPPER:
+			return getRowWrapper();
+		case NattablecellPackage.CELL__PROBLEMS:
+			return getProblems();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablecellPackage.CELL__COLUMN_WRAPPER:
+			setColumnWrapper((ICellAxisWrapper) newValue);
+			return;
+		case NattablecellPackage.CELL__ROW_WRAPPER:
+			setRowWrapper((ICellAxisWrapper) newValue);
+			return;
+		case NattablecellPackage.CELL__PROBLEMS:
+			getProblems().clear();
+			getProblems().addAll((Collection<? extends Problem>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.CELL__COLUMN_WRAPPER:
+			setColumnWrapper((ICellAxisWrapper) null);
+			return;
+		case NattablecellPackage.CELL__ROW_WRAPPER:
+			setRowWrapper((ICellAxisWrapper) null);
+			return;
+		case NattablecellPackage.CELL__PROBLEMS:
+			getProblems().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.CELL__COLUMN_WRAPPER:
+			return getColumnWrapper() != null;
+		case NattablecellPackage.CELL__ROW_WRAPPER:
+			return getRowWrapper() != null;
+		case NattablecellPackage.CELL__PROBLEMS:
+			return !getProblems().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // CellImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/EObjectAxisWrapperImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/EObjectAxisWrapperImpl.java
new file mode 100644
index 0000000..ddc9092
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/EObjectAxisWrapperImpl.java
@@ -0,0 +1,175 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.EObjectAxisWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.NattablecellPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject Axis Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.EObjectAxisWrapperImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class EObjectAxisWrapperImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements EObjectAxisWrapper {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected EObjectAxisWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablecellPackage.Literals.EOBJECT_AXIS_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject getElement() {
+		return (EObject) eDynamicGet(NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.EOBJECT_AXIS_WRAPPER__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EObject basicGetElement() {
+		return (EObject) eDynamicGet(NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.EOBJECT_AXIS_WRAPPER__ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setElement(EObject newElement) {
+		eDynamicSet(NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.EOBJECT_AXIS_WRAPPER__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT:
+			if (resolve) {
+				return getElement();
+			}
+			return basicGetElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT:
+			setElement((EObject) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT:
+			setElement((EObject) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.EOBJECT_AXIS_WRAPPER__ELEMENT:
+			return basicGetElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // EObjectAxisWrapperImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/IdAxisWrapperImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/IdAxisWrapperImpl.java
new file mode 100644
index 0000000..a99afbf
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/IdAxisWrapperImpl.java
@@ -0,0 +1,172 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.IdAxisWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.NattablecellPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Id Axis Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl.IdAxisWrapperImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class IdAxisWrapperImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements IdAxisWrapper {
+
+	/**
+	 * The default value of the '{@link #getElement() <em>Element</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getElement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ELEMENT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IdAxisWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablecellPackage.Literals.ID_AXIS_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getElement() {
+		return (String) eDynamicGet(NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.ID_AXIS_WRAPPER__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setElement(String newElement) {
+		eDynamicSet(NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablecellPackage.Literals.ID_AXIS_WRAPPER__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT:
+			return getElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT:
+			setElement((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT:
+			setElement(ELEMENT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablecellPackage.ID_AXIS_WRAPPER__ELEMENT:
+			return ELEMENT_EDEFAULT == null ? getElement() != null : !ELEMENT_EDEFAULT.equals(getElement());
+		}
+		return super.eIsSet(featureID);
+	}
+} // IdAxisWrapperImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/NattablecellFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/NattablecellFactoryImpl.java
new file mode 100644
index 0000000..429a29b
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecell/impl/NattablecellFactoryImpl.java
@@ -0,0 +1,145 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecell.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.Cell;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.EObjectAxisWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.IdAxisWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.NattablecellFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecell.NattablecellPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class NattablecellFactoryImpl extends EFactoryImpl implements NattablecellFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static NattablecellFactory init() {
+		try {
+			NattablecellFactory theNattablecellFactory = (NattablecellFactory) EPackage.Registry.INSTANCE.getEFactory(NattablecellPackage.eNS_URI);
+			if (theNattablecellFactory != null) {
+				return theNattablecellFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattablecellFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NattablecellFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case NattablecellPackage.CELL:
+			return createCell();
+		case NattablecellPackage.EOBJECT_AXIS_WRAPPER:
+			return createEObjectAxisWrapper();
+		case NattablecellPackage.ID_AXIS_WRAPPER:
+			return createIdAxisWrapper();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Cell createCell() {
+		CellImpl cell = new CellImpl();
+		return cell;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public EObjectAxisWrapper createEObjectAxisWrapper() {
+		EObjectAxisWrapperImpl eObjectAxisWrapper = new EObjectAxisWrapperImpl();
+		return eObjectAxisWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public IdAxisWrapper createIdAxisWrapper() {
+		IdAxisWrapperImpl idAxisWrapper = new IdAxisWrapperImpl();
+		return idAxisWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public NattablecellPackage getNattablecellPackage() {
+		return (NattablecellPackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablecellPackage getPackage() {
+		return NattablecellPackage.eINSTANCE;
+	}
+} // NattablecellFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/GenericRelationshipMatrixCellEditorConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/GenericRelationshipMatrixCellEditorConfigurationImpl.java
new file mode 100644
index 0000000..25e5033
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/GenericRelationshipMatrixCellEditorConfigurationImpl.java
@@ -0,0 +1,401 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.papyrus.infra.emf.expressions.booleanexpressions.IBooleanEObjectExpression;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxis.IAxis;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.GenericRelationshipMatrixCellEditorConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.MatrixRelationShipDirection;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.MatrixRelationShipOwnerStrategy;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.NattablecelleditorPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.IWrapper;
+import org.eclipse.papyrus.infra.types.ElementTypeConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic Relationship Matrix Cell Editor Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getCellEditorId <em>Cell Editor Id</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getDirection <em>Direction</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getCellContentsFilter <em>Cell Contents Filter</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getEditedElement <em>Edited Element</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getRelationshipOwnerStrategy <em>Relationship Owner Strategy</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getRelationshipOwner <em>Relationship Owner</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl.GenericRelationshipMatrixCellEditorConfigurationImpl#getRelationshipOwnerFeature <em>Relationship Owner Feature</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class GenericRelationshipMatrixCellEditorConfigurationImpl extends StyledElementImpl implements GenericRelationshipMatrixCellEditorConfiguration {
+	/**
+	 * The default value of the '{@link #getCellEditorId() <em>Cell Editor Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCellEditorId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CELL_EDITOR_ID_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getDirection() <em>Direction</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDirection()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final MatrixRelationShipDirection DIRECTION_EDEFAULT = MatrixRelationShipDirection.FROM_ROW_TO_COLUMN;
+
+	/**
+	 * The default value of the '{@link #getRelationshipOwnerStrategy() <em>Relationship Owner Strategy</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRelationshipOwnerStrategy()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final MatrixRelationShipOwnerStrategy RELATIONSHIP_OWNER_STRATEGY_EDEFAULT = MatrixRelationShipOwnerStrategy.DEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GenericRelationshipMatrixCellEditorConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCellEditorId() {
+		return (String)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.ICELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCellEditorId(String newCellEditorId) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.ICELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID, newCellEditorId);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MatrixRelationShipDirection getDirection() {
+		return (MatrixRelationShipDirection)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDirection(MatrixRelationShipDirection newDirection) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION, newDirection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IBooleanEObjectExpression getCellContentsFilter() {
+		return (IBooleanEObjectExpression)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCellContentsFilter(IBooleanEObjectExpression newCellContentsFilter, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newCellContentsFilter, NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCellContentsFilter(IBooleanEObjectExpression newCellContentsFilter) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER, newCellContentsFilter);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElementTypeConfiguration getEditedElement() {
+		return (ElementTypeConfiguration)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElementTypeConfiguration basicGetEditedElement() {
+		return (ElementTypeConfiguration)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEditedElement(ElementTypeConfiguration newEditedElement) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT, newEditedElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MatrixRelationShipOwnerStrategy getRelationshipOwnerStrategy() {
+		return (MatrixRelationShipOwnerStrategy)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelationshipOwnerStrategy(MatrixRelationShipOwnerStrategy newRelationshipOwnerStrategy) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY, newRelationshipOwnerStrategy);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IWrapper getRelationshipOwner() {
+		return (IWrapper)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRelationshipOwner(IWrapper newRelationshipOwner, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newRelationshipOwner, NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelationshipOwner(IWrapper newRelationshipOwner) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER, newRelationshipOwner);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IAxis getRelationshipOwnerFeature() {
+		return (IAxis)eDynamicGet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRelationshipOwnerFeature(IAxis newRelationshipOwnerFeature, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newRelationshipOwnerFeature, NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelationshipOwnerFeature(IAxis newRelationshipOwnerFeature) {
+		eDynamicSet(NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE - ESTATIC_FEATURE_COUNT, NattablecelleditorPackage.Literals.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE, newRelationshipOwnerFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER:
+				return basicSetCellContentsFilter(null, msgs);
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER:
+				return basicSetRelationshipOwner(null, msgs);
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE:
+				return basicSetRelationshipOwnerFeature(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID:
+				return getCellEditorId();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION:
+				return getDirection();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER:
+				return getCellContentsFilter();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT:
+				if (resolve) return getEditedElement();
+				return basicGetEditedElement();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY:
+				return getRelationshipOwnerStrategy();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER:
+				return getRelationshipOwner();
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE:
+				return getRelationshipOwnerFeature();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID:
+				setCellEditorId((String)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION:
+				setDirection((MatrixRelationShipDirection)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER:
+				setCellContentsFilter((IBooleanEObjectExpression)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT:
+				setEditedElement((ElementTypeConfiguration)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY:
+				setRelationshipOwnerStrategy((MatrixRelationShipOwnerStrategy)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER:
+				setRelationshipOwner((IWrapper)newValue);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE:
+				setRelationshipOwnerFeature((IAxis)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID:
+				setCellEditorId(CELL_EDITOR_ID_EDEFAULT);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION:
+				setDirection(DIRECTION_EDEFAULT);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER:
+				setCellContentsFilter((IBooleanEObjectExpression)null);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT:
+				setEditedElement((ElementTypeConfiguration)null);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY:
+				setRelationshipOwnerStrategy(RELATIONSHIP_OWNER_STRATEGY_EDEFAULT);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER:
+				setRelationshipOwner((IWrapper)null);
+				return;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE:
+				setRelationshipOwnerFeature((IAxis)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_EDITOR_ID:
+				return CELL_EDITOR_ID_EDEFAULT == null ? getCellEditorId() != null : !CELL_EDITOR_ID_EDEFAULT.equals(getCellEditorId());
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__DIRECTION:
+				return getDirection() != DIRECTION_EDEFAULT;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__CELL_CONTENTS_FILTER:
+				return getCellContentsFilter() != null;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__EDITED_ELEMENT:
+				return basicGetEditedElement() != null;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_STRATEGY:
+				return getRelationshipOwnerStrategy() != RELATIONSHIP_OWNER_STRATEGY_EDEFAULT;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER:
+				return getRelationshipOwner() != null;
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION__RELATIONSHIP_OWNER_FEATURE:
+				return getRelationshipOwnerFeature() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //GenericRelationshipMatrixCellEditorConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/NattablecelleditorFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/NattablecelleditorFactoryImpl.java
new file mode 100644
index 0000000..862c663
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablecelleditor/impl/NattablecelleditorFactoryImpl.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablecelleditor.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.GenericRelationshipMatrixCellEditorConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.MatrixRelationShipDirection;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.MatrixRelationShipOwnerStrategy;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.NattablecelleditorFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.NattablecelleditorPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattablecelleditorFactoryImpl extends EFactoryImpl implements NattablecelleditorFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattablecelleditorFactory init() {
+		try {
+			NattablecelleditorFactory theNattablecelleditorFactory = (NattablecelleditorFactory)EPackage.Registry.INSTANCE.getEFactory(NattablecelleditorPackage.eNS_URI);
+			if (theNattablecelleditorFactory != null) {
+				return theNattablecelleditorFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattablecelleditorFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablecelleditorFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattablecelleditorPackage.GENERIC_RELATIONSHIP_MATRIX_CELL_EDITOR_CONFIGURATION: return createGenericRelationshipMatrixCellEditorConfiguration();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattablecelleditorPackage.MATRIX_RELATION_SHIP_DIRECTION:
+				return createMatrixRelationShipDirectionFromString(eDataType, initialValue);
+			case NattablecelleditorPackage.MATRIX_RELATION_SHIP_OWNER_STRATEGY:
+				return createMatrixRelationShipOwnerStrategyFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattablecelleditorPackage.MATRIX_RELATION_SHIP_DIRECTION:
+				return convertMatrixRelationShipDirectionToString(eDataType, instanceValue);
+			case NattablecelleditorPackage.MATRIX_RELATION_SHIP_OWNER_STRATEGY:
+				return convertMatrixRelationShipOwnerStrategyToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GenericRelationshipMatrixCellEditorConfiguration createGenericRelationshipMatrixCellEditorConfiguration() {
+		GenericRelationshipMatrixCellEditorConfigurationImpl genericRelationshipMatrixCellEditorConfiguration = new GenericRelationshipMatrixCellEditorConfigurationImpl();
+		return genericRelationshipMatrixCellEditorConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MatrixRelationShipDirection createMatrixRelationShipDirectionFromString(EDataType eDataType, String initialValue) {
+		MatrixRelationShipDirection result = MatrixRelationShipDirection.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertMatrixRelationShipDirectionToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MatrixRelationShipOwnerStrategy createMatrixRelationShipOwnerStrategyFromString(EDataType eDataType, String initialValue) {
+		MatrixRelationShipOwnerStrategy result = MatrixRelationShipOwnerStrategy.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertMatrixRelationShipOwnerStrategyToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablecelleditorPackage getNattablecelleditorPackage() {
+		return (NattablecelleditorPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablecelleditorPackage getPackage() {
+		return NattablecelleditorPackage.eINSTANCE;
+	}
+
+} //NattablecelleditorFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/NattableconfigurationFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/NattableconfigurationFactoryImpl.java
new file mode 100644
index 0000000..2ec4e4e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/NattableconfigurationFactoryImpl.java
@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.CellEditorDeclaration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.NattableconfigurationFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.NattableconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattableconfigurationFactoryImpl extends EFactoryImpl implements NattableconfigurationFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattableconfigurationFactory init() {
+		try {
+			NattableconfigurationFactory theNattableconfigurationFactory = (NattableconfigurationFactory)EPackage.Registry.INSTANCE.getEFactory(NattableconfigurationPackage.eNS_URI);
+			if (theNattableconfigurationFactory != null) {
+				return theNattableconfigurationFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableconfigurationFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattableconfigurationFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION: return createTableConfiguration();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattableconfigurationPackage.CELL_EDITOR_DECLARATION:
+				return createCellEditorDeclarationFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattableconfigurationPackage.CELL_EDITOR_DECLARATION:
+				return convertCellEditorDeclarationToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TableConfiguration createTableConfiguration() {
+		TableConfigurationImpl tableConfiguration = new TableConfigurationImpl();
+		return tableConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CellEditorDeclaration createCellEditorDeclarationFromString(EDataType eDataType, String initialValue) {
+		CellEditorDeclaration result = CellEditorDeclaration.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertCellEditorDeclarationToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattableconfigurationPackage getNattableconfigurationPackage() {
+		return (NattableconfigurationPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattableconfigurationPackage getPackage() {
+		return NattableconfigurationPackage.eINSTANCE;
+	}
+} // NattableconfigurationFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableConfigurationImpl.java
new file mode 100644
index 0000000..bfd2dff
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableConfigurationImpl.java
@@ -0,0 +1,550 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisconfiguration.TableHeaderAxisConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableaxisprovider.AbstractAxisProvider;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablecelleditor.ICellEditorConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.CellEditorDeclaration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.NattableconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.AbstractTableTester;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getIconPath <em>Icon Path</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getCreationTester <em>Creation Tester</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getCellEditorDeclaration <em>Cell Editor Declaration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getRowHeaderAxisConfiguration <em>Row Header Axis Configuration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getColumnHeaderAxisConfiguration <em>Column Header Axis Configuration</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getColumnAxisProviders <em>Column Axis Providers</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getRowAxisProviders <em>Row Axis Providers</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getDefaultRowAxisProvider <em>Default Row Axis Provider</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getDefaultColumnAxisProvider <em>Default Column Axis Provider</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableConfigurationImpl#getOwnedCellEditorConfigurations <em>Owned Cell Editor Configurations</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TableConfigurationImpl extends TableNamedElementImpl implements TableConfiguration {
+
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TYPE_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getIconPath() <em>Icon Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIconPath()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ICON_PATH_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getCellEditorDeclaration() <em>Cell Editor Declaration</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCellEditorDeclaration()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final CellEditorDeclaration CELL_EDITOR_DECLARATION_EDEFAULT = CellEditorDeclaration.COLUMN;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableconfigurationPackage.Literals.TABLE_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getType() {
+		return (String)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__TYPE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setType(String newType) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__TYPE, newType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getIconPath() {
+		return (String)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__ICON_PATH, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIconPath(String newIconPath) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__ICON_PATH, newIconPath);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AbstractTableTester getCreationTester() {
+		return (AbstractTableTester)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__CREATION_TESTER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCreationTester(AbstractTableTester newCreationTester, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newCreationTester, NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setCreationTester(AbstractTableTester newCreationTester) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__CREATION_TESTER, newCreationTester);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public CellEditorDeclaration getCellEditorDeclaration() {
+		return (CellEditorDeclaration)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setCellEditorDeclaration(CellEditorDeclaration newCellEditorDeclaration) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION, newCellEditorDeclaration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TableHeaderAxisConfiguration getRowHeaderAxisConfiguration() {
+		return (TableHeaderAxisConfiguration)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRowHeaderAxisConfiguration(TableHeaderAxisConfiguration newRowHeaderAxisConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newRowHeaderAxisConfiguration, NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setRowHeaderAxisConfiguration(TableHeaderAxisConfiguration newRowHeaderAxisConfiguration) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION, newRowHeaderAxisConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TableHeaderAxisConfiguration getColumnHeaderAxisConfiguration() {
+		return (TableHeaderAxisConfiguration)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetColumnHeaderAxisConfiguration(TableHeaderAxisConfiguration newColumnHeaderAxisConfiguration, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newColumnHeaderAxisConfiguration, NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setColumnHeaderAxisConfiguration(TableHeaderAxisConfiguration newColumnHeaderAxisConfiguration) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION, newColumnHeaderAxisConfiguration);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AbstractAxisProvider> getColumnAxisProviders() {
+		return (EList<AbstractAxisProvider>)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<AbstractAxisProvider> getRowAxisProviders() {
+		return (EList<AbstractAxisProvider>)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AbstractAxisProvider getDefaultRowAxisProvider() {
+		return (AbstractAxisProvider)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AbstractAxisProvider basicGetDefaultRowAxisProvider() {
+		return (AbstractAxisProvider)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDefaultRowAxisProvider(AbstractAxisProvider newDefaultRowAxisProvider) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER, newDefaultRowAxisProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public AbstractAxisProvider getDefaultColumnAxisProvider() {
+		return (AbstractAxisProvider)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AbstractAxisProvider basicGetDefaultColumnAxisProvider() {
+		return (AbstractAxisProvider)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDefaultColumnAxisProvider(AbstractAxisProvider newDefaultColumnAxisProvider) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER, newDefaultColumnAxisProvider);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ICellEditorConfiguration getOwnedCellEditorConfigurations() {
+		return (ICellEditorConfiguration)eDynamicGet(NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOwnedCellEditorConfigurations(ICellEditorConfiguration newOwnedCellEditorConfigurations, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject)newOwnedCellEditorConfigurations, NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOwnedCellEditorConfigurations(ICellEditorConfiguration newOwnedCellEditorConfigurations) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS, newOwnedCellEditorConfigurations);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER:
+				return basicSetCreationTester(null, msgs);
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION:
+				return basicSetRowHeaderAxisConfiguration(null, msgs);
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION:
+				return basicSetColumnHeaderAxisConfiguration(null, msgs);
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS:
+				return ((InternalEList<?>)getColumnAxisProviders()).basicRemove(otherEnd, msgs);
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS:
+				return ((InternalEList<?>)getRowAxisProviders()).basicRemove(otherEnd, msgs);
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS:
+				return basicSetOwnedCellEditorConfigurations(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE:
+				return getType();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH:
+				return getIconPath();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER:
+				return getCreationTester();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION:
+				return getCellEditorDeclaration();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION:
+				return getRowHeaderAxisConfiguration();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION:
+				return getColumnHeaderAxisConfiguration();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS:
+				return getColumnAxisProviders();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS:
+				return getRowAxisProviders();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER:
+				if (resolve) return getDefaultRowAxisProvider();
+				return basicGetDefaultRowAxisProvider();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER:
+				if (resolve) return getDefaultColumnAxisProvider();
+				return basicGetDefaultColumnAxisProvider();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS:
+				return getOwnedCellEditorConfigurations();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE:
+				setType((String)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH:
+				setIconPath((String)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER:
+				setCreationTester((AbstractTableTester)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION:
+				setCellEditorDeclaration((CellEditorDeclaration)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION:
+				setRowHeaderAxisConfiguration((TableHeaderAxisConfiguration)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION:
+				setColumnHeaderAxisConfiguration((TableHeaderAxisConfiguration)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS:
+				getColumnAxisProviders().clear();
+				getColumnAxisProviders().addAll((Collection<? extends AbstractAxisProvider>)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS:
+				getRowAxisProviders().clear();
+				getRowAxisProviders().addAll((Collection<? extends AbstractAxisProvider>)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER:
+				setDefaultRowAxisProvider((AbstractAxisProvider)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER:
+				setDefaultColumnAxisProvider((AbstractAxisProvider)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS:
+				setOwnedCellEditorConfigurations((ICellEditorConfiguration)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH:
+				setIconPath(ICON_PATH_EDEFAULT);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER:
+				setCreationTester((AbstractTableTester)null);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION:
+				setCellEditorDeclaration(CELL_EDITOR_DECLARATION_EDEFAULT);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION:
+				setRowHeaderAxisConfiguration((TableHeaderAxisConfiguration)null);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION:
+				setColumnHeaderAxisConfiguration((TableHeaderAxisConfiguration)null);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS:
+				getColumnAxisProviders().clear();
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS:
+				getRowAxisProviders().clear();
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER:
+				setDefaultRowAxisProvider((AbstractAxisProvider)null);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER:
+				setDefaultColumnAxisProvider((AbstractAxisProvider)null);
+				return;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS:
+				setOwnedCellEditorConfigurations((ICellEditorConfiguration)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__TYPE:
+				return TYPE_EDEFAULT == null ? getType() != null : !TYPE_EDEFAULT.equals(getType());
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ICON_PATH:
+				return ICON_PATH_EDEFAULT == null ? getIconPath() != null : !ICON_PATH_EDEFAULT.equals(getIconPath());
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CREATION_TESTER:
+				return getCreationTester() != null;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__CELL_EDITOR_DECLARATION:
+				return getCellEditorDeclaration() != CELL_EDITOR_DECLARATION_EDEFAULT;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_HEADER_AXIS_CONFIGURATION:
+				return getRowHeaderAxisConfiguration() != null;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_HEADER_AXIS_CONFIGURATION:
+				return getColumnHeaderAxisConfiguration() != null;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__COLUMN_AXIS_PROVIDERS:
+				return !getColumnAxisProviders().isEmpty();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__ROW_AXIS_PROVIDERS:
+				return !getRowAxisProviders().isEmpty();
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_ROW_AXIS_PROVIDER:
+				return basicGetDefaultRowAxisProvider() != null;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__DEFAULT_COLUMN_AXIS_PROVIDER:
+				return basicGetDefaultColumnAxisProvider() != null;
+			case NattableconfigurationPackage.TABLE_CONFIGURATION__OWNED_CELL_EDITOR_CONFIGURATIONS:
+				return getOwnedCellEditorConfigurations() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // TableConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableNamedElementImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableNamedElementImpl.java
new file mode 100644
index 0000000..cbc4919
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableconfiguration/impl/TableNamedElementImpl.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.NattableconfigurationPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableconfiguration.TableNamedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Named Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableNamedElementImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableNamedElementImpl#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class TableNamedElementImpl extends StyledElementImpl implements TableNamedElement {
+
+	/**
+	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DESCRIPTION_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableNamedElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableconfigurationPackage.Literals.TABLE_NAMED_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getDescription() {
+		return (String)eDynamicGet(NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_NAMED_ELEMENT__DESCRIPTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDescription(String newDescription) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_NAMED_ELEMENT__DESCRIPTION, newDescription);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getName() {
+		return (String)eDynamicGet(NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_NAMED_ELEMENT__NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setName(String newName) {
+		eDynamicSet(NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME - ESTATIC_FEATURE_COUNT, NattableconfigurationPackage.Literals.TABLE_NAMED_ELEMENT__NAME, newName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION:
+				return getDescription();
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION:
+				setDescription((String)newValue);
+				return;
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION:
+				setDescription(DESCRIPTION_EDEFAULT);
+				return;
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__DESCRIPTION:
+				return DESCRIPTION_EDEFAULT == null ? getDescription() != null : !DESCRIPTION_EDEFAULT.equals(getDescription());
+			case NattableconfigurationPackage.TABLE_NAMED_ELEMENT__NAME:
+				return NAME_EDEFAULT == null ? getName() != null : !NAME_EDEFAULT.equals(getName());
+		}
+		return super.eIsSet(featureID);
+	}
+} // TableNamedElementImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/FeatureLabelProviderConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/FeatureLabelProviderConfigurationImpl.java
new file mode 100644
index 0000000..09f0b8d
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/FeatureLabelProviderConfigurationImpl.java
@@ -0,0 +1,265 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.FeatureLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Label Provider Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl#isDisplayIsDerived <em>Display Is Derived</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl#isDisplayType <em>Display Type</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl#isDisplayMultiplicity <em>Display Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.FeatureLabelProviderConfigurationImpl#isDisplayName <em>Display Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FeatureLabelProviderConfigurationImpl extends ObjectLabelProviderConfigurationImpl implements FeatureLabelProviderConfiguration {
+
+	/**
+	 * The default value of the '{@link #isDisplayIsDerived() <em>Display Is Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayIsDerived()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_IS_DERIVED_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayType() <em>Display Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_TYPE_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayMultiplicity() <em>Display Multiplicity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayMultiplicity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_MULTIPLICITY_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayName() <em>Display Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_NAME_EDEFAULT = true;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureLabelProviderConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayIsDerived() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayIsDerived(boolean newDisplayIsDerived) {
+		eDynamicSet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED, newDisplayIsDerived);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayType() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayType(boolean newDisplayType) {
+		eDynamicSet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE, newDisplayType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayMultiplicity() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayMultiplicity(boolean newDisplayMultiplicity) {
+		eDynamicSet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY, newDisplayMultiplicity);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayName() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayName(boolean newDisplayName) {
+		eDynamicSet(NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME, newDisplayName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED:
+				return isDisplayIsDerived();
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				return isDisplayType();
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				return isDisplayMultiplicity();
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				return isDisplayName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED:
+				setDisplayIsDerived((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				setDisplayType((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				setDisplayMultiplicity((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				setDisplayName((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED:
+				setDisplayIsDerived(DISPLAY_IS_DERIVED_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				setDisplayType(DISPLAY_TYPE_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				setDisplayMultiplicity(DISPLAY_MULTIPLICITY_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				setDisplayName(DISPLAY_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_IS_DERIVED:
+				return isDisplayIsDerived() != DISPLAY_IS_DERIVED_EDEFAULT;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				return isDisplayType() != DISPLAY_TYPE_EDEFAULT;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				return isDisplayMultiplicity() != DISPLAY_MULTIPLICITY_EDEFAULT;
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				return isDisplayName() != DISPLAY_NAME_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // FeatureLabelProviderConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/NattablelabelproviderFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/NattablelabelproviderFactoryImpl.java
new file mode 100644
index 0000000..4abe8ed
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/NattablelabelproviderFactoryImpl.java
@@ -0,0 +1,133 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.FeatureLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ObjectLabelProviderConfiguration;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattablelabelproviderFactoryImpl extends EFactoryImpl implements NattablelabelproviderFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattablelabelproviderFactory init() {
+		try {
+			NattablelabelproviderFactory theNattablelabelproviderFactory = (NattablelabelproviderFactory)EPackage.Registry.INSTANCE.getEFactory(NattablelabelproviderPackage.eNS_URI);
+			if (theNattablelabelproviderFactory != null) {
+				return theNattablelabelproviderFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattablelabelproviderFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablelabelproviderFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattablelabelproviderPackage.FEATURE_LABEL_PROVIDER_CONFIGURATION: return createFeatureLabelProviderConfiguration();
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION: return createObjectLabelProviderConfiguration();
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION: return createOperationLabelProviderConfiguration();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FeatureLabelProviderConfiguration createFeatureLabelProviderConfiguration() {
+		FeatureLabelProviderConfigurationImpl featureLabelProviderConfiguration = new FeatureLabelProviderConfigurationImpl();
+		return featureLabelProviderConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ObjectLabelProviderConfiguration createObjectLabelProviderConfiguration() {
+		ObjectLabelProviderConfigurationImpl objectLabelProviderConfiguration = new ObjectLabelProviderConfigurationImpl();
+		return objectLabelProviderConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OperationLabelProviderConfiguration createOperationLabelProviderConfiguration() {
+		OperationLabelProviderConfigurationImpl operationLabelProviderConfiguration = new OperationLabelProviderConfigurationImpl();
+		return operationLabelProviderConfiguration;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattablelabelproviderPackage getNattablelabelproviderPackage() {
+		return (NattablelabelproviderPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablelabelproviderPackage getPackage() {
+		return NattablelabelproviderPackage.eINSTANCE;
+	}
+} // NattablelabelproviderFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/ObjectLabelProviderConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/ObjectLabelProviderConfigurationImpl.java
new file mode 100644
index 0000000..9c5b1f1
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/ObjectLabelProviderConfigurationImpl.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.ObjectLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Object Label Provider Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.ObjectLabelProviderConfigurationImpl#isDisplayIcon <em>Display Icon</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.ObjectLabelProviderConfigurationImpl#isDisplayLabel <em>Display Label</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ObjectLabelProviderConfigurationImpl extends StyledElementImpl implements ObjectLabelProviderConfiguration {
+
+	/**
+	 * The default value of the '{@link #isDisplayIcon() <em>Display Icon</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayIcon()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_ICON_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayLabel() <em>Display Label</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_LABEL_EDEFAULT = true;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ObjectLabelProviderConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablelabelproviderPackage.Literals.OBJECT_LABEL_PROVIDER_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayIcon() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayIcon(boolean newDisplayIcon) {
+		eDynamicSet(NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON, newDisplayIcon);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDisplayLabel() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDisplayLabel(boolean newDisplayLabel) {
+		eDynamicSet(NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL, newDisplayLabel);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON:
+				return isDisplayIcon();
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL:
+				return isDisplayLabel();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON:
+				setDisplayIcon((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL:
+				setDisplayLabel((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON:
+				setDisplayIcon(DISPLAY_ICON_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL:
+				setDisplayLabel(DISPLAY_LABEL_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_ICON:
+				return isDisplayIcon() != DISPLAY_ICON_EDEFAULT;
+			case NattablelabelproviderPackage.OBJECT_LABEL_PROVIDER_CONFIGURATION__DISPLAY_LABEL:
+				return isDisplayLabel() != DISPLAY_LABEL_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // ObjectLabelProviderConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/OperationLabelProviderConfigurationImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/OperationLabelProviderConfigurationImpl.java
new file mode 100644
index 0000000..0464834
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablelabelprovider/impl/OperationLabelProviderConfigurationImpl.java
@@ -0,0 +1,218 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.NattablelabelproviderPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablelabelprovider.OperationLabelProviderConfiguration;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Operation Label Provider Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.OperationLabelProviderConfigurationImpl#isDisplayType <em>Display Type</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.OperationLabelProviderConfigurationImpl#isDisplayMultiplicity <em>Display Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablelabelprovider.impl.OperationLabelProviderConfigurationImpl#isDisplayName <em>Display Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OperationLabelProviderConfigurationImpl extends ObjectLabelProviderConfigurationImpl implements OperationLabelProviderConfiguration {
+	/**
+	 * The default value of the '{@link #isDisplayType() <em>Display Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_TYPE_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayMultiplicity() <em>Display Multiplicity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayMultiplicity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_MULTIPLICITY_EDEFAULT = true;
+
+	/**
+	 * The default value of the '{@link #isDisplayName() <em>Display Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isDisplayName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DISPLAY_NAME_EDEFAULT = true;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationLabelProviderConfigurationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDisplayType() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDisplayType(boolean newDisplayType) {
+		eDynamicSet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE, newDisplayType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDisplayMultiplicity() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDisplayMultiplicity(boolean newDisplayMultiplicity) {
+		eDynamicSet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY, newDisplayMultiplicity);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDisplayName() {
+		return (Boolean)eDynamicGet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDisplayName(boolean newDisplayName) {
+		eDynamicSet(NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME - ESTATIC_FEATURE_COUNT, NattablelabelproviderPackage.Literals.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME, newDisplayName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				return isDisplayType();
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				return isDisplayMultiplicity();
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				return isDisplayName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				setDisplayType((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				setDisplayMultiplicity((Boolean)newValue);
+				return;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				setDisplayName((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				setDisplayType(DISPLAY_TYPE_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				setDisplayMultiplicity(DISPLAY_MULTIPLICITY_EDEFAULT);
+				return;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				setDisplayName(DISPLAY_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_TYPE:
+				return isDisplayType() != DISPLAY_TYPE_EDEFAULT;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_MULTIPLICITY:
+				return isDisplayMultiplicity() != DISPLAY_MULTIPLICITY_EDEFAULT;
+			case NattablelabelproviderPackage.OPERATION_LABEL_PROVIDER_CONFIGURATION__DISPLAY_NAME:
+				return isDisplayName() != DISPLAY_NAME_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //OperationLabelProviderConfigurationImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/NattableproblemFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/NattableproblemFactoryImpl.java
new file mode 100644
index 0000000..20938b4
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/NattableproblemFactoryImpl.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.NattableproblemFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.NattableproblemPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.Problem;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.StringResolutionProblem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattableproblemFactoryImpl extends EFactoryImpl implements NattableproblemFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattableproblemFactory init() {
+		try {
+			NattableproblemFactory theNattableproblemFactory = (NattableproblemFactory)EPackage.Registry.INSTANCE.getEFactory(NattableproblemPackage.eNS_URI);
+			if (theNattableproblemFactory != null) {
+				return theNattableproblemFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattableproblemFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattableproblemFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattableproblemPackage.PROBLEM: return createProblem();
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM: return createStringResolutionProblem();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Problem createProblem() {
+		ProblemImpl problem = new ProblemImpl();
+		return problem;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public StringResolutionProblem createStringResolutionProblem() {
+		StringResolutionProblemImpl stringResolutionProblem = new StringResolutionProblemImpl();
+		return stringResolutionProblem;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattableproblemPackage getNattableproblemPackage() {
+		return (NattableproblemPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattableproblemPackage getPackage() {
+		return NattableproblemPackage.eINSTANCE;
+	}
+} // NattableproblemFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/ProblemImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/ProblemImpl.java
new file mode 100644
index 0000000..93d34cf
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/ProblemImpl.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableconfiguration.impl.TableNamedElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.NattableproblemPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.Problem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Problem</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ProblemImpl extends TableNamedElementImpl implements Problem {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProblemImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableproblemPackage.Literals.PROBLEM;
+	}
+} // ProblemImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/StringResolutionProblemImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/StringResolutionProblemImpl.java
new file mode 100644
index 0000000..be20fd0
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattableproblem/impl/StringResolutionProblemImpl.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.NattableproblemPackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattableproblem.StringResolutionProblem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String Resolution Problem</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl.StringResolutionProblemImpl#getValueAsString <em>Value As String</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattableproblem.impl.StringResolutionProblemImpl#getUnresolvedString <em>Unresolved String</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class StringResolutionProblemImpl extends ProblemImpl implements StringResolutionProblem {
+
+	/**
+	 * The default value of the '{@link #getValueAsString() <em>Value As String</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValueAsString()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALUE_AS_STRING_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringResolutionProblemImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattableproblemPackage.Literals.STRING_RESOLUTION_PROBLEM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getValueAsString() {
+		return (String)eDynamicGet(NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING - ESTATIC_FEATURE_COUNT, NattableproblemPackage.Literals.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setValueAsString(String newValueAsString) {
+		eDynamicSet(NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING - ESTATIC_FEATURE_COUNT, NattableproblemPackage.Literals.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING, newValueAsString);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<String> getUnresolvedString() {
+		return (EList<String>)eDynamicGet(NattableproblemPackage.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING - ESTATIC_FEATURE_COUNT, NattableproblemPackage.Literals.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING:
+				return getValueAsString();
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING:
+				return getUnresolvedString();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING:
+				setValueAsString((String)newValue);
+				return;
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING:
+				getUnresolvedString().clear();
+				getUnresolvedString().addAll((Collection<? extends String>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING:
+				setValueAsString(VALUE_AS_STRING_EDEFAULT);
+				return;
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING:
+				getUnresolvedString().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__VALUE_AS_STRING:
+				return VALUE_AS_STRING_EDEFAULT == null ? getValueAsString() != null : !VALUE_AS_STRING_EDEFAULT.equals(getValueAsString());
+			case NattableproblemPackage.STRING_RESOLUTION_PROBLEM__UNRESOLVED_STRING:
+				return !getUnresolvedString().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // StringResolutionProblemImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanListValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanListValueStyleImpl.java
new file mode 100644
index 0000000..9fef36a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanListValueStyleImpl.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.BooleanListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boolean List Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.BooleanListValueStyleImpl#getBooleanListValue <em>Boolean List Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class BooleanListValueStyleImpl extends NamedStyleImpl implements BooleanListValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BooleanListValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.BOOLEAN_LIST_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Boolean> getBooleanListValue() {
+		return (EList<Boolean>)eDynamicGet(NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE:
+				return getBooleanListValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE:
+				getBooleanListValue().clear();
+				getBooleanListValue().addAll((Collection<? extends Boolean>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE:
+				getBooleanListValue().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE__BOOLEAN_LIST_VALUE:
+				return !getBooleanListValue().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // BooleanListValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanValueStyleImpl.java
new file mode 100644
index 0000000..99ae7db
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/BooleanValueStyleImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.BooleanValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boolean Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.BooleanValueStyleImpl#isBooleanValue <em>Boolean Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class BooleanValueStyleImpl extends NamedStyleImpl implements BooleanValueStyle {
+
+	/**
+	 * The default value of the '{@link #isBooleanValue() <em>Boolean Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBooleanValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BOOLEAN_VALUE_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BooleanValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.BOOLEAN_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isBooleanValue() {
+		return (Boolean)eDynamicGet(NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBooleanValue(boolean newBooleanValue) {
+		eDynamicSet(NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE, newBooleanValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE:
+				return isBooleanValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE:
+				setBooleanValue((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE:
+				setBooleanValue(BOOLEAN_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.BOOLEAN_VALUE_STYLE__BOOLEAN_VALUE:
+				return isBooleanValue() != BOOLEAN_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // BooleanValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/CellTextStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/CellTextStyleImpl.java
new file mode 100644
index 0000000..70890fe
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/CellTextStyleImpl.java
@@ -0,0 +1,173 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.CellTextAlignment;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.CellTextStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Cell Text Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.CellTextStyleImpl#getAlignment <em>Alignment</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class CellTextStyleImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements CellTextStyle {
+
+	/**
+	 * The default value of the '{@link #getAlignment() <em>Alignment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getAlignment()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final CellTextAlignment ALIGNMENT_EDEFAULT = CellTextAlignment.MIDDLE_LEFT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected CellTextStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.CELL_TEXT_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public CellTextAlignment getAlignment() {
+		return (CellTextAlignment) eDynamicGet(NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.CELL_TEXT_STYLE__ALIGNMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setAlignment(CellTextAlignment newAlignment) {
+		eDynamicSet(NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.CELL_TEXT_STYLE__ALIGNMENT, newAlignment);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT:
+			return getAlignment();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT:
+			setAlignment((CellTextAlignment) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT:
+			setAlignment(ALIGNMENT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.CELL_TEXT_STYLE__ALIGNMENT:
+			return getAlignment() != ALIGNMENT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // CellTextStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleListValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleListValueStyleImpl.java
new file mode 100644
index 0000000..c6bb565
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleListValueStyleImpl.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DoubleListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double List Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.DoubleListValueStyleImpl#getDoubleListValue <em>Double List Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DoubleListValueStyleImpl extends NamedStyleImpl implements DoubleListValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleListValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.DOUBLE_LIST_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Double> getDoubleListValue() {
+		return (EList<Double>)eDynamicGet(NattablestylePackage.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE:
+				return getDoubleListValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE:
+				getDoubleListValue().clear();
+				getDoubleListValue().addAll((Collection<? extends Double>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE:
+				getDoubleListValue().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_LIST_VALUE_STYLE__DOUBLE_LIST_VALUE:
+				return !getDoubleListValue().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // DoubleListValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleValueStyleImpl.java
new file mode 100644
index 0000000..d1afc73
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/DoubleValueStyleImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DoubleValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.DoubleValueStyleImpl#getDoubleValue <em>Double Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DoubleValueStyleImpl extends NamedStyleImpl implements DoubleValueStyle {
+
+	/**
+	 * The default value of the '{@link #getDoubleValue() <em>Double Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDoubleValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double DOUBLE_VALUE_EDEFAULT = 0.0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.DOUBLE_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public double getDoubleValue() {
+		return (Double)eDynamicGet(NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.DOUBLE_VALUE_STYLE__DOUBLE_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDoubleValue(double newDoubleValue) {
+		eDynamicSet(NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.DOUBLE_VALUE_STYLE__DOUBLE_VALUE, newDoubleValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE:
+				return getDoubleValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE:
+				setDoubleValue((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE:
+				setDoubleValue(DOUBLE_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.DOUBLE_VALUE_STYLE__DOUBLE_VALUE:
+				return getDoubleValue() != DOUBLE_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // DoubleValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectListValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectListValueStyleImpl.java
new file mode 100644
index 0000000..52b4e40
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectListValueStyleImpl.java
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.EObjectListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject List Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.EObjectListValueStyleImpl#getEObjectValue <em>EObject Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EObjectListValueStyleImpl extends NamedStyleImpl implements EObjectListValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObjectListValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.EOBJECT_LIST_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<EObject> getEObjectValue() {
+		return (EList<EObject>)eDynamicGet(NattablestylePackage.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE:
+				return getEObjectValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE:
+				getEObjectValue().clear();
+				getEObjectValue().addAll((Collection<? extends EObject>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE:
+				getEObjectValue().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_LIST_VALUE_STYLE__EOBJECT_VALUE:
+				return !getEObjectValue().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // EObjectListValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectValueStyleImpl.java
new file mode 100644
index 0000000..8338760
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/EObjectValueStyleImpl.java
@@ -0,0 +1,143 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.EObjectValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.EObjectValueStyleImpl#getEObjectValue <em>EObject Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EObjectValueStyleImpl extends NamedStyleImpl implements EObjectValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObjectValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.EOBJECT_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject getEObjectValue() {
+		return (EObject)eDynamicGet(NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.EOBJECT_VALUE_STYLE__EOBJECT_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetEObjectValue() {
+		return (EObject)eDynamicGet(NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.EOBJECT_VALUE_STYLE__EOBJECT_VALUE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setEObjectValue(EObject newEObjectValue) {
+		eDynamicSet(NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.EOBJECT_VALUE_STYLE__EOBJECT_VALUE, newEObjectValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE:
+				if (resolve) return getEObjectValue();
+				return basicGetEObjectValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE:
+				setEObjectValue((EObject)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE:
+				setEObjectValue((EObject)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.EOBJECT_VALUE_STYLE__EOBJECT_VALUE:
+				return basicGetEObjectValue() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+} // EObjectValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/FontStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/FontStyleImpl.java
new file mode 100644
index 0000000..42c675a
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/FontStyleImpl.java
@@ -0,0 +1,436 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.FontStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Font Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#getFontColor <em>Font Color</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#getFontName <em>Font Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#getFontHeight <em>Font Height</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#isBold <em>Bold</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#isItalic <em>Italic</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#isUnderline <em>Underline</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.FontStyleImpl#isStrikeThrough <em>Strike Through</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class FontStyleImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements FontStyle {
+
+	/**
+	 * The default value of the '{@link #getFontColor() <em>Font Color</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getFontColor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int FONT_COLOR_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getFontName() <em>Font Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getFontName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FONT_NAME_EDEFAULT = "Tahoma"; //$NON-NLS-1$
+
+	/**
+	 * The default value of the '{@link #getFontHeight() <em>Font Height</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getFontHeight()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int FONT_HEIGHT_EDEFAULT = 9;
+
+	/**
+	 * The default value of the '{@link #isBold() <em>Bold</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isBold()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BOLD_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #isItalic() <em>Italic</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isItalic()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ITALIC_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #isUnderline() <em>Underline</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isUnderline()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean UNDERLINE_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #isStrikeThrough() <em>Strike Through</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #isStrikeThrough()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean STRIKE_THROUGH_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected FontStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.FONT_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public int getFontColor() {
+		return (Integer) eDynamicGet(NattablestylePackage.FONT_STYLE__FONT_COLOR - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_COLOR, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setFontColor(int newFontColor) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__FONT_COLOR - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_COLOR, newFontColor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getFontName() {
+		return (String) eDynamicGet(NattablestylePackage.FONT_STYLE__FONT_NAME - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setFontName(String newFontName) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__FONT_NAME - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_NAME, newFontName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public int getFontHeight() {
+		return (Integer) eDynamicGet(NattablestylePackage.FONT_STYLE__FONT_HEIGHT - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_HEIGHT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setFontHeight(int newFontHeight) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__FONT_HEIGHT - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__FONT_HEIGHT, newFontHeight);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isBold() {
+		return (Boolean) eDynamicGet(NattablestylePackage.FONT_STYLE__BOLD - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__BOLD, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setBold(boolean newBold) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__BOLD - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__BOLD, newBold);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isItalic() {
+		return (Boolean) eDynamicGet(NattablestylePackage.FONT_STYLE__ITALIC - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__ITALIC, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setItalic(boolean newItalic) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__ITALIC - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__ITALIC, newItalic);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isUnderline() {
+		return (Boolean) eDynamicGet(NattablestylePackage.FONT_STYLE__UNDERLINE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__UNDERLINE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setUnderline(boolean newUnderline) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__UNDERLINE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__UNDERLINE, newUnderline);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isStrikeThrough() {
+		return (Boolean) eDynamicGet(NattablestylePackage.FONT_STYLE__STRIKE_THROUGH - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__STRIKE_THROUGH, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setStrikeThrough(boolean newStrikeThrough) {
+		eDynamicSet(NattablestylePackage.FONT_STYLE__STRIKE_THROUGH - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.FONT_STYLE__STRIKE_THROUGH, newStrikeThrough);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablestylePackage.FONT_STYLE__FONT_COLOR:
+			return getFontColor();
+		case NattablestylePackage.FONT_STYLE__FONT_NAME:
+			return getFontName();
+		case NattablestylePackage.FONT_STYLE__FONT_HEIGHT:
+			return getFontHeight();
+		case NattablestylePackage.FONT_STYLE__BOLD:
+			return isBold();
+		case NattablestylePackage.FONT_STYLE__ITALIC:
+			return isItalic();
+		case NattablestylePackage.FONT_STYLE__UNDERLINE:
+			return isUnderline();
+		case NattablestylePackage.FONT_STYLE__STRIKE_THROUGH:
+			return isStrikeThrough();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablestylePackage.FONT_STYLE__FONT_COLOR:
+			setFontColor((Integer) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__FONT_NAME:
+			setFontName((String) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__FONT_HEIGHT:
+			setFontHeight((Integer) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__BOLD:
+			setBold((Boolean) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__ITALIC:
+			setItalic((Boolean) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__UNDERLINE:
+			setUnderline((Boolean) newValue);
+			return;
+		case NattablestylePackage.FONT_STYLE__STRIKE_THROUGH:
+			setStrikeThrough((Boolean) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.FONT_STYLE__FONT_COLOR:
+			setFontColor(FONT_COLOR_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__FONT_NAME:
+			setFontName(FONT_NAME_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__FONT_HEIGHT:
+			setFontHeight(FONT_HEIGHT_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__BOLD:
+			setBold(BOLD_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__ITALIC:
+			setItalic(ITALIC_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__UNDERLINE:
+			setUnderline(UNDERLINE_EDEFAULT);
+			return;
+		case NattablestylePackage.FONT_STYLE__STRIKE_THROUGH:
+			setStrikeThrough(STRIKE_THROUGH_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.FONT_STYLE__FONT_COLOR:
+			return getFontColor() != FONT_COLOR_EDEFAULT;
+		case NattablestylePackage.FONT_STYLE__FONT_NAME:
+			return FONT_NAME_EDEFAULT == null ? getFontName() != null : !FONT_NAME_EDEFAULT.equals(getFontName());
+		case NattablestylePackage.FONT_STYLE__FONT_HEIGHT:
+			return getFontHeight() != FONT_HEIGHT_EDEFAULT;
+		case NattablestylePackage.FONT_STYLE__BOLD:
+			return isBold() != BOLD_EDEFAULT;
+		case NattablestylePackage.FONT_STYLE__ITALIC:
+			return isItalic() != ITALIC_EDEFAULT;
+		case NattablestylePackage.FONT_STYLE__UNDERLINE:
+			return isUnderline() != UNDERLINE_EDEFAULT;
+		case NattablestylePackage.FONT_STYLE__STRIKE_THROUGH:
+			return isStrikeThrough() != STRIKE_THROUGH_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // FontStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntListValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntListValueStyleImpl.java
new file mode 100644
index 0000000..6641c66
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntListValueStyleImpl.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.IntListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Int List Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.IntListValueStyleImpl#getIntListValue <em>Int List Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IntListValueStyleImpl extends NamedStyleImpl implements IntListValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntListValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.INT_LIST_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Integer> getIntListValue() {
+		return (EList<Integer>)eDynamicGet(NattablestylePackage.INT_LIST_VALUE_STYLE__INT_LIST_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.INT_LIST_VALUE_STYLE__INT_LIST_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.INT_LIST_VALUE_STYLE__INT_LIST_VALUE:
+				return getIntListValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.INT_LIST_VALUE_STYLE__INT_LIST_VALUE:
+				getIntListValue().clear();
+				getIntListValue().addAll((Collection<? extends Integer>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.INT_LIST_VALUE_STYLE__INT_LIST_VALUE:
+				getIntListValue().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.INT_LIST_VALUE_STYLE__INT_LIST_VALUE:
+				return !getIntListValue().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // IntListValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntValueStyleImpl.java
new file mode 100644
index 0000000..0c129e0
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/IntValueStyleImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.IntValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Int Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.IntValueStyleImpl#getIntValue <em>Int Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IntValueStyleImpl extends NamedStyleImpl implements IntValueStyle {
+
+	/**
+	 * The default value of the '{@link #getIntValue() <em>Int Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIntValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INT_VALUE_EDEFAULT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.INT_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int getIntValue() {
+		return (Integer)eDynamicGet(NattablestylePackage.INT_VALUE_STYLE__INT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.INT_VALUE_STYLE__INT_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setIntValue(int newIntValue) {
+		eDynamicSet(NattablestylePackage.INT_VALUE_STYLE__INT_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.INT_VALUE_STYLE__INT_VALUE, newIntValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.INT_VALUE_STYLE__INT_VALUE:
+				return getIntValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.INT_VALUE_STYLE__INT_VALUE:
+				setIntValue((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.INT_VALUE_STYLE__INT_VALUE:
+				setIntValue(INT_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.INT_VALUE_STYLE__INT_VALUE:
+				return getIntValue() != INT_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // IntValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NamedStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NamedStyleImpl.java
new file mode 100644
index 0000000..210b756
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NamedStyleImpl.java
@@ -0,0 +1,172 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NamedStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Named Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.NamedStyleImpl#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class NamedStyleImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements NamedStyle {
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected NamedStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.NAMED_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getName() {
+		return (String) eDynamicGet(NattablestylePackage.NAMED_STYLE__NAME - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.NAMED_STYLE__NAME, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setName(String newName) {
+		eDynamicSet(NattablestylePackage.NAMED_STYLE__NAME - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.NAMED_STYLE__NAME, newName);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablestylePackage.NAMED_STYLE__NAME:
+			return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablestylePackage.NAMED_STYLE__NAME:
+			setName((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.NAMED_STYLE__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.NAMED_STYLE__NAME:
+			return NAME_EDEFAULT == null ? getName() != null : !NAME_EDEFAULT.equals(getName());
+		}
+		return super.eIsSet(featureID);
+	}
+} // NamedStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NattablestyleFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NattablestyleFactoryImpl.java
new file mode 100644
index 0000000..022f943
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/NattablestyleFactoryImpl.java
@@ -0,0 +1,354 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.BooleanListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.BooleanValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.CellTextAlignment;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.CellTextStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DisplayStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DoubleListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DoubleValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.EObjectListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.EObjectValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.FontStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.IntListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.IntValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NamedStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestyleFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.StringListValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.StringValueStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.TableDisplayStyle;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattablestyleFactoryImpl extends EFactoryImpl implements NattablestyleFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattablestyleFactory init() {
+		try {
+			NattablestyleFactory theNattablestyleFactory = (NattablestyleFactory)EPackage.Registry.INSTANCE.getEFactory(NattablestylePackage.eNS_URI);
+			if (theNattablestyleFactory != null) {
+				return theNattablestyleFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattablestyleFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablestyleFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattablestylePackage.NAMED_STYLE: return createNamedStyle();
+			case NattablestylePackage.FONT_STYLE: return createFontStyle();
+			case NattablestylePackage.CELL_TEXT_STYLE: return createCellTextStyle();
+			case NattablestylePackage.INT_VALUE_STYLE: return createIntValueStyle();
+			case NattablestylePackage.INT_LIST_VALUE_STYLE: return createIntListValueStyle();
+			case NattablestylePackage.BOOLEAN_VALUE_STYLE: return createBooleanValueStyle();
+			case NattablestylePackage.BOOLEAN_LIST_VALUE_STYLE: return createBooleanListValueStyle();
+			case NattablestylePackage.DOUBLE_VALUE_STYLE: return createDoubleValueStyle();
+			case NattablestylePackage.DOUBLE_LIST_VALUE_STYLE: return createDoubleListValueStyle();
+			case NattablestylePackage.STRING_VALUE_STYLE: return createStringValueStyle();
+			case NattablestylePackage.STRING_LIST_VALUE_STYLE: return createStringListValueStyle();
+			case NattablestylePackage.TABLE_DISPLAY_STYLE: return createTableDisplayStyle();
+			case NattablestylePackage.EOBJECT_VALUE_STYLE: return createEObjectValueStyle();
+			case NattablestylePackage.EOBJECT_LIST_VALUE_STYLE: return createEObjectListValueStyle();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattablestylePackage.CELL_TEXT_ALIGNMENT:
+				return createCellTextAlignmentFromString(eDataType, initialValue);
+			case NattablestylePackage.DISPLAY_STYLE:
+				return createDisplayStyleFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case NattablestylePackage.CELL_TEXT_ALIGNMENT:
+				return convertCellTextAlignmentToString(eDataType, instanceValue);
+			case NattablestylePackage.DISPLAY_STYLE:
+				return convertDisplayStyleToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NamedStyle createNamedStyle() {
+		NamedStyleImpl namedStyle = new NamedStyleImpl();
+		return namedStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public FontStyle createFontStyle() {
+		FontStyleImpl fontStyle = new FontStyleImpl();
+		return fontStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public CellTextStyle createCellTextStyle() {
+		CellTextStyleImpl cellTextStyle = new CellTextStyleImpl();
+		return cellTextStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public IntValueStyle createIntValueStyle() {
+		IntValueStyleImpl intValueStyle = new IntValueStyleImpl();
+		return intValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public IntListValueStyle createIntListValueStyle() {
+		IntListValueStyleImpl intListValueStyle = new IntListValueStyleImpl();
+		return intListValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public BooleanValueStyle createBooleanValueStyle() {
+		BooleanValueStyleImpl booleanValueStyle = new BooleanValueStyleImpl();
+		return booleanValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public BooleanListValueStyle createBooleanListValueStyle() {
+		BooleanListValueStyleImpl booleanListValueStyle = new BooleanListValueStyleImpl();
+		return booleanListValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public DoubleValueStyle createDoubleValueStyle() {
+		DoubleValueStyleImpl doubleValueStyle = new DoubleValueStyleImpl();
+		return doubleValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public DoubleListValueStyle createDoubleListValueStyle() {
+		DoubleListValueStyleImpl doubleListValueStyle = new DoubleListValueStyleImpl();
+		return doubleListValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public StringValueStyle createStringValueStyle() {
+		StringValueStyleImpl stringValueStyle = new StringValueStyleImpl();
+		return stringValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public StringListValueStyle createStringListValueStyle() {
+		StringListValueStyleImpl stringListValueStyle = new StringListValueStyleImpl();
+		return stringListValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public TableDisplayStyle createTableDisplayStyle() {
+		TableDisplayStyleImpl tableDisplayStyle = new TableDisplayStyleImpl();
+		return tableDisplayStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObjectValueStyle createEObjectValueStyle() {
+		EObjectValueStyleImpl eObjectValueStyle = new EObjectValueStyleImpl();
+		return eObjectValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObjectListValueStyle createEObjectListValueStyle() {
+		EObjectListValueStyleImpl eObjectListValueStyle = new EObjectListValueStyleImpl();
+		return eObjectListValueStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CellTextAlignment createCellTextAlignmentFromString(EDataType eDataType, String initialValue) {
+		CellTextAlignment result = CellTextAlignment.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertCellTextAlignmentToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DisplayStyle createDisplayStyleFromString(EDataType eDataType, String initialValue) {
+		DisplayStyle result = DisplayStyle.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertDisplayStyleToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattablestylePackage getNattablestylePackage() {
+		return (NattablestylePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablestylePackage getPackage() {
+		return NattablestylePackage.eINSTANCE;
+	}
+} // NattablestyleFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringListValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringListValueStyleImpl.java
new file mode 100644
index 0000000..ca2d755
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringListValueStyleImpl.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.StringListValueStyle;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String List Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StringListValueStyleImpl#getStringListValue <em>String List Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class StringListValueStyleImpl extends NamedStyleImpl implements StringListValueStyle {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringListValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.STRING_LIST_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<String> getStringListValue() {
+		return (EList<String>)eDynamicGet(NattablestylePackage.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE:
+				return getStringListValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE:
+				getStringListValue().clear();
+				getStringListValue().addAll((Collection<? extends String>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE:
+				getStringListValue().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_LIST_VALUE_STYLE__STRING_LIST_VALUE:
+				return !getStringListValue().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+} // StringListValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringValueStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringValueStyleImpl.java
new file mode 100644
index 0000000..c221823
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StringValueStyleImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.StringValueStyle;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String Value Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StringValueStyleImpl#getStringValue <em>String Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class StringValueStyleImpl extends NamedStyleImpl implements StringValueStyle {
+
+	/**
+	 * The default value of the '{@link #getStringValue() <em>String Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStringValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String STRING_VALUE_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringValueStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.STRING_VALUE_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getStringValue() {
+		return (String)eDynamicGet(NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.STRING_VALUE_STYLE__STRING_VALUE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setStringValue(String newStringValue) {
+		eDynamicSet(NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.STRING_VALUE_STYLE__STRING_VALUE, newStringValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE:
+				return getStringValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE:
+				setStringValue((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE:
+				setStringValue(STRING_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablestylePackage.STRING_VALUE_STYLE__STRING_VALUE:
+				return STRING_VALUE_EDEFAULT == null ? getStringValue() != null : !STRING_VALUE_EDEFAULT.equals(getStringValue());
+		}
+		return super.eIsSet(featureID);
+	}
+} // StringValueStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StyledElementImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StyledElementImpl.java
new file mode 100644
index 0000000..ec7807d
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/StyledElementImpl.java
@@ -0,0 +1,255 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NamedStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.Style;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.StyledElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Styled Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl#getStyles <em>Styles</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public abstract class StyledElementImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements StyledElement {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected StyledElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.STYLED_ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public EList<Style> getStyles() {
+		return (EList<Style>) eDynamicGet(NattablestylePackage.STYLED_ELEMENT__STYLES - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.STYLED_ELEMENT__STYLES, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	@Override
+	public NamedStyle getNamedStyle(EClass eClass, String name) {
+		if (eClass != null && eIsSet(NattablestylePackage.Literals.STYLED_ELEMENT__STYLES) && NattablestylePackage.eINSTANCE.getNamedStyle().isSuperTypeOf(eClass)) {
+			for (Iterator i = getStyles().iterator(); i.hasNext();) {
+				Style style = (Style) i.next();
+				if (style.eClass() == eClass || eClass.isInstance(style)) {
+					if (style.eGet(NattablestylePackage.eINSTANCE.getNamedStyle_Name()).equals(name)) {
+						return (NamedStyle) style;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	@Override
+	public Style getStyle(EClass eClass) {
+		if (eClass != null && NattablestylePackage.eINSTANCE.getStyle().isSuperTypeOf(eClass)) {
+			if (eClass.isSuperTypeOf(eClass())) {
+				return (Style) this;
+			}
+			if (eIsSet(NattablestylePackage.Literals.STYLED_ELEMENT__STYLES)) {
+				for (Iterator<?> i = getStyles().iterator(); i.hasNext();) {
+					Style style = (Style) i.next();
+					if (style.eClass() == eClass || eClass.isInstance(style)) {
+						return style;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	@Override
+	public Style createStyle(EClass eClass) {
+		Style newStyle = (Style) eClass.getEPackage().getEFactoryInstance().create(eClass);
+		getStyles().add(newStyle);
+		return newStyle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case NattablestylePackage.STYLED_ELEMENT__STYLES:
+			return ((InternalEList<?>) getStyles()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablestylePackage.STYLED_ELEMENT__STYLES:
+			return getStyles();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablestylePackage.STYLED_ELEMENT__STYLES:
+			getStyles().clear();
+			getStyles().addAll((Collection<? extends Style>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.STYLED_ELEMENT__STYLES:
+			getStyles().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.STYLED_ELEMENT__STYLES:
+			return !getStyles().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case NattablestylePackage.STYLED_ELEMENT___GET_NAMED_STYLE__ECLASS_STRING:
+			return getNamedStyle((EClass) arguments.get(0), (String) arguments.get(1));
+		case NattablestylePackage.STYLED_ELEMENT___GET_STYLE__ECLASS:
+			return getStyle((EClass) arguments.get(0));
+		case NattablestylePackage.STYLED_ELEMENT___CREATE_STYLE__ECLASS:
+			return createStyle((EClass) arguments.get(0));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // StyledElementImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/TableDisplayStyleImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/TableDisplayStyleImpl.java
new file mode 100644
index 0000000..789394b
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablestyle/impl/TableDisplayStyleImpl.java
@@ -0,0 +1,173 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.DisplayStyle;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.NattablestylePackage;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablestyle.TableDisplayStyle;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Display Style</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.TableDisplayStyleImpl#getDisplayStyle <em>Display Style</em>}</li>
+ * </ul>
+ *
+ * @generated not
+ */
+public class TableDisplayStyleImpl extends org.eclipse.emf.cdo.ecore.impl.EModelElementImpl implements TableDisplayStyle {
+
+	/**
+	 * The default value of the '{@link #getDisplayStyle() <em>Display Style</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getDisplayStyle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final DisplayStyle DISPLAY_STYLE_EDEFAULT = DisplayStyle.NORMAL;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TableDisplayStyleImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablestylePackage.Literals.TABLE_DISPLAY_STYLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Decrease the generated ESTATIC_FEATURE_COUNT from 1 to 0 because the inherited
+	 * EModelElement.eAnnotations feature is implemented dynamically, too.
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected static final int ESTATIC_FEATURE_COUNT = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return ESTATIC_FEATURE_COUNT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public DisplayStyle getDisplayStyle() {
+		return (DisplayStyle) eDynamicGet(NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.TABLE_DISPLAY_STYLE__DISPLAY_STYLE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setDisplayStyle(DisplayStyle newDisplayStyle) {
+		eDynamicSet(NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE - ESTATIC_FEATURE_COUNT, NattablestylePackage.Literals.TABLE_DISPLAY_STYLE__DISPLAY_STYLE, newDisplayStyle);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE:
+			return getDisplayStyle();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE:
+			setDisplayStyle((DisplayStyle) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE:
+			setDisplayStyle(DISPLAY_STYLE_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case NattablestylePackage.TABLE_DISPLAY_STYLE__DISPLAY_STYLE:
+			return getDisplayStyle() != DISPLAY_STYLE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+} // TableDisplayStyleImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/AbstractTableTesterImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/AbstractTableTesterImpl.java
new file mode 100644
index 0000000..d4e4823
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/AbstractTableTesterImpl.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.AbstractTableTester;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.NattabletesterPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Table Tester</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public abstract class AbstractTableTesterImpl extends StyledElementImpl implements AbstractTableTester {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbstractTableTesterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattabletesterPackage.Literals.ABSTRACT_TABLE_TESTER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getTester() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+			case NattabletesterPackage.ABSTRACT_TABLE_TESTER___GET_TESTER:
+				return getTester();
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+} // AbstractTableTesterImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/JavaTableTesterImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/JavaTableTesterImpl.java
new file mode 100644
index 0000000..3195e46
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/JavaTableTesterImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.JavaTableTester;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.NattabletesterPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Java Table Tester</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl.JavaTableTesterImpl#getTester <em>Tester</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class JavaTableTesterImpl extends AbstractTableTesterImpl implements JavaTableTester {
+
+	/**
+	 * The default value of the '{@link #getTester() <em>Tester</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTester()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TESTER_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected JavaTableTesterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattabletesterPackage.Literals.JAVA_TABLE_TESTER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTester() {
+		return (String)eDynamicGet(NattabletesterPackage.JAVA_TABLE_TESTER__TESTER - ESTATIC_FEATURE_COUNT, NattabletesterPackage.Literals.JAVA_TABLE_TESTER__TESTER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setTester(String newTester) {
+		eDynamicSet(NattabletesterPackage.JAVA_TABLE_TESTER__TESTER - ESTATIC_FEATURE_COUNT, NattabletesterPackage.Literals.JAVA_TABLE_TESTER__TESTER, newTester);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattabletesterPackage.JAVA_TABLE_TESTER__TESTER:
+				return getTester();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattabletesterPackage.JAVA_TABLE_TESTER__TESTER:
+				setTester((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattabletesterPackage.JAVA_TABLE_TESTER__TESTER:
+				setTester(TESTER_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattabletesterPackage.JAVA_TABLE_TESTER__TESTER:
+				return TESTER_EDEFAULT == null ? getTester() != null : !TESTER_EDEFAULT.equals(getTester());
+		}
+		return super.eIsSet(featureID);
+	}
+} // JavaTableTesterImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/NattabletesterFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/NattabletesterFactoryImpl.java
new file mode 100644
index 0000000..4630d17
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattabletester/impl/NattabletesterFactoryImpl.java
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattabletester.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.JavaTableTester;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.NattabletesterFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattabletester.NattabletesterPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattabletesterFactoryImpl extends EFactoryImpl implements NattabletesterFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattabletesterFactory init() {
+		try {
+			NattabletesterFactory theNattabletesterFactory = (NattabletesterFactory)EPackage.Registry.INSTANCE.getEFactory(NattabletesterPackage.eNS_URI);
+			if (theNattabletesterFactory != null) {
+				return theNattabletesterFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattabletesterFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattabletesterFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattabletesterPackage.JAVA_TABLE_TESTER: return createJavaTableTester();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public JavaTableTester createJavaTableTester() {
+		JavaTableTesterImpl javaTableTester = new JavaTableTesterImpl();
+		return javaTableTester;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NattabletesterPackage getNattabletesterPackage() {
+		return (NattabletesterPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattabletesterPackage getPackage() {
+		return NattabletesterPackage.eINSTANCE;
+	}
+} // NattabletesterFactoryImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/EObjectWrapperImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/EObjectWrapperImpl.java
new file mode 100644
index 0000000..468149e
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/EObjectWrapperImpl.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.EObjectWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.NattablewrapperPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>EObject Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl.EObjectWrapperImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EObjectWrapperImpl extends StyledElementImpl implements EObjectWrapper {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObjectWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablewrapperPackage.Literals.EOBJECT_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject getElement() {
+		return (EObject)eDynamicGet(NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablewrapperPackage.Literals.EOBJECT_WRAPPER__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetElement() {
+		return (EObject)eDynamicGet(NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablewrapperPackage.Literals.EOBJECT_WRAPPER__ELEMENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setElement(EObject newElement) {
+		eDynamicSet(NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablewrapperPackage.Literals.EOBJECT_WRAPPER__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT:
+				if (resolve) return getElement();
+				return basicGetElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT:
+				setElement((EObject)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT:
+				setElement((EObject)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablewrapperPackage.EOBJECT_WRAPPER__ELEMENT:
+				return basicGetElement() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //EObjectWrapperImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/IdWrapperImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/IdWrapperImpl.java
new file mode 100644
index 0000000..1720caa
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/IdWrapperImpl.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablestyle.impl.StyledElementImpl;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.IdWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.NattablewrapperPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Id Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl.IdWrapperImpl#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IdWrapperImpl extends StyledElementImpl implements IdWrapper {
+	/**
+	 * The default value of the '{@link #getElement() <em>Element</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ELEMENT_EDEFAULT = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NattablewrapperPackage.Literals.ID_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getElement() {
+		return (String)eDynamicGet(NattablewrapperPackage.ID_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablewrapperPackage.Literals.ID_WRAPPER__ELEMENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setElement(String newElement) {
+		eDynamicSet(NattablewrapperPackage.ID_WRAPPER__ELEMENT - ESTATIC_FEATURE_COUNT, NattablewrapperPackage.Literals.ID_WRAPPER__ELEMENT, newElement);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case NattablewrapperPackage.ID_WRAPPER__ELEMENT:
+				return getElement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case NattablewrapperPackage.ID_WRAPPER__ELEMENT:
+				setElement((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case NattablewrapperPackage.ID_WRAPPER__ELEMENT:
+				setElement(ELEMENT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case NattablewrapperPackage.ID_WRAPPER__ELEMENT:
+				return ELEMENT_EDEFAULT == null ? getElement() != null : !ELEMENT_EDEFAULT.equals(getElement());
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IdWrapperImpl
diff --git a/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/NattablewrapperFactoryImpl.java b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/NattablewrapperFactoryImpl.java
new file mode 100644
index 0000000..3954534
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.infra.nattable.model.cdo/src/org/eclipse/papyrus/infra/nattable/model/cdo/nattable/nattablewrapper/impl/NattablewrapperFactoryImpl.java
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * 	Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.nattable.model.cdo.nattable.nattablewrapper.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.EObjectWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.IdWrapper;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.NattablewrapperFactory;
+import org.eclipse.papyrus.infra.nattable.model.nattable.nattablewrapper.NattablewrapperPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NattablewrapperFactoryImpl extends EFactoryImpl implements NattablewrapperFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NattablewrapperFactory init() {
+		try {
+			NattablewrapperFactory theNattablewrapperFactory = (NattablewrapperFactory)EPackage.Registry.INSTANCE.getEFactory(NattablewrapperPackage.eNS_URI);
+			if (theNattablewrapperFactory != null) {
+				return theNattablewrapperFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NattablewrapperFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablewrapperFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NattablewrapperPackage.EOBJECT_WRAPPER: return createEObjectWrapper();
+			case NattablewrapperPackage.ID_WRAPPER: return createIdWrapper();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObjectWrapper createEObjectWrapper() {
+		EObjectWrapperImpl eObjectWrapper = new EObjectWrapperImpl();
+		return eObjectWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdWrapper createIdWrapper() {
+		IdWrapperImpl idWrapper = new IdWrapperImpl();
+		return idWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NattablewrapperPackage getNattablewrapperPackage() {
+		return (NattablewrapperPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NattablewrapperPackage getPackage() {
+		return NattablewrapperPackage.eINSTANCE;
+	}
+
+} //NattablewrapperFactoryImpl
diff --git a/cdo/bundles/pom.xml b/cdo/bundles/pom.xml
index bb79c5a..16a5086 100755
--- a/cdo/bundles/pom.xml
+++ b/cdo/bundles/pom.xml
@@ -31,8 +31,10 @@
  
 		<module>org.eclipse.papyrus.infra.gmfdiag.css.cdo</module>
 		<module>org.eclipse.papyrus.infra.gmfdiag.style.cdo</module>
+		<module>org.eclipse.papyrus.infra.core.architecture.cdo</module>
+		<module>org.eclipse.papyrus.infra.nattable.model.cdo</module>
+    
 		<module>uml</module>
-				
 	</modules>
 	
 </project>
\ No newline at end of file
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.cdo/migrate.ant b/cdo/bundles/uml/org.eclipse.uml2.uml.cdo/migrate.ant
index 32718a6..215e05a 100644
--- a/cdo/bundles/uml/org.eclipse.uml2.uml.cdo/migrate.ant
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.cdo/migrate.ant
@@ -88,6 +88,7 @@
 		<copy todir="${impl}">
 			<fileset dir="${uml.tmp}/src/org/eclipse/uml2/uml/internal/impl">
 				<include name="*.java" />
+        <exclude name="UMLPackageImpl.java" />
 			</fileset>
 
 			<!--
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.classpath b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.gitignore b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.gitignore
new file mode 100644
index 0000000..8000a78
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.gitignore
@@ -0,0 +1,2 @@
+bin
+/target/
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.project b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.project
new file mode 100644
index 0000000..04fe44c
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.uml.profile.standard.cdo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.core.prefs b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.ui.prefs b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..9aa3e72
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.number_suffix=false
+cleanup.organize_imports=false
+cleanup.push_down_negation=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=false
+cleanup.remove_trailing_whitespaces=false
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_array_creation=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.simplify_lambda_expression_and_method_ref=false
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_autoboxing=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_directly_map_method=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_unboxing=false
+cleanup_profile=org.eclipse.jdt.ui.default.eclipse_clean_up_profile
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/META-INF/MANIFEST.MF b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bd0d26e
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.uml2.uml.profile.standard.cdo;singleton:=true
+Bundle-Version: 1.5.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.uml2.uml.profile.standard.cdo
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)";resolution:=optional;x-installation:=greedy,
+ org.eclipse.uml2.uml.profile.standard;bundle-version="1.5.0";visibility:=reexport,
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)"
+Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.uml2.uml.profile.standard.cdo
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/Migrate UML2 Standard Profile.launch b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/Migrate UML2 Standard Profile.launch
new file mode 100644
index 0000000..f4c364c
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/Migrate UML2 Standard Profile.launch
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ant.AntLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;resources&gt;&#13;&#10;&lt;item path=&quot;/org.eclipse.uml2.uml.profile.standard.cdo&quot; type=&quot;4&quot;/&gt;&#13;&#10;&lt;/resources&gt;}"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.uml2.uml.profile.standard.cdo/migrate.ant"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.uml2.uml.profile.standard.cdo"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.uml2.uml.profile.standard.cdo/migrate.ant}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Dgit.clone.uml2=${git.clone.uml2}"/>
+<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/>
+</launchConfiguration>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/about.html b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/about.html
new file mode 100644
index 0000000..1a90f7e
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 12, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/build.properties b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/build.properties
new file mode 100644
index 0000000..8c22674
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/build.properties
@@ -0,0 +1,24 @@
+# Copyright (c) 2014, 2018 CEA and others.
+# All rights reserved.   This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#
+# Contributors:
+#   Kenn Hussey (CEA) - initial API and implementation
+#   Kenn Hussey - 535301
+#
+source.. = src/
+output.. = bin/
+bin.includes = about.html,\
+               plugin.*,\
+               .,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+src.includes = about.html,\
+               Migrate UML2 Standard Profile.launch,\
+               migrate.ant
+exclude.. = **/doc-files/**
+javacSource = 1.5
+javacTarget = 1.5
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/migrate.ant b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/migrate.ant
new file mode 100644
index 0000000..3772b18
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/migrate.ant
@@ -0,0 +1,149 @@
+<?xml version="1.0"?>
+<!--
+  Copyright (c) 2020 CEA LIST and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License 2.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-2.0/
+  
+  SPDX-License-Identifier: EPL-2.0
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project name="migrate" default="migrate">
+
+	<!--
+	  The migration of the UML2 model to CDO is completely automated.
+	  The following preconditions must be met before executing the 'migrate.ant' script:
+	 
+	  1. A recent 'EMF SDK' feature must be installed into the Eclipse IDE.
+	  
+	  2. The 'org.eclipse.emf.cdo.migrator' plugin must be installed into the Eclipse IDE.
+	 
+	  3. UML2's Git repository must be cloned from 
+	     https://git.eclipse.org/r/uml2/org.eclipse.uml2
+	     to the local disk. Its disk location must then be passed into this script
+	     through the 'git.clone.uml2' property.
+	    
+    4. This Ant script must be executed in the JRE of the running IDE!
+    
+    Ideally this script is executed via the accompanying 'Migrate UML2.launch'.
+    
+    Do NOT apply hand-written changes to the classes in the 
+    org.eclipse.uml2.uml.cdo.internal.impl package. 
+    This script will eventually overwrite them!
+    Rather modify the underlying UML2 code or this script.
+  -->
+	<target name="migrate">
+		<property name="project.name" value="org.eclipse.uml2.uml.profile.standard" />
+
+		<!--
+		  Ensure that UML2's Git clone exists and is reachable.
+	  -->
+		<fail unless="git.clone.uml2" message="Property 'git.clone.uml2' is undefined!" />
+		<property name="standard" location="${git.clone.uml2}/plugins/${project.name}" />
+		<fail message="The directory '${standard}' does not exist!">
+			<condition>
+				<not>
+					<available file="${standard}" type="dir" />
+				</not>
+			</condition>
+		</fail>
+
+		<property name="standard.tmp" location="${basedir}/target/${project.name}" />
+		<echo message="Migrating in ${standard.tmp} ..." />
+
+		<cdo.automaticBuild enable="false" />
+		<cdo.deleteProject projectname=".JETEmitters" deletecontent="true" />
+		<backup.project project.name="${project.name}" />
+
+		<!--
+		  Migrate the 'Standard.genmodel' to CDO and regenerate the model within the
+		  imported 'org.eclipse.uml2.uml.profile.standard' project.
+		-->
+		<property name="model.path" value="/${project.name}/model/Standard.genmodel" />
+		<cdo.migrateModel modelpath="${model.path}" dynamicfeaturedelegation="true" />
+		<cdo.generateModel modelpath="${model.path}" />
+
+		<!--
+		  Copy all Java files from the generated 'impl' folder to the
+		  'org.eclipse.uml2.uml.profile.standard.cdo' project. 
+		-->
+		<property name="impl" location="${basedir}/src/org/eclipse/uml2/uml/profile/standard/cdo" />
+		<delete>
+			<fileset dir="${impl}">
+				<include name="*.java" />
+			</fileset>
+		</delete>
+		<copy todir="${impl}">
+			<fileset dir="${standard.tmp}/src/org/eclipse/uml2/uml/profile/standard/internal/impl">
+				<include name="*.java" />
+				<exclude name="StandardPackageImpl.java" />
+			</fileset>
+
+			<!--
+			 Apply the following refactorings:
+			-->
+			<filterchain>
+				<!--
+	  		  Rename the Java package to 'org.eclipse.uml2.uml.profile.standard.cdo'.
+				-->
+				<replacestring from="org.eclipse.uml2.uml.profile.standard.internal.impl" to="org.eclipse.uml2.uml.profile.standard.cdo" />
+			</filterchain>
+		</copy>
+
+		<restore.project project.name="${project.name}" />
+
+		<!--
+		  Apply source cleanup to the 'org.eclipse.uml2.uml.profile.standard.cdo' project.
+		  This ensures that only relevant changes appear in the Git history.
+		-->
+		<cdo.cleanupProject projectname="org.eclipse.uml2.uml.profile.standard.cdo" />
+		<cdo.automaticBuild enable="true" />
+	</target>
+
+
+	<!--
+	  This macro copies a project from the UML2 Git repository to the 
+	  'target' folder of the 'org.eclipse.uml2.uml.profile.standard.cdo' project and then
+	  re-imports it from the new, temporary location into the workspace.
+	-->
+	<macrodef name="backup.project">
+		<attribute name="project.name" />
+		<sequential>
+			<echo message="Backing up project @{project.name}" />
+			<delete failonerror="false" includeemptydirs="true">
+				<fileset dir="${basedir}/target/@{project.name}">
+					<include name="**" />
+				</fileset>
+			</delete>
+			<copy todir="${basedir}/target/@{project.name}" verbose="false" failonerror="true" overwrite="true" includeemptydirs="false">
+				<fileset dir="${git.clone.uml2}/plugins/@{project.name}" defaultexcludes="true">
+					<include name="**/*" />
+					<exclude name="bin/**" />
+				</fileset>
+			</copy>
+			<replace dir="${basedir}/target/@{project.name}" token="@generated NOT_CDO" value="@generated">
+				<include name="**/*.java" />
+			</replace>
+			<cdo.deleteProject projectname="@{project.name}" />
+			<cdo.importProject projectname="@{project.name}" fromlocation="${basedir}/target/@{project.name}" />
+		</sequential>
+	</macrodef>
+
+	<!--
+	  This macro reverts the effect of the "backup.project" macro for
+	  the given workspace project, i.e., it re-imports the project from
+	  its original location in the UML2 Git repository.
+	-->
+	<macrodef name="restore.project">
+		<attribute name="project.name" />
+		<sequential>
+			<echo message="Restoring project @{project.name}" />
+			<cdo.deleteProject projectname="@{project.name}" />
+			<cdo.importProject projectname="@{project.name}" fromlocation="${git.clone.uml2}/plugins/@{project.name}" />
+		</sequential>
+	</macrodef>
+
+</project>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.properties b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.properties
new file mode 100644
index 0000000..4d85961
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.properties
@@ -0,0 +1,35 @@
+# Copyright (c) 2011, 2018 CEA and others.
+# All rights reserved.   This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#
+# Contributors:
+#   Kenn Hussey (CEA) - initial API and implementation
+#   Kenn Hussey - 535301
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+pluginName = UML2 Standard Profile (CDO Version)
+providerName = Eclipse Modeling Project
+
+_UI_Call_ClientAndSupplierAreOperations_diagnostic = Call ''{0}'' has a client or supplier that is not an operation.
+
+_UI_Create_ClientAndSupplierAreClassifiers_diagnostic = Create ''{0}'' has a client or supplier that is not a classifier.
+
+_UI_ImplementationClass_CannotBeRealization_diagnostic = Implementation class ''{0}'' cannot also be a realization.
+
+_UI_Implement_ImplementsSpecification_diagnostic = Implement ''{0}'' does not have a supplier specification.
+
+_UI_Instantiate_ClientAndSupplierAreClassifiers_diagnostic = Instantiate ''{0}'' has a client or supplier that is not a classifier.
+
+_UI_Realization_CannotBeImplementationClass_diagnostic = Realization ''{0}'' cannot also be an implementation class.
+
+_UI_Send_ClientOperationSendsSupplierSignal_diagnostic = Send ''{0}'' has a client that is not an operation or a supplier that is not a signal.
+
+_UI_Specification_CannotBeType_diagnostic = Specification ''{0}'' cannot also be a type.
+
+_UI_Type_CannotBeSpecification_diagnostic = Type ''{0}'' cannot also be a specification.
+
+_UI_Utility_IsUtility_diagnostic = Utility ''{0}'' has one or more non-static features.
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.xml b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.xml
new file mode 100644
index 0000000..21e972b
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/plugin.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2020 CEA and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v2.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v20.html
+
+ Contributors:
+   Eike Stepper - initial API and implementation
+
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.factory_override">
+    <factory 
+       uri = "http://www.eclipse.org/uml2/schemas/Standard/1" 
+       class = "org.eclipse.uml2.uml.profile.standard.cdo.StandardFactoryImpl" /> 
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.factory_override">
+    <factory
+       uri="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L2"
+       class="org.eclipse.uml2.uml.profile.standard.cdo.StandardFactoryImpl" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.factory_override">
+    <factory
+       uri="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3"
+       class="org.eclipse.uml2.uml.profile.standard.cdo.StandardFactoryImpl" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.factory_override">
+    <factory
+       uri="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard"
+       class="org.eclipse.uml2.uml.profile.standard.cdo.StandardFactoryImpl" />
+  </extension>
+
+</plugin>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/pom.xml b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/pom.xml
new file mode 100644
index 0000000..1049510
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<artifactId>uml</artifactId>
+		<groupId>org.eclipse.papyrus.cdo</groupId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.uml2.uml.profile.standard.cdo</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<version>1.5.0-SNAPSHOT</version>
+</project>
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/AuxiliaryImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/AuxiliaryImpl.java
new file mode 100644
index 0000000..ba7ff1e
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/AuxiliaryImpl.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.Auxiliary;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Auxiliary</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.AuxiliaryImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AuxiliaryImpl extends CDOObjectImpl implements Auxiliary {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AuxiliaryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.AUXILIARY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.AUXILIARY__BASE_CLASS,
+				StandardPackage.Literals.AUXILIARY__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.AUXILIARY__BASE_CLASS,
+				StandardPackage.Literals.AUXILIARY__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.AUXILIARY__BASE_CLASS, StandardPackage.Literals.AUXILIARY__BASE_CLASS,
+				newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.AUXILIARY__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.AUXILIARY__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.AUXILIARY__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.AUXILIARY__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //AuxiliaryImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/BuildComponentImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/BuildComponentImpl.java
new file mode 100644
index 0000000..e4c64a5
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/BuildComponentImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.BuildComponent;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Build Component</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.BuildComponentImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class BuildComponentImpl extends CDOObjectImpl implements BuildComponent {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BuildComponentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.BUILD_COMPONENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.BUILD_COMPONENT__BASE_COMPONENT,
+				StandardPackage.Literals.BUILD_COMPONENT__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.BUILD_COMPONENT__BASE_COMPONENT,
+				StandardPackage.Literals.BUILD_COMPONENT__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.BUILD_COMPONENT__BASE_COMPONENT,
+				StandardPackage.Literals.BUILD_COMPONENT__BASE_COMPONENT, newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.BUILD_COMPONENT__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.BUILD_COMPONENT__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.BUILD_COMPONENT__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.BUILD_COMPONENT__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //BuildComponentImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CallImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CallImpl.java
new file mode 100644
index 0000000..8feae6e
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CallImpl.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Usage;
+import org.eclipse.uml2.uml.profile.standard.Call;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.CallOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Call</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.CallImpl#getBase_Usage <em>Base Usage</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CallImpl extends CDOObjectImpl implements Call {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CallImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.CALL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage getBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.CALL__BASE_USAGE, StandardPackage.Literals.CALL__BASE_USAGE, true,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage basicGetBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.CALL__BASE_USAGE, StandardPackage.Literals.CALL__BASE_USAGE, false,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Usage(Usage newBase_Usage) {
+		eDynamicSet(StandardPackage.CALL__BASE_USAGE, StandardPackage.Literals.CALL__BASE_USAGE, newBase_Usage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateClientAndSupplierAreOperations(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return CallOperations.validateClientAndSupplierAreOperations(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.CALL__BASE_USAGE:
+			if (resolve)
+				return getBase_Usage();
+			return basicGetBase_Usage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.CALL__BASE_USAGE:
+			setBase_Usage((Usage) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.CALL__BASE_USAGE:
+			setBase_Usage((Usage) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.CALL__BASE_USAGE:
+			return basicGetBase_Usage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.CALL___VALIDATE_CLIENT_AND_SUPPLIER_ARE_OPERATIONS__DIAGNOSTICCHAIN_MAP:
+			return validateClientAndSupplierAreOperations((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //CallImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CreateImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CreateImpl.java
new file mode 100644
index 0000000..7e4711a
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/CreateImpl.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.BehavioralFeature;
+import org.eclipse.uml2.uml.Usage;
+import org.eclipse.uml2.uml.profile.standard.Create;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.CreateOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Create</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.CreateImpl#getBase_BehavioralFeature <em>Base Behavioral Feature</em>}</li>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.CreateImpl#getBase_Usage <em>Base Usage</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CreateImpl extends CDOObjectImpl implements Create {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CreateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.CREATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BehavioralFeature getBase_BehavioralFeature() {
+		return (BehavioralFeature) eDynamicGet(StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.CREATE__BASE_BEHAVIORAL_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BehavioralFeature basicGetBase_BehavioralFeature() {
+		return (BehavioralFeature) eDynamicGet(StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.CREATE__BASE_BEHAVIORAL_FEATURE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_BehavioralFeature(BehavioralFeature newBase_BehavioralFeature) {
+		eDynamicSet(StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.CREATE__BASE_BEHAVIORAL_FEATURE, newBase_BehavioralFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage getBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.CREATE__BASE_USAGE, StandardPackage.Literals.CREATE__BASE_USAGE,
+				true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage basicGetBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.CREATE__BASE_USAGE, StandardPackage.Literals.CREATE__BASE_USAGE,
+				false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Usage(Usage newBase_Usage) {
+		eDynamicSet(StandardPackage.CREATE__BASE_USAGE, StandardPackage.Literals.CREATE__BASE_USAGE, newBase_Usage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateClientAndSupplierAreClassifiers(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return CreateOperations.validateClientAndSupplierAreClassifiers(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE:
+			if (resolve)
+				return getBase_BehavioralFeature();
+			return basicGetBase_BehavioralFeature();
+		case StandardPackage.CREATE__BASE_USAGE:
+			if (resolve)
+				return getBase_Usage();
+			return basicGetBase_Usage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE:
+			setBase_BehavioralFeature((BehavioralFeature) newValue);
+			return;
+		case StandardPackage.CREATE__BASE_USAGE:
+			setBase_Usage((Usage) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE:
+			setBase_BehavioralFeature((BehavioralFeature) null);
+			return;
+		case StandardPackage.CREATE__BASE_USAGE:
+			setBase_Usage((Usage) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.CREATE__BASE_BEHAVIORAL_FEATURE:
+			return basicGetBase_BehavioralFeature() != null;
+		case StandardPackage.CREATE__BASE_USAGE:
+			return basicGetBase_Usage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.CREATE___VALIDATE_CLIENT_AND_SUPPLIER_ARE_CLASSIFIERS__DIAGNOSTICCHAIN_MAP:
+			return validateClientAndSupplierAreClassifiers((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //CreateImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DeriveImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DeriveImpl.java
new file mode 100644
index 0000000..5269c98
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DeriveImpl.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.ValueSpecification;
+import org.eclipse.uml2.uml.profile.standard.Derive;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Derive</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.DeriveImpl#getComputation <em>Computation</em>}</li>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.DeriveImpl#getBase_Abstraction <em>Base Abstraction</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DeriveImpl extends CDOObjectImpl implements Derive {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DeriveImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DERIVE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification getComputation() {
+		return (ValueSpecification) eDynamicGet(StandardPackage.DERIVE__COMPUTATION,
+				StandardPackage.Literals.DERIVE__COMPUTATION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification basicGetComputation() {
+		return (ValueSpecification) eDynamicGet(StandardPackage.DERIVE__COMPUTATION,
+				StandardPackage.Literals.DERIVE__COMPUTATION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetComputation(ValueSpecification newComputation, NotificationChain msgs) {
+		msgs = eDynamicInverseAdd((InternalEObject) newComputation, StandardPackage.DERIVE__COMPUTATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setComputation(ValueSpecification newComputation) {
+		eDynamicSet(StandardPackage.DERIVE__COMPUTATION, StandardPackage.Literals.DERIVE__COMPUTATION, newComputation);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction getBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.DERIVE__BASE_ABSTRACTION,
+				StandardPackage.Literals.DERIVE__BASE_ABSTRACTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction basicGetBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.DERIVE__BASE_ABSTRACTION,
+				StandardPackage.Literals.DERIVE__BASE_ABSTRACTION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Abstraction(Abstraction newBase_Abstraction) {
+		eDynamicSet(StandardPackage.DERIVE__BASE_ABSTRACTION, StandardPackage.Literals.DERIVE__BASE_ABSTRACTION,
+				newBase_Abstraction);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case StandardPackage.DERIVE__COMPUTATION:
+			return basicSetComputation(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.DERIVE__COMPUTATION:
+			if (resolve)
+				return getComputation();
+			return basicGetComputation();
+		case StandardPackage.DERIVE__BASE_ABSTRACTION:
+			if (resolve)
+				return getBase_Abstraction();
+			return basicGetBase_Abstraction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.DERIVE__COMPUTATION:
+			setComputation((ValueSpecification) newValue);
+			return;
+		case StandardPackage.DERIVE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.DERIVE__COMPUTATION:
+			setComputation((ValueSpecification) null);
+			return;
+		case StandardPackage.DERIVE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.DERIVE__COMPUTATION:
+			return basicGetComputation() != null;
+		case StandardPackage.DERIVE__BASE_ABSTRACTION:
+			return basicGetBase_Abstraction() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DeriveImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DestroyImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DestroyImpl.java
new file mode 100644
index 0000000..2bb312c
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DestroyImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.BehavioralFeature;
+import org.eclipse.uml2.uml.profile.standard.Destroy;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Destroy</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.DestroyImpl#getBase_BehavioralFeature <em>Base Behavioral Feature</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DestroyImpl extends CDOObjectImpl implements Destroy {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DestroyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DESTROY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BehavioralFeature getBase_BehavioralFeature() {
+		return (BehavioralFeature) eDynamicGet(StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.DESTROY__BASE_BEHAVIORAL_FEATURE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BehavioralFeature basicGetBase_BehavioralFeature() {
+		return (BehavioralFeature) eDynamicGet(StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.DESTROY__BASE_BEHAVIORAL_FEATURE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_BehavioralFeature(BehavioralFeature newBase_BehavioralFeature) {
+		eDynamicSet(StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE,
+				StandardPackage.Literals.DESTROY__BASE_BEHAVIORAL_FEATURE, newBase_BehavioralFeature);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE:
+			if (resolve)
+				return getBase_BehavioralFeature();
+			return basicGetBase_BehavioralFeature();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE:
+			setBase_BehavioralFeature((BehavioralFeature) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE:
+			setBase_BehavioralFeature((BehavioralFeature) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.DESTROY__BASE_BEHAVIORAL_FEATURE:
+			return basicGetBase_BehavioralFeature() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DestroyImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DocumentImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DocumentImpl.java
new file mode 100644
index 0000000..ca0238f
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/DocumentImpl.java
@@ -0,0 +1,111 @@
+/*8
+ * Copyright (c) 2014, 201 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.Document;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Document</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.DocumentImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DocumentImpl extends FileImpl implements Document {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DocumentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DOCUMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.DOCUMENT__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.DOCUMENT__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.DOCUMENT__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetBase_Artifact() {
+		return basicGetBase_Artifact() != null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.DOCUMENT__BASE_ARTIFACT:
+			return isSetBase_Artifact();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DocumentImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/EntityImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/EntityImpl.java
new file mode 100644
index 0000000..af19a9c
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/EntityImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.Entity;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Entity</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.EntityImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EntityImpl extends CDOObjectImpl implements Entity {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EntityImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.ENTITY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.ENTITY__BASE_COMPONENT,
+				StandardPackage.Literals.ENTITY__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.ENTITY__BASE_COMPONENT,
+				StandardPackage.Literals.ENTITY__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.ENTITY__BASE_COMPONENT, StandardPackage.Literals.ENTITY__BASE_COMPONENT,
+				newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.ENTITY__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.ENTITY__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.ENTITY__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.ENTITY__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //EntityImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ExecutableImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ExecutableImpl.java
new file mode 100644
index 0000000..6ed2d42
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ExecutableImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.Executable;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Executable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ExecutableImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ExecutableImpl extends FileImpl implements Executable {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExecutableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.EXECUTABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.EXECUTABLE__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.EXECUTABLE__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.EXECUTABLE__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetBase_Artifact() {
+		return basicGetBase_Artifact() != null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.EXECUTABLE__BASE_ARTIFACT:
+			return isSetBase_Artifact();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ExecutableImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FileImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FileImpl.java
new file mode 100644
index 0000000..b4c3151
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FileImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.File;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>File</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.FileImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class FileImpl extends CDOObjectImpl implements File {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FileImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.FILE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.FILE__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.FILE__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.FILE__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.FILE__BASE_ARTIFACT:
+			if (resolve)
+				return getBase_Artifact();
+			return basicGetBase_Artifact();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.FILE__BASE_ARTIFACT:
+			setBase_Artifact((Artifact) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FILE__BASE_ARTIFACT:
+			setBase_Artifact((Artifact) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FILE__BASE_ARTIFACT:
+			return basicGetBase_Artifact() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //FileImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FocusImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FocusImpl.java
new file mode 100644
index 0000000..55b7b4c
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FocusImpl.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.Focus;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Focus</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.FocusImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FocusImpl extends CDOObjectImpl implements Focus {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FocusImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.FOCUS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.FOCUS__BASE_CLASS,
+				StandardPackage.Literals.FOCUS__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.FOCUS__BASE_CLASS,
+				StandardPackage.Literals.FOCUS__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.FOCUS__BASE_CLASS, StandardPackage.Literals.FOCUS__BASE_CLASS, newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.FOCUS__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.FOCUS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FOCUS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FOCUS__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //FocusImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FrameworkImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FrameworkImpl.java
new file mode 100644
index 0000000..3727221
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/FrameworkImpl.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.Framework;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Framework</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.FrameworkImpl#getBase_Package <em>Base Package</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FrameworkImpl extends CDOObjectImpl implements Framework {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FrameworkImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.FRAMEWORK;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Package getBase_Package() {
+		return (org.eclipse.uml2.uml.Package) eDynamicGet(StandardPackage.FRAMEWORK__BASE_PACKAGE,
+				StandardPackage.Literals.FRAMEWORK__BASE_PACKAGE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Package basicGetBase_Package() {
+		return (org.eclipse.uml2.uml.Package) eDynamicGet(StandardPackage.FRAMEWORK__BASE_PACKAGE,
+				StandardPackage.Literals.FRAMEWORK__BASE_PACKAGE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Package(org.eclipse.uml2.uml.Package newBase_Package) {
+		eDynamicSet(StandardPackage.FRAMEWORK__BASE_PACKAGE, StandardPackage.Literals.FRAMEWORK__BASE_PACKAGE,
+				newBase_Package);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.FRAMEWORK__BASE_PACKAGE:
+			if (resolve)
+				return getBase_Package();
+			return basicGetBase_Package();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.FRAMEWORK__BASE_PACKAGE:
+			setBase_Package((org.eclipse.uml2.uml.Package) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FRAMEWORK__BASE_PACKAGE:
+			setBase_Package((org.eclipse.uml2.uml.Package) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.FRAMEWORK__BASE_PACKAGE:
+			return basicGetBase_Package() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //FrameworkImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementImpl.java
new file mode 100644
index 0000000..6c25766
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementImpl.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.Implement;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.ImplementOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Implement</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ImplementImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ImplementImpl extends CDOObjectImpl implements Implement {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ImplementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.IMPLEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.IMPLEMENT__BASE_COMPONENT,
+				StandardPackage.Literals.IMPLEMENT__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.IMPLEMENT__BASE_COMPONENT,
+				StandardPackage.Literals.IMPLEMENT__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.IMPLEMENT__BASE_COMPONENT, StandardPackage.Literals.IMPLEMENT__BASE_COMPONENT,
+				newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateImplementsSpecification(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return ImplementOperations.validateImplementsSpecification(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENT__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENT__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENT__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENT__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.IMPLEMENT___VALIDATE_IMPLEMENTS_SPECIFICATION__DIAGNOSTICCHAIN_MAP:
+			return validateImplementsSpecification((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //ImplementImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementationClassImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementationClassImpl.java
new file mode 100644
index 0000000..19ecaa3
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ImplementationClassImpl.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.ImplementationClass;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.ImplementationClassOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Implementation Class</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ImplementationClassImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ImplementationClassImpl extends CDOObjectImpl implements ImplementationClass {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ImplementationClassImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.IMPLEMENTATION_CLASS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS,
+				StandardPackage.Literals.IMPLEMENTATION_CLASS__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS,
+				StandardPackage.Literals.IMPLEMENTATION_CLASS__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS,
+				StandardPackage.Literals.IMPLEMENTATION_CLASS__BASE_CLASS, newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateCannotBeRealization(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return ImplementationClassOperations.validateCannotBeRealization(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.IMPLEMENTATION_CLASS__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.IMPLEMENTATION_CLASS___VALIDATE_CANNOT_BE_REALIZATION__DIAGNOSTICCHAIN_MAP:
+			return validateCannotBeRealization((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //ImplementationClassImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/InstantiateImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/InstantiateImpl.java
new file mode 100644
index 0000000..da9a6f8
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/InstantiateImpl.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Usage;
+import org.eclipse.uml2.uml.profile.standard.Instantiate;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.InstantiateOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Instantiate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.InstantiateImpl#getBase_Usage <em>Base Usage</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InstantiateImpl extends CDOObjectImpl implements Instantiate {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InstantiateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.INSTANTIATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage getBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.INSTANTIATE__BASE_USAGE,
+				StandardPackage.Literals.INSTANTIATE__BASE_USAGE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage basicGetBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.INSTANTIATE__BASE_USAGE,
+				StandardPackage.Literals.INSTANTIATE__BASE_USAGE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Usage(Usage newBase_Usage) {
+		eDynamicSet(StandardPackage.INSTANTIATE__BASE_USAGE, StandardPackage.Literals.INSTANTIATE__BASE_USAGE,
+				newBase_Usage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateClientAndSupplierAreClassifiers(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return InstantiateOperations.validateClientAndSupplierAreClassifiers(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.INSTANTIATE__BASE_USAGE:
+			if (resolve)
+				return getBase_Usage();
+			return basicGetBase_Usage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.INSTANTIATE__BASE_USAGE:
+			setBase_Usage((Usage) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.INSTANTIATE__BASE_USAGE:
+			setBase_Usage((Usage) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.INSTANTIATE__BASE_USAGE:
+			return basicGetBase_Usage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.INSTANTIATE___VALIDATE_CLIENT_AND_SUPPLIER_ARE_CLASSIFIERS__DIAGNOSTICCHAIN_MAP:
+			return validateClientAndSupplierAreClassifiers((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //InstantiateImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/LibraryImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/LibraryImpl.java
new file mode 100644
index 0000000..109de62
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/LibraryImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.Library;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Library</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.LibraryImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LibraryImpl extends FileImpl implements Library {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LibraryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.LIBRARY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.LIBRARY__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.LIBRARY__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.LIBRARY__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetBase_Artifact() {
+		return basicGetBase_Artifact() != null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.LIBRARY__BASE_ARTIFACT:
+			return isSetBase_Artifact();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LibraryImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetaclassImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetaclassImpl.java
new file mode 100644
index 0000000..3852527
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetaclassImpl.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.Metaclass;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Metaclass</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.MetaclassImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MetaclassImpl extends CDOObjectImpl implements Metaclass {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MetaclassImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.METACLASS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.METACLASS__BASE_CLASS,
+				StandardPackage.Literals.METACLASS__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.METACLASS__BASE_CLASS,
+				StandardPackage.Literals.METACLASS__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.METACLASS__BASE_CLASS, StandardPackage.Literals.METACLASS__BASE_CLASS,
+				newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.METACLASS__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.METACLASS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.METACLASS__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.METACLASS__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //MetaclassImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetamodelImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetamodelImpl.java
new file mode 100644
index 0000000..64143f9
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/MetamodelImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.profile.standard.Metamodel;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Metamodel</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.MetamodelImpl#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MetamodelImpl extends CDOObjectImpl implements Metamodel {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MetamodelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.METAMODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model getBase_Model() {
+		return (Model) eDynamicGet(StandardPackage.METAMODEL__BASE_MODEL,
+				StandardPackage.Literals.METAMODEL__BASE_MODEL, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model basicGetBase_Model() {
+		return (Model) eDynamicGet(StandardPackage.METAMODEL__BASE_MODEL,
+				StandardPackage.Literals.METAMODEL__BASE_MODEL, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Model(Model newBase_Model) {
+		eDynamicSet(StandardPackage.METAMODEL__BASE_MODEL, StandardPackage.Literals.METAMODEL__BASE_MODEL,
+				newBase_Model);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.METAMODEL__BASE_MODEL:
+			if (resolve)
+				return getBase_Model();
+			return basicGetBase_Model();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.METAMODEL__BASE_MODEL:
+			setBase_Model((Model) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.METAMODEL__BASE_MODEL:
+			setBase_Model((Model) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.METAMODEL__BASE_MODEL:
+			return basicGetBase_Model() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //MetamodelImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ModelLibraryImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ModelLibraryImpl.java
new file mode 100644
index 0000000..d0b221d
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ModelLibraryImpl.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.ModelLibrary;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Model Library</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ModelLibraryImpl#getBase_Package <em>Base Package</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ModelLibraryImpl extends CDOObjectImpl implements ModelLibrary {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModelLibraryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.MODEL_LIBRARY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Package getBase_Package() {
+		return (org.eclipse.uml2.uml.Package) eDynamicGet(StandardPackage.MODEL_LIBRARY__BASE_PACKAGE,
+				StandardPackage.Literals.MODEL_LIBRARY__BASE_PACKAGE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Package basicGetBase_Package() {
+		return (org.eclipse.uml2.uml.Package) eDynamicGet(StandardPackage.MODEL_LIBRARY__BASE_PACKAGE,
+				StandardPackage.Literals.MODEL_LIBRARY__BASE_PACKAGE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Package(org.eclipse.uml2.uml.Package newBase_Package) {
+		eDynamicSet(StandardPackage.MODEL_LIBRARY__BASE_PACKAGE, StandardPackage.Literals.MODEL_LIBRARY__BASE_PACKAGE,
+				newBase_Package);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.MODEL_LIBRARY__BASE_PACKAGE:
+			if (resolve)
+				return getBase_Package();
+			return basicGetBase_Package();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.MODEL_LIBRARY__BASE_PACKAGE:
+			setBase_Package((org.eclipse.uml2.uml.Package) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.MODEL_LIBRARY__BASE_PACKAGE:
+			setBase_Package((org.eclipse.uml2.uml.Package) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.MODEL_LIBRARY__BASE_PACKAGE:
+			return basicGetBase_Package() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ModelLibraryImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ProcessImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ProcessImpl.java
new file mode 100644
index 0000000..f146291
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ProcessImpl.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Process</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ProcessImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ProcessImpl extends CDOObjectImpl implements org.eclipse.uml2.uml.profile.standard.Process {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProcessImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.PROCESS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.PROCESS__BASE_COMPONENT,
+				StandardPackage.Literals.PROCESS__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.PROCESS__BASE_COMPONENT,
+				StandardPackage.Literals.PROCESS__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.PROCESS__BASE_COMPONENT, StandardPackage.Literals.PROCESS__BASE_COMPONENT,
+				newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.PROCESS__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.PROCESS__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.PROCESS__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.PROCESS__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ProcessImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RealizationImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RealizationImpl.java
new file mode 100644
index 0000000..e944c6a
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RealizationImpl.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Classifier;
+import org.eclipse.uml2.uml.profile.standard.Realization;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.RealizationOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Realization</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.RealizationImpl#getBase_Classifier <em>Base Classifier</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class RealizationImpl extends CDOObjectImpl implements Realization {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RealizationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.REALIZATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Classifier getBase_Classifier() {
+		return (Classifier) eDynamicGet(StandardPackage.REALIZATION__BASE_CLASSIFIER,
+				StandardPackage.Literals.REALIZATION__BASE_CLASSIFIER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Classifier basicGetBase_Classifier() {
+		return (Classifier) eDynamicGet(StandardPackage.REALIZATION__BASE_CLASSIFIER,
+				StandardPackage.Literals.REALIZATION__BASE_CLASSIFIER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Classifier(Classifier newBase_Classifier) {
+		eDynamicSet(StandardPackage.REALIZATION__BASE_CLASSIFIER, StandardPackage.Literals.REALIZATION__BASE_CLASSIFIER,
+				newBase_Classifier);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateCannotBeImplementationClass(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return RealizationOperations.validateCannotBeImplementationClass(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.REALIZATION__BASE_CLASSIFIER:
+			if (resolve)
+				return getBase_Classifier();
+			return basicGetBase_Classifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.REALIZATION__BASE_CLASSIFIER:
+			setBase_Classifier((Classifier) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.REALIZATION__BASE_CLASSIFIER:
+			setBase_Classifier((Classifier) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.REALIZATION__BASE_CLASSIFIER:
+			return basicGetBase_Classifier() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.REALIZATION___VALIDATE_CANNOT_BE_IMPLEMENTATION_CLASS__DIAGNOSTICCHAIN_MAP:
+			return validateCannotBeImplementationClass((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //RealizationImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RefineImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RefineImpl.java
new file mode 100644
index 0000000..14393d5
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/RefineImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.profile.standard.Refine;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Refine</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.RefineImpl#getBase_Abstraction <em>Base Abstraction</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class RefineImpl extends CDOObjectImpl implements Refine {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RefineImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.REFINE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction getBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.REFINE__BASE_ABSTRACTION,
+				StandardPackage.Literals.REFINE__BASE_ABSTRACTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction basicGetBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.REFINE__BASE_ABSTRACTION,
+				StandardPackage.Literals.REFINE__BASE_ABSTRACTION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Abstraction(Abstraction newBase_Abstraction) {
+		eDynamicSet(StandardPackage.REFINE__BASE_ABSTRACTION, StandardPackage.Literals.REFINE__BASE_ABSTRACTION,
+				newBase_Abstraction);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.REFINE__BASE_ABSTRACTION:
+			if (resolve)
+				return getBase_Abstraction();
+			return basicGetBase_Abstraction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.REFINE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.REFINE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.REFINE__BASE_ABSTRACTION:
+			return basicGetBase_Abstraction() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RefineImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ResponsibilityImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ResponsibilityImpl.java
new file mode 100644
index 0000000..943fca5
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ResponsibilityImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Usage;
+import org.eclipse.uml2.uml.profile.standard.Responsibility;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Responsibility</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ResponsibilityImpl#getBase_Usage <em>Base Usage</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ResponsibilityImpl extends CDOObjectImpl implements Responsibility {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ResponsibilityImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.RESPONSIBILITY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage getBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.RESPONSIBILITY__BASE_USAGE,
+				StandardPackage.Literals.RESPONSIBILITY__BASE_USAGE, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage basicGetBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.RESPONSIBILITY__BASE_USAGE,
+				StandardPackage.Literals.RESPONSIBILITY__BASE_USAGE, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Usage(Usage newBase_Usage) {
+		eDynamicSet(StandardPackage.RESPONSIBILITY__BASE_USAGE, StandardPackage.Literals.RESPONSIBILITY__BASE_USAGE,
+				newBase_Usage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.RESPONSIBILITY__BASE_USAGE:
+			if (resolve)
+				return getBase_Usage();
+			return basicGetBase_Usage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.RESPONSIBILITY__BASE_USAGE:
+			setBase_Usage((Usage) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.RESPONSIBILITY__BASE_USAGE:
+			setBase_Usage((Usage) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.RESPONSIBILITY__BASE_USAGE:
+			return basicGetBase_Usage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ResponsibilityImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ScriptImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ScriptImpl.java
new file mode 100644
index 0000000..b76533e
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ScriptImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.Script;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Script</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ScriptImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ScriptImpl extends FileImpl implements Script {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ScriptImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SCRIPT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.SCRIPT__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.SCRIPT__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.SCRIPT__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetBase_Artifact() {
+		return basicGetBase_Artifact() != null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SCRIPT__BASE_ARTIFACT:
+			return isSetBase_Artifact();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ScriptImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SendImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SendImpl.java
new file mode 100644
index 0000000..b504c51
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SendImpl.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Usage;
+import org.eclipse.uml2.uml.profile.standard.Send;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.SendOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Send</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.SendImpl#getBase_Usage <em>Base Usage</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SendImpl extends CDOObjectImpl implements Send {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SendImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SEND;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage getBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.SEND__BASE_USAGE, StandardPackage.Literals.SEND__BASE_USAGE, true,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Usage basicGetBase_Usage() {
+		return (Usage) eDynamicGet(StandardPackage.SEND__BASE_USAGE, StandardPackage.Literals.SEND__BASE_USAGE, false,
+				true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Usage(Usage newBase_Usage) {
+		eDynamicSet(StandardPackage.SEND__BASE_USAGE, StandardPackage.Literals.SEND__BASE_USAGE, newBase_Usage);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateClientOperationSendsSupplierSignal(DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return SendOperations.validateClientOperationSendsSupplierSignal(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.SEND__BASE_USAGE:
+			if (resolve)
+				return getBase_Usage();
+			return basicGetBase_Usage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.SEND__BASE_USAGE:
+			setBase_Usage((Usage) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SEND__BASE_USAGE:
+			setBase_Usage((Usage) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SEND__BASE_USAGE:
+			return basicGetBase_Usage() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.SEND___VALIDATE_CLIENT_OPERATION_SENDS_SUPPLIER_SIGNAL__DIAGNOSTICCHAIN_MAP:
+			return validateClientOperationSendsSupplierSignal((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //SendImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ServiceImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ServiceImpl.java
new file mode 100644
index 0000000..75dd2b3
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/ServiceImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.Service;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.ServiceImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ServiceImpl extends CDOObjectImpl implements Service {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ServiceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SERVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.SERVICE__BASE_COMPONENT,
+				StandardPackage.Literals.SERVICE__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.SERVICE__BASE_COMPONENT,
+				StandardPackage.Literals.SERVICE__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.SERVICE__BASE_COMPONENT, StandardPackage.Literals.SERVICE__BASE_COMPONENT,
+				newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.SERVICE__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.SERVICE__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SERVICE__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SERVICE__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ServiceImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SourceImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SourceImpl.java
new file mode 100644
index 0000000..6ffa603
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SourceImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.uml2.uml.Artifact;
+import org.eclipse.uml2.uml.profile.standard.Source;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Source</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.SourceImpl#getBase_Artifact <em>Base Artifact</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SourceImpl extends FileImpl implements Source {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact getBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.SOURCE__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Artifact basicGetBase_Artifact() {
+		return (Artifact) eDynamicGet(StandardPackage.SOURCE__BASE_ARTIFACT,
+				StandardPackage.Literals.FILE__BASE_ARTIFACT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setBase_Artifact(Artifact newBase_Artifact) {
+		eDynamicSet(StandardPackage.SOURCE__BASE_ARTIFACT, StandardPackage.Literals.FILE__BASE_ARTIFACT,
+				newBase_Artifact);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetBase_Artifact() {
+		return basicGetBase_Artifact() != null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SOURCE__BASE_ARTIFACT:
+			return isSetBase_Artifact();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //SourceImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SpecificationImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SpecificationImpl.java
new file mode 100644
index 0000000..be8bb6f
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SpecificationImpl.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Classifier;
+import org.eclipse.uml2.uml.profile.standard.Specification;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.SpecificationOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Specification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.SpecificationImpl#getBase_Classifier <em>Base Classifier</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SpecificationImpl extends CDOObjectImpl implements Specification {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SpecificationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SPECIFICATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Classifier getBase_Classifier() {
+		return (Classifier) eDynamicGet(StandardPackage.SPECIFICATION__BASE_CLASSIFIER,
+				StandardPackage.Literals.SPECIFICATION__BASE_CLASSIFIER, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Classifier basicGetBase_Classifier() {
+		return (Classifier) eDynamicGet(StandardPackage.SPECIFICATION__BASE_CLASSIFIER,
+				StandardPackage.Literals.SPECIFICATION__BASE_CLASSIFIER, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Classifier(Classifier newBase_Classifier) {
+		eDynamicSet(StandardPackage.SPECIFICATION__BASE_CLASSIFIER,
+				StandardPackage.Literals.SPECIFICATION__BASE_CLASSIFIER, newBase_Classifier);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateCannotBeType(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return SpecificationOperations.validateCannotBeType(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.SPECIFICATION__BASE_CLASSIFIER:
+			if (resolve)
+				return getBase_Classifier();
+			return basicGetBase_Classifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.SPECIFICATION__BASE_CLASSIFIER:
+			setBase_Classifier((Classifier) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SPECIFICATION__BASE_CLASSIFIER:
+			setBase_Classifier((Classifier) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SPECIFICATION__BASE_CLASSIFIER:
+			return basicGetBase_Classifier() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.SPECIFICATION___VALIDATE_CANNOT_BE_TYPE__DIAGNOSTICCHAIN_MAP:
+			return validateCannotBeType((DiagnosticChain) arguments.get(0), (Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //SpecificationImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/StandardFactoryImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/StandardFactoryImpl.java
new file mode 100644
index 0000000..6b385d0
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/StandardFactoryImpl.java
@@ -0,0 +1,508 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.uml2.uml.profile.standard.Auxiliary;
+import org.eclipse.uml2.uml.profile.standard.BuildComponent;
+import org.eclipse.uml2.uml.profile.standard.Call;
+import org.eclipse.uml2.uml.profile.standard.Create;
+import org.eclipse.uml2.uml.profile.standard.Derive;
+import org.eclipse.uml2.uml.profile.standard.Destroy;
+import org.eclipse.uml2.uml.profile.standard.Document;
+import org.eclipse.uml2.uml.profile.standard.Entity;
+import org.eclipse.uml2.uml.profile.standard.Executable;
+import org.eclipse.uml2.uml.profile.standard.Focus;
+import org.eclipse.uml2.uml.profile.standard.Framework;
+import org.eclipse.uml2.uml.profile.standard.Implement;
+import org.eclipse.uml2.uml.profile.standard.ImplementationClass;
+import org.eclipse.uml2.uml.profile.standard.Instantiate;
+import org.eclipse.uml2.uml.profile.standard.Library;
+import org.eclipse.uml2.uml.profile.standard.Metaclass;
+import org.eclipse.uml2.uml.profile.standard.Metamodel;
+import org.eclipse.uml2.uml.profile.standard.ModelLibrary;
+import org.eclipse.uml2.uml.profile.standard.Realization;
+import org.eclipse.uml2.uml.profile.standard.Refine;
+import org.eclipse.uml2.uml.profile.standard.Responsibility;
+import org.eclipse.uml2.uml.profile.standard.Script;
+import org.eclipse.uml2.uml.profile.standard.Send;
+import org.eclipse.uml2.uml.profile.standard.Service;
+import org.eclipse.uml2.uml.profile.standard.Source;
+import org.eclipse.uml2.uml.profile.standard.Specification;
+import org.eclipse.uml2.uml.profile.standard.StandardFactory;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.Subsystem;
+import org.eclipse.uml2.uml.profile.standard.SystemModel;
+import org.eclipse.uml2.uml.profile.standard.Trace;
+import org.eclipse.uml2.uml.profile.standard.Type;
+import org.eclipse.uml2.uml.profile.standard.Utility;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardFactoryImpl extends EFactoryImpl implements StandardFactory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static StandardFactory init() {
+		try {
+			StandardFactory theStandardFactory = (StandardFactory) EPackage.Registry.INSTANCE
+					.getEFactory(StandardPackage.eNS_URI);
+			if (theStandardFactory != null) {
+				return theStandardFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new StandardFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case StandardPackage.AUXILIARY:
+			return (EObject) createAuxiliary();
+		case StandardPackage.CALL:
+			return (EObject) createCall();
+		case StandardPackage.CREATE:
+			return (EObject) createCreate();
+		case StandardPackage.DERIVE:
+			return (EObject) createDerive();
+		case StandardPackage.DESTROY:
+			return (EObject) createDestroy();
+		case StandardPackage.DOCUMENT:
+			return (EObject) createDocument();
+		case StandardPackage.ENTITY:
+			return (EObject) createEntity();
+		case StandardPackage.EXECUTABLE:
+			return (EObject) createExecutable();
+		case StandardPackage.FOCUS:
+			return (EObject) createFocus();
+		case StandardPackage.FRAMEWORK:
+			return (EObject) createFramework();
+		case StandardPackage.IMPLEMENT:
+			return (EObject) createImplement();
+		case StandardPackage.IMPLEMENTATION_CLASS:
+			return (EObject) createImplementationClass();
+		case StandardPackage.INSTANTIATE:
+			return (EObject) createInstantiate();
+		case StandardPackage.LIBRARY:
+			return (EObject) createLibrary();
+		case StandardPackage.METACLASS:
+			return (EObject) createMetaclass();
+		case StandardPackage.MODEL_LIBRARY:
+			return (EObject) createModelLibrary();
+		case StandardPackage.PROCESS:
+			return (EObject) createProcess();
+		case StandardPackage.REALIZATION:
+			return (EObject) createRealization();
+		case StandardPackage.REFINE:
+			return (EObject) createRefine();
+		case StandardPackage.RESPONSIBILITY:
+			return (EObject) createResponsibility();
+		case StandardPackage.SCRIPT:
+			return (EObject) createScript();
+		case StandardPackage.SEND:
+			return (EObject) createSend();
+		case StandardPackage.SERVICE:
+			return (EObject) createService();
+		case StandardPackage.SOURCE:
+			return (EObject) createSource();
+		case StandardPackage.SPECIFICATION:
+			return (EObject) createSpecification();
+		case StandardPackage.SUBSYSTEM:
+			return (EObject) createSubsystem();
+		case StandardPackage.TRACE:
+			return (EObject) createTrace();
+		case StandardPackage.TYPE:
+			return (EObject) createType();
+		case StandardPackage.UTILITY:
+			return (EObject) createUtility();
+		case StandardPackage.BUILD_COMPONENT:
+			return (EObject) createBuildComponent();
+		case StandardPackage.METAMODEL:
+			return (EObject) createMetamodel();
+		case StandardPackage.SYSTEM_MODEL:
+			return (EObject) createSystemModel();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Auxiliary createAuxiliary() {
+		AuxiliaryImpl auxiliary = new AuxiliaryImpl();
+		return auxiliary;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Call createCall() {
+		CallImpl call = new CallImpl();
+		return call;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Create createCreate() {
+		CreateImpl create = new CreateImpl();
+		return create;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Derive createDerive() {
+		DeriveImpl derive = new DeriveImpl();
+		return derive;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Destroy createDestroy() {
+		DestroyImpl destroy = new DestroyImpl();
+		return destroy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Document createDocument() {
+		DocumentImpl document = new DocumentImpl();
+		return document;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Entity createEntity() {
+		EntityImpl entity = new EntityImpl();
+		return entity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Executable createExecutable() {
+		ExecutableImpl executable = new ExecutableImpl();
+		return executable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Focus createFocus() {
+		FocusImpl focus = new FocusImpl();
+		return focus;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Framework createFramework() {
+		FrameworkImpl framework = new FrameworkImpl();
+		return framework;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Implement createImplement() {
+		ImplementImpl implement = new ImplementImpl();
+		return implement;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ImplementationClass createImplementationClass() {
+		ImplementationClassImpl implementationClass = new ImplementationClassImpl();
+		return implementationClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Instantiate createInstantiate() {
+		InstantiateImpl instantiate = new InstantiateImpl();
+		return instantiate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Library createLibrary() {
+		LibraryImpl library = new LibraryImpl();
+		return library;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Metaclass createMetaclass() {
+		MetaclassImpl metaclass = new MetaclassImpl();
+		return metaclass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelLibrary createModelLibrary() {
+		ModelLibraryImpl modelLibrary = new ModelLibraryImpl();
+		return modelLibrary;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.profile.standard.Process createProcess() {
+		ProcessImpl process = new ProcessImpl();
+		return process;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Realization createRealization() {
+		RealizationImpl realization = new RealizationImpl();
+		return realization;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Refine createRefine() {
+		RefineImpl refine = new RefineImpl();
+		return refine;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Responsibility createResponsibility() {
+		ResponsibilityImpl responsibility = new ResponsibilityImpl();
+		return responsibility;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Script createScript() {
+		ScriptImpl script = new ScriptImpl();
+		return script;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Send createSend() {
+		SendImpl send = new SendImpl();
+		return send;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Service createService() {
+		ServiceImpl service = new ServiceImpl();
+		return service;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Source createSource() {
+		SourceImpl source = new SourceImpl();
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Specification createSpecification() {
+		SpecificationImpl specification = new SpecificationImpl();
+		return specification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Subsystem createSubsystem() {
+		SubsystemImpl subsystem = new SubsystemImpl();
+		return subsystem;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Trace createTrace() {
+		TraceImpl trace = new TraceImpl();
+		return trace;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Type createType() {
+		TypeImpl type = new TypeImpl();
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Utility createUtility() {
+		UtilityImpl utility = new UtilityImpl();
+		return utility;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BuildComponent createBuildComponent() {
+		BuildComponentImpl buildComponent = new BuildComponentImpl();
+		return buildComponent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Metamodel createMetamodel() {
+		MetamodelImpl metamodel = new MetamodelImpl();
+		return metamodel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SystemModel createSystemModel() {
+		SystemModelImpl systemModel = new SystemModelImpl();
+		return systemModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardPackage getStandardPackage() {
+		return (StandardPackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static StandardPackage getPackage() {
+		return StandardPackage.eINSTANCE;
+	}
+
+} //StandardFactoryImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SubsystemImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SubsystemImpl.java
new file mode 100644
index 0000000..fa790fd
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SubsystemImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.Subsystem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Subsystem</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.SubsystemImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SubsystemImpl extends CDOObjectImpl implements Subsystem {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SubsystemImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SUBSYSTEM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.SUBSYSTEM__BASE_COMPONENT,
+				StandardPackage.Literals.SUBSYSTEM__BASE_COMPONENT, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return (Component) eDynamicGet(StandardPackage.SUBSYSTEM__BASE_COMPONENT,
+				StandardPackage.Literals.SUBSYSTEM__BASE_COMPONENT, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		eDynamicSet(StandardPackage.SUBSYSTEM__BASE_COMPONENT, StandardPackage.Literals.SUBSYSTEM__BASE_COMPONENT,
+				newBase_Component);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.SUBSYSTEM__BASE_COMPONENT:
+			if (resolve)
+				return getBase_Component();
+			return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.SUBSYSTEM__BASE_COMPONENT:
+			setBase_Component((Component) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SUBSYSTEM__BASE_COMPONENT:
+			setBase_Component((Component) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SUBSYSTEM__BASE_COMPONENT:
+			return basicGetBase_Component() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //SubsystemImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SystemModelImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SystemModelImpl.java
new file mode 100644
index 0000000..12c4016
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/SystemModelImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.SystemModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>System Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.SystemModelImpl#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SystemModelImpl extends CDOObjectImpl implements SystemModel {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SystemModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SYSTEM_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model getBase_Model() {
+		return (Model) eDynamicGet(StandardPackage.SYSTEM_MODEL__BASE_MODEL,
+				StandardPackage.Literals.SYSTEM_MODEL__BASE_MODEL, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model basicGetBase_Model() {
+		return (Model) eDynamicGet(StandardPackage.SYSTEM_MODEL__BASE_MODEL,
+				StandardPackage.Literals.SYSTEM_MODEL__BASE_MODEL, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Model(Model newBase_Model) {
+		eDynamicSet(StandardPackage.SYSTEM_MODEL__BASE_MODEL, StandardPackage.Literals.SYSTEM_MODEL__BASE_MODEL,
+				newBase_Model);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.SYSTEM_MODEL__BASE_MODEL:
+			if (resolve)
+				return getBase_Model();
+			return basicGetBase_Model();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.SYSTEM_MODEL__BASE_MODEL:
+			setBase_Model((Model) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SYSTEM_MODEL__BASE_MODEL:
+			setBase_Model((Model) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.SYSTEM_MODEL__BASE_MODEL:
+			return basicGetBase_Model() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //SystemModelImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TraceImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TraceImpl.java
new file mode 100644
index 0000000..14184b3
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TraceImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.Trace;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Trace</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.TraceImpl#getBase_Abstraction <em>Base Abstraction</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TraceImpl extends CDOObjectImpl implements Trace {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TraceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.TRACE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction getBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.TRACE__BASE_ABSTRACTION,
+				StandardPackage.Literals.TRACE__BASE_ABSTRACTION, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Abstraction basicGetBase_Abstraction() {
+		return (Abstraction) eDynamicGet(StandardPackage.TRACE__BASE_ABSTRACTION,
+				StandardPackage.Literals.TRACE__BASE_ABSTRACTION, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Abstraction(Abstraction newBase_Abstraction) {
+		eDynamicSet(StandardPackage.TRACE__BASE_ABSTRACTION, StandardPackage.Literals.TRACE__BASE_ABSTRACTION,
+				newBase_Abstraction);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.TRACE__BASE_ABSTRACTION:
+			if (resolve)
+				return getBase_Abstraction();
+			return basicGetBase_Abstraction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.TRACE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.TRACE__BASE_ABSTRACTION:
+			setBase_Abstraction((Abstraction) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.TRACE__BASE_ABSTRACTION:
+			return basicGetBase_Abstraction() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TraceImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TypeImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TypeImpl.java
new file mode 100644
index 0000000..aa99a57
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/TypeImpl.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.Type;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.TypeOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.TypeImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TypeImpl extends CDOObjectImpl implements Type {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.TYPE__BASE_CLASS,
+				StandardPackage.Literals.TYPE__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.TYPE__BASE_CLASS,
+				StandardPackage.Literals.TYPE__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.TYPE__BASE_CLASS, StandardPackage.Literals.TYPE__BASE_CLASS, newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateCannotBeSpecification(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return TypeOperations.validateCannotBeSpecification(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.TYPE__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.TYPE__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.TYPE__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.TYPE__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.TYPE___VALIDATE_CANNOT_BE_SPECIFICATION__DIAGNOSTICCHAIN_MAP:
+			return validateCannotBeSpecification((DiagnosticChain) arguments.get(0),
+					(Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //TypeImpl
diff --git a/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/UtilityImpl.java b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/UtilityImpl.java
new file mode 100644
index 0000000..0b7d10d
--- /dev/null
+++ b/cdo/bundles/uml/org.eclipse.uml2.uml.profile.standard.cdo/src/org/eclipse/uml2/uml/profile/standard/cdo/UtilityImpl.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2014, 2018 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   Kenn Hussey (CEA) - initial API and implementation
+ *   Kenn Hussey (CEA) - 451350
+ *   Kenn Hussey - 535301
+ *
+ */
+package org.eclipse.uml2.uml.profile.standard.cdo;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.internal.cdo.CDOObjectImpl;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
+import org.eclipse.uml2.uml.profile.standard.Utility;
+import org.eclipse.uml2.uml.profile.standard.internal.operations.UtilityOperations;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Utility</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.standard.cdo.UtilityImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class UtilityImpl extends CDOObjectImpl implements Utility {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UtilityImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.UTILITY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected int eStaticFeatureCount() {
+		return 0;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.UTILITY__BASE_CLASS,
+				StandardPackage.Literals.UTILITY__BASE_CLASS, true, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return (org.eclipse.uml2.uml.Class) eDynamicGet(StandardPackage.UTILITY__BASE_CLASS,
+				StandardPackage.Literals.UTILITY__BASE_CLASS, false, true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		eDynamicSet(StandardPackage.UTILITY__BASE_CLASS, StandardPackage.Literals.UTILITY__BASE_CLASS, newBase_Class);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateIsUtility(DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return UtilityOperations.validateIsUtility(this, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StandardPackage.UTILITY__BASE_CLASS:
+			if (resolve)
+				return getBase_Class();
+			return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StandardPackage.UTILITY__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StandardPackage.UTILITY__BASE_CLASS:
+			setBase_Class((org.eclipse.uml2.uml.Class) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StandardPackage.UTILITY__BASE_CLASS:
+			return basicGetBase_Class() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case StandardPackage.UTILITY___VALIDATE_IS_UTILITY__DIAGNOSTICCHAIN_MAP:
+			return validateIsUtility((DiagnosticChain) arguments.get(0), (Map<Object, Object>) arguments.get(1));
+		}
+		return super.eInvoke(operationID, arguments);
+	}
+
+} //UtilityImpl
diff --git a/cdo/bundles/uml/pom.xml b/cdo/bundles/uml/pom.xml
index 437fca6..0acf89d 100755
--- a/cdo/bundles/uml/pom.xml
+++ b/cdo/bundles/uml/pom.xml
@@ -14,6 +14,7 @@
 	
 	<modules>
 		<module>org.eclipse.uml2.uml.cdo</module>
+		<module>org.eclipse.uml2.uml.profile.standard.cdo</module>
 	</modules>
 	
 	<packaging>pom</packaging>
