diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.classpath b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.classpath
new file mode 100644
index 00000000..e801ebfb
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.project b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.project
new file mode 100644
index 00000000..0dfc6236
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.project
@@ -0,0 +1,28 @@
+
+
+ org.polarsys.capella.diffmerge.bridge.integration
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.settings/org.eclipse.jdt.core.prefs b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..dcf24084
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,426 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=_p
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=_
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=__
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+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.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+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_bitwise_operator=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_logical_operator=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_multiplicative_operator=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_string_concatenation=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_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=80
+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=2
+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_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_additive_operator=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_bitwise_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_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=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_relational_operator=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_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=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_bitwise_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_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=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_relational_operator=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_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=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=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+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=80
+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=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+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_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/META-INF/MANIFEST.MF b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..f15620e9
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Bridge Mapping Capella Scopes
+Bundle-SymbolicName: org.polarsys.capella.diffmerge.bridge.integration
+Bundle-Version: 0.14.1.qualifier
+Bundle-Activator: org.polarsys.capella.diffmerge.bridge.integration.internal.Activator
+Require-Bundle: org.eclipse.emf.diffmerge.bridge.interactive,
+ org.eclipse.emf.diffmerge.bridge.mapping,
+ org.polarsys.capella.core.compare;bundle-version="1.4.0",
+ org.polarsys.capella.core.model.skeleton;bundle-version="1.4.0",
+ org.polarsys.capella.core.model.handler;bundle-version="1.4.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Export-Package: org.polarsys.capella.diffmerge.bridge.integration,
+ org.polarsys.capella.diffmerge.bridge.integration.policies,
+ org.polarsys.capella.diffmerge.bridge.integration.scopes,
+ org.polarsys.capella.diffmerge.bridge.integration.util
+Bundle-Vendor: www.polarsys.org
+Automatic-Module-Name: org.polarsys.capella.diffmerge.bridge.capella.integration
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/about.html b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/about.html
new file mode 100644
index 00000000..720a1d06
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/about.html
@@ -0,0 +1,25 @@
+
+
+
+
+About
+
+
+
About This Content
+
+
August 17, 2018
+
License
+
The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is available
+at https://www.eclipse.org/legal/epl-2.0.
+For purposes of the EPL, "Program" will mean the Content.
+
If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") 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 http://www.eclipse.org.
+
+
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/build.properties b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/build.properties
new file mode 100644
index 00000000..883cfc6d
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/build.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2016-2019 Thales Global Services S.A.S.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
+jre.compilation.profile = J2SE-1.5
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/CapellaBridgeJob.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/CapellaBridgeJob.java
new file mode 100644
index 00000000..6fadbb91
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/CapellaBridgeJob.java
@@ -0,0 +1,336 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration;
+
+import static org.eclipse.emf.diffmerge.impl.policies.ConfigurableMatchPolicy.CRITERION_SEMANTICS_DEFAULTCONTENTS;
+import static org.eclipse.emf.diffmerge.impl.policies.ConfigurableMatchPolicy.CRITERION_STRUCTURE_ROOTS;
+import static org.eclipse.emf.diffmerge.impl.policies.ConfigurableMatchPolicy.MatchCriterionKind.SEMANTICS;
+import static org.eclipse.emf.diffmerge.impl.policies.ConfigurableMatchPolicy.MatchCriterionKind.STRUCTURE;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.diffmerge.generic.api.IDiffPolicy;
+import org.eclipse.emf.diffmerge.generic.api.IMatchPolicy;
+import org.eclipse.emf.diffmerge.generic.api.IMergePolicy;
+import org.eclipse.emf.diffmerge.generic.api.IMergeSelector;
+import org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope;
+import org.eclipse.emf.diffmerge.bridge.api.IBridge;
+import org.eclipse.emf.diffmerge.bridge.api.IBridgeTrace;
+import org.eclipse.emf.diffmerge.bridge.api.IBridgeTrace.Editable;
+import org.eclipse.emf.diffmerge.bridge.interactive.BridgeJob;
+import org.eclipse.emf.diffmerge.bridge.interactive.EMFInteractiveBridge;
+import org.eclipse.emf.diffmerge.bridge.interactive.util.ResourceUtil;
+import org.eclipse.emf.diffmerge.bridge.mapping.impl.emf.EMFMappingBridge;
+import org.eclipse.emf.diffmerge.diffdata.EComparison;
+import org.eclipse.emf.diffmerge.diffdata.impl.EComparisonImpl;
+import org.eclipse.emf.diffmerge.impl.policies.ConfigurableDiffPolicy;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.polarsys.capella.common.ef.ExecutionManager;
+import org.polarsys.capella.common.ef.ExecutionManagerRegistry;
+import org.polarsys.capella.common.ef.command.ICommand;
+import org.polarsys.capella.core.compare.CapellaMatchPolicy;
+import org.polarsys.capella.core.data.capellamodeller.Project;
+import org.polarsys.capella.core.model.handler.helpers.CapellaProjectHelper.ProjectApproach;
+import org.polarsys.capella.core.model.skeleton.EngineeringDomain;
+import org.polarsys.capella.core.model.skeleton.impl.SkeletonServicesImpl;
+import org.polarsys.capella.core.model.skeleton.impl.cmd.CreateCapellaProjectCmd;
+import org.polarsys.capella.diffmerge.bridge.integration.policies.DelegatingTraceBasedMatchPolicy;
+import org.polarsys.capella.diffmerge.bridge.integration.scopes.CapellaIntermediateUpdateScope;
+import org.polarsys.capella.diffmerge.bridge.integration.scopes.CapellaUpdateScope;
+
+
+/**
+ * A bridge job pre-configured for Capella models as targets.
+ *
+ * @author Amine Lajmi
+ *
+ * @param the source data set
+ */
+public class CapellaBridgeJob extends BridgeJob {
+
+ /**
+ * The default bridge job label
+ */
+ private static final String DEFAULT_BRIDGE_JOB_LABEL = "Capella Bridge Job"; //$NON-NLS-1$
+
+ /**
+ * The default constructor
+ *
+ * @param context_p the (non-null) source data set
+ * @param targetURI_p the (non-null) uri of the target resource
+ */
+ public CapellaBridgeJob(SD context_p, URI targetURI_p) {
+ this(DEFAULT_BRIDGE_JOB_LABEL, context_p, targetURI_p);
+ }
+
+ /**
+ * Additional constructor with custom bridge job label
+ *
+ * @param jobLabel_p the (non-null) job label
+ * @param context_p the (non-null) context
+ * @param targetURI_p the (non-null) uri of the target resource
+ */
+ public CapellaBridgeJob(String jobLabel_p, SD context_p, URI targetURI_p) {
+ super(jobLabel_p, context_p, targetURI_p);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.interactive.BridgeJob#getBridge()
+ */
+ @Override
+ protected EMFInteractiveBridge getBridge() {
+ EMFInteractiveBridge result =
+ new EMFInteractiveBridge(
+ createMappingBridge(), createDiffPolicy(), createMergePolicy(), createMergeSelector()) {
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.incremental.EMFIncrementalBridge#createIntermediateDataSet(java.lang.Object, org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope)
+ */
+ @Override
+ public IEditableModelScope createIntermediateDataSet(SD sourceDataSet_p, IEditableModelScope targetDataSet_p) {
+ if (targetDataSet_p instanceof CapellaUpdateScope) {
+ // make an in-memory copy of the existing model
+ final Project emptyProject = createEmptyProject(targetDataSet_p);
+ CapellaUpdateScope scope = new CapellaUpdateScope(emptyProject);
+ return createIntermediateCapellaScope(sourceDataSet_p, scope);
+ }
+ return super.createIntermediateDataSet(sourceDataSet_p, targetDataSet_p);
+ }
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.incremental.EMFIncrementalBridge#compare(org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope, org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope, org.eclipse.emf.diffmerge.bridge.api.IBridgeTrace, org.eclipse.emf.diffmerge.bridge.api.IBridgeTrace, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected EComparison compare(IEditableModelScope created_p, IEditableModelScope existing_p, IBridgeTrace createdTrace_p, IBridgeTrace existingTrace_p, IProgressMonitor monitor_p) {
+ EComparison comparison = new EComparisonImpl(existing_p, created_p);
+ IMatchPolicy delegate = createMatchPolicyDelegate();
+ IMatchPolicy matchPolicy = createDelegatingMatchPolicy(created_p, createdTrace_p, existingTrace_p, delegate);
+ comparison.compute(matchPolicy, getDiffPolicy(), getMergePolicy(), monitor_p);
+ return comparison;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.incremental.EMFIncrementalBridge#createTrace()
+ */
+ @Override
+ protected Editable createTrace() {
+ Editable trace = super.createTrace();
+ return configureTrace(trace);
+ }
+ };
+ return result;
+ }
+
+ /**
+ * For default trace customization
+ *
+ * @param trace_p the (non-null) the default created trace
+ * @return the (non-null) trace with additional configurations, by default
+ * do nothing.
+ */
+ protected Editable configureTrace(Editable trace_p) {
+ return trace_p;
+ }
+
+ /**
+ * @return the default merge policy
+ */
+ protected IMergePolicy createMergePolicy() {
+ return null;
+ }
+
+ /**
+ * @return the default merge selector
+ */
+ protected IMergeSelector createMergeSelector() {
+ return null;
+ }
+
+ /**
+ * @return the default configurable diff policy
+ */
+ protected IDiffPolicy createDiffPolicy() {
+ return new ConfigurableDiffPolicy();
+ }
+
+ /**
+ * @return the extended EMF mapping bridge
+ */
+ protected IBridge createMappingBridge() {
+ return new EMFMappingBridge();
+ }
+
+ /**
+ * Creates and configures the match policy to delegate to. By default, the
+ * following fine-grained criteria are used:
+ *
Structural matching of roots
+ *
Semantic matching of project structure
+ *
+ * @return the match policy to delegate to.
+ */
+ protected IMatchPolicy createMatchPolicyDelegate() {
+ CapellaMatchPolicy delegate = new CapellaMatchPolicy();
+ delegate.setUseCriterion(STRUCTURE, true);
+ delegate.setUseCriterion(SEMANTICS, true);
+ delegate.setUseFineGrainedCriterion(CRITERION_STRUCTURE_ROOTS, true);
+ delegate.setUseFineGrainedCriterion(CRITERION_SEMANTICS_DEFAULTCONTENTS, true);
+ return delegate;
+ }
+
+ /**
+ * Creates and configures a delegating match policy with default delegation
+ * configured to the match policy returned by
+ * {@link org.polarsys.capella.diffmerge.bridge.integration.CapellaBridgeJob#createMatchPolicyDelegate()
+ * createMatchPolicyDelegate}.
+ *
+ * @param createdScope_p a non-null model scope
+ * @param createdTrace_p a non-null trace
+ * @param existingTrace_p a non-null trace
+ * @param delegate_p the non-null match policy to delegate to
+ * @return the delegating match policy.
+ */
+ protected IMatchPolicy createDelegatingMatchPolicy(IEditableModelScope createdScope_p,
+ IBridgeTrace createdTrace_p, IBridgeTrace existingTrace_p, IMatchPolicy delegate_p) {
+ IMatchPolicy matchPolicy = new DelegatingTraceBasedMatchPolicy(
+ createdScope_p, createdTrace_p, existingTrace_p, delegate_p);
+ return matchPolicy;
+ }
+
+ /**
+ * Creates an intermediate model scope tailored for Capella models
+ *
+ * @param sourceDataSet_p the (non-null) source data set
+ * @param scope the (non-null) Capella model scope
+ * @return the intermediate model scope
+ */
+ protected IEditableModelScope createIntermediateCapellaScope(SD sourceDataSet_p, CapellaUpdateScope scope) {
+ return new CapellaIntermediateUpdateScope(sourceDataSet_p, scope);
+ }
+
+ /**
+ * Creates a fake resource hosting a freshly created empty Capella model
+ *
+ * @param targetDataSet_p
+ * the target data set from which to retrieve and load the
+ * Capella model
+ * @return a fresh empty Capella model root
+ */
+ protected Project createEmptyProject(final IEditableModelScope targetDataSet_p) {
+ TransactionalEditingDomain editingDomain = getTargetEditingDomain(targetDataSet_p);
+ Project capellaRoot = ((CapellaUpdateScope) targetDataSet_p).getProject();
+ URI targetURI = capellaRoot.eResource().getURI();
+
+ // create a new empty model
+ ExecutionManager executionManager = ExecutionManagerRegistry
+ .getInstance().getExecutionManager(editingDomain);
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+
+ Resource resource = resourceSet.getResource(targetURI, true);
+ final Project project = (Project) resource.getContents().get(0);
+
+ ICommand command = null;
+ Resource semanticResource = null;
+ String projectName = project.getName();
+
+ URI uri = URI.createURI("dummy:/" + targetURI.devicePath()); //$NON-NLS-1$
+
+ semanticResource = resourceSet.createResource(uri);
+ command = createInitialElementsCommand(semanticResource, projectName, new NullProgressMonitor());
+ if (command != null) {
+ executionManager.execute(command);
+ }
+ // invoke the skeleton services used by default in Capella to create the
+ // in-memory empty Capella project
+ SkeletonServicesImpl skeletonServicesImpl = new SkeletonServicesImpl();
+ EngineeringDomain engDomain = EngineeringDomain.System;
+ Project tmpProject = (Project) semanticResource.getContents().get(0);
+ skeletonServicesImpl.doSystemEngineering(tmpProject, projectName, engDomain, true);
+ return tmpProject;
+ }
+
+ /**
+ * Returns the transactional editing domain given the target data set
+ *
+ * @param targetDataSet_p the (non-null) target data set
+ * @return the (possibly null) editing domain
+ */
+ protected TransactionalEditingDomain getTargetEditingDomain(IEditableModelScope targetDataSet_p) {
+ if (targetDataSet_p instanceof CapellaUpdateScope) {
+ EObject scopeRoot = ((CapellaUpdateScope) targetDataSet_p).getProject();
+ ResourceSet resourceSet = scopeRoot.eResource().getResourceSet();
+ return (TransactionalEditingDomain) AdapterFactoryEditingDomain.getEditingDomainFor(resourceSet);
+ }
+ return null;
+ }
+
+ /**
+ * Issues the initial Capella model elements creation command
+ *
+ * @param resource_p the initially empty semantic resource
+ * @param projectName_p the (non-null) Capella project name
+ * @param monitor_p a (non-null) progress monitor
+ * @return the initial elements creation command
+ */
+ protected ICommand createInitialElementsCommand(Resource resource_p, String projectName_p, IProgressMonitor monitor_p) {
+ return new CreateCapellaProjectCmd(resource_p, projectName_p, ProjectApproach.SingletonComponents);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.interactive.BridgeJob#getTargetEditingDomain()
+ */
+ @Override
+ protected EditingDomain getTargetEditingDomain() {
+ EditingDomain result = null;
+ ResourceSet rs = getTargetResourceSet();
+ result = AdapterFactoryEditingDomain.getEditingDomainFor(rs);
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.interactive.BridgeJob#initializeTargetResourceSet()
+ */
+ @Override
+ protected ResourceSet initializeTargetResourceSet() {
+ ExecutionManager executionManager = ExecutionManagerRegistry.getInstance().addNewManager();
+ TransactionalEditingDomain domain = executionManager.getEditingDomain();
+ return domain.getResourceSet();
+ }
+
+ /**
+ * Loads trace resource into a separate resource set.
+ *
+ * @param traceURI_p
+ * the (non-null) trace URI
+ * @return trace resource
+ */
+ @Override
+ protected Resource getCreateTraceResource(URI traceURI_p) {
+ ResourceSetImpl rs = new ResourceSetImpl();
+ Resource traceResource = ResourceUtil.getCreateResourceForUri(traceURI_p, rs);
+ ResourceUtil.ensureLoaded(traceResource);
+ return traceResource;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.interactive.BridgeJob#getTargetScope(org.eclipse.emf.ecore.resource.Resource)
+ */
+ @Override
+ protected IEditableModelScope getTargetScope(final Resource resource_p) {
+ Project project = (Project) resource_p.getContents().get(0);
+ return new CapellaUpdateScope(project);
+ }
+}
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/internal/Activator.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/internal/Activator.java
new file mode 100644
index 00000000..72e7ce7e
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/internal/Activator.java
@@ -0,0 +1,49 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.internal;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The bundle activator
+ */
+public class Activator implements BundleActivator {
+
+ /**
+ * The bundle context
+ */
+ private static BundleContext context;
+
+ /**
+ * @return the bundle context
+ */
+ static BundleContext getContext() {
+ return context;
+ }
+
+ /**
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ /**
+ * (non-Javadoc)
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+}
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/DelegatingTraceBasedMatchPolicy.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/DelegatingTraceBasedMatchPolicy.java
new file mode 100644
index 00000000..9af2303a
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/DelegatingTraceBasedMatchPolicy.java
@@ -0,0 +1,73 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.policies;
+
+import org.eclipse.emf.diffmerge.bridge.api.IBridgeTrace;
+import org.eclipse.emf.diffmerge.bridge.incremental.BridgeTraceBasedMatchPolicy;
+import org.eclipse.emf.diffmerge.generic.api.IMatchPolicy;
+import org.eclipse.emf.diffmerge.generic.api.scopes.ITreeDataScope;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A delegating trace-based match policy. It uses the trace primarily to return
+ * match identifiers, when it cannot, it delegate to a second matching policy.
+ *
+ */
+public class DelegatingTraceBasedMatchPolicy extends
+ BridgeTraceBasedMatchPolicy {
+
+ /**
+ * The second match policy to delegate to
+ */
+ private final IMatchPolicy delegate;
+
+ /**
+ * Default constructor
+ *
+ * @param createdScope_p
+ * a non-null model scope
+ * @param createdTrace_p
+ * a non-null trace
+ * @param existingTrace_p
+ * a non-null trace
+ * @param delegate_p
+ * the non-null match policy to delegate to
+ */
+ public DelegatingTraceBasedMatchPolicy(ITreeDataScope createdScope_p,
+ IBridgeTrace createdTrace_p, IBridgeTrace existingTrace_p,
+ IMatchPolicy delegate_p) {
+ super(createdScope_p, createdTrace_p, existingTrace_p);
+ this.delegate = delegate_p;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.bridge.incremental.BridgeTraceBasedMatchPolicy#getMatchID(java.lang.Object, org.eclipse.emf.diffmerge.generic.api.scopes.ITreeDataScope)
+ */
+ @Override
+ public Object getMatchID(EObject element_p, ITreeDataScope scope_p) {
+ IBridgeTrace trace = scope_p == _createdScope ? _createdTrace
+ : _existingTrace;
+ Object result = trace.getCause(element_p);
+ if (result == null)
+ result = getDelegate().getMatchID(element_p, scope_p);
+ return result;
+ }
+
+ /**
+ * Returns the match policy this policy delegates to.
+ *
+ * @return the match policy delegate.
+ */
+ protected IMatchPolicy getDelegate() {
+ return delegate;
+ }
+}
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/Messages.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/Messages.java
new file mode 100644
index 00000000..9cb1d884
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/Messages.java
@@ -0,0 +1,48 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.policies;
+
+import org.eclipse.osgi.util.NLS;
+
+
+/**
+ * Message management.
+ */
+@SuppressWarnings("javadoc")
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.polarsys.capella.diffmerge.bridge.capella.integration.policies.messages"; //$NON-NLS-1$
+
+ public static String ConfigurableMatchPolicy_Semantics_DefaultContents_Description;
+ public static String ConfigurableMatchPolicy_Semantics_DefaultContents_Name;
+ public static String ConfigurableMatchPolicy_Structure_Children_Description;
+ public static String ConfigurableMatchPolicy_Structure_Children_Name;
+ public static String ConfigurableMatchPolicy_Structure_Roots_Description;
+ public static String ConfigurableMatchPolicy_Structure_Roots_Name;
+ public static String ConfigurableMatchPolicy_Structure_UniqueChildren_Description;
+ public static String ConfigurableMatchPolicy_Structure_UniqueChildren_Name;
+ public static String DecoratedCapellaComparisonMethodFactory_TechnicalElements_Name;
+ public static String DecoratedCapellaComparisonMethodFactory_TechnicalElements_Description;
+ public static String DecoratedCapellaComparisonMethodFactory_Links_Name;
+ public static String DecoratedCapellaComparisonMethodFactory_Links_Description;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ /**
+ * Constructor
+ */
+ private Messages() {
+ // Nothing needed
+ }
+}
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/messages.properties b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/messages.properties
new file mode 100644
index 00000000..8b8ee153
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/policies/messages.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2016-2019 Thales Global Services S.A.S.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+ConfigurableMatchPolicy_Structure_Children_Description=Match elements that have the same container and cannot be confused with other siblings (more general than "Match unique children").
+ConfigurableMatchPolicy_Structure_Children_Name=Match unambiguous children
+ConfigurableMatchPolicy_Semantics_DefaultContents_Description=When a new model is being created, it is usually filled with default model elements: match these default elements if present.\nIt may only work if the top-level elements of the models match (see "Structure - Match unambiguous roots").
+ConfigurableMatchPolicy_Semantics_DefaultContents_Name=Match default model contents
+ConfigurableMatchPolicy_Structure_Roots_Description=Match root elements that cannot be confused with others.
+ConfigurableMatchPolicy_Structure_Roots_Name=Match unambiguous roots
+ConfigurableMatchPolicy_Structure_UniqueChildren_Description=Match elements that have the same container and play the same discriminating role within it.
+ConfigurableMatchPolicy_Structure_UniqueChildren_Name=Match unique children
+DecoratedCapellaComparisonMethodFactory_Links_Name=Capella Exchanges/Links: Name according to ends
+DecoratedCapellaComparisonMethodFactory_Links_Description=Take into account the ends of Exchanges or Links to name them.\nExchanges or links that have the same name but connect different elements will thus be distinguished.
+DecoratedCapellaComparisonMethodFactory_TechnicalElements_Name=Match equivalent technical elements
+DecoratedCapellaComparisonMethodFactory_TechnicalElements_Description=Certain elements are purely technical and usually invisible to model users: for example, allocations of Capella functions to components.\nMatch such elements according to their meaning: for example, match allocations of the same function to the same component.
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaIntermediateUpdateScope.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaIntermediateUpdateScope.java
new file mode 100644
index 00000000..e42483c5
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaIntermediateUpdateScope.java
@@ -0,0 +1,56 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.scopes;
+
+import org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope;
+import org.eclipse.emf.diffmerge.bridge.incremental.Messages;
+
+/**
+ * A Capella intermediate model scope exposing its target data set
+ */
+public class CapellaIntermediateUpdateScope extends CapellaUpdateScope {
+
+ /** The optional source data set */
+ protected final Object _sourceDataSet;
+
+ /** The optional target data set */
+ protected final IEditableModelScope _targetDataSet;
+
+ /**
+ * Constructor
+ *
+ * @param sourceDataSet_p a (non-null) source data set
+ * @param targetDataSet_p a (non-null) target data set
+ */
+ public CapellaIntermediateUpdateScope(Object sourceDataSet_p,
+ CapellaUpdateScope targetDataSet_p) {
+ super(targetDataSet_p.getProject());
+ _sourceDataSet = sourceDataSet_p;
+ _targetDataSet = targetDataSet_p;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.impl.scopes.AbstractModelScope#getOriginator()
+ */
+ @Override
+ public Object getOriginator() {
+ return Messages.IntermediateModelScope_Originator;
+ }
+
+ /**
+ * @return the target data set
+ */
+ @Override
+ public IEditableModelScope getTargetDataSet() {
+ return _targetDataSet;
+ }
+}
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaUpdateScope.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaUpdateScope.java
new file mode 100644
index 00000000..20981056
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/scopes/CapellaUpdateScope.java
@@ -0,0 +1,80 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.scopes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.eclipse.emf.diffmerge.api.scopes.IEditableModelScope;
+import org.eclipse.emf.diffmerge.impl.scopes.RootedModelScope;
+import org.eclipse.emf.ecore.EObject;
+import org.polarsys.capella.core.data.capellamodeller.Project;
+
+/**
+ * A model scope rooted at the Capella project to be used in incremental bridges
+ *
+ */
+public class CapellaUpdateScope extends RootedModelScope {
+
+ /**
+ * The label of the already persisted target scope as it will appear in the
+ * diff/merge UI.
+ */
+ private static final String TARGET_ORIGINATOR_LABEL = "Resulting Model"; //$NON-NLS-1$
+
+ /**
+ * The Capella model root
+ */
+ private final Project _project;
+
+ /**
+ * The unique entry point to this scope
+ *
+ * @param project_p the (non-null) Capella project
+ */
+ public CapellaUpdateScope(final Project project_p) {
+ super(new ArrayList(Arrays.asList(project_p)), true);
+ this._project = project_p;
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.impl.scopes.RootedModelScope#add(org.eclipse.emf.ecore.EObject)
+ */
+ @Override
+ public boolean add(final EObject element_p) {
+ return super.add(element_p);
+ }
+
+ /**
+ * @see org.eclipse.emf.diffmerge.impl.scopes.AbstractModelScope#getOriginator()
+ */
+ @Override
+ public Object getOriginator() {
+ return TARGET_ORIGINATOR_LABEL;
+ }
+
+ /**
+ * Expose the root to outside.
+ *
+ * @return the Capella model root
+ */
+ public Project getProject() {
+ return _project;
+ }
+
+ /**
+ * @return the target data set
+ */
+ public IEditableModelScope getTargetDataSet() {
+ return this;
+ }
+}
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/util/CapellaUtil.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/util/CapellaUtil.java
new file mode 100644
index 00000000..b91308b8
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.capella.integration/src/org/polarsys/capella/diffmerge/bridge/integration/util/CapellaUtil.java
@@ -0,0 +1,285 @@
+/*********************************************************************
+ * Copyright (c) 2016-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.integration.util;
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.polarsys.capella.core.data.capellamodeller.ModelRoot;
+import org.polarsys.capella.core.data.capellamodeller.Project;
+import org.polarsys.capella.core.data.capellamodeller.SystemEngineering;
+import org.polarsys.capella.core.data.fa.FunctionPkg;
+import org.polarsys.capella.core.data.la.LogicalArchitecture;
+import org.polarsys.capella.core.data.la.LogicalComponent;
+import org.polarsys.capella.core.data.la.LogicalFunction;
+import org.polarsys.capella.core.data.la.LogicalFunctionPkg;
+import org.polarsys.capella.core.data.pa.PhysicalArchitecture;
+import org.polarsys.capella.core.data.pa.PhysicalComponent;
+import org.polarsys.capella.core.data.pa.PhysicalFunction;
+import org.polarsys.capella.core.data.pa.PhysicalFunctionPkg;
+import org.polarsys.capella.core.model.handler.command.CapellaResourceHelper;
+
+/**
+ * A utility helper to retrieve parts of a Capella model
+ *
+ * @author Amine Lajmi
+ *
+ */
+public class CapellaUtil {
+
+ /**
+ * The Capella model file extension
+ */
+ public static final String CAPELLA_MODEL_FILE_EXTENSION = "melodymodeller"; //$NON-NLS-1$
+
+ /**
+ * The Aird file extension
+ */
+ public static final String AIRD_FILE_EXTENSION = "aird"; //$NON-NLS-1$
+
+ /**
+ * Returns the root physical component of the Capella physical architecture
+ * given a semantic object
+ *
+ * @param source_p
+ * a (non-null) Capella semantic object
+ * @return the (possibly null) physical system root
+ */
+ public static PhysicalComponent getPhysicalSystemRoot(EObject source_p) {
+ ResourceSet resourceSet = source_p.eResource().getResourceSet();
+ URI semanticResourceURI = source_p
+ .eResource()
+ .getURI()
+ .trimFileExtension()
+ .appendFileExtension(
+ CapellaResourceHelper.CAPELLA_MODEL_FILE_EXTENSION);
+ Resource semanticResource = resourceSet.getResource(
+ semanticResourceURI, false);
+ if (semanticResource != null) {
+ EObject root = semanticResource.getContents().get(0);
+ if (root instanceof Project) {
+ EList ownedModelRoots = ((Project) root)
+ .getOwnedModelRoots();
+ for (ModelRoot modelRoot : ownedModelRoots) {
+ if (modelRoot instanceof SystemEngineering) {
+ EList containedPhysicalArchitectures = ((SystemEngineering) modelRoot)
+ .getContainedPhysicalArchitectures();
+ for (PhysicalArchitecture arch : containedPhysicalArchitectures) {
+ return (PhysicalComponent)arch.getSystem();
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the root physical component of the Capella physical architecture
+ *
+ * @param resource_p
+ * (non-null) Capella semantic resource
+ * @return the physical system root given a resource.
+ */
+ public static PhysicalComponent getPhysicalSystemRoot(Resource resource_p) {
+ return getPhysicalSystemRoot(resource_p.getContents().get(0));
+ }
+
+ /**
+ * Returns the physical function package of a Capella model
+ *
+ * @param source_p
+ * a (non-null) Capella semantic object
+ * @return the physical function package.
+ */
+ public static PhysicalFunctionPkg getPhysicalFunctionPackage(EObject source_p) {
+ ResourceSet resourceSet = source_p.eResource().getResourceSet();
+ URI semanticResourceURI = source_p.eResource().getURI().trimFileExtension()
+ .appendFileExtension(CapellaResourceHelper.CAPELLA_MODEL_FILE_EXTENSION);
+ Resource semanticResource = resourceSet.getResource(semanticResourceURI, false);
+ PhysicalFunctionPkg physicalFunctionPkgTmp = null;
+ if (semanticResource != null) {
+ EObject root = semanticResource.getContents().get(0);
+ if (root instanceof Project) {
+ EList ownedModelRoots = ((Project) root).getOwnedModelRoots();
+ for (ModelRoot modelRoot : ownedModelRoots) {
+ if (modelRoot instanceof SystemEngineering) {
+ EList containedPhysicalArchitectures = ((SystemEngineering) modelRoot)
+ .getContainedPhysicalArchitectures();
+ for (PhysicalArchitecture arch : containedPhysicalArchitectures) {
+ FunctionPkg ownedFunctionPkg = arch.getOwnedFunctionPkg();
+ if (ownedFunctionPkg instanceof PhysicalFunctionPkg) {
+ physicalFunctionPkgTmp = (PhysicalFunctionPkg) ownedFunctionPkg;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ return physicalFunctionPkgTmp;
+ }
+
+ /**
+ * Returns the physical function root of a Capella model
+ *
+ * @param source_p
+ * a (non-null) Capella semantic object
+ * @return the physical function root given an eObject.
+ */
+ public static PhysicalFunction getPhysicalFunctionRoot(EObject source_p) {
+ PhysicalFunctionPkg functionPackage = getPhysicalFunctionPackage(source_p);
+ List subFunctions = functionPackage.getOwnedPhysicalFunctions();
+ return subFunctions.isEmpty()? null: subFunctions.get(0);
+ }
+
+ /**
+ * Returns the physical function root of a Capella model
+ *
+ * @param resource_p the (non-null) semantic resource
+ * @return the physical function root given a resource.
+ */
+ public static PhysicalFunction getPhysicalFunctionRoot(Resource resource_p) {
+ PhysicalFunctionPkg functionPackage = getPhysicalFunctionPackage(resource_p.getContents().get(0));
+ return functionPackage.getOwnedPhysicalFunctions().get(0);
+ }
+
+ /**
+ * Returns the logical component system root given a semantic object
+ *
+ * @param source_p
+ * the semantic object
+ * @return the logical component root
+ */
+ public static LogicalComponent getLogicalSystemRoot(EObject source_p) {
+ ResourceSet resourceSet = source_p.eResource().getResourceSet();
+ URI semanticResourceURI = source_p.eResource().getURI()
+ .trimFileExtension()
+ .appendFileExtension(CAPELLA_MODEL_FILE_EXTENSION);
+ Resource semanticResource = resourceSet.getResource(
+ semanticResourceURI, false);
+ if (semanticResource != null) {
+ EObject root = semanticResource.getContents().get(0);
+ if (root instanceof Project) {
+ EList ownedModelRoots = ((Project) root)
+ .getOwnedModelRoots();
+ for (ModelRoot modelRoot : ownedModelRoots) {
+ if (modelRoot instanceof SystemEngineering) {
+ EList containedLogicalArchitecture = ((SystemEngineering) modelRoot)
+ .getContainedLogicalArchitectures();
+ for (LogicalArchitecture arch : containedLogicalArchitecture) {
+ return (LogicalComponent)arch.getSystem();
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the root physical component of the Capella physical architecture
+ *
+ * @param resource_p
+ * (non-null) Capella semantic resource
+ * @return the physical system root given a resource.
+ */
+ public static LogicalComponent getLogicalSystemRoot(Resource resource_p) {
+ return getLogicalSystemRoot(resource_p.getContents().get(0));
+ }
+
+ /**
+ * Returns the physical function package of a Capella model
+ *
+ * @param source_p
+ * a (non-null) Capella semantic object
+ * @return the physical function package.
+ */
+ public static LogicalFunctionPkg getLogicalFunctionPackage(EObject source_p) {
+ ResourceSet resourceSet = source_p.eResource().getResourceSet();
+ URI semanticResourceURI = source_p.eResource().getURI()
+ .trimFileExtension()
+ .appendFileExtension(CAPELLA_MODEL_FILE_EXTENSION);
+ Resource semanticResource = resourceSet.getResource(
+ semanticResourceURI, false);
+ LogicalFunctionPkg logicalFunctionPkgTmp = null;
+ if (semanticResource != null) {
+ EObject root = semanticResource.getContents().get(0);
+ if (root instanceof Project) {
+ EList ownedModelRoots = ((Project) root)
+ .getOwnedModelRoots();
+ for (ModelRoot modelRoot : ownedModelRoots) {
+ if (modelRoot instanceof SystemEngineering) {
+ EList containedPhysicalArchitectures = ((SystemEngineering) modelRoot)
+ .getContainedLogicalArchitectures();
+ for (LogicalArchitecture arch : containedPhysicalArchitectures) {
+ FunctionPkg ownedFunctionPkg = arch
+ .getOwnedFunctionPkg();
+ if (ownedFunctionPkg instanceof LogicalFunctionPkg) {
+ logicalFunctionPkgTmp = (LogicalFunctionPkg) ownedFunctionPkg;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ return logicalFunctionPkgTmp;
+ }
+
+ /**
+ * Returns the logical function root of a Capella model
+ *
+ * @param source_p
+ * a (non-null) Capella semantic object
+ * @return the logical function root given an eObject.
+ */
+ public static LogicalFunction getLogicalFunctionRoot(EObject source_p) {
+ LogicalFunctionPkg functionPackage = getLogicalFunctionPackage(source_p);
+ return functionPackage.getOwnedLogicalFunctions().get(0);
+ }
+
+ /**
+ * Returns the logical function root of a Capella model
+ *
+ * @param resource_p
+ * the (non-null) semantic resource
+ * @return the logical function root given a resource.
+ */
+ public static LogicalFunction getLogicalFunctionRoot(Resource resource_p) {
+ LogicalFunctionPkg functionPackage = getLogicalFunctionPackage(resource_p
+ .getContents().get(0));
+ return functionPackage.getOwnedLogicalFunctions().get(0);
+ }
+
+ /**
+ * Returns the system engineering root from the Capella project
+ *
+ * @param project_p
+ * a Capella project
+ * @return the system engineering root
+ */
+ public static SystemEngineering getSystemEngineering(Project project_p) {
+ if (project_p != null) {
+ for (ModelRoot root : project_p.getOwnedModelRoots()) {
+ if (root instanceof SystemEngineering) {
+ return (SystemEngineering) root;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.classpath b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.classpath
new file mode 100644
index 00000000..e801ebfb
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.project b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.project
new file mode 100644
index 00000000..9475eebf
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.project
@@ -0,0 +1,28 @@
+
+
+ org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.settings/org.eclipse.jdt.core.prefs b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..b8322f41
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,117 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+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.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/META-INF/MANIFEST.MF b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..29b6f98b
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit;singleton:=true
+Bundle-Version: 0.14.1.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Export-Package: org.polarsys.capella.diffmerge.bridge.examples.apa.provider
+Require-Bundle: org.eclipse.core.runtime,
+ org.polarsys.capella.diffmerge.bridge.examples.apa.gen;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
+Bundle-Activator: org.polarsys.capella.diffmerge.bridge.examples.apa.provider.ApaEditPlugin$Implementation
+Automatic-Module-Name: org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/about.html b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/about.html
new file mode 100644
index 00000000..720a1d06
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/about.html
@@ -0,0 +1,25 @@
+
+
+
+
+About
+
+
+
About This Content
+
+
August 17, 2018
+
License
+
The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is available
+at https://www.eclipse.org/legal/epl-2.0.
+For purposes of the EPL, "Program" will mean the Content.
+
If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") 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 http://www.eclipse.org.
+
+
\ No newline at end of file
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/build.properties b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/build.properties
new file mode 100644
index 00000000..5289aca4
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2014-2019 Thales Global Services S.A.S.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateABehavior_functions_AFunction.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateABehavior_functions_AFunction.gif
new file mode 100644
index 00000000..dcbb9e88
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateABehavior_functions_AFunction.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateANode_behaviors_ABehavior.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateANode_behaviors_ABehavior.gif
new file mode 100644
index 00000000..e3cf235b
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateANode_behaviors_ABehavior.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_exchanges_AExchange.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_exchanges_AExchange.gif
new file mode 100644
index 00000000..210e1566
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_exchanges_AExchange.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_nodes_ANode.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_nodes_ANode.gif
new file mode 100644
index 00000000..568a3d4c
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/ctool16/CreateAScope_nodes_ANode.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ABehavior.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ABehavior.gif
new file mode 100644
index 00000000..45731fe2
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ABehavior.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AExchange.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AExchange.gif
new file mode 100644
index 00000000..a3908bcf
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AExchange.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AFunction.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AFunction.gif
new file mode 100644
index 00000000..d3dc5a9a
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AFunction.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ANode.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ANode.gif
new file mode 100644
index 00000000..134551bf
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/ANode.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AScope.gif b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AScope.gif
new file mode 100644
index 00000000..739ebbfa
Binary files /dev/null and b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/icons/full/obj16/AScope.gif differ
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.properties b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.properties
new file mode 100644
index 00000000..ffff9d60
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.properties
@@ -0,0 +1,58 @@
+###############################################################################
+# Copyright (c) 2014-2019 Thales Global Services S.A.S.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+# ====================================================================
+# To code developer:
+# Do NOT change the properties between this line and the
+# "%%% END OF TRANSLATED PROPERTIES %%%" line.
+# Make a new property name, append to the end of the file and change
+# the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = APA Edit Support (Incubation)
+providerName = Eclipse Modeling Project
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_ANamedElement_type = ANamed Element
+_UI_AScope_type = AScope
+_UI_ANode_type = ANode
+_UI_ABehavior_type = ABehavior
+_UI_AFunction_type = AFunction
+_UI_AExchange_type = AExchange
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_ANamedElement_id_feature = Id
+_UI_ANamedElement_name_feature = Name
+_UI_AScope_nodes_feature = Nodes
+_UI_AScope_exchanges_feature = Exchanges
+_UI_ANode_owningScope_feature = Owning Scope
+_UI_ANode_behaviors_feature = Behaviors
+_UI_ABehavior_owningNode_feature = Owning Node
+_UI_ABehavior_functions_feature = Functions
+_UI_AFunction_owningBehavior_feature = Owning Behavior
+_UI_AFunction_incoming_feature = Incoming
+_UI_AFunction_outgoing_feature = Outgoing
+_UI_AExchange_owningScope_feature = Owning Scope
+_UI_AExchange_source_feature = Source
+_UI_AExchange_target_feature = Target
+_UI_Unknown_feature = Unspecified
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.xml b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.xml
new file mode 100644
index 00000000..630161cd
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/plugin.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/src/org/polarsys/capella/diffmerge/bridge/examples/apa/provider/ABehaviorItemProvider.java b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/src/org/polarsys/capella/diffmerge/bridge/examples/apa/provider/ABehaviorItemProvider.java
new file mode 100644
index 00000000..929eafda
--- /dev/null
+++ b/examples/apa/org.polarsys.capella.diffmerge.bridge.examples.apa.gen.edit/src/org/polarsys/capella/diffmerge/bridge/examples/apa/provider/ABehaviorItemProvider.java
@@ -0,0 +1,152 @@
+/*********************************************************************
+ * Copyright (c) 2015-2019 Thales Global Services S.A.S.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thales Global Services S.A.S. - initial API and implementation
+ **********************************************************************/
+package org.polarsys.capella.diffmerge.bridge.examples.apa.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.polarsys.capella.diffmerge.bridge.examples.apa.ABehavior;
+import org.polarsys.capella.diffmerge.bridge.examples.apa.ApaFactory;
+import org.polarsys.capella.diffmerge.bridge.examples.apa.ApaPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.polarsys.capella.diffmerge.bridge.examples.apa.ABehavior} object.
+ *
+ *
+ * @generated
+ */
+public class ABehaviorItemProvider extends ANamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ABehaviorItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ApaPackage.Literals.ABEHAVIOR__FUNCTIONS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns ABehavior.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ABehavior"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ABehavior)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ABehavior_type") :
+ getString("_UI_ABehavior_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ABehavior.class)) {
+ case ApaPackage.ABEHAVIOR__FUNCTIONS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection