Bug 512939: [Interoperability][Rpy] move and rename plugin org.eclipse.papyrus.migration.common
Change-Id: I6db9f1af8420c07b873354547eca7b3911d47b92
Signed-off-by: Vincent Lorenzo <vincent.lorenzo@cea.fr>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/.classpath b/common/plugins/org.eclipse.papyrus.interoperability.common/.classpath
new file mode 100644
index 0000000..f0c5549
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="src-gen"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/.gitignore b/common/plugins/org.eclipse.papyrus.interoperability.common/.gitignore
new file mode 100755
index 0000000..ae3c172
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/.project b/common/plugins/org.eclipse.papyrus.interoperability.common/.project
new file mode 100644
index 0000000..eb7bcd9
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.interoperability.common</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.core.prefs b/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b3aa6d6
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,291 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=260
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.ui.prefs b/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..954281d
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n * CEA LIST - Initial API and implementation\n * \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF b/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..db7e41d
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF
@@ -0,0 +1,38 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.interoperability.common;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.papyrus.interoperability.common.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy,
+ org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport,
+ org.eclipse.uml2.types;bundle-version="2.0.0";visibility:=reexport,
+ org.eclipse.papyrus.infra.emf;bundle-version="2.2.0",
+ org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
+ org.eclipse.papyrus.infra.widgets;bundle-version="3.0.0",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="2.0.0",
+ org.eclipse.ui.console;bundle-version="3.6.200",
+ org.eclipse.uml2.uml;bundle-version="5.2.0",
+ org.eclipse.papyrus.uml.tools;bundle-version="3.0.0",
+ org.eclipse.gmf.runtime.notation;bundle-version="1.8.0",
+ org.eclipse.m2m.qvt.oml;bundle-version="3.7.0",
+ org.eclipse.papyrus.uml.extensionpoints;bundle-version="1.2.0",
+ org.eclipse.papyrus.m2m.qvto;bundle-version="1.4.0",
+ org.eclipse.papyrus.uml.modelrepair;bundle-version="2.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.papyrus.interoperability.common,
+ org.eclipse.papyrus.interoperability.common.MigrationParameters,
+ org.eclipse.papyrus.interoperability.common.MigrationParameters.impl,
+ org.eclipse.papyrus.interoperability.common.MigrationParameters.util,
+ org.eclipse.papyrus.interoperability.common.concurrent,
+ org.eclipse.papyrus.interoperability.common.handler,
+ org.eclipse.papyrus.interoperability.common.internal.extension,
+ org.eclipse.papyrus.interoperability.common.transformation,
+ org.eclipse.papyrus.interoperability.common.transformation.ui,
+ org.eclipse.papyrus.interoperability.common.wizard,
+ org.eclipse.papyrus.interoperability.common.wizard.pages
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/OSGI-INF/l10n/bundle.properties b/common/plugins/org.eclipse.papyrus.interoperability.common/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..7160fb0
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,3 @@
+#Properties file for org.eclipse.papyrus.interoperability.common
+Bundle-Vendor = Eclipse Modeling Project
+Bundle-Name = Papyrus Migration Common
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/about.html b/common/plugins/org.eclipse.papyrus.interoperability.common/about.html
new file mode 100644
index 0000000..dd3c089
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>November 14, 2008</p>
+<h3>License</h3>
+
+<p>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 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("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 <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/build.properties b/common/plugins/org.eclipse.papyrus.interoperability.common/build.properties
new file mode 100644
index 0000000..7d5cfaa
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/build.properties
@@ -0,0 +1,27 @@
+# Copyright (c) 2014 CEA LIST.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+# Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+# *****************************************************************************/
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ OSGI-INF/,\
+ icons/,\
+ ui/,\
+ about.html,\
+ dialog/
+jars.compile.order = .
+source.. = src-gen/,\
+ src/
+output.. = bin/
+src.includes = about.html
+
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/MigrationParameters.ctx b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/MigrationParameters.ctx
new file mode 100755
index 0000000..a1ac60d
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/MigrationParameters.ctx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ASCII"?>
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_hcC08Lr9EeapppGB0acXuA" name="MigrationParameters">
+ <tabs xmi:id="_uXpIsLr9EeapppGB0acXuA" label="MigrationParameters" id="migrationparameters" priority="100">
+ <sections xmi:id="_uXpvwLr9EeapppGB0acXuA" name="Single AdvancedConfig" sectionFile="ui/SingleAdvancedConfig.xwt">
+ <widget href="ui/SingleAdvancedConfig.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXqW0Lr9EeapppGB0acXuA" name="Single ThreadConfig" sectionFile="ui/SingleThreadConfig.xwt">
+ <widget href="ui/SingleThreadConfig.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXqW0br9EeapppGB0acXuA" name="Single MappingParameters" sectionFile="ui/SingleMappingParameters.xwt">
+ <widget href="ui/SingleMappingParameters.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXq94Lr9EeapppGB0acXuA" name="Single URIMapping" sectionFile="ui/SingleURIMapping.xwt">
+ <widget href="ui/SingleURIMapping.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXq94br9EeapppGB0acXuA" name="Multiple AdvancedConfig" sectionFile="ui/MultipleAdvancedConfig.xwt">
+ <widget href="ui/MultipleAdvancedConfig.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXrk8Lr9EeapppGB0acXuA" name="Multiple ThreadConfig" sectionFile="ui/MultipleThreadConfig.xwt">
+ <widget href="ui/MultipleThreadConfig.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXrk8br9EeapppGB0acXuA" name="Multiple MappingParameters" sectionFile="ui/MultipleMappingParameters.xwt">
+ <widget href="ui/MultipleMappingParameters.xwt#/"/>
+ </sections>
+ <sections xmi:id="_uXrk8rr9EeapppGB0acXuA" name="Multiple URIMapping" sectionFile="ui/MultipleURIMapping.xwt">
+ <widget href="ui/MultipleURIMapping.xwt#/"/>
+ </sections>
+ </tabs>
+ <views xmi:id="_hcC08br9EeapppGB0acXuA" name="Single AdvancedConfig" sections="_uXpvwLr9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1Err9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC08rr9EeapppGB0acXuA" name="isSingleAdvancedConfig">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC087r9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC09Lr9EeapppGB0acXuA" name="className" value="AdvancedConfig"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC09br9EeapppGB0acXuA" name="Single ThreadConfig" sections="_uXqW0Lr9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1Gbr9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC09rr9EeapppGB0acXuA" name="isSingleThreadConfig">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC097r9EeapppGB0acXuA" name="className" value="ThreadConfig"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC0-Lr9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC0-br9EeapppGB0acXuA" name="Single MappingParameters" sections="_uXqW0br9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1HLr9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC0-rr9EeapppGB0acXuA" name="isSingleMappingParameters">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC0-7r9EeapppGB0acXuA" name="className" value="MappingParameters"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC0_Lr9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC0_br9EeapppGB0acXuA" name="Single URIMapping" sections="_uXq94Lr9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1H7r9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC0_rr9EeapppGB0acXuA" name="isSingleURIMapping">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC0_7r9EeapppGB0acXuA" name="className" value="URIMapping"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1ALr9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC1Abr9EeapppGB0acXuA" elementMultiplicity="-1" name="Multiple AdvancedConfig" sections="_uXq94br9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1Err9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC1Arr9EeapppGB0acXuA" name="isMultipleAdvancedConfig">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1A7r9EeapppGB0acXuA" name="className" value="AdvancedConfig"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1BLr9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC1Bbr9EeapppGB0acXuA" elementMultiplicity="-1" name="Multiple ThreadConfig" sections="_uXrk8Lr9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1Gbr9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC1Brr9EeapppGB0acXuA" name="isMultipleThreadConfig">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1B7r9EeapppGB0acXuA" name="className" value="ThreadConfig"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1CLr9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC1Cbr9EeapppGB0acXuA" elementMultiplicity="-1" name="Multiple MappingParameters" sections="_uXrk8br9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1HLr9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC1Crr9EeapppGB0acXuA" name="isMultipleMappingParameters">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1C7r9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1DLr9EeapppGB0acXuA" name="className" value="MappingParameters"/>
+ </constraints>
+ </views>
+ <views xmi:id="_hcC1Dbr9EeapppGB0acXuA" elementMultiplicity="-1" name="Multiple URIMapping" sections="_uXrk8rr9EeapppGB0acXuA" automaticContext="true" datacontexts="_hcC1H7r9EeapppGB0acXuA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_hcC1Drr9EeapppGB0acXuA" name="isMultipleURIMapping">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1D7r9EeapppGB0acXuA" name="nsUri" value="http:///MigrationParameters.ecore"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_hcC1ELr9EeapppGB0acXuA" name="className" value="URIMapping"/>
+ </constraints>
+ </views>
+ <dataContexts xmi:id="_hcC1Ebr9EeapppGB0acXuA" name="MigrationParameters" label="MigrationParameters">
+ <elements xmi:id="_hcC1Err9EeapppGB0acXuA" name="AdvancedConfig" supertypes="_hcC1Gbr9EeapppGB0acXuA">
+ <properties xmi:id="_hcC1E7r9EeapppGB0acXuA" name="mappingParameters" type="Reference"/>
+ <properties xmi:id="_hcC1FLr9EeapppGB0acXuA" name="removeUnmappedDiagrams" description="If true, the diagrams which were not migrated will be removed. Otherwise, only the successfully imported diagrams will be removed"/>
+ <properties xmi:id="_hcC1Fbr9EeapppGB0acXuA" name="convertOpaqueExpressionToLiteralString" description="If true, the Opaque Expressions with a single body and no language (or a single empty language) will be converted to LiteralString"/>
+ <properties xmi:id="_hcC1Frr9EeapppGB0acXuA" name="removeUnmappedProfilesAndStereotypes" description="If true, all unsupported RSA profiles and stereotypes will be deleted at the end of the transformation"/>
+ <properties xmi:id="_hcC1F7r9EeapppGB0acXuA" name="removeUnmappedAnnotations" description="If true, the unmapped RSA EAnnotations will be deleted from the imported model"/>
+ <properties xmi:id="_hcC1GLr9EeapppGB0acXuA" name="alwaysAcceptSuggestedMappings" description="If true, the Transformation will not open a dialog to ask user-confirmation for the dependency mappings. The tool will automatically keep going by "guessing" the proper mapping"/>
+ </elements>
+ <elements xmi:id="_hcC1Gbr9EeapppGB0acXuA" name="ThreadConfig">
+ <properties xmi:id="_hcC1Grr9EeapppGB0acXuA" name="name"/>
+ <properties xmi:id="_hcC1G7r9EeapppGB0acXuA" name="maxThreads" description="The maximum number of threads to use during the migration.
More threads will provide faster results, at the cost of memory consumption."/>
+ </elements>
+ <elements xmi:id="_hcC1HLr9EeapppGB0acXuA" name="MappingParameters">
+ <properties xmi:id="_hcC1Hbr9EeapppGB0acXuA" name="uriMappings" label="URI Mappings" type="Reference" multiplicity="-1" description="When models/libraries have been migrated separately, maps the libraries imported from RSA to their Papyrus equivalent"/>
+ <properties xmi:id="_hcC1Hrr9EeapppGB0acXuA" name="profileUriMappings" label="Profile URI Mappings" type="Reference" multiplicity="-1" description="When profiles have been migrated separately, maps the profiles imported from RSA to their Papyrus equivalent"/>
+ </elements>
+ <elements xmi:id="_hcC1H7r9EeapppGB0acXuA" name="URIMapping">
+ <properties xmi:id="_hcC1ILr9EeapppGB0acXuA" name="sourceURI"/>
+ <properties xmi:id="_hcC1Ibr9EeapppGB0acXuA" name="targetURI"/>
+ </elements>
+ <modelElementFactory href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@modelElementFactories.0"/>
+ </dataContexts>
+</contexts:Context>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleAdvancedConfig.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleAdvancedConfig.xwt
new file mode 100755
index 0000000..6f693be
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleAdvancedConfig.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:x="http://www.eclipse.org/xwt"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:j="clr-namespace:java.lang">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleMappingParameters.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleMappingParameters.xwt
new file mode 100755
index 0000000..71e2f0b
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleMappingParameters.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:j="clr-namespace:java.lang">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleThreadConfig.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleThreadConfig.xwt
new file mode 100755
index 0000000..58a4712
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleThreadConfig.xwt
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:x="http://www.eclipse.org/xwt" xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:j="clr-namespace:java.lang"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleURIMapping.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleURIMapping.xwt
new file mode 100755
index 0000000..a3915a0
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/MultipleURIMapping.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:j="clr-namespace:java.lang"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:x="http://www.eclipse.org/xwt">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:StringEditor input="{Binding}"
+ property="MigrationParameters:URIMapping:targetURI"></ppe:StringEditor>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleAdvancedConfig.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleAdvancedConfig.xwt
new file mode 100755
index 0000000..b4460ad
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleAdvancedConfig.xwt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:j="clr-namespace:java.lang"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns="http://www.eclipse.org/xwt/presentation">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:BooleanCheckbox input="{Binding}"
+ property="MigrationParameters:AdvancedConfig:convertOpaqueExpressionToLiteralString"></ppe:BooleanCheckbox>
+ <ppe:BooleanCheckbox input="{Binding}"
+ property="MigrationParameters:AdvancedConfig:removeUnmappedProfilesAndStereotypes"></ppe:BooleanCheckbox>
+ <ppe:BooleanCheckbox input="{Binding}"
+ property="MigrationParameters:AdvancedConfig:alwaysAcceptSuggestedMappings"></ppe:BooleanCheckbox>
+ <ppe:IntegerEditor input="{Binding}"
+ property="MigrationParameters:ThreadConfig:maxThreads"></ppe:IntegerEditor>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleMappingParameters.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleMappingParameters.xwt
new file mode 100755
index 0000000..66541b8
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleMappingParameters.xwt
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:j="clr-namespace:java.lang"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:MultiReference input="{Binding}"
+ property="MigrationParameters:MappingParameters:uriMappings"></ppe:MultiReference>
+ <ppe:MultiReference input="{Binding}"
+ property="MigrationParameters:MappingParameters:profileUriMappings"></ppe:MultiReference>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleThreadConfig.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleThreadConfig.xwt
new file mode 100755
index 0000000..22240cb
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleThreadConfig.xwt
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns:x="http://www.eclipse.org/xwt"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:IntegerEditor input="{Binding}"
+ property="MigrationParameters:ThreadConfig:maxThreads"></ppe:IntegerEditor>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleURIMapping.xwt b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleURIMapping.xwt
new file mode 100755
index 0000000..0b01b70
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/dialog/ui/SingleURIMapping.xwt
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:j="clr-namespace:java.lang"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns="http://www.eclipse.org/xwt/presentation" xmlns:x="http://www.eclipse.org/xwt"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:StringEditor input="{Binding}"
+ property="MigrationParameters:URIMapping:sourceURI"></ppe:StringEditor>
+ <ppe:StringEditor input="{Binding}"
+ property="MigrationParameters:URIMapping:targetURI"></ppe:StringEditor>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/icons/import_wiz_16x16.gif b/common/plugins/org.eclipse.papyrus.interoperability.common/icons/import_wiz_16x16.gif
new file mode 100644
index 0000000..c7be463
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/icons/import_wiz_16x16.gif
Binary files differ
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.properties b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.properties
new file mode 100644
index 0000000..51cbf84
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2014 CEA LIST.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+# Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+# *****************************************************************************/
+
+pluginName = Papyrus Interoperability Common Plugin
+providerName = Eclipse Modeling Project
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml
new file mode 100644
index 0000000..ee24097
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2014 CEA LIST.
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated migrationParameters -->
+ <package
+ uri="http:///MigrationParameters.ecore"
+ class="org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage"
+ genModel="ui/migrationParameters.genmodel"/>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.properties.contexts">
+ <context
+ contextModel="dialog/MigrationParameters.ctx"
+ isCustomizable="false">
+ </context>
+ </extension>
+</plugin>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/AdvancedConfig.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/AdvancedConfig.java
new file mode 100755
index 0000000..2e0b527
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/AdvancedConfig.java
@@ -0,0 +1,195 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Advanced Config</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#getMappingParameters <em>Mapping Parameters</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedDiagrams <em>Remove Unmapped Diagrams</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isConvertOpaqueExpressionToLiteralString <em>Convert Opaque Expression To Literal String</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedProfilesAndStereotypes <em>Remove Unmapped Profiles And Stereotypes</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedAnnotations <em>Remove Unmapped Annotations</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isAlwaysAcceptSuggestedMappings <em>Always Accept Suggested Mappings</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig()
+ * @model
+ * @generated
+ */
+public interface AdvancedConfig extends ThreadConfig {
+ /**
+ * Returns the value of the '<em><b>Mapping Parameters</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Mapping Parameters</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Mapping Parameters</em>' containment reference.
+ * @see #setMappingParameters(MappingParameters)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_MappingParameters()
+ * @model containment="true" required="true" ordered="false"
+ * @generated
+ */
+ MappingParameters getMappingParameters();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#getMappingParameters <em>Mapping Parameters</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Mapping Parameters</em>' containment reference.
+ * @see #getMappingParameters()
+ * @generated
+ */
+ void setMappingParameters(MappingParameters value);
+
+ /**
+ * Returns the value of the '<em><b>Remove Unmapped Diagrams</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * If true, the diagrams which were not migrated will be removed. Otherwise, only the successfully imported diagrams will be removed
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Remove Unmapped Diagrams</em>' attribute.
+ * @see #setRemoveUnmappedDiagrams(boolean)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_RemoveUnmappedDiagrams()
+ * @model default="false" unique="false" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isRemoveUnmappedDiagrams();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedDiagrams <em>Remove Unmapped Diagrams</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Remove Unmapped Diagrams</em>' attribute.
+ * @see #isRemoveUnmappedDiagrams()
+ * @generated
+ */
+ void setRemoveUnmappedDiagrams(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Convert Opaque Expression To Literal String</b></em>' attribute.
+ * The default value is <code>"true"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * If true, the Opaque Expressions with a single body and no language (or a single empty language) will be converted to LiteralString
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Convert Opaque Expression To Literal String</em>' attribute.
+ * @see #setConvertOpaqueExpressionToLiteralString(boolean)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_ConvertOpaqueExpressionToLiteralString()
+ * @model default="true" unique="false" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isConvertOpaqueExpressionToLiteralString();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isConvertOpaqueExpressionToLiteralString <em>Convert Opaque Expression To Literal String</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Convert Opaque Expression To Literal String</em>' attribute.
+ * @see #isConvertOpaqueExpressionToLiteralString()
+ * @generated
+ */
+ void setConvertOpaqueExpressionToLiteralString(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Remove Unmapped Profiles And Stereotypes</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * If true, all unsupported RSA profiles and stereotypes will be deleted at the end of the transformation
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Remove Unmapped Profiles And Stereotypes</em>' attribute.
+ * @see #setRemoveUnmappedProfilesAndStereotypes(boolean)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_RemoveUnmappedProfilesAndStereotypes()
+ * @model default="false" unique="false" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isRemoveUnmappedProfilesAndStereotypes();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedProfilesAndStereotypes <em>Remove Unmapped Profiles And Stereotypes</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Remove Unmapped Profiles And Stereotypes</em>' attribute.
+ * @see #isRemoveUnmappedProfilesAndStereotypes()
+ * @generated
+ */
+ void setRemoveUnmappedProfilesAndStereotypes(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Remove Unmapped Annotations</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * If true, the unmapped RSA EAnnotations will be deleted from the imported model
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Remove Unmapped Annotations</em>' attribute.
+ * @see #setRemoveUnmappedAnnotations(boolean)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_RemoveUnmappedAnnotations()
+ * @model default="false" unique="false" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isRemoveUnmappedAnnotations();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedAnnotations <em>Remove Unmapped Annotations</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Remove Unmapped Annotations</em>' attribute.
+ * @see #isRemoveUnmappedAnnotations()
+ * @generated
+ */
+ void setRemoveUnmappedAnnotations(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Always Accept Suggested Mappings</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * If true, the Transformation will not open a dialog to ask user-confirmation for the dependency mappings. The tool will automatically keep going by "guessing" the proper mapping
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Always Accept Suggested Mappings</em>' attribute.
+ * @see #setAlwaysAcceptSuggestedMappings(boolean)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getAdvancedConfig_AlwaysAcceptSuggestedMappings()
+ * @model default="false" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isAlwaysAcceptSuggestedMappings();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isAlwaysAcceptSuggestedMappings <em>Always Accept Suggested Mappings</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Always Accept Suggested Mappings</em>' attribute.
+ * @see #isAlwaysAcceptSuggestedMappings()
+ * @generated
+ */
+ void setAlwaysAcceptSuggestedMappings(boolean value);
+
+} // AdvancedConfig
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MappingParameters.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MappingParameters.java
new file mode 100755
index 0000000..389b389
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MappingParameters.java
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Mapping Parameters</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getUriMappings <em>Uri Mappings</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getProfileUriMappings <em>Profile Uri Mappings</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getMappingParameters()
+ * @model
+ * @generated
+ */
+public interface MappingParameters extends EObject {
+ /**
+ * Returns the value of the '<em><b>Uri Mappings</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * When models/libraries have been migrated separately, maps the libraries imported from RSA to their Papyrus equivalent
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Uri Mappings</em>' containment reference list.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getMappingParameters_UriMappings()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<URIMapping> getUriMappings();
+
+ /**
+ * Returns the value of the '<em><b>Profile Uri Mappings</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * When profiles have been migrated separately, maps the profiles imported from RSA to their Papyrus equivalent
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Profile Uri Mappings</em>' containment reference list.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getMappingParameters_ProfileUriMappings()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<URIMapping> getProfileUriMappings();
+
+} // MappingParameters
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersFactory.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersFactory.java
new file mode 100755
index 0000000..e0e0167
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersFactory.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage
+ * @generated
+ */
+public interface MigrationParametersFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ MigrationParametersFactory eINSTANCE = org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Advanced Config</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Advanced Config</em>'.
+ * @generated
+ */
+ AdvancedConfig createAdvancedConfig();
+
+ /**
+ * Returns a new object of class '<em>Thread Config</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Thread Config</em>'.
+ * @generated
+ */
+ ThreadConfig createThreadConfig();
+
+ /**
+ * Returns a new object of class '<em>Mapping Parameters</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Mapping Parameters</em>'.
+ * @generated
+ */
+ MappingParameters createMappingParameters();
+
+ /**
+ * Returns a new object of class '<em>URI Mapping</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>URI Mapping</em>'.
+ * @generated
+ */
+ URIMapping createURIMapping();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ MigrationParametersPackage getMigrationParametersPackage();
+
+} //MigrationParametersFactory
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersPackage.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersPackage.java
new file mode 100755
index 0000000..89478fd
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/MigrationParametersPackage.java
@@ -0,0 +1,642 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface MigrationParametersPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "MigrationParameters"; //$NON-NLS-1$
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http:///MigrationParameters.ecore"; //$NON-NLS-1$
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "MigrationParameters"; //$NON-NLS-1$
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ MigrationParametersPackage eINSTANCE = org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl <em>Thread Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getThreadConfig()
+ * @generated
+ */
+ int THREAD_CONFIG = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int THREAD_CONFIG__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Max Threads</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int THREAD_CONFIG__MAX_THREADS = 1;
+
+ /**
+ * The number of structural features of the '<em>Thread Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int THREAD_CONFIG_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>Thread Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int THREAD_CONFIG_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl <em>Advanced Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getAdvancedConfig()
+ * @generated
+ */
+ int ADVANCED_CONFIG = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__NAME = THREAD_CONFIG__NAME;
+
+ /**
+ * The feature id for the '<em><b>Max Threads</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__MAX_THREADS = THREAD_CONFIG__MAX_THREADS;
+
+ /**
+ * The feature id for the '<em><b>Mapping Parameters</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__MAPPING_PARAMETERS = THREAD_CONFIG_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Remove Unmapped Diagrams</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS = THREAD_CONFIG_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Convert Opaque Expression To Literal String</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING = THREAD_CONFIG_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Remove Unmapped Profiles And Stereotypes</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES = THREAD_CONFIG_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the '<em><b>Remove Unmapped Annotations</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS = THREAD_CONFIG_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the '<em><b>Always Accept Suggested Mappings</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS = THREAD_CONFIG_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the '<em>Advanced Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG_FEATURE_COUNT = THREAD_CONFIG_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the '<em>Advanced Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ADVANCED_CONFIG_OPERATION_COUNT = THREAD_CONFIG_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl <em>Mapping Parameters</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getMappingParameters()
+ * @generated
+ */
+ int MAPPING_PARAMETERS = 2;
+
+ /**
+ * The feature id for the '<em><b>Uri Mappings</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MAPPING_PARAMETERS__URI_MAPPINGS = 0;
+
+ /**
+ * The feature id for the '<em><b>Profile Uri Mappings</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS = 1;
+
+ /**
+ * The number of structural features of the '<em>Mapping Parameters</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MAPPING_PARAMETERS_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>Mapping Parameters</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int MAPPING_PARAMETERS_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl <em>URI Mapping</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getURIMapping()
+ * @generated
+ */
+ int URI_MAPPING = 3;
+
+ /**
+ * The feature id for the '<em><b>Source URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int URI_MAPPING__SOURCE_URI = 0;
+
+ /**
+ * The feature id for the '<em><b>Target URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int URI_MAPPING__TARGET_URI = 1;
+
+ /**
+ * The number of structural features of the '<em>URI Mapping</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int URI_MAPPING_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>URI Mapping</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int URI_MAPPING_OPERATION_COUNT = 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig <em>Advanced Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Advanced Config</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig
+ * @generated
+ */
+ EClass getAdvancedConfig();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#getMappingParameters <em>Mapping Parameters</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference '<em>Mapping Parameters</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#getMappingParameters()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EReference getAdvancedConfig_MappingParameters();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedDiagrams <em>Remove Unmapped Diagrams</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Remove Unmapped Diagrams</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedDiagrams()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EAttribute getAdvancedConfig_RemoveUnmappedDiagrams();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isConvertOpaqueExpressionToLiteralString <em>Convert Opaque Expression To Literal String</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Convert Opaque Expression To Literal String</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isConvertOpaqueExpressionToLiteralString()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EAttribute getAdvancedConfig_ConvertOpaqueExpressionToLiteralString();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedProfilesAndStereotypes <em>Remove Unmapped Profiles And Stereotypes</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Remove Unmapped Profiles And Stereotypes</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedProfilesAndStereotypes()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EAttribute getAdvancedConfig_RemoveUnmappedProfilesAndStereotypes();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedAnnotations <em>Remove Unmapped Annotations</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Remove Unmapped Annotations</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isRemoveUnmappedAnnotations()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EAttribute getAdvancedConfig_RemoveUnmappedAnnotations();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isAlwaysAcceptSuggestedMappings <em>Always Accept Suggested Mappings</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Always Accept Suggested Mappings</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig#isAlwaysAcceptSuggestedMappings()
+ * @see #getAdvancedConfig()
+ * @generated
+ */
+ EAttribute getAdvancedConfig_AlwaysAcceptSuggestedMappings();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig <em>Thread Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Thread Config</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig
+ * @generated
+ */
+ EClass getThreadConfig();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getName()
+ * @see #getThreadConfig()
+ * @generated
+ */
+ EAttribute getThreadConfig_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getMaxThreads <em>Max Threads</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Max Threads</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getMaxThreads()
+ * @see #getThreadConfig()
+ * @generated
+ */
+ EAttribute getThreadConfig_MaxThreads();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters <em>Mapping Parameters</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Mapping Parameters</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters
+ * @generated
+ */
+ EClass getMappingParameters();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getUriMappings <em>Uri Mappings</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Uri Mappings</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getUriMappings()
+ * @see #getMappingParameters()
+ * @generated
+ */
+ EReference getMappingParameters_UriMappings();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getProfileUriMappings <em>Profile Uri Mappings</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Profile Uri Mappings</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters#getProfileUriMappings()
+ * @see #getMappingParameters()
+ * @generated
+ */
+ EReference getMappingParameters_ProfileUriMappings();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping <em>URI Mapping</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>URI Mapping</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping
+ * @generated
+ */
+ EClass getURIMapping();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getSourceURI <em>Source URI</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Source URI</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getSourceURI()
+ * @see #getURIMapping()
+ * @generated
+ */
+ EAttribute getURIMapping_SourceURI();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getTargetURI <em>Target URI</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Target URI</em>'.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getTargetURI()
+ * @see #getURIMapping()
+ * @generated
+ */
+ EAttribute getURIMapping_TargetURI();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ MigrationParametersFactory getMigrationParametersFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl <em>Advanced Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getAdvancedConfig()
+ * @generated
+ */
+ EClass ADVANCED_CONFIG = eINSTANCE.getAdvancedConfig();
+
+ /**
+ * The meta object literal for the '<em><b>Mapping Parameters</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ADVANCED_CONFIG__MAPPING_PARAMETERS = eINSTANCE.getAdvancedConfig_MappingParameters();
+
+ /**
+ * The meta object literal for the '<em><b>Remove Unmapped Diagrams</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS = eINSTANCE.getAdvancedConfig_RemoveUnmappedDiagrams();
+
+ /**
+ * The meta object literal for the '<em><b>Convert Opaque Expression To Literal String</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING = eINSTANCE.getAdvancedConfig_ConvertOpaqueExpressionToLiteralString();
+
+ /**
+ * The meta object literal for the '<em><b>Remove Unmapped Profiles And Stereotypes</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES = eINSTANCE.getAdvancedConfig_RemoveUnmappedProfilesAndStereotypes();
+
+ /**
+ * The meta object literal for the '<em><b>Remove Unmapped Annotations</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS = eINSTANCE.getAdvancedConfig_RemoveUnmappedAnnotations();
+
+ /**
+ * The meta object literal for the '<em><b>Always Accept Suggested Mappings</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS = eINSTANCE.getAdvancedConfig_AlwaysAcceptSuggestedMappings();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl <em>Thread Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getThreadConfig()
+ * @generated
+ */
+ EClass THREAD_CONFIG = eINSTANCE.getThreadConfig();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute THREAD_CONFIG__NAME = eINSTANCE.getThreadConfig_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Max Threads</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute THREAD_CONFIG__MAX_THREADS = eINSTANCE.getThreadConfig_MaxThreads();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl <em>Mapping Parameters</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getMappingParameters()
+ * @generated
+ */
+ EClass MAPPING_PARAMETERS = eINSTANCE.getMappingParameters();
+
+ /**
+ * The meta object literal for the '<em><b>Uri Mappings</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MAPPING_PARAMETERS__URI_MAPPINGS = eINSTANCE.getMappingParameters_UriMappings();
+
+ /**
+ * The meta object literal for the '<em><b>Profile Uri Mappings</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS = eINSTANCE.getMappingParameters_ProfileUriMappings();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl <em>URI Mapping</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MigrationParametersPackageImpl#getURIMapping()
+ * @generated
+ */
+ EClass URI_MAPPING = eINSTANCE.getURIMapping();
+
+ /**
+ * The meta object literal for the '<em><b>Source URI</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute URI_MAPPING__SOURCE_URI = eINSTANCE.getURIMapping_SourceURI();
+
+ /**
+ * The meta object literal for the '<em><b>Target URI</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute URI_MAPPING__TARGET_URI = eINSTANCE.getURIMapping_TargetURI();
+
+ }
+
+} //MigrationParametersPackage
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/ThreadConfig.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/ThreadConfig.java
new file mode 100755
index 0000000..4ecfb88
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/ThreadConfig.java
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Thread Config</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getMaxThreads <em>Max Threads</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getThreadConfig()
+ * @model
+ * @generated
+ */
+public interface ThreadConfig extends EObject {
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getThreadConfig_Name()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Max Threads</b></em>' attribute.
+ * The default value is <code>"2"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The maximum number of threads to use during the migration.
+ * More threads will provide faster results, at the cost of memory consumption.
+ * <!-- end-model-doc -->
+ * @return the value of the '<em>Max Threads</em>' attribute.
+ * @see #setMaxThreads(int)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getThreadConfig_MaxThreads()
+ * @model default="2" unique="false" dataType="org.eclipse.uml2.types.Integer" required="true" ordered="false"
+ * @generated
+ */
+ int getMaxThreads();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig#getMaxThreads <em>Max Threads</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Max Threads</em>' attribute.
+ * @see #getMaxThreads()
+ * @generated
+ */
+ void setMaxThreads(int value);
+
+} // ThreadConfig
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/URIMapping.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/URIMapping.java
new file mode 100755
index 0000000..191933f
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/URIMapping.java
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>URI Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getSourceURI <em>Source URI</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getTargetURI <em>Target URI</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getURIMapping()
+ * @model
+ * @generated
+ */
+public interface URIMapping extends EObject {
+ /**
+ * Returns the value of the '<em><b>Source URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Source URI</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Source URI</em>' attribute.
+ * @see #setSourceURI(String)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getURIMapping_SourceURI()
+ * @model unique="false" dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getSourceURI();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getSourceURI <em>Source URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Source URI</em>' attribute.
+ * @see #getSourceURI()
+ * @generated
+ */
+ void setSourceURI(String value);
+
+ /**
+ * Returns the value of the '<em><b>Target URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Target URI</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Target URI</em>' attribute.
+ * @see #setTargetURI(String)
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#getURIMapping_TargetURI()
+ * @model unique="false" dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getTargetURI();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping#getTargetURI <em>Target URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Target URI</em>' attribute.
+ * @see #getTargetURI()
+ * @generated
+ */
+ void setTargetURI(String value);
+
+} // URIMapping
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/AdvancedConfigImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/AdvancedConfigImpl.java
new file mode 100755
index 0000000..bb62731
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/AdvancedConfigImpl.java
@@ -0,0 +1,469 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Advanced Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#getMappingParameters <em>Mapping Parameters</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#isRemoveUnmappedDiagrams <em>Remove Unmapped Diagrams</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#isConvertOpaqueExpressionToLiteralString <em>Convert Opaque Expression To Literal String</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#isRemoveUnmappedProfilesAndStereotypes <em>Remove Unmapped Profiles And Stereotypes</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#isRemoveUnmappedAnnotations <em>Remove Unmapped Annotations</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.AdvancedConfigImpl#isAlwaysAcceptSuggestedMappings <em>Always Accept Suggested Mappings</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AdvancedConfigImpl extends ThreadConfigImpl implements AdvancedConfig {
+ /**
+ * The cached value of the '{@link #getMappingParameters() <em>Mapping Parameters</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMappingParameters()
+ * @generated
+ * @ordered
+ */
+ protected MappingParameters mappingParameters;
+
+ /**
+ * The default value of the '{@link #isRemoveUnmappedDiagrams() <em>Remove Unmapped Diagrams</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedDiagrams()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean REMOVE_UNMAPPED_DIAGRAMS_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isRemoveUnmappedDiagrams() <em>Remove Unmapped Diagrams</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedDiagrams()
+ * @generated
+ * @ordered
+ */
+ protected boolean removeUnmappedDiagrams = REMOVE_UNMAPPED_DIAGRAMS_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isConvertOpaqueExpressionToLiteralString() <em>Convert Opaque Expression To Literal String</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isConvertOpaqueExpressionToLiteralString()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING_EDEFAULT = true;
+
+ /**
+ * The cached value of the '{@link #isConvertOpaqueExpressionToLiteralString() <em>Convert Opaque Expression To Literal String</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isConvertOpaqueExpressionToLiteralString()
+ * @generated
+ * @ordered
+ */
+ protected boolean convertOpaqueExpressionToLiteralString = CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isRemoveUnmappedProfilesAndStereotypes() <em>Remove Unmapped Profiles And Stereotypes</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedProfilesAndStereotypes()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isRemoveUnmappedProfilesAndStereotypes() <em>Remove Unmapped Profiles And Stereotypes</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedProfilesAndStereotypes()
+ * @generated
+ * @ordered
+ */
+ protected boolean removeUnmappedProfilesAndStereotypes = REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isRemoveUnmappedAnnotations() <em>Remove Unmapped Annotations</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedAnnotations()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean REMOVE_UNMAPPED_ANNOTATIONS_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isRemoveUnmappedAnnotations() <em>Remove Unmapped Annotations</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isRemoveUnmappedAnnotations()
+ * @generated
+ * @ordered
+ */
+ protected boolean removeUnmappedAnnotations = REMOVE_UNMAPPED_ANNOTATIONS_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isAlwaysAcceptSuggestedMappings() <em>Always Accept Suggested Mappings</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isAlwaysAcceptSuggestedMappings()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean ALWAYS_ACCEPT_SUGGESTED_MAPPINGS_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isAlwaysAcceptSuggestedMappings() <em>Always Accept Suggested Mappings</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isAlwaysAcceptSuggestedMappings()
+ * @generated
+ * @ordered
+ */
+ protected boolean alwaysAcceptSuggestedMappings = ALWAYS_ACCEPT_SUGGESTED_MAPPINGS_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AdvancedConfigImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return MigrationParametersPackage.Literals.ADVANCED_CONFIG;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MappingParameters getMappingParameters() {
+ return mappingParameters;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetMappingParameters(MappingParameters newMappingParameters, NotificationChain msgs) {
+ MappingParameters oldMappingParameters = mappingParameters;
+ mappingParameters = newMappingParameters;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS, oldMappingParameters, newMappingParameters);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setMappingParameters(MappingParameters newMappingParameters) {
+ if (newMappingParameters != mappingParameters) {
+ NotificationChain msgs = null;
+ if (mappingParameters != null)
+ msgs = ((InternalEObject)mappingParameters).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS, null, msgs);
+ if (newMappingParameters != null)
+ msgs = ((InternalEObject)newMappingParameters).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS, null, msgs);
+ msgs = basicSetMappingParameters(newMappingParameters, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS, newMappingParameters, newMappingParameters));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isRemoveUnmappedDiagrams() {
+ return removeUnmappedDiagrams;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setRemoveUnmappedDiagrams(boolean newRemoveUnmappedDiagrams) {
+ boolean oldRemoveUnmappedDiagrams = removeUnmappedDiagrams;
+ removeUnmappedDiagrams = newRemoveUnmappedDiagrams;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS, oldRemoveUnmappedDiagrams, removeUnmappedDiagrams));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isConvertOpaqueExpressionToLiteralString() {
+ return convertOpaqueExpressionToLiteralString;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setConvertOpaqueExpressionToLiteralString(boolean newConvertOpaqueExpressionToLiteralString) {
+ boolean oldConvertOpaqueExpressionToLiteralString = convertOpaqueExpressionToLiteralString;
+ convertOpaqueExpressionToLiteralString = newConvertOpaqueExpressionToLiteralString;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING, oldConvertOpaqueExpressionToLiteralString, convertOpaqueExpressionToLiteralString));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isRemoveUnmappedProfilesAndStereotypes() {
+ return removeUnmappedProfilesAndStereotypes;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setRemoveUnmappedProfilesAndStereotypes(boolean newRemoveUnmappedProfilesAndStereotypes) {
+ boolean oldRemoveUnmappedProfilesAndStereotypes = removeUnmappedProfilesAndStereotypes;
+ removeUnmappedProfilesAndStereotypes = newRemoveUnmappedProfilesAndStereotypes;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES, oldRemoveUnmappedProfilesAndStereotypes, removeUnmappedProfilesAndStereotypes));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isRemoveUnmappedAnnotations() {
+ return removeUnmappedAnnotations;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setRemoveUnmappedAnnotations(boolean newRemoveUnmappedAnnotations) {
+ boolean oldRemoveUnmappedAnnotations = removeUnmappedAnnotations;
+ removeUnmappedAnnotations = newRemoveUnmappedAnnotations;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS, oldRemoveUnmappedAnnotations, removeUnmappedAnnotations));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isAlwaysAcceptSuggestedMappings() {
+ return alwaysAcceptSuggestedMappings;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAlwaysAcceptSuggestedMappings(boolean newAlwaysAcceptSuggestedMappings) {
+ boolean oldAlwaysAcceptSuggestedMappings = alwaysAcceptSuggestedMappings;
+ alwaysAcceptSuggestedMappings = newAlwaysAcceptSuggestedMappings;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS, oldAlwaysAcceptSuggestedMappings, alwaysAcceptSuggestedMappings));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS:
+ return basicSetMappingParameters(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS:
+ return getMappingParameters();
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS:
+ return isRemoveUnmappedDiagrams();
+ case MigrationParametersPackage.ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING:
+ return isConvertOpaqueExpressionToLiteralString();
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES:
+ return isRemoveUnmappedProfilesAndStereotypes();
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS:
+ return isRemoveUnmappedAnnotations();
+ case MigrationParametersPackage.ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS:
+ return isAlwaysAcceptSuggestedMappings();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS:
+ setMappingParameters((MappingParameters)newValue);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS:
+ setRemoveUnmappedDiagrams((Boolean)newValue);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING:
+ setConvertOpaqueExpressionToLiteralString((Boolean)newValue);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES:
+ setRemoveUnmappedProfilesAndStereotypes((Boolean)newValue);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS:
+ setRemoveUnmappedAnnotations((Boolean)newValue);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS:
+ setAlwaysAcceptSuggestedMappings((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS:
+ setMappingParameters((MappingParameters)null);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS:
+ setRemoveUnmappedDiagrams(REMOVE_UNMAPPED_DIAGRAMS_EDEFAULT);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING:
+ setConvertOpaqueExpressionToLiteralString(CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING_EDEFAULT);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES:
+ setRemoveUnmappedProfilesAndStereotypes(REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES_EDEFAULT);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS:
+ setRemoveUnmappedAnnotations(REMOVE_UNMAPPED_ANNOTATIONS_EDEFAULT);
+ return;
+ case MigrationParametersPackage.ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS:
+ setAlwaysAcceptSuggestedMappings(ALWAYS_ACCEPT_SUGGESTED_MAPPINGS_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG__MAPPING_PARAMETERS:
+ return mappingParameters != null;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS:
+ return removeUnmappedDiagrams != REMOVE_UNMAPPED_DIAGRAMS_EDEFAULT;
+ case MigrationParametersPackage.ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING:
+ return convertOpaqueExpressionToLiteralString != CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING_EDEFAULT;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES:
+ return removeUnmappedProfilesAndStereotypes != REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES_EDEFAULT;
+ case MigrationParametersPackage.ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS:
+ return removeUnmappedAnnotations != REMOVE_UNMAPPED_ANNOTATIONS_EDEFAULT;
+ case MigrationParametersPackage.ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS:
+ return alwaysAcceptSuggestedMappings != ALWAYS_ACCEPT_SUGGESTED_MAPPINGS_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (removeUnmappedDiagrams: "); //$NON-NLS-1$
+ result.append(removeUnmappedDiagrams);
+ result.append(", convertOpaqueExpressionToLiteralString: "); //$NON-NLS-1$
+ result.append(convertOpaqueExpressionToLiteralString);
+ result.append(", removeUnmappedProfilesAndStereotypes: "); //$NON-NLS-1$
+ result.append(removeUnmappedProfilesAndStereotypes);
+ result.append(", removeUnmappedAnnotations: "); //$NON-NLS-1$
+ result.append(removeUnmappedAnnotations);
+ result.append(", alwaysAcceptSuggestedMappings: "); //$NON-NLS-1$
+ result.append(alwaysAcceptSuggestedMappings);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AdvancedConfigImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MappingParametersImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MappingParametersImpl.java
new file mode 100755
index 0000000..90a1d5b
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MappingParametersImpl.java
@@ -0,0 +1,198 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mapping Parameters</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl#getUriMappings <em>Uri Mappings</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.MappingParametersImpl#getProfileUriMappings <em>Profile Uri Mappings</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MappingParametersImpl extends MinimalEObjectImpl.Container implements MappingParameters {
+ /**
+ * The cached value of the '{@link #getUriMappings() <em>Uri Mappings</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getUriMappings()
+ * @generated
+ * @ordered
+ */
+ protected EList<URIMapping> uriMappings;
+
+ /**
+ * The cached value of the '{@link #getProfileUriMappings() <em>Profile Uri Mappings</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProfileUriMappings()
+ * @generated
+ * @ordered
+ */
+ protected EList<URIMapping> profileUriMappings;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MappingParametersImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return MigrationParametersPackage.Literals.MAPPING_PARAMETERS;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<URIMapping> getUriMappings() {
+ if (uriMappings == null) {
+ uriMappings = new EObjectContainmentEList<URIMapping>(URIMapping.class, this, MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS);
+ }
+ return uriMappings;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<URIMapping> getProfileUriMappings() {
+ if (profileUriMappings == null) {
+ profileUriMappings = new EObjectContainmentEList<URIMapping>(URIMapping.class, this, MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS);
+ }
+ return profileUriMappings;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS:
+ return ((InternalEList<?>)getUriMappings()).basicRemove(otherEnd, msgs);
+ case MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS:
+ return ((InternalEList<?>)getProfileUriMappings()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS:
+ return getUriMappings();
+ case MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS:
+ return getProfileUriMappings();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS:
+ getUriMappings().clear();
+ getUriMappings().addAll((Collection<? extends URIMapping>)newValue);
+ return;
+ case MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS:
+ getProfileUriMappings().clear();
+ getProfileUriMappings().addAll((Collection<? extends URIMapping>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS:
+ getUriMappings().clear();
+ return;
+ case MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS:
+ getProfileUriMappings().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.MAPPING_PARAMETERS__URI_MAPPINGS:
+ return uriMappings != null && !uriMappings.isEmpty();
+ case MigrationParametersPackage.MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS:
+ return profileUriMappings != null && !profileUriMappings.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //MappingParametersImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersFactoryImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersFactoryImpl.java
new file mode 100755
index 0000000..2137ff1
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersFactoryImpl.java
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationParametersFactoryImpl extends EFactoryImpl implements MigrationParametersFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static MigrationParametersFactory init() {
+ try {
+ MigrationParametersFactory theMigrationParametersFactory = (MigrationParametersFactory)EPackage.Registry.INSTANCE.getEFactory(MigrationParametersPackage.eNS_URI);
+ if (theMigrationParametersFactory != null) {
+ return theMigrationParametersFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new MigrationParametersFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationParametersFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case MigrationParametersPackage.ADVANCED_CONFIG: return createAdvancedConfig();
+ case MigrationParametersPackage.THREAD_CONFIG: return createThreadConfig();
+ case MigrationParametersPackage.MAPPING_PARAMETERS: return createMappingParameters();
+ case MigrationParametersPackage.URI_MAPPING: return createURIMapping();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AdvancedConfig createAdvancedConfig() {
+ AdvancedConfigImpl advancedConfig = new AdvancedConfigImpl();
+ return advancedConfig;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ThreadConfig createThreadConfig() {
+ ThreadConfigImpl threadConfig = new ThreadConfigImpl();
+ return threadConfig;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MappingParameters createMappingParameters() {
+ MappingParametersImpl mappingParameters = new MappingParametersImpl();
+ return mappingParameters;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public URIMapping createURIMapping() {
+ URIMappingImpl uriMapping = new URIMappingImpl();
+ return uriMapping;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationParametersPackage getMigrationParametersPackage() {
+ return (MigrationParametersPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static MigrationParametersPackage getPackage() {
+ return MigrationParametersPackage.eINSTANCE;
+ }
+
+} //MigrationParametersFactoryImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersPackageImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersPackageImpl.java
new file mode 100755
index 0000000..2dc388a
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/MigrationParametersPackageImpl.java
@@ -0,0 +1,380 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+import org.eclipse.uml2.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationParametersPackageImpl extends EPackageImpl implements MigrationParametersPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass advancedConfigEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass threadConfigEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass mappingParametersEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass uriMappingEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private MigrationParametersPackageImpl() {
+ super(eNS_URI, MigrationParametersFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link MigrationParametersPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static MigrationParametersPackage init() {
+ if (isInited) return (MigrationParametersPackage)EPackage.Registry.INSTANCE.getEPackage(MigrationParametersPackage.eNS_URI);
+
+ // Obtain or create and register package
+ MigrationParametersPackageImpl theMigrationParametersPackage = (MigrationParametersPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof MigrationParametersPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new MigrationParametersPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ TypesPackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theMigrationParametersPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theMigrationParametersPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theMigrationParametersPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(MigrationParametersPackage.eNS_URI, theMigrationParametersPackage);
+ return theMigrationParametersPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAdvancedConfig() {
+ return advancedConfigEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAdvancedConfig_MappingParameters() {
+ return (EReference)advancedConfigEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAdvancedConfig_RemoveUnmappedDiagrams() {
+ return (EAttribute)advancedConfigEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAdvancedConfig_ConvertOpaqueExpressionToLiteralString() {
+ return (EAttribute)advancedConfigEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAdvancedConfig_RemoveUnmappedProfilesAndStereotypes() {
+ return (EAttribute)advancedConfigEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAdvancedConfig_RemoveUnmappedAnnotations() {
+ return (EAttribute)advancedConfigEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAdvancedConfig_AlwaysAcceptSuggestedMappings() {
+ return (EAttribute)advancedConfigEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getThreadConfig() {
+ return threadConfigEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getThreadConfig_Name() {
+ return (EAttribute)threadConfigEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getThreadConfig_MaxThreads() {
+ return (EAttribute)threadConfigEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getMappingParameters() {
+ return mappingParametersEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getMappingParameters_UriMappings() {
+ return (EReference)mappingParametersEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getMappingParameters_ProfileUriMappings() {
+ return (EReference)mappingParametersEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getURIMapping() {
+ return uriMappingEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getURIMapping_SourceURI() {
+ return (EAttribute)uriMappingEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getURIMapping_TargetURI() {
+ return (EAttribute)uriMappingEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationParametersFactory getMigrationParametersFactory() {
+ return (MigrationParametersFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ advancedConfigEClass = createEClass(ADVANCED_CONFIG);
+ createEReference(advancedConfigEClass, ADVANCED_CONFIG__MAPPING_PARAMETERS);
+ createEAttribute(advancedConfigEClass, ADVANCED_CONFIG__REMOVE_UNMAPPED_DIAGRAMS);
+ createEAttribute(advancedConfigEClass, ADVANCED_CONFIG__CONVERT_OPAQUE_EXPRESSION_TO_LITERAL_STRING);
+ createEAttribute(advancedConfigEClass, ADVANCED_CONFIG__REMOVE_UNMAPPED_PROFILES_AND_STEREOTYPES);
+ createEAttribute(advancedConfigEClass, ADVANCED_CONFIG__REMOVE_UNMAPPED_ANNOTATIONS);
+ createEAttribute(advancedConfigEClass, ADVANCED_CONFIG__ALWAYS_ACCEPT_SUGGESTED_MAPPINGS);
+
+ threadConfigEClass = createEClass(THREAD_CONFIG);
+ createEAttribute(threadConfigEClass, THREAD_CONFIG__NAME);
+ createEAttribute(threadConfigEClass, THREAD_CONFIG__MAX_THREADS);
+
+ mappingParametersEClass = createEClass(MAPPING_PARAMETERS);
+ createEReference(mappingParametersEClass, MAPPING_PARAMETERS__URI_MAPPINGS);
+ createEReference(mappingParametersEClass, MAPPING_PARAMETERS__PROFILE_URI_MAPPINGS);
+
+ uriMappingEClass = createEClass(URI_MAPPING);
+ createEAttribute(uriMappingEClass, URI_MAPPING__SOURCE_URI);
+ createEAttribute(uriMappingEClass, URI_MAPPING__TARGET_URI);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ advancedConfigEClass.getESuperTypes().add(this.getThreadConfig());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(advancedConfigEClass, AdvancedConfig.class, "AdvancedConfig", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(getAdvancedConfig_MappingParameters(), this.getMappingParameters(), null, "mappingParameters", null, 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+ initEAttribute(getAdvancedConfig_RemoveUnmappedDiagrams(), theTypesPackage.getBoolean(), "removeUnmappedDiagrams", "false", 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+ initEAttribute(getAdvancedConfig_ConvertOpaqueExpressionToLiteralString(), theTypesPackage.getBoolean(), "convertOpaqueExpressionToLiteralString", "true", 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+ initEAttribute(getAdvancedConfig_RemoveUnmappedProfilesAndStereotypes(), theTypesPackage.getBoolean(), "removeUnmappedProfilesAndStereotypes", "false", 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+ initEAttribute(getAdvancedConfig_RemoveUnmappedAnnotations(), theTypesPackage.getBoolean(), "removeUnmappedAnnotations", "false", 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+ initEAttribute(getAdvancedConfig_AlwaysAcceptSuggestedMappings(), theTypesPackage.getBoolean(), "alwaysAcceptSuggestedMappings", "false", 1, 1, AdvancedConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+ initEClass(threadConfigEClass, ThreadConfig.class, "ThreadConfig", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEAttribute(getThreadConfig_Name(), theTypesPackage.getString(), "name", null, 1, 1, ThreadConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+ initEAttribute(getThreadConfig_MaxThreads(), theTypesPackage.getInteger(), "maxThreads", "2", 1, 1, ThreadConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+ initEClass(mappingParametersEClass, MappingParameters.class, "MappingParameters", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEReference(getMappingParameters_UriMappings(), this.getURIMapping(), null, "uriMappings", null, 0, -1, MappingParameters.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+ initEReference(getMappingParameters_ProfileUriMappings(), this.getURIMapping(), null, "profileUriMappings", null, 0, -1, MappingParameters.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+ initEClass(uriMappingEClass, URIMapping.class, "URIMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+ initEAttribute(getURIMapping_SourceURI(), theTypesPackage.getString(), "sourceURI", null, 1, 1, URIMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+ initEAttribute(getURIMapping_TargetURI(), theTypesPackage.getString(), "targetURI", null, 1, 1, URIMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //MigrationParametersPackageImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/ThreadConfigImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/ThreadConfigImpl.java
new file mode 100755
index 0000000..791e983
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/ThreadConfigImpl.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Thread Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.ThreadConfigImpl#getMaxThreads <em>Max Threads</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ThreadConfigImpl extends MinimalEObjectImpl.Container implements ThreadConfig {
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getMaxThreads() <em>Max Threads</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMaxThreads()
+ * @generated
+ * @ordered
+ */
+ protected static final int MAX_THREADS_EDEFAULT = 2;
+
+ /**
+ * The cached value of the '{@link #getMaxThreads() <em>Max Threads</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMaxThreads()
+ * @generated
+ * @ordered
+ */
+ protected int maxThreads = MAX_THREADS_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ThreadConfigImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return MigrationParametersPackage.Literals.THREAD_CONFIG;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.THREAD_CONFIG__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getMaxThreads() {
+ return maxThreads;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setMaxThreads(int newMaxThreads) {
+ int oldMaxThreads = maxThreads;
+ maxThreads = newMaxThreads;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.THREAD_CONFIG__MAX_THREADS, oldMaxThreads, maxThreads));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case MigrationParametersPackage.THREAD_CONFIG__NAME:
+ return getName();
+ case MigrationParametersPackage.THREAD_CONFIG__MAX_THREADS:
+ return getMaxThreads();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case MigrationParametersPackage.THREAD_CONFIG__NAME:
+ setName((String)newValue);
+ return;
+ case MigrationParametersPackage.THREAD_CONFIG__MAX_THREADS:
+ setMaxThreads((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.THREAD_CONFIG__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case MigrationParametersPackage.THREAD_CONFIG__MAX_THREADS:
+ setMaxThreads(MAX_THREADS_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.THREAD_CONFIG__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case MigrationParametersPackage.THREAD_CONFIG__MAX_THREADS:
+ return maxThreads != MAX_THREADS_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: "); //$NON-NLS-1$
+ result.append(name);
+ result.append(", maxThreads: "); //$NON-NLS-1$
+ result.append(maxThreads);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ThreadConfigImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/URIMappingImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/URIMappingImpl.java
new file mode 100755
index 0000000..b1a78e0
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/impl/URIMappingImpl.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI Mapping</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl#getSourceURI <em>Source URI</em>}</li>
+ * <li>{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.impl.URIMappingImpl#getTargetURI <em>Target URI</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class URIMappingImpl extends MinimalEObjectImpl.Container implements URIMapping {
+ /**
+ * The default value of the '{@link #getSourceURI() <em>Source URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSourceURI()
+ * @generated
+ * @ordered
+ */
+ protected static final String SOURCE_URI_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getSourceURI() <em>Source URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSourceURI()
+ * @generated
+ * @ordered
+ */
+ protected String sourceURI = SOURCE_URI_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTargetURI()
+ * @generated
+ * @ordered
+ */
+ protected static final String TARGET_URI_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getTargetURI()
+ * @generated
+ * @ordered
+ */
+ protected String targetURI = TARGET_URI_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected URIMappingImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return MigrationParametersPackage.Literals.URI_MAPPING;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getSourceURI() {
+ return sourceURI;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSourceURI(String newSourceURI) {
+ String oldSourceURI = sourceURI;
+ sourceURI = newSourceURI;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.URI_MAPPING__SOURCE_URI, oldSourceURI, sourceURI));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getTargetURI() {
+ return targetURI;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setTargetURI(String newTargetURI) {
+ String oldTargetURI = targetURI;
+ targetURI = newTargetURI;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, MigrationParametersPackage.URI_MAPPING__TARGET_URI, oldTargetURI, targetURI));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case MigrationParametersPackage.URI_MAPPING__SOURCE_URI:
+ return getSourceURI();
+ case MigrationParametersPackage.URI_MAPPING__TARGET_URI:
+ return getTargetURI();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case MigrationParametersPackage.URI_MAPPING__SOURCE_URI:
+ setSourceURI((String)newValue);
+ return;
+ case MigrationParametersPackage.URI_MAPPING__TARGET_URI:
+ setTargetURI((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.URI_MAPPING__SOURCE_URI:
+ setSourceURI(SOURCE_URI_EDEFAULT);
+ return;
+ case MigrationParametersPackage.URI_MAPPING__TARGET_URI:
+ setTargetURI(TARGET_URI_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case MigrationParametersPackage.URI_MAPPING__SOURCE_URI:
+ return SOURCE_URI_EDEFAULT == null ? sourceURI != null : !SOURCE_URI_EDEFAULT.equals(sourceURI);
+ case MigrationParametersPackage.URI_MAPPING__TARGET_URI:
+ return TARGET_URI_EDEFAULT == null ? targetURI != null : !TARGET_URI_EDEFAULT.equals(targetURI);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (sourceURI: "); //$NON-NLS-1$
+ result.append(sourceURI);
+ result.append(", targetURI: "); //$NON-NLS-1$
+ result.append(targetURI);
+ result.append(')');
+ return result.toString();
+ }
+
+} //URIMappingImpl
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersAdapterFactory.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersAdapterFactory.java
new file mode 100755
index 0000000..27f7270
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersAdapterFactory.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage
+ * @generated
+ */
+public class MigrationParametersAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static MigrationParametersPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationParametersAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = MigrationParametersPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MigrationParametersSwitch<Adapter> modelSwitch =
+ new MigrationParametersSwitch<Adapter>() {
+ @Override
+ public Adapter caseAdvancedConfig(AdvancedConfig object) {
+ return createAdvancedConfigAdapter();
+ }
+ @Override
+ public Adapter caseThreadConfig(ThreadConfig object) {
+ return createThreadConfigAdapter();
+ }
+ @Override
+ public Adapter caseMappingParameters(MappingParameters object) {
+ return createMappingParametersAdapter();
+ }
+ @Override
+ public Adapter caseURIMapping(URIMapping object) {
+ return createURIMappingAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig <em>Advanced Config</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig
+ * @generated
+ */
+ public Adapter createAdvancedConfigAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig <em>Thread Config</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig
+ * @generated
+ */
+ public Adapter createThreadConfigAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters <em>Mapping Parameters</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters
+ * @generated
+ */
+ public Adapter createMappingParametersAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping <em>URI Mapping</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping
+ * @generated
+ */
+ public Adapter createURIMappingAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //MigrationParametersAdapterFactory
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersSwitch.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersSwitch.java
new file mode 100755
index 0000000..a39b580
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src-gen/org/eclipse/papyrus/interoperability/common/MigrationParameters/util/MigrationParametersSwitch.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
+ *
+ */
+package org.eclipse.papyrus.interoperability.common.MigrationParameters.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersPackage
+ * @generated
+ */
+public class MigrationParametersSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static MigrationParametersPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MigrationParametersSwitch() {
+ if (modelPackage == null) {
+ modelPackage = MigrationParametersPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case MigrationParametersPackage.ADVANCED_CONFIG: {
+ AdvancedConfig advancedConfig = (AdvancedConfig)theEObject;
+ T result = caseAdvancedConfig(advancedConfig);
+ if (result == null) result = caseThreadConfig(advancedConfig);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case MigrationParametersPackage.THREAD_CONFIG: {
+ ThreadConfig threadConfig = (ThreadConfig)theEObject;
+ T result = caseThreadConfig(threadConfig);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case MigrationParametersPackage.MAPPING_PARAMETERS: {
+ MappingParameters mappingParameters = (MappingParameters)theEObject;
+ T result = caseMappingParameters(mappingParameters);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case MigrationParametersPackage.URI_MAPPING: {
+ URIMapping uriMapping = (URIMapping)theEObject;
+ T result = caseURIMapping(uriMapping);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Advanced Config</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Advanced Config</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAdvancedConfig(AdvancedConfig object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Thread Config</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Thread Config</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseThreadConfig(ThreadConfig object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Mapping Parameters</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Mapping Parameters</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMappingParameters(MappingParameters object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>URI Mapping</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>URI Mapping</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseURIMapping(URIMapping object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //MigrationParametersSwitch
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/Activator.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/Activator.java
new file mode 100644
index 0000000..bf03480
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/Activator.java
@@ -0,0 +1,54 @@
+package org.eclipse.papyrus.interoperability.common;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.interoperability.common"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ExecutorsPool.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ExecutorsPool.java
new file mode 100644
index 0000000..9934bca
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ExecutorsPool.java
@@ -0,0 +1,173 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.concurrent;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.m2m.qvt.oml.TransformationExecutor;
+import org.eclipse.papyrus.interoperability.common.Activator;
+
+
+/**
+ * Thread safe pool of Transformation Executors
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class ExecutorsPool {
+
+ // The cache can be used to increase performances (For small and medium sized models, most of the execution time is spent in loading the transformation)
+ // Warning: using the cache prevents dynamic transformations (i.e. it should not be used in Debug Mode)
+ protected boolean cacheTransformations = true;
+
+ private final int poolSize;
+
+ public ExecutorsPool(int size) {
+ this.poolSize = size;
+ }
+
+ private final Map<URI, Pool> executors = new HashMap<URI, Pool>();
+
+ private final Map<TransformationExecutor, URI> executorsURIs = new HashMap<TransformationExecutor, URI>();
+
+ /**
+ * Gets an available executor for the given transformation URI. Creates it if needed,
+ * and we haven't reached the poolSize for this transformationURI
+ *
+ * Transformation executor needs to be released after usage
+ *
+ * @param transformationURI
+ * @return
+ */
+ public TransformationExecutor getExecutor(URI transformationURI) {
+ if (!cacheTransformations) {
+ return new Pool(transformationURI).createExecutor();
+ }
+
+ synchronized (executors) {
+ if (!executors.containsKey(transformationURI)) {
+ executors.put(transformationURI, new Pool(transformationURI));
+ }
+ }
+
+ Pool pool = executors.get(transformationURI);
+ return pool.getExecutor();
+ }
+
+ /**
+ * Preloads all instances for the given URI
+ *
+ * @param transformationURI
+ * @return
+ */
+ public synchronized IStatus preLoad(URI transformationURI) {
+ // Don't preload if there is no cache
+ if (!cacheTransformations) {
+ return Status.OK_STATUS;
+ }
+
+ synchronized (this) {
+ if (!executors.containsKey(transformationURI)) {
+ Pool pool = new Pool(transformationURI);
+ executors.put(transformationURI, pool);
+ pool.preload();
+ }
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ /**
+ * Releases a transformation executor after usage
+ *
+ * @param executor
+ */
+ public void releaseExecutor(TransformationExecutor executor) {
+ if (!cacheTransformations) {
+ return;
+ }
+ URI transformationURI = executorsURIs.get(executor);
+ Pool pool = executors.get(transformationURI);
+ pool.release(executor);
+ }
+
+ private class Pool {
+ private List<TransformationExecutor> allExecutors = new LinkedList<TransformationExecutor>();
+
+ private List<TransformationExecutor> busyExecutors = new LinkedList<TransformationExecutor>();
+
+ private final URI transformationURI;
+
+ public Pool(URI transformationURI) {
+ this.transformationURI = transformationURI;
+ }
+
+ public void preload() {
+ for (int i = 0; i < poolSize; i++) {
+ createExecutor();
+ }
+ busyExecutors.clear();
+ }
+
+ public synchronized void release(TransformationExecutor executor) {
+ busyExecutors.remove(executor);
+ }
+
+ public TransformationExecutor getExecutor() {
+ while (true) {
+ synchronized (this) {
+ for (TransformationExecutor executor : allExecutors) {
+ if (isAvailable(executor)) {
+ return getExecutor(executor);
+ }
+ }
+
+ if (allExecutors.size() < poolSize) {
+ return createExecutor();
+ }
+ }
+
+ try {
+ Thread.sleep(25);
+ } catch (InterruptedException ex) {
+ Activator.log.error(ex);
+ return null;
+ }
+ }
+ }
+
+ private boolean isAvailable(TransformationExecutor executor) {
+ return !busyExecutors.contains(executor);
+ }
+
+ private TransformationExecutor getExecutor(TransformationExecutor executor) {
+ busyExecutors.add(executor);
+ return executor;
+ }
+
+ private TransformationExecutor createExecutor() {
+ TransformationExecutor executor = new TransformationExecutor(transformationURI);
+ executor.loadTransformation();
+ allExecutors.add(executor);
+ executorsURIs.put(executor, transformationURI);
+ return getExecutor(executor);
+ }
+
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ResourceAccessHelper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ResourceAccessHelper.java
new file mode 100644
index 0000000..af8089e
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ResourceAccessHelper.java
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.concurrent;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * This class is used to synchronize access to physical EMF Resources (Load/Save)
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class ResourceAccessHelper {
+ public static ResourceAccessHelper INSTANCE = new ResourceAccessHelper();
+
+ private final Map<URI, ReadWriteLock> locks = new HashMap<URI, ReadWriteLock>();
+
+ private ResourceAccessHelper() {
+ // Singleton
+ }
+
+ private Lock getSaveLock(Resource resource) {
+ ReadWriteLock lock = getLock(resource);
+ return lock.writeLock();
+ }
+
+ private Lock getLoadLoack(Resource resource) {
+ ReadWriteLock lock = getLock(resource);
+ return lock.readLock();
+ }
+
+ /**
+ * Saves a resource in a thread-safe way. Ensures that the underlying physical
+ * resource is not being read during the save action
+ *
+ * @param resource
+ * @param options
+ * @throws IOException
+ */
+ public void saveResource(Resource resource, Map<?, ?> options) throws IOException {
+ Lock lock = getSaveLock(resource);
+ lock.lock();
+ try {
+ resource.save(options);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ /**
+ * Loads a resource in a thread-safe way. Ensures that the underlying physical
+ * resource is not being saved during the load action. Concurrent read operations
+ * may still happen
+ *
+ * @param resource
+ * @param options
+ * @throws IOException
+ */
+ public void loadResource(Resource resource, Map<?, ?> options) throws IOException {
+ Lock lock = getLoadLoack(resource);
+ lock.lock();
+ try {
+ resource.load(options);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+
+
+ private ReadWriteLock getLock(Resource resource) {
+ URI uri = resource.getURI();
+ if (uri == null) {
+ return null;
+ }
+
+ synchronized (this) {
+ if (!locks.containsKey(uri)) {
+ locks.put(uri, new ReentrantReadWriteLock());
+ }
+
+ return locks.get(uri);
+ }
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeModelSet.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeModelSet.java
new file mode 100644
index 0000000..18a56dc
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeModelSet.java
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.concurrent;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+
+/**
+ * A ModelSet with thread-safe load operations
+ *
+ * Note: since Save operations are delegated to IModels, save operations are <strong>thread-safe</strong>.
+ * Resources of this ResourceSet should be saved by delegating to {@link ResourceAccessHelper#saveResource(Resource, Map<?, ?>)}
+ *
+ * @see {@link ResourceAccessHelper}
+ */
+public class ThreadSafeModelSet extends DiResourceSet {
+ @Override
+ protected void demandLoad(Resource resource) throws IOException {
+ Resource resourceWithOptions = setResourceOptions(resource);
+ ResourceAccessHelper.INSTANCE.loadResource(resourceWithOptions, getLoadOptions());
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeResourceSet.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeResourceSet.java
new file mode 100644
index 0000000..1d26fe8
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/concurrent/ThreadSafeResourceSet.java
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.concurrent;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+/**
+ * A ResourceSet with thread-safe Load operations
+ *
+ * Resources should be saved using {@link ResourceAccessHelper#saveResource(Resource, java.util.Map)}
+ *
+ * @author Camille Letavernier
+ *
+ * @see {@link ResourceAccessHelper}
+ */
+public class ThreadSafeResourceSet extends ResourceSetImpl {
+ @Override
+ protected void demandLoad(Resource resource) throws IOException {
+ ResourceAccessHelper.INSTANCE.loadResource(resource, getLoadOptions());
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/handler/AbstractMigrationHandler.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/handler/AbstractMigrationHandler.java
new file mode 100644
index 0000000..dc86dd3
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/handler/AbstractMigrationHandler.java
@@ -0,0 +1,212 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.handler;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.infra.properties.ui.creation.PropertyEditorFactory;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.transformation.IImportTransformationLauncher;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * @author VL222926
+ * Abstract handler for Migration action
+ */
+public abstract class AbstractMigrationHandler extends AbstractHandler {
+
+ /**
+ * the extensions of the files to import
+ */
+ private Set<String> extensionOfFilesToImport;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param acceptedFileExtension
+ * the extension of the files to import
+ */
+ protected AbstractMigrationHandler(final Set<String> acceptedFileExtension) {
+ this.extensionOfFilesToImport = acceptedFileExtension;
+ }
+
+ /**
+ *
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ *
+ * @param event
+ * @return
+ * @throws ExecutionException
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (selection == null || selection.isEmpty()) {
+ return null;
+ }
+
+ Set<IFile> filesToImport = new HashSet<IFile>();
+
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+ Iterator<?> selectionIterator = structuredSelection.iterator();
+ while (selectionIterator.hasNext()) {
+ Object selectedElement = selectionIterator.next();
+ if (selectedElement instanceof IAdaptable) {
+ IFile selectedFile = (IFile) ((IAdaptable) selectedElement).getAdapter(IFile.class);
+ if (selectedFile == null) {
+ continue;
+ }
+
+ String fileExtension = selectedFile.getFileExtension();
+ if (extensionOfFilesToImport.contains(fileExtension)) {
+ filesToImport.add(selectedFile);
+ }
+ }
+ }
+ }
+
+ if (filesToImport.isEmpty()) {
+ StringBuilder builder = new StringBuilder();
+ Iterator<String> iter = extensionOfFilesToImport.iterator();
+ while (iter.hasNext()) {
+ builder.append("*.");
+ builder.append(iter.next());
+ if (iter.hasNext()) {
+ builder.append(", ");
+ }
+ }
+ Activator.log.warn(NLS.bind("The selection doesn't contain any file with one of these extensions: {0}", builder.toString()));
+ } else {
+ importFiles(filesToImport, event);
+ }
+
+ return null;
+ }
+
+
+ public void importFiles(Set<IFile> selectedFiles, ExecutionEvent event) {
+ ThreadConfig config = getTransformationParameters(event);
+
+ if (config == null) {
+ return;
+ }
+
+
+ // The Event's control is (or may be) a Context Menu, which will be disposed soon: retrieve its own parent instead (The main Window), if it has one.
+ Control baseControl = HandlerUtil.getActiveShell(event);
+ if (baseControl != null && !baseControl.isDisposed() && baseControl.getParent() != null) {
+ baseControl = baseControl.getParent();
+ }
+
+ // On some platforms, it seems that the ActiveShell (Context Menu) may already be disposed (Bug 455011). Use the Active Workbench Window directly
+ if (baseControl == null || baseControl.isDisposed()) {
+ baseControl = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ }
+
+ runTransformation(config, baseControl, selectedFiles);
+
+ }
+
+ protected void runTransformation(final ThreadConfig config, final Control baseControl, final Set<IFile> selectedFiles) {
+ List<URI> urisToImport = new LinkedList<URI>();
+
+ for (IFile selectedFile : selectedFiles) {
+ URI uri = URI.createPlatformResourceURI(selectedFile.getFullPath().toString(), true);
+ urisToImport.add(uri);
+ }
+ runTransformation(config, baseControl, urisToImport);
+ }
+
+ protected void runTransformation(final ThreadConfig config, final Control baseControl, final List<URI> urisToImport) {
+ IImportTransformationLauncher launcher = createImportTransformationLauncher(config, baseControl);
+ launcher.run(urisToImport);
+ }
+
+
+ /**
+ *
+ * @param config
+ * the configuration used to launch the import
+ * @param baseControl
+ *
+ * @return
+ * the launcher of the import transformation
+ */
+ protected abstract IImportTransformationLauncher createImportTransformationLauncher(final ThreadConfig config, final Control baseControl);
+
+ public ThreadConfig getTransformationParameters(ExecutionEvent event) {
+ ThreadConfig config = createConfigParameters();
+
+ Shell activeShell = HandlerUtil.getActiveShell(event);
+
+ final AtomicBoolean okPressed = new AtomicBoolean(true);
+ PropertyEditorFactory factory = new PropertyEditorFactory() {
+ @Override
+ public String getEditionDialogTitle(Object objectToEdit) {
+ return "Transformation parameters";
+ }
+
+ @Override
+ protected void handleEditCancelled(Control widget, Object source) {
+ okPressed.set(false);
+ super.handleEditCancelled(widget, source);
+ }
+ };
+
+ Object result = factory.edit(activeShell, config);
+
+ if (!okPressed.get()) {
+ return null;
+ }
+
+ // Result can be null, the source config, or a new config
+ if (result instanceof ThreadConfig) {
+ config = (ThreadConfig) result;
+ }
+
+ return config;
+ }
+
+ /**
+ *
+ * @return
+ * This method return a new instance of the configuration to use for the migration
+ */
+ protected ThreadConfig createConfigParameters() {
+ return MigrationParametersFactory.eINSTANCE.createThreadConfig();
+ }
+
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/JobWrapper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/JobWrapper.java
new file mode 100644
index 0000000..1a1354e
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/JobWrapper.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal;
+
+import org.eclipse.core.runtime.jobs.Job;
+
+public class JobWrapper implements Schedulable {
+
+ protected final Job job;
+
+ public JobWrapper(Job job) {
+ this.job = job;
+ }
+
+ @Override
+ public void start() {
+ job.schedule();
+ }
+
+ @Override
+ public boolean isComplete() {
+ return job.getResult() != null;
+ }
+
+ @Override
+ public String getName() {
+ return job.getName();
+ }
+
+ @Override
+ public void cancel() {
+ job.cancel();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Schedulable.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Schedulable.java
new file mode 100644
index 0000000..4c08b80
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Schedulable.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal;
+
+/**
+ * Minimal API for schedulable tasks
+ *
+ * @author Camille Letavernier
+ *
+ */
+public interface Schedulable {
+ /**
+ *
+ * @return true if the task is complete
+ */
+ public boolean isComplete();
+
+ /**
+ *
+ * @return the label of the tasks
+ */
+ public String getName();
+
+ /**
+ * Starts the task. The implementation should start in a separate thread (e.g. via a Job)
+ */
+ public void start();
+
+ /**
+ * Requests the task to cancel. The task may not be canceled immediately; invoker should wait
+ * for isComplete() to return true after invoking this method
+ */
+ public void cancel();
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Scheduler.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Scheduler.java
new file mode 100644
index 0000000..3367d92
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/Scheduler.java
@@ -0,0 +1,128 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.papyrus.interoperability.common.Activator;
+
+
+/**
+ * Executes a number of parallel tasks on the specified (maximum) amount of threads
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class Scheduler {
+
+ protected int maxThreads;
+
+ public Scheduler(int maxThreads) {
+ this.maxThreads = Math.max(1, maxThreads);
+ }
+
+ public void schedule(IProgressMonitor monitor, List<? extends Schedulable> tasks) {
+
+ List<Schedulable> remainingTasks = new LinkedList<Schedulable>(tasks);
+ List<Schedulable> runningTasks = new LinkedList<Schedulable>();
+
+ while (!remainingTasks.isEmpty()) {
+ if (monitor.isCanceled()) {
+ monitor.subTask("Canceling remaining jobs...");
+ for (Schedulable task : runningTasks) {
+ task.cancel();
+ }
+ remainingTasks.clear(); // Don't start these transformations at all
+ // Keep waiting: the cancel operation is asynchronous, we still need to wait for the jobs to complete
+ }
+
+ // Schedule transformations if we have enough threads and they have not all been scheduled
+ while (runningTasks.size() < maxThreads && !remainingTasks.isEmpty()) {
+ final Schedulable task = remainingTasks.remove(0); // Get and remove
+ task.start();
+ runningTasks.add(task);
+ }
+
+ if (!runningTasks.isEmpty()) {
+ String waitFor = runningTasks.get(0).getName();
+ monitor.subTask("Waiting for Import " + waitFor + " to complete...");
+ }
+
+ // We can continue if at least one transformation is complete (Leaving a free Thread)
+ boolean canContinue = false;
+
+ Iterator<Schedulable> iterator = runningTasks.iterator();
+ while (iterator.hasNext()) {
+ Schedulable runningTask = iterator.next();
+ if (runningTask.isComplete()) {
+ canContinue = true;
+ iterator.remove();
+ monitor.worked(1);
+ }
+ }
+
+ if (!canContinue) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ex) {
+ Activator.log.error(ex);
+ }
+ }
+ }
+
+ // All transformations have been scheduled (But not necessarily completed): wait for all of them to complete
+ wait(runningTasks, monitor);
+ }
+
+
+ // Wait for all (remaining) import transformations to complete
+ protected void wait(List<Schedulable> tasks, IProgressMonitor monitor) {
+
+ // Transformations still running
+ List<Schedulable> runningTasks = new LinkedList<Schedulable>(tasks);
+
+ while (!runningTasks.isEmpty()) {
+ if (monitor.isCanceled()) {
+ monitor.subTask("Canceling remaining jobs...");
+ for (Schedulable task : runningTasks) {
+ task.cancel();
+ }
+ // Keep waiting: the cancel operation is asynchronous, we still need to wait for the jobs to complete
+ }
+
+ Iterator<Schedulable> iterator = runningTasks.iterator();
+ while (iterator.hasNext()) {
+ Schedulable task = iterator.next();
+ if (task.isComplete()) {
+ iterator.remove();
+ monitor.worked(1);
+ }
+ }
+
+ if (!runningTasks.isEmpty()) {
+ String waitFor = runningTasks.get(0).getName();
+ monitor.subTask("Waiting for " + waitFor + " to complete...");
+
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ex) {
+ Activator.log.error(ex);
+ return;
+ }
+ }
+ }
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/TransformationWrapper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/TransformationWrapper.java
new file mode 100644
index 0000000..4e536ef
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/TransformationWrapper.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal;
+
+import org.eclipse.papyrus.interoperability.common.transformation.IImportTransformation;
+
+public class TransformationWrapper implements Schedulable {
+
+ protected IImportTransformation transformation;
+
+ public TransformationWrapper(IImportTransformation transformation) {
+ this.transformation = transformation;
+ }
+
+ @Override
+ public boolean isComplete() {
+ return transformation.isComplete();
+ }
+
+ @Override
+ public String getName() {
+ return transformation.getModelName();
+ }
+
+ @Override
+ public void start() {
+ transformation.run(false);
+ }
+
+ @Override
+ public void cancel() {
+ transformation.cancel();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/extension/TransformationExtension.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/extension/TransformationExtension.java
new file mode 100644
index 0000000..04d1a22
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/extension/TransformationExtension.java
@@ -0,0 +1,91 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal.extension;
+
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.m2m.qvt.oml.ExecutionContext;
+import org.eclipse.papyrus.interoperability.common.concurrent.ExecutorsPool;
+import org.eclipse.papyrus.interoperability.common.transformation.IImportTransformation;
+
+
+/**
+ * Extension to the RSA-to-Papyrus model transformation
+ *
+ * Provisional API
+ *
+ * @author Camille Letavernier
+ *
+ */
+public interface TransformationExtension {
+ /**
+ * Invoked only once when the extension is loaded for the first time (Before any execution)
+ *
+ * @return
+ * The source EPackages required by this transformation (Typically source profile definitions)
+ */
+ public Set<EPackage> getAdditionalSourceEPackages();
+
+ /**
+ * The resource set used by the main transformation. Contains the source and target resources
+ *
+ * @param resourceSet
+ */
+ public void setResourceSet(ResourceSet resourceSet);
+
+ /**
+ * The ExecutorsPool used for manipulating parallel QVTo transformations
+ *
+ * @param executorsPool
+ */
+ public void setExecutorsPool(ExecutorsPool executorsPool);
+
+ /**
+ *
+ * @param importTransformation
+ */
+ public void setTransformation(IImportTransformation importTransformation);
+
+ /**
+ * Part of the transformation that is executed before the main transformation's semantics and graphics import
+ *
+ * @param context
+ * The QVTo execution context
+ * @param monitor
+ * The current progress monitor. The monitor is reused from the main transformation; only use subtask/worked methods
+ * @return
+ */
+ public IStatus executeBefore(ExecutionContext context, IProgressMonitor monitor);
+
+ /**
+ * Part of the transformation that is executed after both the semantics and graphics have been imported
+ *
+ * @param context
+ * The QVTo execution context
+ * @param monitor
+ * The current progress monitor. The monitor is reused from the main transformation; only use subtask/worked methods
+ * @return
+ */
+ public IStatus executeAfter(ExecutionContext context, IProgressMonitor monitor);
+
+ /**
+ * The number of work steps required by this transformation. Corresponds to the total number of worked() you can invoke in executeBefore/executeAfter
+ *
+ * @return
+ */
+ public int getNumberOfSteps();
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateFile.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateFile.java
new file mode 100644
index 0000000..87b562c
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateFile.java
@@ -0,0 +1,176 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.internal.utils;
+
+import java.io.BufferedReader;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.security.CodeSource;
+import java.security.ProtectionDomain;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+//TODO : must be moved into org.eclipse.papyrus.eclipse.project.editors refactored
+public class CreateFile {
+
+ public static IFile createFile(String filePath, IContainer container, String content)
+ throws Exception
+ {
+ IFile file = null;
+ if ((container instanceof IProject)) {
+ file = ((IProject) container).getFile(filePath);
+ } else if ((container instanceof IFolder)) {
+ file = ((IFolder) container).getFile(filePath);
+ } else {
+ throw new Exception("Cannot find the file " +
+ filePath +
+ " under " +
+ container.getName());
+ }
+ IContainer parent = file.getParent();
+ if ((parent instanceof IFolder)) {
+ mkdirs((IFolder) parent);
+ }
+ InputStream stream = new ByteArrayInputStream(content.getBytes(file.getCharset()));
+ if (file.exists()) {
+ file.setContents(stream, true, true, null);
+ } else {
+ file.create(stream, true, null);
+ }
+ stream.close();
+
+ return file;
+ }
+
+ public static void mkdirs(IFolder folder)
+ throws CoreException
+ {
+ if (!folder.exists())
+ {
+ if ((folder.getParent() instanceof IFolder)) {
+ mkdirs((IFolder) folder.getParent());
+ }
+ folder.create(true, true, null);
+ }
+ }
+
+ public static String getContents(String relativePath, String resource, Class clazz)
+ throws IOException
+ {
+ String resourcePath = relativePath + '/' + resource;
+ File sourcePrj = getSourceProject(clazz);
+
+
+ JarFile jar = null;
+ InputStream resourceStream;
+ if (sourcePrj.isFile())
+ {
+ jar = new JarFile(sourcePrj);
+ JarEntry resEntry = jar.getJarEntry(resourcePath);
+ resourceStream = jar.getInputStream(resEntry);
+ }
+ else
+ {
+ resourceStream = new FileInputStream(sourcePrj.getAbsolutePath() +
+ "/" +
+ resourcePath);
+ }
+ byte[] buffer = new byte[4096];
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ for (;;)
+ {
+ int read = resourceStream.read(buffer);
+ if (read == -1) {
+ break;
+ }
+ outputStream.write(buffer, 0, read);
+ }
+ outputStream.close();
+ resourceStream.close();
+ if (jar != null) {
+ jar.close();
+ }
+ return outputStream.toString("iso-8859-1");
+ }
+
+ private static File getSourceProject(Class clazz)
+ {
+ ProtectionDomain protectionDomain = clazz.getProtectionDomain();
+ CodeSource codeSource = protectionDomain.getCodeSource();
+ URL location = codeSource.getLocation();
+ File sourcePrj = new File(location.getFile());
+ return sourcePrj;
+ }
+
+ public static void appendContents(IFile pagesFile, String data)
+ throws IOException
+ {
+ File file = pagesFile.getLocation().toFile();
+ if (!file.exists()) {
+ file.createNewFile();
+ }
+ FileWriter fileWriter = new FileWriter(file, true);
+ BufferedWriter buffWriter = new BufferedWriter(fileWriter);
+ PrintWriter writer = new PrintWriter(buffWriter);
+ writer.println(data);
+ writer.close();
+ buffWriter.close();
+ fileWriter.close();
+ }
+
+ public static void replaceContents(IFile file, String template, String newContent)
+ throws CoreException, IOException
+ {
+ String content = getContents(file).replace(template, newContent);
+ InputStream stream = new ByteArrayInputStream(content.getBytes(file.getCharset()));
+ if (file.exists()) {
+ file.setContents(stream, true, true, new NullProgressMonitor());
+ }
+ stream.close();
+ }
+
+ public static String getContents(IFile iFile)
+ throws IOException
+ {
+ File file = iFile.getLocation().toFile();
+ FileInputStream stream = new FileInputStream(file);
+ StringBuffer contents = new StringBuffer();
+ BufferedReader br = new BufferedReader(new InputStreamReader(stream));
+ String line;
+ while ((line = br.readLine()) != null)
+ {
+ contents.append(line).append("\n");
+ }
+ br.close();
+ stream.close();
+ return contents.toString();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateProject.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateProject.java
new file mode 100644
index 0000000..402b486
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/internal/utils/CreateProject.java
@@ -0,0 +1,146 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.internal.utils;
+
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+
+//TODO : must be moved into org.eclipse.papyrus.eclipse.project.editors and probably refactored
+public class CreateProject {
+
+ protected String projectName;
+
+ protected IProject createdProject;
+
+ protected Collection<Object> inputFiles;
+
+ public CreateProject(Collection<Object> inputFiles) {
+ this.projectName = getProjectName();
+ this.inputFiles = inputFiles;
+
+ if (projectName != null) {
+ try {
+ this.createdProject = createProject();
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+
+
+ protected IProject createProject() throws Exception {
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IProject project = workspace.getRoot().getProject(projectName);
+
+ if (! project.exists()){
+ project.create(new NullProgressMonitor());
+ }
+
+ if (! project.isOpen()){
+ project.open(new NullProgressMonitor());
+ }
+
+ if (inputFiles != null && !inputFiles.isEmpty()) {
+ // create resource folder
+ createFolder("resources", project, inputFiles);
+ }
+
+ return project;
+ }
+
+ protected void createFolder(String folderName, IProject project, Collection<Object> inputFiles) throws Exception {
+ IFolder folder = project.getFolder(folderName);
+ folder.create(false, true, null);
+
+ List<Object> inputList = new ArrayList<Object>(inputFiles);
+ for (Object object : inputList) {
+ File file = ((File) object);
+ IFile linkedFile = folder.getFile(file.getName());
+ URI fileURI = file.toURI();
+ linkedFile.createLink(fileURI, IResource.NONE, null);
+ }
+
+ }
+
+ protected void createBuildProps(IProject project, List<String> srcFolders) throws Exception {
+ StringBuilder bpContent = new StringBuilder("source.. = ");
+
+ if (srcFolders != null && !srcFolders.isEmpty()) {
+ for (Iterator<String> iterator = srcFolders.iterator(); iterator.hasNext();)
+ {
+ bpContent.append(iterator.next()).append(File.separatorChar);
+ if (iterator.hasNext()) {
+ bpContent.append(",");
+ }
+ }
+ }
+
+ bpContent.append("\n");
+ bpContent.append("bin.includes = META-INF/,.\n");
+ CreateFile.createFile("build.properties", project, bpContent.toString());
+ }
+
+
+ public IProject getCreatedProject() {
+ return this.createdProject;
+ }
+
+ protected String getProjectName() {
+ String init_value = "project_" + System.currentTimeMillis();
+
+ Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+
+ InputDialog dialog = new InputDialog(activeShell, "Create Project", "Provide project name...", init_value, new IInputValidator() {
+ @Override
+ public String isValid(String newText)
+ {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ IProject[] projs = root.getProjects();
+ for (int i = 0; i < projs.length; i++) {
+ if (projs[i].getName().equalsIgnoreCase(newText)) {
+ return "This project already exists";
+ }
+ }
+
+ return null;
+ }
+ });
+
+ if (dialog.open() == Window.CANCEL) {
+ return null;
+ }
+
+ return dialog.getValue();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractDependencyAnalysisHelper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractDependencyAnalysisHelper.java
new file mode 100644
index 0000000..59f012d
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractDependencyAnalysisHelper.java
@@ -0,0 +1,345 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+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.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.AdvancedConfig;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+
+
+
+public abstract class AbstractDependencyAnalysisHelper implements IDependencyAnalysisHelper {
+
+ protected final ThreadConfig config;
+
+ protected final Set<String> softwareExtensions;
+
+ protected final String softwareProfileExtension;
+
+ // ResourceSet used to load and explore Static Libraries
+ // protected final ResourceSet localResourceSet = new ThreadSafeResourceSet();
+ protected final ResourceSet localResourceSet = new ResourceSetImpl();
+
+ // Store the broken URIs without trying to resolve them. We don't have enough information to resolve them during the first phase of the model import
+ // The Key is the resource URI, the value is the Set of each individual EObject Fragment (We need the EObject fragments to find potential matches)
+ protected final Map<URI, Set<String>> brokenUris = new HashMap<URI, Set<String>>();
+
+ protected final Set<URI> brokenProfiles = new HashSet<URI>();
+
+ public AbstractDependencyAnalysisHelper(ThreadConfig config, Set<String> softwareExtensions, String softwareProfileExtension) {
+ this.config = config;
+ this.softwareExtensions = softwareExtensions;
+ this.softwareProfileExtension = softwareProfileExtension;
+
+ configureResourceSet();
+ }
+
+ protected void configureResourceSet() {
+ localResourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, true);
+ localResourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, true);
+ localResourceSet.getLoadOptions().put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+ localResourceSet.getLoadOptions().put(XMLResource.OPTION_USE_PACKAGE_NS_URI_AS_LOCATION, Boolean.FALSE);
+ }
+
+ protected void unloadResourceSet() {
+ EMFHelper.unload(localResourceSet);
+ }
+
+ public void computeURIMappings(Collection<Resource> sourceModels) {
+ for (Resource sourceModel : sourceModels) {
+ doComputeURIMappings(sourceModel);
+ }
+ }
+
+ public synchronized void resolveAllMappings(Map<URI, URI> urisToReplace, Map<URI, URI> profileUrisToReplace) {
+ if (config instanceof AdvancedConfig) {
+ if (((AdvancedConfig) config).getMappingParameters() == null) {
+ ((AdvancedConfig) config).setMappingParameters(MigrationParametersFactory.eINSTANCE.createMappingParameters());
+ }
+
+ try {
+ for (Entry<URI, Set<String>> resourceToRepair : brokenUris.entrySet()) {
+
+ // Already known mapping
+ if (urisToReplace.containsKey(resourceToRepair.getKey())) {
+ continue;
+ }
+ findMatch(resourceToRepair.getKey(), resourceToRepair.getValue());
+ }
+
+ for (URI profileDefinition : brokenProfiles) {
+
+ // Already known mapping
+ if (profileUrisToReplace.containsKey(profileDefinition.trimFragment().trimQuery())) {
+ continue;
+ }
+ findMatch(profileDefinition);
+ }
+ } finally {
+ unloadResourceSet();
+ brokenUris.clear();
+ brokenProfiles.clear();
+ }
+ }
+ }
+
+ protected void findMatch(URI resourceURI, Set<String> fragments) {
+ if (config instanceof AdvancedConfig) {
+ URIMapping mapping = null;
+
+ for (String fragment : fragments) {
+ URI eObjectURI = resourceURI.appendFragment(fragment);
+ mapping = findExistingMapping(eObjectURI, localResourceSet);
+
+ if (mapping != null) {
+ break;
+ }
+ }
+
+ if (mapping == null) {
+ mapping = MigrationParametersFactory.eINSTANCE.createURIMapping();
+ mapping.setSourceURI(resourceURI.toString());
+ mapping.setTargetURI(mapping.getSourceURI());
+ }
+
+ ((AdvancedConfig) config).getMappingParameters().getUriMappings().add(mapping);
+ }
+ }
+
+ protected void findMatch(URI profileDefinitionURI) {
+ if (this.config instanceof AdvancedConfig) {
+ URIMapping match = findExistingProfileMapping(profileDefinitionURI, localResourceSet);
+
+ if (match == null) {
+ match = MigrationParametersFactory.eINSTANCE.createURIMapping();
+ match.setSourceURI(profileDefinitionURI.trimFragment().trimQuery().toString());
+ match.setTargetURI(match.getSourceURI());
+ }
+
+ ((AdvancedConfig) config).getMappingParameters().getProfileUriMappings().add(match);
+ }
+ }
+
+ protected void doComputeURIMappings(Resource sourceModel) {
+ doComputeProfileURIMappings(sourceModel);
+
+ TreeIterator<EObject> resourceContents = sourceModel.getAllContents();
+ ResourceSet resourceSet = sourceModel.getResourceSet();
+
+ while (resourceContents.hasNext()) {
+ EObject next = resourceContents.next();
+ for (EReference reference : next.eClass().getEAllReferences()) {
+ if (reference.isContainer() || reference.isContainment() || reference.isDerived() || reference.isTransient()) {
+ continue;
+ }
+
+ Object value = next.eGet(reference, false);
+ if (value instanceof EObject) {
+ handleURIMapping((EObject) value, resourceSet);
+ } else if (value instanceof Collection<?>) {
+ for (Object element : (Collection<?>) value) {
+ if (element instanceof EObject) {
+ handleURIMapping((EObject) element, resourceSet);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ protected void doComputeProfileURIMappings(Resource sourceModel) {
+ ResourceSet resourceSet = sourceModel.getResourceSet();
+
+ for (EObject rootObject : sourceModel.getContents()) {
+ if (isInvalidStereotypeApplication(rootObject)) {
+ handleProfileURIMapping(rootObject, resourceSet);
+ }
+ }
+ }
+
+ protected abstract boolean isInvalidStereotypeApplication(EObject eObject);
+
+ protected boolean isSoftwareModelElement(EObject eObject) {
+ return isSoftwareModelElement(EcoreUtil.getURI(eObject));
+ }
+
+ protected boolean isSoftwareModelElement(URI objectURI) {
+ String fileExtension = objectURI.fileExtension();
+ return softwareExtensions.contains(fileExtension) || softwareProfileExtension.equals(fileExtension);
+ }
+
+
+ protected synchronized Set<String> getFragments(URI resourceURI) {
+ if (!brokenUris.containsKey(resourceURI)) {
+ brokenUris.put(resourceURI, new HashSet<String>());
+ }
+
+ return brokenUris.get(resourceURI);
+ }
+
+ protected synchronized void handleBrokenReference(EObject proxy) {
+ URI proxyURI = EcoreUtil.getURI(proxy);
+ URI resourceURI = proxyURI.trimFragment().trimQuery();
+
+ String fragment = proxyURI.fragment();
+ Set<String> fragments = getFragments(resourceURI);
+ fragments.add(fragment);
+ }
+
+ protected synchronized void addBrokenProfileDefinition(URI packageURI) {
+ brokenProfiles.add(packageURI);
+ }
+
+
+ protected void handleProfileURIMapping(EObject stereotypeApplication, ResourceSet resourceSet) {
+
+ EPackage profileDefinition = stereotypeApplication.eClass().getEPackage();
+ URI packageURI = EcoreUtil.getURI(profileDefinition);
+ if (packageURI.trimFragment().isEmpty()) {
+ packageURI = URI.createURI(profileDefinition.getNsURI());
+ }
+ addBrokenProfileDefinition(packageURI);
+
+ }
+
+ protected void handleURIMapping(EObject eObject, ResourceSet resourceSet) {
+
+ if (isSoftwareModelElement(eObject)) {
+ handleBrokenReference(eObject);
+ return;
+ }
+
+ if (eObject.eIsProxy()) {
+ eObject = EcoreUtil.resolve(eObject, resourceSet);
+ if (eObject.eIsProxy()) {
+ handleBrokenReference(eObject);
+ return;
+ }
+ }
+
+ }
+
+ protected URIMapping findExistingProfileMapping(URI profileDefinitionURI, ResourceSet resourceSet) {
+ throw new UnsupportedOperationException(); // TODO I don't know how to implements it for Rpy Import
+ }
+
+ protected boolean isPathFragment(URI proxyURI) {
+ String uriFragment = proxyURI.fragment();
+
+ return uriFragment != null && uriFragment.charAt(0) == '/';
+ }
+
+ protected URIMapping findExistingMapping(URI proxyURI, ResourceSet resourceSet) {
+ throw new UnsupportedOperationException();// TODO required for RSA, but I don't know yet how to implements if for Rpy Import
+ }
+
+ /** Propagates the URI Mappings to all duplicates */
+ public void propagateURIMappings(List<URIMapping> allMappings, MappingParameters result) {
+ for (URIMapping mapping : allMappings) {
+ for (URIMapping uriMapping : result.getUriMappings()) {
+ if (uriMapping.getSourceURI().equals(mapping.getSourceURI())) {
+ uriMapping.setTargetURI(mapping.getTargetURI());
+ }
+ }
+
+ for (URIMapping profileURIMapping : result.getProfileUriMappings()) {
+ if (profileURIMapping.getSourceURI().equals(mapping.getSourceURI())) {
+ profileURIMapping.setTargetURI(mapping.getTargetURI());
+ }
+ }
+ }
+ }
+
+ public List<URIMapping> flattenURIMappings(MappingParameters result) {
+ List<URIMapping> allMappings = new LinkedList<URIMapping>();
+ allMappings.addAll(result.getUriMappings());
+ allMappings.addAll(result.getProfileUriMappings());
+
+ removeDuplicates(allMappings);
+
+ return allMappings;
+ }
+
+ /**
+ * Remove duplicate mappings. Mappings are duplicate if they have the same SourceURI.
+ * Less specific mappings will be discarded (Usually, the ones with the same Source and Target URI)
+ */
+ protected void removeDuplicates(List<URIMapping> allMappings) {
+ List<URIMapping> mappingsCopy = new LinkedList<URIMapping>(allMappings);
+
+ for (URIMapping mapping : mappingsCopy) {
+ for (URIMapping m : allMappings) {
+ if (m == mapping) {
+ continue;
+ }
+
+ // This is a duplicate
+ if (mapping.getSourceURI().equals(m.getSourceURI())) {
+ // If both mappings are still present, remove one of them
+ if (allMappings.contains(mapping) && allMappings.contains(m)) {
+ URIMapping mappingToRemove = findLessSpecificMapping(mapping, m);
+
+ allMappings.remove(mappingToRemove);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * If 2 mappings have the same sourceURI but different targetURI, returns the less pertinent one
+ * (Usually, the one with the same Source and Target)
+ *
+ * @param mapping1
+ * @param mapping2
+ * @return
+ */
+ protected URIMapping findLessSpecificMapping(URIMapping mapping1, URIMapping mapping2) {
+ if (!isUsefulMapping(mapping1)) {
+ return mapping1;
+ }
+
+ return mapping2;
+ }
+
+ protected boolean isUsefulMapping(URIMapping mapping) {
+ if (mapping.getTargetURI() == null || "".equals(mapping.getTargetURI()) || mapping.getTargetURI().equals(mapping.getSourceURI())) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java
new file mode 100644
index 0000000..332b6a4
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java
@@ -0,0 +1,821 @@
+/*****************************************************************************
+ * Copyright (c) 2013, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bugs 496439, 496299
+ * Vincent Lorenzo - bug 496176
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+import org.eclipse.gmf.runtime.emf.core.resources.GMFResource;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.m2m.qvt.oml.BasicModelExtent;
+import org.eclipse.m2m.qvt.oml.ExecutionContext;
+import org.eclipse.m2m.qvt.oml.ExecutionContextImpl;
+import org.eclipse.m2m.qvt.oml.ExecutionDiagnostic;
+import org.eclipse.m2m.qvt.oml.ModelExtent;
+import org.eclipse.m2m.qvt.oml.TransformationExecutor;
+import org.eclipse.m2m.qvt.oml.util.ISessionData;
+import org.eclipse.m2m.qvt.oml.util.Trace;
+import org.eclipse.m2m.qvt.oml.util.WriterLog;
+import org.eclipse.papyrus.infra.emf.resource.ShardResourceHelper;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.concurrent.ExecutorsPool;
+import org.eclipse.papyrus.interoperability.common.internal.extension.TransformationExtension;
+import org.eclipse.papyrus.m2m.qvto.TraceHelper;
+import org.eclipse.papyrus.m2m.qvto.TransformationUI;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.uml2.common.util.CacheAdapter;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Extension;
+import org.eclipse.uml2.uml.resource.UMLResource;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * Executes a single import-to-Papyrus transformation
+ *
+ * @author Vincent Lorenzo
+ *
+ */
+public abstract class AbstractImportTransformation implements IImportTransformation {
+ /** For debug purpose */
+ protected static boolean DEBUG = true;
+
+ // SourceURI is the input
+ protected final URI sourceURI;
+
+ // targetURI is computed during the transformation
+ protected URI targetURI;
+
+ protected ModelExtent outUML, outNotation, outSashModel, inParameters, inPapyrusProfiles, sysML11Profile;
+
+ protected MigrationResourceSet resourceSet;
+
+ protected Job job;
+
+ protected Resource umlResource;
+
+ protected ThreadConfig parameters;
+
+ protected boolean complete = false;
+
+ // For logging purpose (Bug 455001)
+ // Starts when the job starts; ends when the job returns
+ /** Execution time, in nano-seconds */
+ protected long executionTime = 0L;
+
+ /** Execution time of the initial model loading / ns */
+ protected long loadingTime = 0L;
+
+ /** Execution time for handling dangling references / ns */
+ protected long danglingRefTime = 0L;
+
+ /** Execution time for executing the UML-RT transformation / ns */
+ protected long importExtensionsTime = 0L;
+
+ /** Source URI to Target URI map (For Models/Libraries/Fragments) */
+ protected final Map<URI, URI> uriMappings = new HashMap<>();
+
+ /** Source URI to Target URI map (For Profiles) */
+ protected final Map<URI, URI> profileURIMappings = new HashMap<>();
+
+ protected List<Diagram> diagramsToDelete = new LinkedList<>();
+
+ protected static final ExecutorsPool executorsPool = new ExecutorsPool(2);
+
+ // TODO : check if sourceEPackages is required for Rpy and common tranfo
+ /** EPackages corresponding to source native profiles with specific support in the transformation */
+ protected static final Set<EPackage> sourceEPackages = new HashSet<>();
+
+ protected final IDependencyAnalysisHelper analysisHelper;
+
+
+ /** Extensions contributed via other plug-ins */
+ protected final List<TransformationExtension> extensions;
+
+ /** Accumulation of incremental update traces from each transformation. */
+ private Trace trace = Trace.createEmptyTrace();
+
+ /** Transformation execution context used for all transformation runs. */
+ protected ExecutionContext context;
+
+ public AbstractImportTransformation(URI sourceURI) {
+ this(sourceURI, MigrationParametersFactory.eINSTANCE.createThreadConfig(), null);
+ }
+
+ public AbstractImportTransformation(URI sourceURI, ThreadConfig config, IDependencyAnalysisHelper analysisHelper) {
+ Assert.isNotNull(sourceURI);
+ this.sourceURI = sourceURI;
+ this.parameters = config;
+ this.analysisHelper = analysisHelper;
+ this.extensions = getAllExtensions();
+ }
+
+ /**
+ * Instantiate all the extensions for a specific transformation
+ *
+ * @return
+ * A non-null (potentially empty) list of extensions
+ */
+ protected static List<TransformationExtension> getAllExtensions() {
+ // TODO probably RSA only or the extension point must be rewritten
+ return Collections.emptyList();
+ }
+
+
+
+
+
+ /**
+ * Executes the transformation
+ *
+ * The transformation will be executed asynchronously in a Job
+ */
+ public void run(final boolean isUserJob) {
+
+ job = new Job("Import " + getModelName()) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ long begin = System.nanoTime();
+ IStatus result = AbstractImportTransformation.this.run(monitor);
+ long end = System.nanoTime();
+ executionTime = end - begin;
+ return result;
+ }
+ };
+
+ job.setUser(isUserJob);
+
+ job.addJobChangeListener(new JobChangeAdapter() {
+
+ @Override
+ public void done(IJobChangeEvent event) {
+ complete = true;
+ if (isUserJob) {
+ if (event.getResult().getSeverity() == IStatus.OK) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), job.getName(), String.format("Model %s has been successfully imported", getModelName()));
+ }
+ });
+
+ } else if (event.getResult().getSeverity() == IStatus.CANCEL) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), job.getName(), String.format("Operation canceled: %s", getModelName()));
+ }
+ });
+ } else {
+ StatusManager.getManager().handle(event.getResult(), StatusManager.BLOCK);
+ }
+ }
+ }
+
+ });
+
+ job.schedule();
+ }
+
+ public void waitForCompletion() {
+ try {
+ job.join();
+ } catch (InterruptedException ex) {
+ Activator.log.error(ex);
+ }
+ }
+
+ public boolean isComplete() {
+ return complete;
+ }
+
+ public IStatus getStatus() {
+ if (job == null) { // If job hasn't been created, the operation has probably been canceled before the transformation is ran
+ return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, "Operation canceled");
+ }
+ return job.getResult();
+ }
+
+ public long getExecutionTime() {
+ return executionTime;
+ }
+
+ public long getLoadingTime() {
+ return loadingTime;
+ }
+
+ public long getHandleDanglingRefTime() {
+ return danglingRefTime;
+ }
+
+ public long getImportExtensionsTime() {
+ // TODO maybe only for RSa!
+ return importExtensionsTime;
+ }
+
+ public URI getTargetURI() {
+ return targetURI;
+ }
+
+
+ /**
+ * Initializes the resource set, and resolve all dependencies
+ */
+ protected void initResourceSet(IProgressMonitor monitor) {
+ resourceSet = new MigrationResourceSetImpl();
+ synchronized (UMLUtil.class) {
+ UMLUtil.init(resourceSet);
+ }
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, true);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, true);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_PACKAGE_NS_URI_AS_LOCATION, Boolean.FALSE);
+
+ monitor.subTask("Loading source model " + getModelName());
+
+ try {
+ resourceSet.getResource(sourceURI, true);
+ loadInPapyrusProfiles();
+ } catch (Exception ex) {
+ Activator.log.error("An error occurred while loading " + getModelName(), ex);
+ }
+ }
+
+ protected abstract int countSupportedElements(); // TODO
+
+
+ protected IStatus loadTransformations(IProgressMonitor monitor) {
+ for (URI transformationURI : getAllTransformationURIs()) {
+ executorsPool.preLoad(transformationURI);
+ monitor.worked(1);
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ // MemoryLeak: Don't rely on BasicDiagnostic.toIStatus
+ // The source Diagnostic contains references to the QVTo ModelExtents, referencing the Model elements (used in #extractPapyrusProfiles())
+ // When using the standard conversion, these references are not discarded
+ protected static IStatus createStatusFromDiagnostic(Diagnostic diagnostic) {
+ return new Status(diagnostic.getSeverity(),
+ diagnostic.getSource(),
+ diagnostic.getMessage(),
+ diagnostic.getException());
+ }
+
+
+
+
+ /**
+ * Actually runs the transformation (in the current thread)
+ *
+ * @param monitor
+ * @return The transformation IStatus
+ */
+ // TODO maybe more common stuff with RSA import here
+ // TODO : maybe in the interface if we keep it!
+ protected abstract IStatus run(final IProgressMonitor monitor);
+
+ /**
+ * Functional interface to abstract {@link TransformationExtension#executeBefore(ExecutionContext, IProgressMonitor)}
+ * and {@link TransformationExtension#executeAfter(ExecutionContext, IProgressMonitor)}
+ *
+ * @author Camille Letavernier
+ *
+ */
+ @FunctionalInterface
+ protected static interface ExtensionFunction {
+ public IStatus apply(TransformationExtension extension, ExecutionContext context, IProgressMonitor monitor);
+
+ /**
+ * Implements ExtensionFunction
+ *
+ * Delegates to {@link TransformationExtension#executeBefore(ExecutionContext, IProgressMonitor)}
+ */
+ public static IStatus executeBefore(TransformationExtension extension, ExecutionContext context, IProgressMonitor monitor) {
+ return extension.executeBefore(context, monitor);
+ }
+
+ /**
+ * Implements ExtensionFunction
+ *
+ * Delegates to {@link TransformationExtension#executeAfter(ExecutionContext, IProgressMonitor)}
+ */
+ public static IStatus executeAfter(TransformationExtension extension, ExecutionContext context, IProgressMonitor monitor) {
+ return extension.executeAfter(context, monitor);
+ }
+ }
+
+ protected void prepareExtensions() {
+ for (TransformationExtension extension : extensions) {
+ extension.setResourceSet(resourceSet);
+ extension.setExecutorsPool(executorsPool);
+ extension.setTransformation(this);
+ }
+ }
+
+ protected IStatus importExtensions(ExecutionContext context, IProgressMonitor monitor, ExtensionFunction function) {
+ List<IStatus> allResults = new ArrayList<>(extensions.size());
+ for (TransformationExtension extension : extensions) {
+ IStatus result = function.apply(extension, context, monitor);
+ allResults.add(result);
+ }
+
+ if (allResults.isEmpty()) {
+ return Status.OK_STATUS;
+ } else if (allResults.size() == 1) {
+ return allResults.get(0);
+ } else {
+ return aggregateStatus(allResults);
+ }
+ }
+
+ // FIXME implement properly
+ public static MultiStatus aggregateStatus(List<IStatus> statuses) {
+ return new MultiStatus(Activator.PLUGIN_ID, IStatus.OK, statuses.toArray(new IStatus[statuses.size()]), "", null);
+ }
+
+ /**
+ * @param resource
+ */
+ protected void cleanMetadataAnnotations(Resource resource) {
+ // Bug 471684: UML2.x to UML2.5 creates (invalid) Ecore Metadata EAnnotations, which then cause OCL validation to fail
+ // Remove these EAnnotations from the model to avoid side effects
+ Iterator<EObject> rootElementsIterator = resource.getContents().iterator();
+ while (rootElementsIterator.hasNext()) {
+ EObject root = rootElementsIterator.next();
+ if (root instanceof EAnnotation) {
+ EAnnotation annotation = (EAnnotation) root;
+ if (ExtendedMetaData.ANNOTATION_URI.equals(annotation.getSource())) {
+ rootElementsIterator.remove();
+ }
+ }
+ }
+ }
+
+ protected void handleDanglingURIs(Collection<Resource> resourcesToSave) {
+ if (analysisHelper != null) {
+ resourceSet.freeze();
+ try {
+ analysisHelper.computeURIMappings(resourcesToSave);
+ } finally {
+ resourceSet.unfreeze();
+ }
+ }
+ }
+
+ protected void unloadResourceSet(ResourceSet resourceSet) {
+ EMFHelper.unload(resourceSet);
+ }
+
+
+ protected TransformationExecutor getTransformation(URI transformationURI, IProgressMonitor monitor) throws DiagnosticException {
+ return executorsPool.getExecutor(transformationURI);
+ }
+
+ protected ModelExtent getInProfileDefinitions() {
+ //TODO : not used, useful for common and Rpy import
+ return null;
+ }
+
+ protected ModelExtent getInPapyrusProfiles() {
+ if (inPapyrusProfiles == null) {
+ loadInPapyrusProfiles();
+ }
+
+ return inPapyrusProfiles;
+ }
+
+
+ protected abstract Diagnostic loadInPapyrusProfiles(); // TODO : add path of profile are parameters ?
+
+ protected void checkResource(Resource resource) {
+ Assert.isNotNull(resource);
+ Assert.isTrue(!resource.getContents().isEmpty(), "The resource " + resource.getURI() + " is empty");
+ for (EObject rootElement : resource.getContents()) {
+ Assert.isTrue(!rootElement.eIsProxy());
+ }
+ }
+
+ protected abstract Resource createUMLResource(ResourceSet resourceSet, URI sourceResourceURI, URI targetResourceURI);
+
+ protected ModelExtent getInConfig() {
+ if (inParameters == null) {
+ inParameters = new BasicModelExtent(Collections.singletonList(parameters));
+ }
+ return inParameters;
+ }
+
+ protected Collection<Resource> handleFragments(Resource umlResource, Resource notationResource, Resource sashResource) {
+ Collection<Resource> result = new HashSet<>();
+ result.add(umlResource);
+ result.add(notationResource);
+ result.add(sashResource);
+
+ ResourceSet resourceSet = umlResource.getResourceSet();
+
+ Iterator<EObject> elementIterator = umlResource.getAllContents();
+
+ Set<Resource> fragmentResources = new HashSet<>();
+ List<EAnnotation> rsaAnnotations = new ArrayList<>();
+
+ while (elementIterator.hasNext()) {
+ EObject element = elementIterator.next();
+ Resource possibleFragment = element.eResource();
+ if ((possibleFragment != umlResource) && possibleFragment.getContents().contains(element)) { // Controlled/Fragment root
+ fragmentResources.add(possibleFragment);
+ }
+ // TODO commented because it is RSA import only
+ // collectRSAAnnotations(element, rsaAnnotations);
+ }
+
+ // Strip all RSA fragment annotations
+ rsaAnnotations.forEach(EcoreUtil::remove);
+
+ List<Resource> fragmentUMLResources = new LinkedList<>();
+
+ for (Resource fragmentResource : fragmentResources) {
+ URI papyrusFragmentURI = convertToPapyrus(fragmentResource.getURI(), UMLResource.FILE_EXTENSION);
+
+ uriMappings.put(fragmentResource.getURI(), papyrusFragmentURI);
+
+ Resource newResource = resourceSet.getResource(papyrusFragmentURI, false);
+ if (newResource == null) {
+ newResource = createUMLResource(resourceSet, fragmentResource.getURI(), papyrusFragmentURI);
+
+ fragmentUMLResources.add(newResource);
+
+ Resource fragmentNotationResource = new GMFResource(convertToPapyrus(papyrusFragmentURI, "notation"));
+ Resource fragmentDiResource = new XMIResourceImpl(convertToPapyrus(papyrusFragmentURI, "di"));
+
+ result.add(fragmentNotationResource);
+ result.add(fragmentDiResource);
+
+ resourceSet.getResources().add(fragmentNotationResource);
+ resourceSet.getResources().add(fragmentDiResource);
+ }
+
+ newResource.getContents().addAll(fragmentResource.getContents());
+
+ // Make it a Papyrus controlled unit of the "shard" variety
+ try (ShardResourceHelper shard = new ShardResourceHelper(newResource)) {
+ shard.setShard(true);
+ }
+
+ result.add(newResource);
+ }
+
+ deleteSourceStereotypes(fragmentResources);
+
+ List<EObject> importedElements = new LinkedList<>(notationResource.getContents());
+ for (EObject notationElement : importedElements) {
+ if (notationElement instanceof Diagram) {
+ EObject semanticElement = ((Diagram) notationElement).getElement();
+ if (semanticElement.eResource() != umlResource && semanticElement.eResource() != null) {
+
+ URI notationFragmentURI = convertToPapyrus(semanticElement.eResource().getURI(), "notation");
+
+ Resource newNotationResource = resourceSet.getResource(notationFragmentURI, false);
+ if (newNotationResource == null) {
+ newNotationResource = new GMFResource(notationFragmentURI);
+ resourceSet.getResources().add(newNotationResource);
+ }
+ newNotationResource.getContents().add(notationElement);
+ result.add(newNotationResource);
+ }
+ }
+ }
+
+ handleFragmentStereotypes(umlResource, fragmentUMLResources);
+
+ for (Resource resource : result) {
+ if (resource instanceof XMIResource) {
+ configureResource((XMIResource) resource);
+ }
+ }
+
+ return result;
+ }
+
+ /*
+ * Bug 447097: [Model Import] Importing a fragmented model causes stereotype applications to be lost in resulting submodel
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=447097
+ *
+ * Before the transformation, We moved all root elements from the fragment resources to the main
+ * resource, then we transformed some of them to Papyrus Stereotype Applications. We need to move
+ * these stereotype applications back to the proper fragment resource
+ */
+ protected void handleFragmentStereotypes(Resource mainUMLResource, List<Resource> umlResources) {
+ Iterator<EObject> rootElementIterator = mainUMLResource.getContents().iterator();
+ while (rootElementIterator.hasNext()) {
+ EObject rootElement = rootElementIterator.next();
+ if (rootElement instanceof Element) {
+ continue;
+ }
+
+ Resource targetStereotypeResource = getTargetStereotypeResource(rootElement, umlResources);
+ if (targetStereotypeResource != null && targetStereotypeResource != mainUMLResource) {
+ rootElementIterator.remove(); // To avoid ConcurrentModificationException when moving to the other resource
+ targetStereotypeResource.getContents().add(rootElement);
+ }
+ }
+ }
+
+ protected Resource getTargetStereotypeResource(EObject rootElement, List<Resource> umlResources) {
+ for (EReference eReference : rootElement.eClass().getEAllReferences()) {
+ if (eReference.getName().startsWith(Extension.METACLASS_ROLE_PREFIX)) {
+ Object value = rootElement.eGet(eReference);
+ if (value instanceof Element) {
+ return ((Element) value).eResource();
+ }
+ }
+ }
+
+ return null;
+ }
+
+ protected void deleteSourceStereotypes(Collection<Resource> fragmentResources) {
+ Set<Resource> allResources = new HashSet<>(fragmentResources);
+ allResources.add(umlResource);
+
+ for (Resource resource : allResources) {
+
+ // For performance reasons, RSA RT Stereotypes have not been deleted during the QVTo transformation (Bug 444379)
+ // Delete them as a post-action. Iterate on all controlled models and delete the RealTime stereotypes at the root of each resource
+ List<EObject> resourceContents = new LinkedList<>(resource.getContents());
+ for (EObject rootElement : resourceContents) {
+ if (sourceEPackages.contains(rootElement.eClass().getEPackage())) {
+ delete(rootElement);
+ }
+ }
+ }
+ }
+
+ protected abstract URI convertToPapyrus(URI rsaURI, String extension);
+
+ /**
+ * Runs a transformation using the context shared by all transformations.
+ *
+ * @param transformationURI
+ * the transformation to run
+ * @param extents
+ * the extents on which to apply the transformation
+ * @param monitor
+ * progress monitor
+ *
+ * @return the result of the transformation execution
+ */
+ public IStatus runTransformation(URI transformationURI, List<ModelExtent> extents, IProgressMonitor monitor) {
+ return runTransformation(transformationURI, context, monitor, extents);
+ }
+
+ protected IStatus runTransformation(URI transformationURI, ExecutionContext context, IProgressMonitor monitor, List<ModelExtent> extents) {
+ if (monitor.isCanceled()) {
+ return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, "Operation canceled");
+ }
+
+ TransformationExecutor executor;
+ try {
+ executor = getTransformation(transformationURI, monitor);
+ } catch (DiagnosticException ex) {
+ Diagnostic diagnostic = ex.getDiagnostic();
+
+ Activator.log.warn(String.format("Cannot load the transformation : %s. Diagnostic: %s", transformationURI, diagnostic.getMessage()));
+ return createStatusFromDiagnostic(diagnostic);
+ }
+
+ ExecutionDiagnostic result;
+ synchronized (executor) {
+ try {
+ // Gather the new execution traces
+ Trace newTraces = Trace.createEmptyTrace();
+ @SuppressWarnings("restriction")
+ ISessionData.SimpleEntry<Trace> traceKey = org.eclipse.m2m.internal.qvt.oml.evaluator.QVTEvaluationOptions.INCREMENTAL_UPDATE_TRACE;
+ context.getSessionData().setValue(traceKey, newTraces);
+
+ result = executor.execute(context, extents.toArray(new ModelExtent[0]));
+
+ // Append to our history
+ List<EObject> history = new ArrayList<>(trace.getTraceContent());
+ history.addAll(newTraces.getTraceContent());
+ trace.setTraceContent(history);
+ } finally {
+ executor.cleanup();
+ executorsPool.releaseExecutor(executor);
+ }
+ }
+
+ return createStatusFromDiagnostic(result);
+ }
+
+ protected ExecutionContext createExecutionContext(final IProgressMonitor monitor, final MultiStatus generationStatus) {
+ ExecutionContextImpl context = new ExecutionContextImpl();
+ context.setConfigProperty("keepModeling", true); //$NON-NLS-1$ o
+ context.setConfigProperty(TransformationUI.MONITOR, monitor);
+
+ // context.setProgressMonitor(monitor);
+
+ context.setLog(new WriterLog(new OutputStreamWriter(System.out)) {
+
+ @Override
+ public void log(String message) {
+ super.log(message);
+ }
+
+ @Override
+ public void log(String message, Object param) {
+ super.log(message, param);
+ }
+
+ @Override
+ public void log(int level, String message) {
+ super.log(level, message);
+ if (level >= 1) {
+ generationStatus.merge(new Status(level, Activator.PLUGIN_ID, message));
+ }
+
+ }
+
+ @Override
+ public void log(int level, String message, Object param) {
+ super.log(level, message, param);
+ if (level >= 1) {
+ generationStatus.merge(new Status(level, Activator.PLUGIN_ID, message + ", data:" + param));
+ }
+ }
+ });
+
+ initTransformationProperties(context);
+
+ // Invoke extensions as incremental transformations
+
+ context.getSessionData().setValue(TraceHelper.TRACE_HISTORY, trace);
+
+ return context;
+ }
+
+ /**
+ * Initializes the ExecutionContext with configuration properties required by transformations
+ *
+ * This is a lightweight mechanism to avoid initializing ModelExtents for a single EObject reference, or for non-EMF values
+ *
+ * Typically used by blackbox methods
+ *
+ * @param context
+ */
+ protected abstract void initTransformationProperties(ExecutionContextImpl context);
+
+
+ protected void configureResource(XMIResource resource) {
+ Map<Object, Object> saveOptions = new HashMap<>();
+
+ // default save options.
+ saveOptions.put(XMLResource.OPTION_DECLARE_XML, Boolean.TRUE);
+ saveOptions.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
+ saveOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
+ saveOptions.put(XMIResource.OPTION_USE_XMI_TYPE, Boolean.TRUE);
+ saveOptions.put(XMLResource.OPTION_SAVE_TYPE_INFORMATION, Boolean.TRUE);
+ saveOptions.put(XMLResource.OPTION_SKIP_ESCAPE_URI, Boolean.FALSE);
+ saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8");
+
+ // see bug 397987: [Core][Save] The referenced plugin models are saved using relative path
+ saveOptions.put(XMLResource.OPTION_URI_HANDLER, new org.eclipse.emf.ecore.xmi.impl.URIHandlerImpl.PlatformSchemeAware());
+
+ resource.setEncoding("UTF-8");
+ resource.getDefaultSaveOptions().putAll(saveOptions);
+ }
+
+ protected abstract List<ModelExtent> getModelExtents();
+
+ public abstract ModelExtent getInOutUMLModel();
+
+ /* Notation model is initially empty, but will be filled successively by each transformation */
+ public ModelExtent getInoutNotationModel() {
+ if (outNotation == null) {
+ outNotation = new BasicModelExtent();
+ }
+
+ return outNotation;
+ }
+
+ protected ModelExtent getOutSashModel() {
+ if (outSashModel == null) {
+ outSashModel = new BasicModelExtent();
+ }
+
+ return outSashModel;
+ }
+
+
+ protected abstract Collection<URI> getDiagramTransformationURIs();
+
+ //TODO : warning, the RSA code will probably be changed and this method will not used for RSA, because it is called after diagrams transformation for RSA.
+ protected abstract URI getSemanticTransformationURI();
+
+ protected abstract Collection<URI> getProfilesTransformationURI();
+
+ protected Collection<URI> getAdditionalTransformationURIs() {
+ return Collections.emptyList();
+ }
+
+ //currently abstract because We probably doesn't apply the transformation in the same order for Rpy than for RSA
+ protected abstract Collection<URI> getAllTransformationURIs();
+
+ protected URI getTransformationURI(String transformationName, String pluginID) {
+ return URI.createPlatformPluginURI(String.format("%s/transform/%s.qvto", pluginID, transformationName), true); //$NON-NLS-1$
+ }
+
+ public String getModelName() {
+ return URI.decode(sourceURI.lastSegment());
+ }
+
+
+ public void cancel() {
+ job.cancel();
+ }
+
+ /** Lightweight delete operation, which only removes the object from its parent. Incoming references are not deleted */
+ public void delete(EObject elementToDelete) {
+ CacheAdapter adapter = CacheAdapter.getCacheAdapter(elementToDelete);
+ if (adapter == null) {
+ adapter = CacheAdapter.getInstance();
+ }
+ adapter.unsetTarget(elementToDelete);
+ if (elementToDelete.eResource() != null) {
+ elementToDelete.eResource().getContents().remove(elementToDelete);
+ }
+
+ EObject parent = elementToDelete.eContainer();
+ if (parent == null) {
+ return;
+ }
+ EReference containmentFeature = elementToDelete.eContainmentFeature();
+
+ if (containmentFeature.getUpperBound() == 1) {
+ parent.eUnset(containmentFeature);
+ } else {
+ List<?> values = (List<?>) parent.eGet(containmentFeature);
+ values.remove(elementToDelete);
+ }
+ }
+
+ /**
+ *
+ * @return
+ * the trace of the transformation
+ */
+ protected Trace getTrace() {
+ return this.trace;
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformationLauncher.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformationLauncher.java
new file mode 100644
index 0000000..e668261
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformationLauncher.java
@@ -0,0 +1,383 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 496439
+ * Vincent Lorenzo - bug 496176
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.internal.Schedulable;
+import org.eclipse.papyrus.interoperability.common.internal.Scheduler;
+import org.eclipse.papyrus.interoperability.common.internal.TransformationWrapper;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.console.MessageConsole;
+import org.eclipse.ui.console.MessageConsoleStream;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+/**
+ * Executes a batch of {@link ImportTransformation}s, then restores the dependencies (References)
+ * between each other
+ *
+ * @author Vincent Lorenzo
+ *
+ */
+public abstract class AbstractImportTransformationLauncher implements IImportTransformationLauncher {
+
+ // Nano to Second
+ protected final static long SECOND = 1000 * 1000 * 1000;
+
+ // Nano to Milliseconds
+ protected final static long MILLIS = 1000 * 1000;
+
+ protected final ThreadConfig config;
+
+ protected final Control baseControl;
+
+ /**
+ * Own execution time, in nano-seconds. Doesn't take individual transformation's exec
+ * time into account. Also ignores the time when Blocking user Dialogs are opened
+ */
+ protected long ownExecutionTime;
+
+ /**
+ * Own loading time (For initial model loading)
+ */
+ protected long ownLoadingTime;
+
+ /**
+ * Own cumulated execution time for repairing stereotypes
+ */
+ protected long ownRepairStereotypesTime;
+
+ /**
+ * Own cumulated execution time for repairing libraries
+ */
+ protected long ownRepairLibrariesTime;
+
+ /**
+ * Own execution time for resolving all matches for broken profiles/libraries
+ */
+ protected long resolveAllDependencies;
+
+ /**
+ * The top-level job for this transformation
+ */
+ protected Job importDependenciesJob;
+
+ /**
+ * Total time for all invidivual transformations to complete. Since they are executed in parallel,
+ * this may be different from their cumulated execution time (Unless a single thread is used)
+ */
+ protected long transformationsExecutionTime = 0L;
+
+ protected IDependencyAnalysisHelper analysisHelper;
+
+ public AbstractImportTransformationLauncher(ThreadConfig config) {
+ this(config, null);
+ }
+
+ public AbstractImportTransformationLauncher(ThreadConfig config, Control baseControl) {
+ this.config = config;
+ this.baseControl = baseControl;
+ }
+
+ /**
+ * Executes the transformation (Asynchronous)
+ *
+ * @param urisToImport
+ */
+ public void run(List<URI> urisToImport) {
+ List<IImportTransformation> transformations = new LinkedList<IImportTransformation>();
+
+ analysisHelper = createDependencyAnalysisHelper(config);
+
+ for (URI uri : urisToImport) {
+ IImportTransformation transformation = createTransformation(uri, config, analysisHelper);
+ transformations.add(transformation);
+ }
+
+ // Always use the batch launcher, even if there is only 1 transformation (Bug 455012)
+ importModels(transformations);
+ }
+
+ protected abstract IDependencyAnalysisHelper createDependencyAnalysisHelper(final ThreadConfig config);
+
+ protected abstract IImportTransformation createTransformation(URI transformationURI, final ThreadConfig config, final IDependencyAnalysisHelper analysisHelper);
+
+ public static final String IMPORT_MODELS_JOB_NAME = "Import Models"; // $NON-NLS-0$
+
+ /**
+ * Start a Job and delegate to {@link #importModels(IProgressMonitor, List)}
+ *
+ * @param transformations
+ */
+ protected void importModels(final List<IImportTransformation> transformations) {
+ importDependenciesJob = new Job(IMPORT_MODELS_JOB_NAME) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ IStatus result = AbstractImportTransformationLauncher.this.importModels(monitor, transformations);
+
+ if (monitor.isCanceled()) {
+ return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, "Operation Canceled");
+ }
+
+ long cumulatedLoadingTime = 0L;
+ long cumulatedTransformationTime = 0L;
+ long cumulatedHandleDanglingTime = 0L;
+ long cumulatedImportExtensionsTime = 0L;
+ for (IImportTransformation transformation : transformations) {
+ cumulatedLoadingTime += transformation.getLoadingTime();
+ cumulatedImportExtensionsTime += transformation.getImportExtensionsTime();
+ cumulatedHandleDanglingTime += transformation.getHandleDanglingRefTime();
+
+ cumulatedTransformationTime += transformation.getExecutionTime();
+
+ log("Import " + transformation.getModelName());
+ log("First phase (0-50%):");
+ log("\tTotal loading time: " + timeFormat(transformation.getLoadingTime()));
+ log("\tTotal Import Extensions time: " + timeFormat(transformation.getImportExtensionsTime()));
+ log("\tTotal Handle Dangling References time: " + timeFormat(transformation.getHandleDanglingRefTime()));
+ log("\tTotal execution time: " + timeFormat(transformation.getExecutionTime()));
+
+ Long loadingTime = loadingTimeV2.get(transformation);
+ Long repairProxiesTime = proxiesTime.get(transformation);
+ Long repairStereoTime = stereoTime.get(transformation);
+ Long totalPhase2 = totalTimeV2.get(transformation);
+
+ log("Second phase (50-100%):");
+ log("\tTotal loading time: " + timeFormat(loadingTime));
+ log("\tTotal fix proxies time: " + timeFormat(repairProxiesTime));
+ log("\tTotal fix stereotypes time: " + timeFormat(repairStereoTime));
+ log("\tTotal execution time: " + timeFormat(totalPhase2));
+
+ log("Total");
+ log("\tTotal execution time: " + timeFormat(transformation.getExecutionTime() + (totalPhase2 == null ? 0 : totalPhase2)));
+ log("\n");
+ }
+
+ int nbThreads = Math.max(1, config.getMaxThreads());
+ log("First phase (0-50%) / " + nbThreads + " Threads");
+ log("\tCumulated Transformation Time: " + timeFormat(cumulatedTransformationTime));
+ log("\tCumulated Loading Time: " + timeFormat(cumulatedLoadingTime));
+ log("\tCumulated Handle Dangling Refs Time: " + timeFormat(cumulatedHandleDanglingTime));
+ log("\tCumulated Import Extensions Time: " + timeFormat(cumulatedImportExtensionsTime));
+ log("\tTotal Transformation Time: " + timeFormat(transformationsExecutionTime));
+
+ log("Second phase (50-100%) / " + nbThreads + " Threads");
+ log("\tTotal Handle all Dangling References: " + timeFormat(resolveAllDependencies));
+ log("\tCumulated Loading Time: " + timeFormat(ownLoadingTime));
+ log("\tCumulated Fix Libraries Time: " + timeFormat(ownRepairLibrariesTime));
+ log("\tCumulated Fix Stereotypes Time: " + timeFormat(ownRepairStereotypesTime));
+ log("\tTotal Fix Dependencies Time: " + timeFormat(ownExecutionTime));
+
+ log("Total");
+ log("\tCumulated Total time: " + timeFormat(ownExecutionTime + cumulatedTransformationTime));
+ log("\tTotal time: " + timeFormat(ownExecutionTime + transformationsExecutionTime));
+
+ log("Import Complete");
+ log("");
+
+ return result;
+ }
+
+ };
+
+ importDependenciesJob.addJobChangeListener(new JobChangeAdapter() {
+ @Override
+ public void done(IJobChangeEvent event) {
+
+ MultiStatus multiStatus = new MultiStatus(Activator.PLUGIN_ID, IStatus.OK, "", null);
+
+ multiStatus.merge(event.getResult());
+
+ for (IImportTransformation transformation : transformations) {
+ multiStatus.merge(transformation.getStatus());
+ }
+
+ int severity = multiStatus.getSeverity();
+ String message;
+
+ switch (severity) {
+ case IStatus.OK:
+ message = "The selected models have been successfully imported";
+ break;
+ case IStatus.CANCEL:
+ message = "Operation canceled";
+ break;
+ case IStatus.WARNING:
+ message = "The selected models have been imported; some warnings have been reported";
+ break;
+ default:
+ message = "Some errors occurred during model import";
+ break;
+ }
+
+
+ handle(new MultiStatus(Activator.PLUGIN_ID, severity, multiStatus.getChildren(), message, null));
+ }
+
+ protected void handle(final IStatus status) {
+ if (baseControl == null) {
+ int severity = status.getSeverity();
+ if (severity == IStatus.OK || severity == IStatus.CANCEL) {
+ return;
+ }
+
+ StatusManager.getManager().handle(status, StatusManager.LOG);
+ return;
+ }
+
+ Display display = baseControl.getDisplay();
+
+ if (status.getSeverity() == IStatus.OK) {
+ display.asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openInformation(baseControl.getShell(), "Import models", status.getMessage());
+ }
+ });
+
+ } else if (status.getSeverity() == IStatus.CANCEL) {
+ display.asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openInformation(baseControl.getShell(), "Import models", status.getMessage());
+ }
+ });
+ } else {
+ StatusManager.getManager().handle(status, StatusManager.BLOCK);
+ }
+ }
+ });
+
+ importDependenciesJob.setUser(true);
+ importDependenciesJob.schedule();
+ }
+
+ protected void log(String message) {
+ System.out.println(message);
+
+ MessageConsole console = getConsole();
+ MessageConsoleStream out = console.newMessageStream();
+ out.println(message);
+ }
+
+ protected static final String CONSOLE_NAME = "Model Import Results"; // The name is both the ID and the Label
+
+ protected MessageConsole getConsole() {
+ ConsolePlugin plugin = ConsolePlugin.getDefault();
+ IConsoleManager consoleManager = plugin.getConsoleManager();
+ IConsole[] existing = consoleManager.getConsoles();
+ for (int i = 0; i < existing.length; i++) {
+ if (CONSOLE_NAME.equals(existing[i].getName())) {
+ return (MessageConsole) existing[i];
+ }
+ }
+ // no console found, so create a new one
+ MessageConsole rsaConsole = new MessageConsole(CONSOLE_NAME, null);
+ consoleManager.addConsoles(new IConsole[] { rsaConsole });
+ return rsaConsole;
+ }
+
+ protected String timeFormat(Long nano) {
+ if (nano == null) {
+ return "?"; // FIXME: crash?
+ }
+ long seconds = nano / SECOND;
+ if (seconds < 1) {
+ long millis = nano / MILLIS;
+ return String.format("%s ms", millis);
+ }
+ return String.format("%d:%02d:%02d", seconds / 3600, (seconds % 3600) / 60, (seconds % 60));
+ }
+
+ /**
+ * Schedules all the individual transformations, wait for completion, then
+ * call {@link #handleModelDependencies(List, IProgressMonitor)}
+ *
+ * @param monitor
+ * @param transformations
+ * @return
+ */
+ protected IStatus importModels(IProgressMonitor monitor, List<IImportTransformation> transformations) {
+
+ long begin = System.nanoTime();
+
+ monitor.setTaskName("Waiting for import tasks to complete...");
+ int numTasks = transformations.size() * 2; // For each transformation: wait for completion, then handle dependencies
+ monitor.beginTask("Importing Models...", numTasks);
+
+ List<Schedulable> tasks = new LinkedList<Schedulable>();
+
+ for (IImportTransformation transformation : transformations) {
+ tasks.add(new TransformationWrapper(transformation));
+ }
+
+ Scheduler scheduler = new Scheduler(config.getMaxThreads());
+ scheduler.schedule(monitor, tasks);
+
+ long end = System.nanoTime();
+ transformationsExecutionTime = end - begin;
+
+ if (monitor.isCanceled()) {
+ return new Status(IStatus.CANCEL, Activator.PLUGIN_ID, "Operation canceled");
+ }
+
+ handleModelDependencies(transformations, monitor);
+
+ return Status.OK_STATUS;
+ }
+
+ protected void handleModelDependencies(List<IImportTransformation> transformations, IProgressMonitor monitor) {
+ // TODO, seem not required for Rpy import
+ }
+
+ final protected Map<IImportTransformation, Long> loadingTimeV2 = new HashMap<IImportTransformation, Long>();
+
+ final protected Map<IImportTransformation, Long> proxiesTime = new HashMap<IImportTransformation, Long>();
+
+ final protected Map<IImportTransformation, Long> stereoTime = new HashMap<IImportTransformation, Long>();
+
+ final protected Map<IImportTransformation, Long> totalTimeV2 = new HashMap<IImportTransformation, Long>();
+
+ /** Mainly for test purpose */
+ public void waitForCompletion() throws Exception {
+ importDependenciesJob.join();
+ }
+
+ /** Mainly for test purpose */
+ public IStatus getResult() {
+ return importDependenciesJob.getResult();
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IDependencyAnalysisHelper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IDependencyAnalysisHelper.java
new file mode 100644
index 0000000..d6c43a1
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IDependencyAnalysisHelper.java
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+
+
+/**
+ * @author Vincent Lorenzo
+ *
+ */
+public interface IDependencyAnalysisHelper {
+
+ void computeURIMappings(Collection<Resource> sourceModels);
+
+ /** Propagates the URI Mappings to all duplicates */
+ void propagateURIMappings(List<URIMapping> allMappings, MappingParameters result);
+
+ void resolveAllMappings(Map<URI, URI> urisToReplace, Map<URI, URI> profileUrisToReplace);
+
+ List<URIMapping> flattenURIMappings(MappingParameters result);
+
+}
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformation.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformation.java
new file mode 100644
index 0000000..f38da75
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformation.java
@@ -0,0 +1,68 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import org.eclipse.core.runtime.IStatus;
+
+/**
+ * @author Vincent Lorenzo
+ *
+ */
+public interface IImportTransformation {
+
+ /**
+ * @return
+ */
+ long getLoadingTime();
+
+ /**
+ * @return
+ */
+ long getHandleDanglingRefTime();
+
+ /**
+ * @return
+ */
+ long getImportExtensionsTime();
+
+ /**
+ * @return
+ */
+ long getExecutionTime();
+
+ /**
+ * @return
+ */
+ String getModelName();
+
+ /**
+ * @return
+ */
+ IStatus getStatus();
+
+ /**
+ * @return
+ */
+ boolean isComplete();
+
+ /**
+ * @param b
+ */
+ void run(boolean b);
+
+ /**
+ *
+ */
+ void cancel();
+
+}
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformationLauncher.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformationLauncher.java
new file mode 100644
index 0000000..3549b46
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/IImportTransformationLauncher.java
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * @author Vincent Lorenzo
+ *
+ */
+public interface IImportTransformationLauncher {
+
+ /**
+ * Executes the transformation (Asynchronous)
+ *
+ * @param urisToImport
+ */
+ public void run(List<URI> urisToImport);
+
+ /** Mainly for test purpose */
+ public void waitForCompletion() throws Exception;
+
+ /** Mainly for test purpose */
+ public IStatus getResult();
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationModelSet.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationModelSet.java
new file mode 100644
index 0000000..e856ba4
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationModelSet.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.interoperability.common.concurrent.ThreadSafeModelSet;
+
+
+/**
+ * @author Camille Letavernier
+ *
+ */
+public class MigrationModelSet extends ThreadSafeModelSet implements MigrationResourceSet {
+
+ private boolean frozen = false;
+
+ /**
+ * @see org.eclipse.papyrus.migration.rsa.transformation.MigrationResourceSet#freeze()
+ *
+ */
+ @Override
+ public void freeze() {
+ this.frozen = true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.migration.rsa.transformation.MigrationResourceSet#unfreeze()
+ *
+ */
+ @Override
+ public void unfreeze() {
+ this.frozen = false;
+ }
+
+ /**
+ * @see org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#getResource(org.eclipse.emf.common.util.URI, boolean)
+ *
+ * @param uri
+ * @param loadOnDemand
+ * @return
+ */
+ @Override
+ public Resource getResource(URI uri, boolean loadOnDemand) {
+ return super.getResource(uri, frozen ? false : loadOnDemand);
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSet.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSet.java
new file mode 100644
index 0000000..c14c293
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSet.java
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+/**
+ * A ResourceSet which can optionally be "frozen". In frozen state,
+ * it won't load any additional resource, until {@link #unfreeze()} is called
+ *
+ * Freezing the ResourceSet may violate the EMF Contract of getResource() and should be used carefully.
+ *
+ * Use this when using eGet(EStructuralFeature, resolve = false) is not sufficient (Bug 457341 / Comment 17)
+ *
+ * @author Camille Letavernier
+ *
+ */
+public interface MigrationResourceSet extends ResourceSet {
+
+ /**
+ * Freeze this resource set: resources will not be demand-loaded anymore
+ * Resources which are already present in the workspace will still be accessible
+ *
+ * Frozen ResourceSets may violate the API Contract for {@link #getResource(org.eclipse.emf.common.util.URI, boolean)} ; use with care
+ */
+ public void freeze();
+
+ /**
+ * Unfreeze this resource set: come back to a normal state
+ */
+ public void unfreeze();
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSetImpl.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSetImpl.java
new file mode 100644
index 0000000..4e4bf37
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/MigrationResourceSetImpl.java
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.interoperability.common.concurrent.ThreadSafeResourceSet;
+
+
+/**
+ * @author Camille Letavernier
+ *
+ */
+public class MigrationResourceSetImpl extends ThreadSafeResourceSet implements MigrationResourceSet {
+
+ private boolean frozen = false;
+
+ /**
+ * @see org.eclipse.papyrus.migration.rsa.transformation.MigrationResourceSet#freeze()
+ *
+ */
+ @Override
+ public void freeze() {
+ this.frozen = true;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.migration.rsa.transformation.MigrationResourceSet#unfreeze()
+ *
+ */
+ @Override
+ public void unfreeze() {
+ this.frozen = false;
+ }
+
+ /**
+ * @see org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#getResource(org.eclipse.emf.common.util.URI, boolean)
+ *
+ * @param uri
+ * @param loadOnDemand
+ * @return
+ */
+ @Override
+ public Resource getResource(URI uri, boolean loadOnDemand) {
+ return super.getResource(uri, frozen ? false : loadOnDemand);
+ }
+
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/RepairStereotypes.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/RepairStereotypes.java
new file mode 100644
index 0000000..b68880e
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/RepairStereotypes.java
@@ -0,0 +1,225 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 436666
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.RollbackException;
+import org.eclipse.emf.transaction.Transaction;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.impl.InternalTransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.uml.modelrepair.internal.stereotypes.IRepairAction;
+import org.eclipse.papyrus.uml.modelrepair.internal.stereotypes.ZombieStereotypesDescriptor;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.ProfileApplication;
+import org.eclipse.uml2.uml.UMLPackage;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ * Repairs stereotype applications in the specified model set, using the default action for each
+ *
+ * The given URI Map is used when the proper profile can't be found automatically
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class RepairStereotypes {
+
+ private final ModelSet modelSet;
+
+ private final Collection<Resource> resourcesToRepair;
+
+ private final Map<URI, URI> profileMappings;
+
+ public RepairStereotypes(ModelSet modelSet, Collection<Resource> resourcesToRepair, Map<URI, URI> profileMappings) {
+ this.modelSet = modelSet;
+ this.resourcesToRepair = resourcesToRepair;
+ this.profileMappings = profileMappings;
+ }
+
+ /**
+ * Finds all zombie stereotypes, and repair them with the default action.
+ *
+ * If the profile can't be found automatically, the profileMappings map is used
+ *
+ * @throws InterruptedException
+ * @throws RollbackException
+ */
+ public void execute() throws InterruptedException, RollbackException {
+ ZombieStereotypesDescriptor result = null;
+
+ LabelProviderService labelProvider = new LabelProviderServiceImpl();
+ try {
+ labelProvider.startService();
+ } catch (Exception ex) {
+ Activator.log.error(ex);
+ return;
+ }
+
+ Function<? super EPackage, Profile> profileSupplier = getProfileSupplier();
+
+ for (Resource resource : resourcesToRepair) {
+ Element rootElement = (Element) EcoreUtil.getObjectByType(resource.getContents(), UMLPackage.Literals.ELEMENT);
+
+ if (rootElement == null || rootElement.getNearestPackage() == null) {
+ continue;
+ }
+
+ Package rootPackage = rootElement.getNearestPackage();
+
+ Collection<ProfileApplication> profileApplications = Lists.newArrayList();
+ for (TreeIterator<EObject> iter = EcoreUtil.getAllProperContents(Collections.singleton(rootPackage), false); iter.hasNext();) {
+ EObject next = iter.next();
+ if (next instanceof ProfileApplication) {
+ profileApplications.add((ProfileApplication) next);
+ iter.prune();
+ } else if (!(next instanceof Package) && !(next instanceof Component)) {
+ // No sense looking for packages except in the things that can contain packages
+ iter.prune();
+ }
+ }
+
+ Set<EPackage> appliedDefinitions = getAppliedDefinitions(profileApplications);
+
+ ZombieStereotypesDescriptor zombies = new ZombieStereotypesDescriptor(resource, rootPackage, appliedDefinitions, profileSupplier, labelProvider);
+
+ for (EObject next : resource.getContents()) {
+ if (!(next instanceof Element)) {
+ zombies.analyze(next);
+ }
+ }
+
+ if (zombies.hasZombies()) {
+ result = zombies;
+ }
+
+ if (result == null) {
+ continue;
+ }
+
+ final ZombieStereotypesDescriptor descriptor = result;
+
+ final TransactionalEditingDomain domain = modelSet.getTransactionalEditingDomain();
+
+
+ InternalTransactionalEditingDomain internalDomain = (InternalTransactionalEditingDomain) domain;
+
+ Map<String, Object> options = new HashMap<String, Object>();
+ options.put(Transaction.OPTION_NO_UNDO, true);
+ options.put(Transaction.OPTION_NO_VALIDATION, true);
+ options.put(Transaction.OPTION_NO_TRIGGERS, true);
+ options.put(Transaction.OPTION_UNPROTECTED, true);
+
+ // We're in a batch environment, with no undo/redo support. Run a vanilla transaction to improve performances
+ Transaction fastTransaction = internalDomain.startTransaction(false, options);
+ try {
+ final BasicDiagnostic diagnostics = new BasicDiagnostic(Activator.PLUGIN_ID, 0, "Problems in repairing stereotypes", null);
+
+ for (IAdaptable packageToRepair : descriptor.getZombieSchemas()) {
+ IRepairAction action = descriptor.getRepairAction(packageToRepair, IRepairAction.Kind.APPLY_LATEST_PROFILE_DEFINITION);
+ descriptor.repair(packageToRepair, action, diagnostics, new NullProgressMonitor());
+ }
+ } finally {
+ fastTransaction.commit();
+ }
+
+ }
+
+ try {
+ labelProvider.disposeService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+ }
+
+ /**
+ * Maps a zombie EPackage with an existing Profile. Called only if the Profile can't be resolved automatically
+ *
+ * @return
+ */
+ protected Function<? super EPackage, Profile> getProfileSupplier() {
+ return new Function<EPackage, Profile>() {
+
+ // If we're here, we didn't find a perfect match for the profile. We need to make some guesses
+ @Override
+ public Profile apply(EPackage input) {
+ if (input.eResource() == null || input.eResource().getURI() == null) {
+ return null;
+ }
+
+ URI packageResourceURI = input.eResource().getURI();
+ URI targetResourceURI = profileMappings.get(packageResourceURI);
+
+ Profile result = null;
+ URI selectedProfileURI = targetResourceURI;
+ if (selectedProfileURI != null) {
+ result = EMFHelper.load(modelSet, selectedProfileURI, Profile.class);
+
+ // If there is a single Profile, there is no ambiguity. Just return it
+ if ((result != null) && !hasNestedProfiles(result)) {
+ return result;
+ }
+
+ // TODO: handle the case with nested profiles (We already opened a popup dialog earlier; wouldn't be a good idea to pop another dialog here)
+ }
+
+ return null;
+ }
+
+ boolean hasNestedProfiles(Profile profile) {
+ return Iterators.any(profile.eAllContents(), Predicates.instanceOf(Profile.class));
+ }
+ };
+ }
+
+ protected Set<EPackage> getAppliedDefinitions(Iterable<? extends ProfileApplication> profileApplications) {
+ Set<EPackage> result = Sets.newHashSet();
+
+ for (ProfileApplication next : profileApplications) {
+ EPackage definition = next.getAppliedDefinition();
+ if ((definition != null) && !definition.eIsProxy()) {
+ result.add(definition);
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/RegisteredItemLabelProvider.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/RegisteredItemLabelProvider.java
new file mode 100644
index 0000000..56868ce
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/RegisteredItemLabelProvider.java
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation.ui;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.papyrus.uml.extensionpoints.IRegisteredItem;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Label Provider for RegisteredItems (Libraries & Profiles)
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class RegisteredItemLabelProvider extends LabelProvider {
+ @Override
+ public Image getImage(Object element) {
+ if (element instanceof IRegisteredItem) {
+ IRegisteredItem library = (IRegisteredItem) element;
+ return library.getImage();
+ }
+ return super.getImage(element);
+ }
+
+ @Override
+ public String getText(Object element) {
+ if (element instanceof IRegisteredItem) {
+ IRegisteredItem library = (IRegisteredItem) element;
+ return library.getName();
+ }
+
+ return super.getText(element);
+ }
+}
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/URIMappingDialog.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/URIMappingDialog.java
new file mode 100644
index 0000000..39bdfec
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/ui/URIMappingDialog.java
@@ -0,0 +1,367 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.transformation.ui;
+
+import java.text.Collator;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.infra.widgets.editors.TreeSelectorDialog;
+import org.eclipse.papyrus.infra.widgets.providers.CollectionContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.EncapsulatedContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.StaticContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.WorkspaceContentProvider;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MappingParameters;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.URIMapping;
+import org.eclipse.papyrus.interoperability.common.transformation.IDependencyAnalysisHelper;
+import org.eclipse.papyrus.uml.extensionpoints.IRegisteredItem;
+import org.eclipse.papyrus.uml.extensionpoints.Registry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * Opens a dialog allowing the user to manipulate/change the URIMappings of the transformation
+ * (Dependency repair)
+ *
+ * @author Camille Letavernier
+ *
+ */
+public class URIMappingDialog extends SelectionDialog {
+
+ MappingParameters mappingParameters, result;
+
+ TableViewer viewer;
+
+ LabelProviderService labelProviderService;
+
+ private static final int BROWSE_WORKSPACE_ID = IDialogConstants.CLIENT_ID + 1;
+
+ private static final int BROWSE_REGISTERED_ID = IDialogConstants.CLIENT_ID + 2;
+
+ private static final int BROWSE_PROFILES_ID = IDialogConstants.CLIENT_ID + 3;
+
+ List<URIMapping> allMappings;
+
+ final IDependencyAnalysisHelper dependencyHelper;
+
+ public URIMappingDialog(Shell shell, MappingParameters mappingParameters, IDependencyAnalysisHelper dependencyHelper) {
+ super(shell);
+ this.dependencyHelper = dependencyHelper;
+ this.mappingParameters = mappingParameters;
+ }
+
+ @Override
+ protected void configureShell(Shell shell) {
+ setTitle("Some dependencies are missing");
+ super.configureShell(shell);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite area = (Composite) super.createDialogArea(parent);
+
+ labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException e) {
+ Activator.log.error(e);
+ }
+
+ Label description = new Label(area, SWT.WRAP);
+ description.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+ description.setText("Some elements in the following resources can't be resolved. Please choose the resources to replace them.");
+
+ Composite self = new Composite(area, SWT.NONE);
+ self.setLayout(new GridLayout(1, true));
+ self.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ // Do a copy: if Cancel is pressed, it can be discarded
+ result = EcoreUtil.copy(mappingParameters);
+ setResult(Collections.singletonList(mappingParameters)); // Default result (If Cancel is pressed)
+
+ Composite buttonsBarComposite = new Composite(self, SWT.NONE);
+
+ GridLayout buttonsLayout = new GridLayout(0, false);
+ buttonsLayout.marginWidth = 0;
+
+ buttonsBarComposite.setLayout(buttonsLayout);
+ buttonsBarComposite.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, false));
+
+ Button browseWorkspace = createButton(buttonsBarComposite, BROWSE_WORKSPACE_ID, "", false);
+ browseWorkspace.setImage(org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("icons/browse_12x12.gif"));
+ browseWorkspace.setToolTipText("Browse Workspace");
+ Button browseRegistered = createButton(buttonsBarComposite, BROWSE_REGISTERED_ID, "", false);
+ browseRegistered.setImage(org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("icons/Add_12x12.gif"));
+ browseRegistered.setToolTipText("Browse Registered Libraries");
+ Button browseProfiles = createButton(buttonsBarComposite, BROWSE_PROFILES_ID, "", false);
+ browseProfiles.setImage(org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("icons/AddReg.gif"));
+ browseProfiles.setToolTipText("Browse Registered Profiles");
+
+ viewer = new TableViewer(self, SWT.FULL_SELECTION | SWT.BORDER);
+ Table table = viewer.getTable();
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
+
+ tableData.minimumHeight = 120;
+ table.setLayoutData(tableData);
+ table.setHeaderVisible(true);
+
+ TableColumn locationColumn = new TableColumn(table, SWT.NONE);
+ locationColumn.setText("Location");
+ layout.addColumnData(new ColumnWeightData(50, 250, true));
+
+ TableColumn newLocationColumn = new TableColumn(table, SWT.NONE);
+ newLocationColumn.setText("New Location");
+ layout.addColumnData(new ColumnWeightData(50, 250, true));
+
+ viewer.setContentProvider(CollectionContentProvider.instance);
+
+ viewer.setLabelProvider(new URIColumnsLabelProvider());
+ viewer.setComparator(new ViewerComparator() {
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (e1 instanceof URIMapping && e2 instanceof URIMapping) {
+ URIMapping map1 = (URIMapping) e1;
+ URIMapping map2 = (URIMapping) e2;
+
+ return Collator.getInstance().compare(map1.getSourceURI(), map2.getSourceURI());
+ }
+ return 0;
+ }
+ });
+
+ allMappings = dependencyHelper.flattenURIMappings(result);
+
+ viewer.setInput(allMappings);
+
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateControls();
+ }
+ });
+
+ updateControls();
+
+ return self;
+ }
+
+ @Override
+ public boolean close() {
+ try {
+ labelProviderService.disposeService();
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ return super.close();
+ }
+
+ protected void updateControls() {
+ boolean enableBrowse = !viewer.getSelection().isEmpty();
+
+ getButton(BROWSE_REGISTERED_ID).setEnabled(enableBrowse);
+ getButton(BROWSE_WORKSPACE_ID).setEnabled(enableBrowse);
+ getButton(BROWSE_PROFILES_ID).setEnabled(enableBrowse);
+
+ viewer.refresh();
+ }
+
+ @Override
+ protected void buttonPressed(int buttonId) {
+ switch (buttonId) {
+ case BROWSE_REGISTERED_ID:
+ browseRegisteredLibraries();
+ return;
+ case BROWSE_WORKSPACE_ID:
+ browseWorkspaceLibraries();
+ return;
+ case BROWSE_PROFILES_ID:
+ browseRegisteredProfiles();
+ return;
+ }
+
+ super.buttonPressed(buttonId);
+ }
+
+ protected URIMapping getSelectedMapping() {
+ ISelection selection = viewer.getSelection();
+ if (selection.isEmpty()) {
+ return null;
+ }
+
+ if (selection instanceof IStructuredSelection) {
+ Object selectedElement = ((IStructuredSelection) selection).getFirstElement();
+ if (selectedElement instanceof URIMapping) {
+ return (URIMapping) selectedElement;
+ }
+ }
+
+ return null;
+ }
+
+ protected void browseWorkspaceLibraries() {
+ if (getSelectedMapping() == null) {
+ return;
+ }
+
+ Map<String, String> extensionFilters = new LinkedHashMap<String, String>();
+ extensionFilters.put("*.uml", "UML (*.uml)");
+ extensionFilters.put("*", "All (*)");
+
+ TreeSelectorDialog dialog = new TreeSelectorDialog(getShell());
+ dialog.setTitle("Browse Workspace");
+ dialog.setDescription("Select a library in the workspace.");
+ WorkspaceContentProvider workspaceContentProvider = new WorkspaceContentProvider();
+ workspaceContentProvider.setExtensionFilters(extensionFilters);
+ dialog.setContentProvider(workspaceContentProvider);
+
+ dialog.setLabelProvider(labelProviderService.getLabelProvider());
+
+
+ if (dialog.open() == Window.OK) {
+ Object[] result = dialog.getResult();
+ if (result == null || result.length == 0) {
+ return;
+ }
+
+ Object selectedFile = result[0];
+
+ if (selectedFile instanceof IFile) {
+ IPath filePath = ((IFile) selectedFile).getFullPath();
+ URI workspaceURI = URI.createPlatformResourceURI(filePath.toString(), true);
+
+ replaceSelectionWith(workspaceURI);
+ }
+ }
+ }
+
+ protected void replaceSelectionWith(URI targetURI) {
+ URIMapping mapping = getSelectedMapping();
+ mapping.setTargetURI(targetURI.toString());
+ updateControls();
+ }
+
+ protected void browseRegisteredLibraries() {
+ browseRegisteredItems(Registry.getRegisteredLibraries(), "Browse Registered Libraries", "Select one of the registered libraries below.");
+ }
+
+ protected void browseRegisteredProfiles() {
+ browseRegisteredItems(Registry.getRegisteredProfiles(), "Browse Registered Profiles", "Select one of the registered profiles below.");
+ }
+
+ protected void browseRegisteredItems(Collection<? extends IRegisteredItem> items, String dialogTitle, String dialogDescription) {
+ TreeSelectorDialog dialog = new TreeSelectorDialog(getShell());
+ dialog.setTitle(dialogTitle);
+ dialog.setDescription(dialogDescription);
+ dialog.setContentProvider(new EncapsulatedContentProvider(new StaticContentProvider(items.toArray(new IRegisteredItem[0]))));
+ dialog.setLabelProvider(new RegisteredItemLabelProvider());
+
+ if (dialog.open() == Window.OK) {
+ Object[] result = dialog.getResult();
+ if (result == null || result.length == 0) {
+ return;
+ }
+
+ Object selectedElement = result[0];
+ if (selectedElement instanceof IRegisteredItem) {
+ IRegisteredItem item = (IRegisteredItem) selectedElement;
+
+ replaceSelectionWith(item.getUri());
+ }
+ }
+ }
+
+ @Override
+ protected void okPressed() {
+ dependencyHelper.propagateURIMappings(allMappings, result);
+ setResult(Collections.singletonList(result)); // Set the new result
+ super.okPressed();
+ }
+
+
+
+ private class URIColumnsLabelProvider extends ColumnLabelProvider {
+
+ @Override
+ public void update(ViewerCell cell) {
+ Object element = cell.getElement();
+
+ URIMapping mapping = (element instanceof URIMapping) ? (URIMapping) element : null;
+
+ switch (cell.getColumnIndex()) {
+ case 0:
+ updateLocation(cell, mapping);
+ break;
+ case 1:
+ updateNewLocation(cell, mapping);
+ break;
+ }
+
+ }
+
+ public void updateLocation(ViewerCell cell, URIMapping mapping) {
+ String location = "Unknown";
+ if (mapping != null) {
+ location = mapping.getSourceURI();
+ }
+
+ cell.setText(location);
+ }
+
+ public void updateNewLocation(ViewerCell cell, URIMapping mapping) {
+ String location = "";
+
+ if (mapping.getTargetURI() != null) {
+ location = mapping.getTargetURI();
+ }
+
+ cell.setText(location);
+ }
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/AbstractTransformationWizard.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/AbstractTransformationWizard.java
new file mode 100644
index 0000000..99640e0
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/AbstractTransformationWizard.java
@@ -0,0 +1,190 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.wizard;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.transformation.AbstractImportTransformationLauncher;
+import org.eclipse.papyrus.interoperability.common.wizard.pages.AbstractDialogData;
+import org.eclipse.papyrus.interoperability.common.wizard.pages.TransformationConfigPage;
+import org.eclipse.papyrus.interoperability.common.wizard.pages.TransformationSelectionPage;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ *
+ * Abstract Wizard For Model Migration into Papyrus
+ *
+ */
+public abstract class AbstractTransformationWizard extends Wizard implements IImportWizard {
+
+ protected IWizardPage currentPage;
+
+ protected final AbstractDialogData dialogData;
+
+ protected TransformationSelectionPage selectionPage;
+
+ protected TransformationConfigPage configPage;
+
+
+ public AbstractTransformationWizard(final String wizardTitle, final AbstractDialogData dialogData) {
+ setWindowTitle(wizardTitle);
+ this.dialogData = dialogData;
+ }
+
+ @Override
+ public void addPages() {
+ this.addPage(this.selectionPage = createTransformationSelectionPage(this.dialogData));
+ this.addPage(this.configPage = createTransformationConfigPage(this.dialogData));
+
+ }
+
+ /**
+ *
+ * @param dialogData
+ *
+ * @return
+ * the selection page to include into the wizard
+ */
+ protected TransformationSelectionPage createTransformationSelectionPage(final AbstractDialogData dialogData) {
+ return new TransformationSelectionPage(dialogData);
+ };
+
+ /**
+ *
+ * @param dialogData
+ * @return
+ * the configuration page to include into the wizard
+ */
+ protected TransformationConfigPage createTransformationConfigPage(final AbstractDialogData dialogData) {
+ return new TransformationConfigPage(dialogData);
+ };
+
+ @Override
+ public IWizardPage getNextPage(IWizardPage currentPage) {
+ if (currentPage == selectionPage) {
+ this.currentPage = configPage;
+ // Resets the viewer input in order to show the newly selected elements from the selectionPage
+ configPage.resetViewerInput();
+ return configPage;
+ }
+ if (this.currentPage == configPage) {
+ this.currentPage = selectionPage;
+ }
+ return null;
+ }
+
+ @Override
+ public boolean canFinish() {
+ if (currentPage == configPage) {
+ return super.canFinish();
+ }
+ return false;
+ }
+
+ @Override
+ public boolean performCancel() {
+ removeWizardImportedProjects();
+ return super.performCancel();
+ }
+
+ @Override
+ public boolean performFinish() {
+ // Set or update the unchecked elements for future executions of the plugin
+ dialogData.setSelectionMap();
+ importFiles();
+
+ // Remove the imported projects from the workspace
+ // removeWizardImportedProjects();
+
+ return true;
+ }
+
+
+ /**
+ *
+ * Remove any imported projects, through the wizard, from the workspace
+ *
+ */
+ public void removeWizardImportedProjects() {
+ if (/* dialogData != null && */dialogData.getImportedProjects() != null) {
+ for (Object object : dialogData.getImportedProjects()) {
+ if (object instanceof IProject) {
+ IProject project = (IProject) object;
+ try {
+ project.delete(false, true, null);
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ * Launch the transformation with the previously selected files and configuration parameters
+ *
+ */
+ protected void importFiles() {
+ ThreadConfig config = dialogData.getConfig();
+ if (config == null) {
+ return;
+ }
+
+ List<URI> urisToImport = new LinkedList<URI>();
+
+ for (Object selectedFile : dialogData.getTransformationFiles()) {
+ String path = null;
+ if (selectedFile instanceof IFile) {
+ path = ((IFile) selectedFile).getFullPath().toString();
+ }
+ if (path != null) {
+ URI uri = URI.createPlatformResourceURI(path, true);
+ urisToImport.add(uri);
+ }
+ }
+
+ // The wizard's Shell will be disposed because the transformation is asynchronous. Use the Shell's parent instead
+ AbstractImportTransformationLauncher launcher = createTransformationLauncher(config, this.getShell().getParent());
+ launcher.run(urisToImport);
+ }
+
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ // nothing
+ }
+
+ /**
+ *
+ * @param config
+ * the migration configuration
+ * @param baseControl
+ * the base control used to launch the transformation itself
+ * @return
+ * the create Import Transformation Launcher
+ */
+ protected abstract AbstractImportTransformationLauncher createTransformationLauncher(final ThreadConfig config, Control baseControl);
+
+}
\ No newline at end of file
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/TransformationWizardConstants.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/TransformationWizardConstants.java
new file mode 100644
index 0000000..2d94cb9
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/TransformationWizardConstants.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard;
+
+import org.eclipse.papyrus.interoperability.common.Activator;
+
+/**
+ * Constants used in the wizard
+ */
+public interface TransformationWizardConstants {
+
+ /**
+ * The name used for the settings file
+ */
+ public static final String TRANSFORMATION_WIZARD_SETTINGS = Activator.PLUGIN_ID + "Wizard.lastUnselection"; //$NON-NLS-1$
+
+ /**
+ * The key to retrieve the selection preferences from the settings file
+ */
+ public static final String WIZARD_SELECTION_KEY = "selectionPeferences"; //$NON-NLS-1$
+
+ public static final String FILEDIALOG_SELECTION_KEY = "previousDialogSelection"; //$NON-NLS-1$
+
+ /**
+ * The name of the newly created project's folders
+ */
+ public static final String SRC_FOLDER = "src"; //$NON-NLS-1$
+
+ public static final String RSC_FOLDER = "resources"; //$NON-NLS-1$
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/AbstractDialogData.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/AbstractDialogData.java
new file mode 100644
index 0000000..215e240
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/AbstractDialogData.java
@@ -0,0 +1,269 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.papyrus.infra.widgets.util.FileUtil;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.MigrationParametersFactory;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.papyrus.interoperability.common.wizard.TransformationWizardConstants;
+
+
+
+/**
+ *
+ * Class containing the bulk of the wizard's data for an easy access throughout the wizard
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public abstract class AbstractDialogData {
+
+ protected Collection<Object> selectedFiles;
+
+ protected Collection<Object> systemSelectedFiles;
+
+ protected Collection<Object> transformationFiles;
+
+ protected ThreadConfig config = MigrationParametersFactory.eINSTANCE.createThreadConfig();
+
+ protected Collection<String> unselectedFiles;
+
+ public IDialogSettings dialogSection;
+
+ protected Collection<Object> uncheckedFiles;
+
+ protected Collection<Object> importedProjects;
+
+ /**
+ *
+ * Constructor, instantiate the configuration file to store the user's selections, if none exist, or retrieve it
+ *
+ */
+ public AbstractDialogData() {
+ // Necessary for storing and recalling the previous selections
+ dialogSection = Activator.getDefault().getDialogSettings().getSection(TransformationWizardConstants.TRANSFORMATION_WIZARD_SETTINGS);
+ if (dialogSection == null) {
+ dialogSection = Activator.getDefault().getDialogSettings().addNewSection(TransformationWizardConstants.TRANSFORMATION_WIZARD_SETTINGS);
+ }
+
+ systemSelectedFiles = new LinkedList<Object>();
+ }
+
+ /**
+ *
+ * @param selectedFiles
+ * The selected files from the workspace to be displayed in the transformation page
+ */
+ public void setSelectedFiles(Collection<Object> selectedFiles) {
+ this.selectedFiles = selectedFiles;
+ }
+
+ /**
+ *
+ * @param selectedFiles
+ * The selected files outside of the workspace to be displayed in the transformation page
+ */
+ public void setSystemSelectedFiles(Collection<String> systemPaths) {
+ for (String filePath : systemPaths) {
+ File file = new File(filePath);
+ if (file != null && !systemSelectedFiles.contains(file)) {
+ systemSelectedFiles.add(file);
+ }
+ }
+ }
+
+ /**
+ *
+ * @param transformationFiles
+ * The selected files in the configuration page to be transformed
+ */
+ public void setTransformationFiles(Collection<Object> transformationFiles) {
+ this.transformationFiles = transformationFiles;
+ }
+
+ /**
+ *
+ * @return
+ * The default extensions used to filter the workspace
+ */
+ public abstract String[] getExtensions();
+
+ /**
+ *
+ * @return
+ * The default extensions' name used to filter the workspace
+ */
+ public abstract String[] getExtensionsNames();
+
+ /**
+ *
+ * @return
+ * The selected files from the workspace
+ */
+ public Collection<Object> getSelectedFiles() {
+ return selectedFiles;
+ }
+
+ /**
+ *
+ * @return
+ * The selected files outside of the workspace
+ */
+ public Collection<Object> getSystemSelectedFiles() {
+ return systemSelectedFiles;
+ }
+
+ /**
+ *
+ * @return
+ * The selected files from both workspace and outside selections
+ */
+ public Collection<Object> getAllSelectedFiles() {
+ Collection<Object> allSelectedFiles = new LinkedList<Object>();
+ if (selectedFiles != null && selectedFiles.size() > 0) {
+ // TODO select only the files that are not already present in the selection done outside of the workspace
+ // Test
+ // for (Object object : selectedFiles) {
+ // if (!systemSelectedFiles.contains(object)) {
+ // allSelectedFiles.add(object);
+ // }
+ // }
+ // endTest
+ allSelectedFiles.addAll(selectedFiles);
+ }
+ // if (systemSelectedFiles != null && systemSelectedFiles.size() > 0) {
+ // allSelectedFiles.addAll(systemSelectedFiles);
+ // }
+ return allSelectedFiles;
+ }
+
+ /**
+ *
+ * @return
+ * The parameters used for the transformation
+ */
+ public ThreadConfig getConfig() {
+ return config;
+ }
+
+ /**
+ *
+ * @return
+ * The selected files to be transformed
+ */
+ public Collection<Object> getTransformationFiles() {
+ return transformationFiles;
+ }
+
+ /**
+ *
+ * @param uncheckedFiles
+ * The selected files to be ignored during the transformation
+ */
+ public void setUncheckedFiles(Collection<Object> uncheckedFiles) {
+ this.uncheckedFiles = uncheckedFiles;
+ }
+
+ /**
+ *
+ * Sets or updates the projects to be imported in the workspace
+ *
+ * @param importedProjects
+ * The selcted projects
+ */
+ public void setImportedProjects(Collection<Object> importedProjects) {
+ this.importedProjects = importedProjects;
+ }
+
+ /**
+ *
+ * @return
+ * The imported projects
+ */
+ public Collection<Object> getImportedProjects() {
+ return this.importedProjects;
+ }
+
+ /**
+ *
+ * Update or create the selection map stored inside the configuration file in order to remember the previous selection choices
+ *
+ */
+ public void setSelectionMap() {
+ // Retrieve or create the list of unselected elements
+ if (getUnSelectionArray() != null) {
+ unselectedFiles = new LinkedList<String>(Arrays.asList(getUnSelectionArray()));
+ }
+ else {
+ unselectedFiles = new LinkedList<String>();
+ }
+ // Updates the unselected files for future references
+ for (Object object : uncheckedFiles) {
+ if (object instanceof IFile) {
+ IFile ifile = (IFile) object;
+ String ifilePath = FileUtil.getPath(ifile, true);
+ if (!unselectedFiles.contains(ifilePath)) {
+ unselectedFiles.add(ifilePath);
+ }
+ }
+ if (object instanceof File) {
+ File file = (File) object;
+ String filePath = file.getAbsolutePath();
+ if (!unselectedFiles.contains(filePath)) {
+ unselectedFiles.add(filePath);
+ }
+ }
+ }
+ // Remove any newly selected files from the unselected files pool
+ for (Object object : transformationFiles) {
+ if (object instanceof IFile) {
+ IFile ifile = (IFile) object;
+ String ifilePath = FileUtil.getPath(ifile, true);
+ if (unselectedFiles.contains(ifilePath)) {
+ unselectedFiles.remove(ifilePath);
+ }
+ }
+ if (object instanceof File) {
+ File file = (File) object;
+ String filePath = file.getAbsolutePath();
+ if (unselectedFiles.contains(filePath)) {
+ unselectedFiles.remove(filePath);
+ }
+ }
+ }
+
+ // Update the map
+ dialogSection.put(TransformationWizardConstants.WIZARD_SELECTION_KEY, unselectedFiles.toArray(new String[unselectedFiles.size()]));
+ }
+
+ /**
+ *
+ * Used to set the checked state of the selected files inside the viewer
+ *
+ * @return
+ * The user's previously unchecked files in the configPage
+ */
+ public String[] getUnSelectionArray() {
+ return dialogSection.getArray(TransformationWizardConstants.WIZARD_SELECTION_KEY);
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataConfigComposite.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataConfigComposite.java
new file mode 100644
index 0000000..99e6b51
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataConfigComposite.java
@@ -0,0 +1,200 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.papyrus.infra.widgets.util.FileUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *
+ * Actual composite used to display the previously selected elements and the migration options
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public class DialogDataConfigComposite extends ImportConfigComposite {
+
+ protected AbstractDialogData dialogData;
+
+ protected SelectionListener buttonListener;
+
+ protected Button selectAll;
+
+ protected Button deselectAll;
+
+ /**
+ *
+ * Constructor used when a DialogData class is employed to store the different informations of the dialog
+ *
+ * @param parent
+ * The parent composite
+ * @param style
+ * The swt style used for this ConfigurationComposite
+ * @param dialogData
+ * The DialogData in which is stored all the necessary informations
+ */
+ public DialogDataConfigComposite(Composite parent, int style, AbstractDialogData dialogData) {
+ super(parent, style, dialogData.getConfig());
+ this.dialogData = dialogData;
+ this.setViewerInput(dialogData.getSelectedFiles());
+ }
+
+
+ /**
+ *
+ * Fills the composite with the selection buttons
+ *
+ * @param parent
+ * The parent composite
+ */
+ @Override
+ protected void createSelectionButtons(Composite parent) {
+ Composite buttonsComposite = new Composite(parent, SWT.NONE);
+ buttonsComposite.setLayout(new GridLayout());
+
+ buttonListener = new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ fireButtonSelectionEvent(event);
+ }
+ };
+
+ selectAll = new Button(buttonsComposite, SWT.PUSH);
+ selectAll.setData(true);
+ selectAll.setText("Select All");
+ selectAll.addSelectionListener(buttonListener);
+ selectAll.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+ deselectAll = new Button(buttonsComposite, SWT.PUSH);
+ deselectAll.setData(false);
+ deselectAll.setText("Deselect All");
+ deselectAll.addSelectionListener(buttonListener);
+ deselectAll.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+ }
+
+ /**
+ *
+ * Handles the selections inside the tableViewer
+ *
+ * @param event
+ * The event linked to the tableViewer's selection buttons
+ */
+ protected void fireButtonSelectionEvent(SelectionEvent event) {
+ listViewer.setAllChecked((Boolean) ((Button) event.widget).getData());
+ setTransformationFiles();
+ setUncheckedFiles();
+
+ if (dialogData != null) {
+ dialogData.setTransformationFiles(transformationFiles);
+ dialogData.setUncheckedFiles(uncheckedFiles);
+ }
+ }
+
+ @Override
+ protected void fireSelectionEvent(SelectionChangedEvent event) {
+ transformationFiles = new LinkedList<Object>(Arrays.asList(listViewer.getCheckedElements()));
+ setUncheckedFiles();
+
+ if (dialogData != null) {
+ dialogData.setTransformationFiles(transformationFiles);
+ dialogData.setUncheckedFiles(uncheckedFiles);
+ }
+ }
+
+ @Override
+ public void setViewerInput(Collection<Object> selectedFiles) {
+ listViewer.setInput(selectedFiles);
+
+ if (dialogData != null) {
+ if (dialogData.getUnSelectionArray() == null) {
+ // Default selection when opening the viewer without previous executions
+ listViewer.setAllChecked(true);
+ }
+ else {
+ // Recall the last unselected files to update the display
+ Collection<String> previousUnSelection = Arrays.asList(dialogData.getUnSelectionArray());
+ for (Object object : selectedFiles) {
+ if (object instanceof IFile) {
+ IFile ifile = (IFile) object;
+ String ifilePath = FileUtil.getPath(ifile, true);
+ if (previousUnSelection.contains(ifilePath)) {
+ listViewer.setChecked(object, false);
+ }
+ else {
+ listViewer.setChecked(object, true);
+ }
+ }
+ else if (object instanceof File) {
+ File file = (File) object;
+ String filePath = file.getAbsolutePath();
+ if (previousUnSelection.contains(filePath)) {
+ listViewer.setChecked(object, false);
+ }
+ else {
+ listViewer.setChecked(object, true);
+ }
+ }
+ }
+ }
+
+ setTransformationFiles();
+ setUncheckedFiles();
+
+ dialogData.setTransformationFiles(transformationFiles);
+ dialogData.setUncheckedFiles(uncheckedFiles);
+ }
+ }
+
+ /**
+ *
+ * Updates the unchecked files in the wizard's dialog settings to remember the last selection when reopening the wizard
+ *
+ */
+ protected void setUncheckedFiles() {
+ if (dialogData != null) {
+ uncheckedFiles = new LinkedList<Object>();
+ for (Object object : dialogData.getAllSelectedFiles()) {
+ if (!transformationFiles.contains(object)) {
+ uncheckedFiles.add(object);
+ }
+ }
+ dialogData.setUncheckedFiles(uncheckedFiles);
+ }
+ }
+
+ @Override
+ public void dispose() {
+ if (buttonListener != null) {
+ selectAll.removeSelectionListener(buttonListener);
+ deselectAll.removeSelectionListener(buttonListener);
+ }
+
+ super.dispose();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataTreeComposite.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataTreeComposite.java
new file mode 100644
index 0000000..1bf7b42
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/DialogDataTreeComposite.java
@@ -0,0 +1,342 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.widgets.util.FileUtil;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.papyrus.interoperability.common.internal.utils.CreateProject;
+import org.eclipse.papyrus.interoperability.common.wizard.TransformationWizardConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+
+
+/**
+ *
+ * Actual composite used to display the workspace and select the wanted elements
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public class DialogDataTreeComposite extends ImportTreeComposite {
+
+ /**
+ * The name of the newly created project's folders
+ */
+ public static final String SRC_FOLDER = "src"; //$NON-NLS-1$
+
+ public static final String RSC_FOLDER = "resources"; //$NON-NLS-1$
+
+ protected AbstractDialogData dialogData;
+
+ protected String systemDialogFiles;
+
+ protected SelectionListener selectionButtonListener;
+
+ protected SelectionListener systemSelectionListener;
+
+ protected Button selectAllButton;
+
+ protected Button deselectAllButton;
+
+ protected Button systemSelectionButton;
+
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parent
+ * The parent composite
+ * @param style
+ * The swt style used for this ConfigurationComposite
+ * @param dialogData
+ * The DialogData in which is stored all the necessary informations
+ */
+ public DialogDataTreeComposite(Composite parent, int style, AbstractDialogData dialogData) {
+ super(parent, style, dialogData.getExtensions(), dialogData.getExtensionsNames());
+
+ this.dialogData = dialogData;
+
+ ISelection treeSelection = treeViewer.getSelection();
+ if (treeSelection instanceof StructuredSelection) {
+ setSelectedFiles(((StructuredSelection) treeSelection).toArray());
+ this.dialogData.setSelectedFiles(getSelectedFiles());
+ }
+ }
+
+
+ @Override
+ protected void fireTreeSelectionEvent(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+
+ if (selection instanceof IStructuredSelection) {
+ // Updates the selected files
+ selectedFiles.clear();
+ IStructuredSelection sSelection = (IStructuredSelection) selection;
+ setSelectedFiles(sSelection.toArray());
+
+ if (dialogData != null) {
+ dialogData.setSelectedFiles(selectedFiles);
+ }
+ }
+
+ }
+
+ @Override
+ protected void createSelectionButtons(Composite parent) {
+ // The composite will contain three buttons, two general selection (all and none) and one for selections using a fileDialog window
+ selectionButtonsComposite = new Composite(parent, SWT.NONE);
+ selectionButtonsComposite.setLayout(new GridLayout());
+
+ systemSelectionListener = new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ fireSystemBrowseEvent(event);
+ }
+ };
+
+ systemSelectionButton = new Button(selectionButtonsComposite, SWT.PUSH);
+ systemSelectionButton.setText("File System Selection");
+ systemSelectionButton.addSelectionListener(systemSelectionListener);
+ systemSelectionButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
+
+
+ selectionButtonListener = new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ fireButtonSelectionEvent(event);
+ }
+ };
+
+ selectAllButton = new Button(selectionButtonsComposite, SWT.PUSH);
+ selectAllButton.setText("Select All");
+ selectAllButton.setData(true);
+ selectAllButton.addSelectionListener(selectionButtonListener);
+ selectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+ deselectAllButton = new Button(selectionButtonsComposite, SWT.PUSH);
+ deselectAllButton.setText("Deselect All");
+ deselectAllButton.setData(false);
+ deselectAllButton.addSelectionListener(selectionButtonListener);
+ deselectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+ }
+
+
+ /**
+ *
+ * Handles the selectAll/deselectAll options
+ *
+ * @param event
+ * The event linked to the selection buttons
+ */
+ protected void fireButtonSelectionEvent(SelectionEvent event) {
+ if ((Boolean) ((Button) event.widget).getData()) {
+ treeViewer.getTree().selectAll();
+ // Updates the selectedFiles collection
+ getNestedFiles(((IStructuredSelection) treeViewer.getSelection()).toArray());
+
+ if (dialogData != null) {
+ dialogData.setSelectedFiles(selectedFiles);
+ }
+ } else {
+ treeViewer.getTree().deselectAll();
+ selectedFiles.clear();
+
+ if (dialogData != null) {
+ dialogData.setSelectedFiles(selectedFiles);
+ }
+ }
+ }
+
+ /**
+ *
+ * handle the selections outside of the workspace
+ *
+ * @param event
+ * The event linked to the button
+ */
+ protected void fireSystemBrowseEvent(SelectionEvent event) {
+
+ // Clears the previous selection
+ dialogData.getSystemSelectedFiles().clear();
+ // Instantiates a new selection window
+ FileDialog dialog = new FileDialog(treeViewerComposite.getShell(), SWT.MULTI);
+ dialog.setText("Select the files to import");
+ dialog.setFilterExtensions(dialogData.getExtensions());
+ dialog.setFilterNames(dialogData.getExtensionsNames());
+
+ if (dialogData != null) {
+ // Fetches the last visited folder or uses the Home of the current user
+ if (dialogData.dialogSection.get(TransformationWizardConstants.FILEDIALOG_SELECTION_KEY) != null) {
+ dialog.setFilterPath(dialogData.dialogSection.get(TransformationWizardConstants.FILEDIALOG_SELECTION_KEY));
+ } else {
+ String homeFolder = System.getProperty("user.home"); //$NON-NLS-1$
+ dialog.setFilterPath(homeFolder);
+ }
+
+ // Opens the selection window and stores the selected files
+ systemDialogFiles = dialog.open();
+ if (systemDialogFiles != null) {
+ // stores the last folder/directory visited
+ dialogData.dialogSection.put(TransformationWizardConstants.FILEDIALOG_SELECTION_KEY, systemDialogFiles);
+ String[] names = dialog.getFileNames();
+ // Empty the list to avoid remembering old selections
+ systemPaths.clear();
+ for (int i = 0, n = names.length; i < n; i++) {
+ StringBuffer buf = new StringBuffer(dialog.getFilterPath());
+ if (buf.charAt(buf.length() - 1) != File.separatorChar) {
+ buf.append(File.separatorChar);
+ }
+ buf.append(names[i]);
+ systemPaths.add(buf.toString());
+ }
+ // clear the list to accept the new input
+ dialogData.getSystemSelectedFiles().clear();
+ dialogData.setSystemSelectedFiles(systemPaths);
+ }
+ }
+
+ Collection<Object> systemSelection = dialogData.getSystemSelectedFiles();
+ getProjects(systemSelection);
+ if (!systemSelection.isEmpty()) {
+ // The selected files are inside a project
+ if (!foundProjects.isEmpty()) {
+ for (Object object : foundProjects) {
+ if (isWorkspaceObject(object)) {
+ revealSelectedFiles(systemSelection);
+ }
+ // Creates the project before revealing any imported files
+ else if (importProjects(foundProjects)) {
+ revealSelectedFiles(systemSelection);
+ }
+ }
+ }
+ // We need to create a project in order to house the selected files
+ else if (systemDialogFiles != null) {
+ try {
+ List<String> srcFolders = new ArrayList<String>();
+ srcFolders.add(TransformationWizardConstants.SRC_FOLDER);
+ CreateProject placeHolder = new CreateProject(dialogData.getSystemSelectedFiles());
+ IProject newProject = placeHolder.getCreatedProject();
+ Collection<Object> revealList = new ArrayList<Object>();
+ // This case can happen by pressing the cancel button and therefore interrupting the creation of the project
+ if (newProject != null) {
+ for (IResource resource : Arrays.asList(newProject.getFolder(TransformationWizardConstants.RSC_FOLDER).members())) {
+ if (resource instanceof IFile) {
+ revealList.add((IFile) resource);
+ }
+ }
+ revealSelectedFiles(revealList);
+ }
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+
+ }
+
+ /**
+ *
+ * Verify if the provided object is or is not inside the workspace
+ *
+ * @param object
+ * The object
+ * @return
+ * True or False
+ */
+ protected boolean isWorkspaceObject(Object object) {
+ if (object instanceof File) {
+ File file = (File) object;
+ IFile ifile = FileUtil.getIFile(file.getAbsolutePath());
+ // Assumes that any files outside the workbench are not IFiles and therefore wont be find, i.e. are null
+ if (ifile != null) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ *
+ * Handles the creation of the new workspace projects in case of a selection outside of an existing project or workspace
+ *
+ * @param foundProjects
+ * The projects previously found
+ * @return
+ * The success of the creation
+ */
+ protected boolean importProjects(Collection<Object> foundProjects) {
+ Collection<Object> importedProjects = new LinkedList<Object>();
+ boolean importStatus = false;
+ for (Object object : foundProjects) {
+ if (object instanceof File) {
+ File file = (File) object;
+ Path filePath = new Path(file.getAbsolutePath());
+ try {
+ IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription(filePath);
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName());
+ importedProjects.add(project);
+ project.create(description, null);
+ project.open(null);
+ importStatus = true;
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+
+ dialogData.setImportedProjects(importedProjects);
+ return importStatus;
+ }
+
+ @Override
+ public void dispose() {
+ if (selectionButtonListener != null) {
+ selectAllButton.removeSelectionListener(selectionButtonListener);
+ deselectAllButton.removeSelectionListener(selectionButtonListener);
+ }
+ if (systemSelectionListener != null) {
+ systemSelectionButton.removeSelectionListener(systemSelectionListener);
+ }
+
+ super.dispose();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportConfigComposite.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportConfigComposite.java
new file mode 100644
index 0000000..d6cd317
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportConfigComposite.java
@@ -0,0 +1,196 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.papyrus.infra.properties.ui.runtime.DisplayEngine;
+import org.eclipse.papyrus.infra.properties.ui.util.PropertiesDisplayHelper;
+import org.eclipse.papyrus.infra.widgets.util.FileUtil;
+import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *
+ * Generic and reusable composite used to display the previously selected elements and the migration options
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public abstract class ImportConfigComposite extends Composite {
+
+ protected ThreadConfig config;
+
+ protected Collection<Object> transformationFiles;
+
+ protected CheckboxTableViewer listViewer;
+
+ protected ISelectionChangedListener listListener;
+
+ protected DisplayEngine displayEngine;
+
+ protected Collection<Object> uncheckedFiles;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parent
+ * The parent composite
+ * @param style
+ * The swt style used for this ConfigurationComposite
+ * @param config
+ * The configuration used to display the transformation options
+ */
+ public ImportConfigComposite(Composite parent, int style, ThreadConfig config) {
+ super(parent, style);
+ this.setLayout(new GridLayout(1, false));
+ this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ this.config = config;
+
+ Composite filesComposite = new Composite(this, SWT.BORDER);
+ filesComposite.setLayout(new FillLayout());
+ filesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Composite configComposite = new Composite(this, SWT.BORDER);
+ configComposite.setLayout(new FillLayout());
+ configComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+ createFilesComposite(filesComposite);
+
+ createParamComposite(configComposite);
+ }
+
+
+ /**
+ *
+ * Fills the selection area with all the files selected previously
+ *
+ * @param parent
+ * The parent composite
+ */
+ protected void createFilesComposite(Composite parent) {
+ Composite listComposite = new Composite(parent, SWT.NONE);
+ GridLayout gridLayout = new GridLayout(2, false);
+ listComposite.setLayout(gridLayout);
+
+ listViewer = CheckboxTableViewer.newCheckList(listComposite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ GridData viewerGrid = new GridData(SWT.FILL, SWT.FILL, true, true);
+ listViewer.getTable().setLayoutData(viewerGrid);
+
+ listViewer.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof IFile) {
+ return FileUtil.getPath((IFile) element, true);
+ } else if (element instanceof File) {
+ return ((File) element).getAbsolutePath();
+ } else {
+ return "Not an IFile, wrong type to transform";
+ }
+ }
+ });
+
+ listViewer.setContentProvider(new ArrayContentProvider());
+
+ listListener = new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ fireSelectionEvent(event);
+ }
+ };
+
+ listViewer.addSelectionChangedListener(listListener);
+
+ setTransformationFiles();
+
+ createSelectionButtons(listComposite);
+
+ }
+
+
+ /**
+ *
+ * Used to update the display from a changed selection in the ConfigPage
+ *
+ * @param selectedFiles
+ * The new list of selected files
+ */
+ abstract void setViewerInput(Collection<Object> selectedFiles);
+
+ /**
+ *
+ * Abstract method to be implemented by the child in order to create the useful buttons to manipulate the tableViewer's elements
+ *
+ * @param parent
+ * The parent composite in which the new buttons will be created
+ */
+ abstract void createSelectionButtons(Composite parent);
+
+ /**
+ *
+ * Abstract method to be implemented by the child in order to handle the transformation options
+ *
+ * @param event
+ * The event linked to the configuration's selection buttons
+ */
+ abstract void fireSelectionEvent(SelectionChangedEvent event);
+
+
+ /**
+ *
+ * Updates the list of files to be transformed
+ *
+ */
+ public void setTransformationFiles() {
+ transformationFiles = new LinkedList<Object>(Arrays.asList(listViewer.getCheckedElements()));
+ }
+
+
+ /**
+ *
+ * Fills the composite with the configuration parameters
+ *
+ * @param parent
+ * The parent composite
+ */
+ public void createParamComposite(Composite parent) {
+ displayEngine = PropertiesDisplayHelper.display(config, parent);
+ }
+
+
+ @Override
+ public void dispose() {
+ if (displayEngine != null) {
+ displayEngine.dispose();
+ }
+ if (listListener != null) {
+ listViewer.removeSelectionChangedListener(listListener);
+ }
+ super.dispose();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportTreeComposite.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportTreeComposite.java
new file mode 100644
index 0000000..dcbc5c5
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/ImportTreeComposite.java
@@ -0,0 +1,540 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
+import org.eclipse.papyrus.infra.services.labelprovider.service.impl.LabelProviderServiceImpl;
+import org.eclipse.papyrus.infra.widgets.providers.IGraphicalContentProvider;
+import org.eclipse.papyrus.infra.widgets.providers.PatternViewerFilter;
+import org.eclipse.papyrus.infra.widgets.providers.WorkspaceContentProvider;
+import org.eclipse.papyrus.interoperability.common.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+
+/**
+ *
+ * Generic and reusable composite used to display the workspace and select the wanted elements
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public abstract class ImportTreeComposite extends Composite {
+
+ protected TreeViewer treeViewer;
+
+ protected LabelProviderService labelProviderService;
+
+ protected ILabelProvider treeViewerlabelProvider;
+
+ protected WorkspaceContentProvider treeViewercontentProvider;
+
+ protected ISelectionChangedListener treeViewerListener;
+
+ protected final List<String> filterNames;
+
+ protected final List<String> filterExtensions;
+
+ protected Collection<Object> selectedFiles;
+
+ protected Collection<String> systemPaths;
+
+ protected FillLayout layout;
+
+ protected Composite treeViewerComposite;
+
+ protected Composite selectionButtonsComposite;
+
+ protected Collection<Object> foundProjects;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parent
+ * The parent composite
+ * @param style
+ * The swt style used for this ConfigurationComposite
+ * @param extensions
+ * The default extensions used to filter the displayed results
+ * @param extensionsNames
+ * The displayed names of those filters
+ */
+ public ImportTreeComposite(Composite parent, int style, String[] extensions, String[] extensionsNames) {
+ super(parent, style);
+ this.setLayout(new GridLayout(2, false));
+ this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ selectedFiles = new LinkedList<Object>();
+ filterNames = new LinkedList<String>();
+ filterExtensions = new LinkedList<String>();
+ systemPaths = new LinkedList<String>();
+ foundProjects = new LinkedList<Object>();
+
+ createTreeViewerComposite(this, extensions, extensionsNames);
+
+ createSelectionButtons(this);
+ }
+
+
+ /**
+ *
+ * Creates the visual representation of the workspace
+ *
+ * @param parent
+ * The parent Composite
+ * @param extensions
+ * The default extensions used to filter the displayed results
+ * @param extensionsNames
+ * The displayed names of those filters
+ */
+ private void createTreeViewerComposite(Composite parent, String[] extensions, String[] extensionsNames) {
+ treeViewerComposite = new Composite(parent, SWT.NONE);
+ treeViewerComposite.setLayout(new GridLayout(1, true));
+ treeViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ Composite beforeTreeComposite = new Composite(treeViewerComposite, SWT.NONE);
+
+ Composite treeComposite = new Composite(treeViewerComposite, SWT.NONE);
+ treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ layout = new FillLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ treeComposite.setLayout(layout);
+
+ treeViewer = new TreeViewer(treeComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer.setFilters(new ViewerFilter[] { new PatternFilter() });
+
+ labelProviderService = new LabelProviderServiceImpl();
+ try {
+ labelProviderService.startService();
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+
+ treeViewerlabelProvider = labelProviderService.getLabelProvider();
+ treeViewercontentProvider = new WorkspaceContentProvider();
+ setFilters(extensions, extensionsNames);
+
+ treeViewercontentProvider.setExtensionFilters(new LinkedHashMap<String, String>());
+ for (int i = 0; i < Math.min(filterNames.size(), filterExtensions.size()); i++) {
+ treeViewercontentProvider.addExtensionFilter(filterExtensions.get(i), filterNames.get(i));
+ }
+
+ treeViewer.setContentProvider(treeViewercontentProvider);
+ treeViewer.setLabelProvider(treeViewerlabelProvider);
+
+ defaultViewerInput();
+
+ treeViewerListener = new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ fireTreeSelectionEvent(event);
+ }
+ };
+
+ treeViewer.addSelectionChangedListener(treeViewerListener);
+
+ // This is used to display both of the filters (before and after the treeViewer)
+ if (treeViewercontentProvider instanceof IGraphicalContentProvider) {
+ IGraphicalContentProvider graphicalContentProvider = treeViewercontentProvider;
+
+ beforeTreeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ layout = new FillLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ beforeTreeComposite.setLayout(layout);
+ graphicalContentProvider.createBefore(beforeTreeComposite);
+ beforeTreeComposite.moveAbove(treeViewer.getTree());
+
+ Composite afterTreeComposite = new Composite(treeViewerComposite, SWT.NONE);
+ layout = new FillLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ afterTreeComposite.setLayout(layout);
+ afterTreeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ graphicalContentProvider.createAfter(afterTreeComposite);
+ }
+
+ }
+
+ /**
+ *
+ * Sets the filters for the treeViewer, matching the names with the extensions
+ *
+ * @param filterExtensions
+ * The extensions
+ * @param filterNames
+ * The associated names
+ */
+ protected void setFilters(String[] filterExtensions, String[] filterNames) {
+ if (filterExtensions.length != filterNames.length) {
+ // This is a simple warning. Only valid filters will be retained.
+ Activator.log.warn("FilterExtensions and FilterNames do not match");
+ }
+
+ setFilterNames(getFilterLabels(filterNames, filterExtensions));
+ setFilterExtensions(filterExtensions);
+ }
+
+ /**
+ *
+ * Builds the filter labels to be displayed
+ *
+ * @param filterNames
+ * @param filterExtensions
+ * @return
+ * The array containing the built labels
+ */
+ protected String[] getFilterLabels(String[] filterNames, String[] filterExtensions) {
+ int size = Math.min(filterNames.length, filterExtensions.length);
+ String[] filters = new String[size];
+ for (int i = 0; i < size; i++) {
+ filters[i] = filterNames[i] + " (" + filterExtensions[i] + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return filters;
+ }
+
+ /**
+ *
+ * Fills the local array to be manipulated
+ *
+ * @param filterExtensions
+ * The input extensions
+ */
+ protected void setFilterExtensions(String[] filterExtensions) {
+ this.filterExtensions.clear();
+ this.filterExtensions.addAll(Arrays.asList(filterExtensions));
+ }
+
+ /**
+ *
+ * Fills the local array to be manipulated
+ *
+ * @param filterNames
+ * The input names
+ */
+ protected void setFilterNames(String[] filterNames) {
+ this.filterNames.clear();
+ this.filterNames.addAll(Arrays.asList(filterNames));
+ }
+
+
+ /**
+ *
+ * This method allows to set the default input of the treeViewer
+ *
+ */
+ protected void defaultViewerInput() {
+ treeViewer.setInput(File.listRoots());
+ // Gets the selection in the workspace at the time of the launch
+ ISelection workbenchSelection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
+ // Sets the first selection of the treeviewer from the selection in the workspace
+ revealSelection(workbenchSelection);
+ treeViewer.setSelection(workbenchSelection, true);
+ }
+
+
+ /**
+ *
+ * Abstract method to be implemented by the child in order to create the useful buttons to manipulate the tree's elements
+ *
+ * @param parent
+ * The parent composite in which the new buttons will be created
+ */
+ abstract void createSelectionButtons(Composite parent);
+
+ /**
+ *
+ * Abstract method to be implemented by the child in order to handle the treeViewer element selection
+ *
+ * @param event
+ * The event linked to the selections inside the treeViewer
+ */
+ abstract void fireTreeSelectionEvent(SelectionChangedEvent event);
+
+
+ /**
+ *
+ * This method reveals the elements selected outside of the workspace or from the workspace selection at launch by expanding the tree
+ *
+ * @param importedFiles
+ * The list of selected files
+ */
+ protected void revealSelectedFiles(Collection<Object> importedFiles) {
+ // this method calls to expand any folders or projects containg the selected files in order to show the workspace selection
+ Collection<IFile> ifiles = new ArrayList<IFile>();
+ // Collection<IProject> iprojects = new ArrayList<IProject>();
+ // Collection<IFolder> ifolders = new ArrayList<IFolder>();
+ if (importedFiles != null && !importedFiles.isEmpty()) {
+ for (Object object : importedFiles) {
+ treeViewer.refresh();
+ if (object instanceof File) {
+ File file = (File) object;
+ IFile ifile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(file.getAbsolutePath()));
+ if (ifile != null) {
+ ifiles.add(ifile);
+ revealTreeElement(ifile);
+ }
+ }
+ if (object instanceof IFile) {
+ IFile ifile = (IFile) object;
+ ifiles.add(ifile);
+ revealTreeElement(ifile);
+ }
+ // if (object instanceof IFolder) {
+ // IFolder ifolder = (IFolder) object;
+ // ifolders.add(ifolder);
+ // revealTreeElement(ifolder);
+ // }
+ // if (object instanceof IProject) {
+ // IProject iproject = (IProject) object;
+ // iprojects.add(iproject);
+ // // As a project is a root element, no need to expand it
+ // }
+ }
+ }
+
+ treeViewer.setSelection(new StructuredSelection(ifiles.toArray()), true);
+ // treeViewer.setSelection(new StructuredSelection(ifolders.toArray()), true);
+ // treeViewer.setSelection(new StructuredSelection(iprojects.toArray()), true);
+ }
+
+ /**
+ *
+ * Handles the workspace selection
+ *
+ * @param iselection
+ * The selection
+ */
+ protected void revealSelection(ISelection iselection) {
+ if (iselection instanceof IStructuredSelection) {
+ IStructuredSelection sselection = (IStructuredSelection) iselection;
+ revealSelectedFiles(Arrays.asList(sselection.toArray()));
+ }
+ }
+
+ /**
+ *
+ * Reveal each elements from the selected elements list
+ *
+ * @param object
+ * The selected object
+ */
+ protected void revealTreeElement(Object object) {
+ // verify the possibility of getting the file's parent and that the root directory is not already selected
+ if (object instanceof IFile && !(object instanceof IProject)) {
+ IFile ifile = (IFile) object;
+ treeViewer.setExpandedState(ifile.getParent(), true);
+ if (!(ifile.getParent() instanceof IProject)) {
+ revealTreeElement(ifile.getParent());
+ }
+ }
+ if (object instanceof IFolder && !(object instanceof IProject)) {
+ IFolder ifolder = (IFolder) object;
+ treeViewer.setExpandedState(ifolder.getParent(), true);
+ if (!(ifolder.getParent() instanceof IProject)) {
+ revealTreeElement(ifolder.getParent());
+ }
+ }
+ }
+
+ /**
+ *
+ * This method is used to get the projects containing the selected objects
+ *
+ * @param systemSelection
+ * The selection outside of the workspace
+ * @return
+ * The list of projects found
+ */
+ protected Collection<Object> getProjects(Collection<Object> systemSelection) {
+ if (systemSelection != null && !systemSelection.isEmpty()) {
+ for (Object object : systemSelection) {
+ if (object instanceof File) {
+ File file = (File) object;
+ getProject(file);
+ }
+ }
+ }
+ return foundProjects;
+ }
+
+ /**
+ *
+ * This method is used to get the projects containing the file
+ *
+ * @param file
+ * The selected file
+ */
+ protected void getProject(File file) {
+ File parentFile = file.getParentFile();
+ if (parentFile == null) {
+ // No containing project has been found
+ return;
+ }
+
+ Collection<File> parentChildren = Arrays.asList(parentFile.listFiles());
+ for (File nestedFile : parentChildren) {
+ // String fileExtension = Files.getFileExtension(nestedFile.getAbsolutePath());
+ String fileExtension = getFileExtensions(nestedFile);
+ if (fileExtension.equals(".project") && !foundProjects.contains(nestedFile)) { // $NON-NLS-1$
+ // A containing project has been found
+ foundProjects.add(nestedFile);
+ return;
+ }
+ }
+
+ getProject(parentFile);
+ }
+
+ /**
+ *
+ * This method gathers the file extensions in order to filter them
+ *
+ * @param file
+ * The file
+ * @return
+ * The file's extension
+ */
+ protected String getFileExtensions(File file) {
+ String fileName = file.getName();
+ if (fileName.lastIndexOf(".") != -1 /* && fileName.lastIndexOf(".") != 0 */) { // $NON-NLS-1$
+ return fileName.substring(fileName.lastIndexOf(".")); // $NON-NLS-1$
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ *
+ * Constructs the list of the treeViewer's selected files
+ *
+ * @param elements
+ */
+ public void setSelectedFiles(Object[] elements) {
+ // get the viewer selection to obtain the filtered files
+ getNestedFiles(elements);
+ }
+
+ /**
+ *
+ * getter used to access the selectedFiles list
+ *
+ * @return
+ * the list of selected files
+ */
+ public Collection<Object> getSelectedFiles() {
+ return selectedFiles;
+ }
+
+ /**
+ *
+ * Gets all the files from the user's selection in the viewer and updates the local selection list
+ *
+ * @param nestedElements
+ * The array containing the selected elements, be they files or folders
+ */
+ protected void getNestedFiles(Object[] nestedElements) {
+ Collection<Object> projectList = new LinkedList<Object>();
+ Collection<Object> folderList = new LinkedList<Object>();
+ List<PatternViewerFilter> currentFilters = new ArrayList<PatternViewerFilter>();
+ for (ViewerFilter filter : treeViewer.getFilters()) {
+ if (filter instanceof PatternViewerFilter) {
+ currentFilters.add((PatternViewerFilter) filter);
+ }
+ }
+
+ for (Object element : nestedElements) {
+ if (element instanceof IProject) {
+ projectList.add(element);
+ }
+ if (element instanceof IFolder) {
+ folderList.add(element);
+ }
+ if (element instanceof IFile) {
+ Boolean isVisible = false;
+ IFile selectedFile = (IFile) element;
+ String fileExtension = "*." + selectedFile.getFileExtension(); //$NON-NLS-1$
+ if (filterExtensions.contains(fileExtension) && !selectedFiles.contains(selectedFile)) {
+ isVisible = true;
+ }
+ for (int index = 0; index < currentFilters.size() && isVisible; index++) {
+ isVisible = currentFilters.get(index).isVisible(treeViewer, selectedFile.getParent(), selectedFile);
+ }
+ if (isVisible) {
+ selectedFiles.add(selectedFile);
+ }
+ }
+ }
+
+ if (projectList.size() > 0) {
+ for (Object element : projectList) {
+ IProject selectedProject = (IProject) element;
+ try {
+ getNestedFiles(selectedProject.members());
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+
+ if (folderList.size() > 0) {
+ for (Object element : folderList) {
+ IFolder selectedFolder = (IFolder) element;
+ try {
+ getNestedFiles(selectedFolder.members());
+ } catch (CoreException e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void dispose() {
+ if (treeViewerListener != null) {
+ treeViewer.removeSelectionChangedListener(treeViewerListener);
+ }
+ super.dispose();
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationConfigPage.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationConfigPage.java
new file mode 100644
index 0000000..4c065d1
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationConfigPage.java
@@ -0,0 +1,73 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *
+ * Page displaying the selected elements and the migration's configuration options
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public class TransformationConfigPage extends WizardPage {
+
+ protected DialogDataConfigComposite dialogDataConfigComposite;
+
+ protected AbstractDialogData dialogData;
+
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param dialogData
+ * The instance used to get the previously selected files from both the settings file and the previous page selection,
+ * as well as the configuration used to display the transformation options
+ */
+ public TransformationConfigPage(AbstractDialogData dialogData) {
+ super("Parameters selection");
+ setTitle("Define the transformation parameters");
+ setDescription("Select the files and the configuration options for the transformation");
+ // String iconPath = "icons/import_wiz_75x66.png"; //$NON-NLS-1$
+ // ImageDescriptor imgDescriptior = Activator.getDefault().getImageDescriptor(iconPath);
+ // setImageDescriptor(imgDescriptior);
+
+ this.dialogData = dialogData;
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+ Composite pageComposite = new Composite(parent, SWT.NONE);
+ pageComposite.setLayout(new GridLayout());
+
+ dialogDataConfigComposite = new DialogDataConfigComposite(pageComposite, SWT.NONE, dialogData);
+
+ setControl(pageComposite);
+ }
+
+ /**
+ *
+ * Used to update the input of the nested composite's viewer
+ *
+ */
+ public void resetViewerInput() {
+ dialogDataConfigComposite.setViewerInput(dialogData.getAllSelectedFiles());
+ }
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationSelectionPage.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationSelectionPage.java
new file mode 100644
index 0000000..d1d69b6
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/wizard/pages/TransformationSelectionPage.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Quentin Le Menez (CEA LIST) quentin.lemenez@cea.fr - Initial API and implementation
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 496176
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.wizard.pages;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *
+ * Page displaying the workspace and its elements
+ *
+ * @author Quentin Le Menez
+ *
+ */
+public class TransformationSelectionPage extends WizardPage {
+
+ protected AbstractDialogData dialogData;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param dialogData
+ * The instance used to get the selection from the workspace and the filters
+ */
+ public TransformationSelectionPage(AbstractDialogData dialogData) {
+ super("Workspace selection");
+ setTitle("Select a scope for the transformation");
+ setDescription("Select the folders or files for the transformation");
+ // String iconPath = "icons/import_wiz_75x66.png"; //$NON-NLS-1$
+ // ImageDescriptor imgDescriptior = Activator.getDefault().getImageDescriptor(iconPath);
+ // setImageDescriptor(imgDescriptior);
+
+ this.dialogData = dialogData;
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+ Composite pageComposite = new Composite(parent, SWT.NONE);
+ pageComposite.setLayout(new GridLayout());
+
+ new DialogDataTreeComposite(pageComposite, SWT.NONE, dialogData);
+
+ setControl(pageComposite);
+ }
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/ui/MigrationParameters.ecore b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/MigrationParameters.ecore
new file mode 100644
index 0000000..d5107f3
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/MigrationParameters.ecore
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="MigrationParameters" nsURI="http:///MigrationParameters.ecore"
+ nsPrefix="MigrationParameters">
+ <eClassifiers xsi:type="ecore:EClass" name="AdvancedConfig" eSuperTypes="#//ThreadConfig">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="mappingParameters" ordered="false"
+ lowerBound="1" eType="#//MappingParameters" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="removeUnmappedDiagrams"
+ ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If true, the diagrams which were not migrated will be removed. Otherwise, only the successfully imported diagrams will be removed"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="convertOpaqueExpressionToLiteralString"
+ ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If true, the Opaque Expressions with a single body and no language (or a single empty language) will be converted to LiteralString"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="removeUnmappedProfilesAndStereotypes"
+ ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If true, all unsupported RSA profiles and stereotypes will be deleted at the end of the transformation"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="removeUnmappedAnnotations"
+ ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If true, the unmapped RSA EAnnotations will be deleted from the imported model"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="alwaysAcceptSuggestedMappings"
+ ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="false">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="If true, the Transformation will not open a dialog to ask user-confirmation for the dependency mappings. The tool will automatically keep going by "guessing" the proper mapping"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ThreadConfig">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxThreads" ordered="false"
+ unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Integer"
+ defaultValueLiteral="2">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The maximum number of threads to use during the migration.
More threads will provide faster results, at the cost of memory consumption."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MappingParameters">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="uriMappings" ordered="false"
+ upperBound="-1" eType="#//URIMapping" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="When models/libraries have been migrated separately, maps the libraries imported from RSA to their Papyrus equivalent"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="profileUriMappings" ordered="false"
+ upperBound="-1" eType="#//URIMapping" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="When profiles have been migrated separately, maps the profiles imported from RSA to their Papyrus equivalent"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="URIMapping">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceURI" ordered="false"
+ unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetURI" ordered="false"
+ unique="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.di b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.di
new file mode 100644
index 0000000..bf9abab
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.genmodel b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.genmodel
new file mode 100644
index 0000000..0791ca8
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.genmodel
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel"
+ copyrightText="Copyright (c) 2014 CEA LIST.

All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html

Contributors:
 Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
 Vincent Lorenzo (CEA-LIST) vincent.lorenzo@cea.fr - bug 496176
"
+ modelDirectory="/org.eclipse.papyrus.interoperability.common/src-gen" editDirectory="/org.eclipse.papyrus.interoperability.common.edit/src-gen"
+ editorDirectory="/org.eclipse.papyrus.interoperability.common.editor/src-gen"
+ modelPluginID="org.eclipse.papyrus.interoperability.common" modelName="MigrationParameters"
+ editPluginClass="org.eclipse.papyrus.interoperability.common.edit.MigrationParameters.provider.MigrationParametersEditPlugin"
+ editorPluginClass="org.eclipse.papyrus.interoperability.common.editor.MigrationParameters.presentation.MigrationParametersEditorPlugin"
+ nonNLSMarkers="true" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+ testsDirectory="/org.eclipse.papyrus.interoperability.common.tests/src-gen" testSuiteClass="org.eclipse.papyrus.interoperability.common.tests.MigrationParameters.tests.MigrationParametersAllTests"
+ importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="8.0" copyrightFields="false"
+ providerRootExtendsClass="" editPluginID="org.eclipse.papyrus.interoperability.common.edit"
+ editorPluginID="org.eclipse.papyrus.interoperability.common.editor" usedGenPackages="../../org.eclipse.uml2.types/model/Types.genmodel#//types"
+ operationReflection="true" importOrganizing="true" oSGiCompatible="true">
+ <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+ <details key="OPPOSITE_ROLE_NAMES" value="IGNORE"/>
+ <details key="DUPLICATE_FEATURES" value="DISCARD"/>
+ <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+ <details key="PROPERTY_DEFAULT_EXPRESSIONS" value="IGNORE"/>
+ <details key="DUPLICATE_FEATURE_INHERITANCE" value="DISCARD"/>
+ <details key="COMMENTS" value="PROCESS"/>
+ <details key="DERIVED_FEATURES" value="PROCESS"/>
+ <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+ <details key="DUPLICATE_OPERATION_INHERITANCE" value="DISCARD"/>
+ <details key="REDEFINING_OPERATIONS" value="REPORT"/>
+ <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+ <details key="UNION_PROPERTIES" value="REPORT"/>
+ <details key="DUPLICATE_OPERATIONS" value="DISCARD"/>
+ <details key="NON_API_INVARIANTS" value="IGNORE"/>
+ <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+ <details key="SUBSETTING_PROPERTIES" value="REPORT"/>
+ <details key="OPERATION_BODIES" value="IGNORE"/>
+ <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+ <details key="UNTYPED_PROPERTIES" value="REPORT"/>
+ <details key="REDEFINING_PROPERTIES" value="REPORT"/>
+ <details key="INVOCATION_DELEGATES" value="IGNORE"/>
+ <details key="VALIDATION_DELEGATES" value="IGNORE"/>
+ </genAnnotations>
+ <foreignModel>migrationParameters.uml</foreignModel>
+ <genPackages xsi:type="genmodel:GenPackage" prefix="MigrationParameters" basePackage="org.eclipse.papyrus.interoperability.common"
+ disposableProviderFactory="true" ecorePackage="MigrationParameters.ecore#/">
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="MigrationParameters.ecore#//AdvancedConfig">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference MigrationParameters.ecore#//AdvancedConfig/mappingParameters"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//AdvancedConfig/removeUnmappedDiagrams"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//AdvancedConfig/convertOpaqueExpressionToLiteralString"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//AdvancedConfig/removeUnmappedProfilesAndStereotypes"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//AdvancedConfig/removeUnmappedAnnotations"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//AdvancedConfig/alwaysAcceptSuggestedMappings"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="MigrationParameters.ecore#//ThreadConfig">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//ThreadConfig/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//ThreadConfig/maxThreads"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="MigrationParameters.ecore#//MappingParameters">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference MigrationParameters.ecore#//MappingParameters/uriMappings"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference MigrationParameters.ecore#//MappingParameters/profileUriMappings"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="MigrationParameters.ecore#//URIMapping">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//URIMapping/sourceURI"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute MigrationParameters.ecore#//URIMapping/targetURI"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.notation b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.notation
new file mode 100644
index 0000000..2aa1d57
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.notation
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <notation:Diagram xmi:id="_ffjeAEL1EeSSlqpbHKLCqA" type="PapyrusUMLClassDiagram" name="Config" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_tKu0kUL1EeSSlqpbHKLCqA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_tKu0k0L1EeSSlqpbHKLCqA" type="Class_NameLabel"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_tKu0lEL1EeSSlqpbHKLCqA" type="Class_AttributeCompartment">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_So1agHZLEeSwiJkQAQl2Jg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_So1agXZLEeSwiJkQAQl2Jg" key="visible" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_AblmMFOJEeSGbsrkEkSKIA" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_GLzRUFOJEeSGbsrkEkSKIA" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_AYwUoFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_AblmMVOJEeSGbsrkEkSKIA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WuBhgEL2EeSSlqpbHKLCqA" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_aEtJcEL2EeSSlqpbHKLCqA" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_Wt4XkEL2EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WuBhgUL2EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_t5AP0EL1EeSSlqpbHKLCqA" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_Ko_pYEL2EeSSlqpbHKLCqA" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_t42e0EL1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_t5AP0UL1EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_65zMoEL1EeSSlqpbHKLCqA" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_KNn8AEL2EeSSlqpbHKLCqA" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_65pboEL1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_65zMoUL1EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Mv8HwUL2EeSSlqpbHKLCqA" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_VFcaIEL2EeSSlqpbHKLCqA" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_Mv8HwEL2EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mv8HwkL2EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_JWjgUXcbEeSwiJkQAQl2Jg" type="Property_ClassAttributeLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_Ro7mMHcbEeSwiJkQAQl2Jg" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ <stringListValue>defaultValue</stringListValue>
+ <stringListValue>type</stringListValue>
+ </styles>
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_JWjgUHcbEeSwiJkQAQl2Jg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_JWjgUncbEeSwiJkQAQl2Jg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_tKu0lUL1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tKu0lkL1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tKu0l0L1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKu0mEL1EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_tKu0mUL1EeSSlqpbHKLCqA" visible="false" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_tKu0mkL1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tKu0m0L1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tKu0nEL1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKu0nUL1EeSSlqpbHKLCqA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_tKu0nkL1EeSSlqpbHKLCqA" visible="false" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_tKu0n0L1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tKu0oEL1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tKu0oUL1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKu0okL1EeSSlqpbHKLCqA"/>
+ </children>
+ <element xmi:type="uml:Class" href="migrationParameters.uml#_tKu0kEL1EeSSlqpbHKLCqA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKu0kkL1EeSSlqpbHKLCqA" x="81" y="524" width="373" height="129"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_MDv8IFOJEeSGbsrkEkSKIA" type="DataType_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_MDv8IlOJEeSGbsrkEkSKIA" type="DataType_NameLabel"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_MDv8I1OJEeSGbsrkEkSKIA" type="DataType_AttributeCompartment">
+ <children xmi:type="notation:Shape" xmi:id="_MiP2AVOJEeSGbsrkEkSKIA" type="Property_DataTypeAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_MiP2AFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MiP2AlOJEeSGbsrkEkSKIA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_O-nKwFOJEeSGbsrkEkSKIA" type="Property_DataTypeAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_O-dZwFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_O-nKwVOJEeSGbsrkEkSKIA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_MDv8JFOJEeSGbsrkEkSKIA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MDv8JVOJEeSGbsrkEkSKIA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MDv8JlOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MDv8J1OJEeSGbsrkEkSKIA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_MDv8KFOJEeSGbsrkEkSKIA" visible="false" type="DataType_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_MDv8KVOJEeSGbsrkEkSKIA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MDv8KlOJEeSGbsrkEkSKIA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MDv8K1OJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MDv8LFOJEeSGbsrkEkSKIA"/>
+ </children>
+ <element xmi:type="uml:DataType" href="migrationParameters.uml#_MDmyMFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MDv8IVOJEeSGbsrkEkSKIA" x="497" y="715" height="112"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_erBPcXZKEeSwiJkQAQl2Jg" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_erBPc3ZKEeSwiJkQAQl2Jg" type="Class_NameLabel"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_erBPdHZKEeSwiJkQAQl2Jg" type="Class_AttributeCompartment">
+ <children xmi:type="notation:Shape" xmi:id="_LgpPEVOJEeSGbsrkEkSKIA" type="Property_ClassAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_LgpPEFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LgpPElOJEeSGbsrkEkSKIA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_pSQoEIQ5EeSC0ajaKNekyw" type="Property_ClassAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_pR2YYIQ5EeSC0ajaKNekyw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pSQoEYQ5EeSC0ajaKNekyw"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_erBPdXZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_erBPdnZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_erBPd3ZKEeSwiJkQAQl2Jg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_erBPeHZKEeSwiJkQAQl2Jg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_erBPeXZKEeSwiJkQAQl2Jg" visible="false" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_erBPenZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_erBPe3ZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_erBPfHZKEeSwiJkQAQl2Jg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_erBPfXZKEeSwiJkQAQl2Jg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_erBPfnZKEeSwiJkQAQl2Jg" visible="false" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_erBPf3ZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_erBPgHZKEeSwiJkQAQl2Jg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_erBPgXZKEeSwiJkQAQl2Jg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_erBPgnZKEeSwiJkQAQl2Jg"/>
+ </children>
+ <element xmi:type="uml:Class" href="migrationParameters.uml#_erBPcHZKEeSwiJkQAQl2Jg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_erBPcnZKEeSwiJkQAQl2Jg" x="81" y="717" width="373" height="112"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_COs8QLiZEeapppGB0acXuA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_COs8QriZEeapppGB0acXuA" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_COs8Q7iZEeapppGB0acXuA" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_COtjULiZEeapppGB0acXuA" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_COtjUbiZEeapppGB0acXuA" type="Class_AttributeCompartment">
+ <children xmi:type="notation:Shape" xmi:id="_Fb6fILiZEeapppGB0acXuA" type="Property_ClassAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_AYwUoFOJEeSGbsrkEkSKIA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Fb6fIbiZEeapppGB0acXuA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_pOLPULieEeaGJtvDcJNNGA" type="Property_ClassAttributeLabel">
+ <element xmi:type="uml:Property" href="migrationParameters.uml#_-z_I4LiYEeapppGB0acXuA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pOLPUbieEeaGJtvDcJNNGA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_COtjUriZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_COtjU7iZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_COtjVLiZEeapppGB0acXuA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_COtjVbiZEeapppGB0acXuA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_COtjVriZEeapppGB0acXuA" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_COtjV7iZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_COtjWLiZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_COtjWbiZEeapppGB0acXuA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_COtjWriZEeapppGB0acXuA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_COtjW7iZEeapppGB0acXuA" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_COtjXLiZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_COtjXbiZEeapppGB0acXuA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_COtjXriZEeapppGB0acXuA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_COtjX7iZEeapppGB0acXuA"/>
+ </children>
+ <element xmi:type="uml:Class" href="migrationParameters.uml#_COqgALiZEeapppGB0acXuA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_COs8QbiZEeapppGB0acXuA" x="167" y="240"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_ffjeAUL1EeSSlqpbHKLCqA" name="diagram_compatibility_version" stringValue="1.2.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_ffjeAkL1EeSSlqpbHKLCqA"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_ffjeA0L1EeSSlqpbHKLCqA">
+ <owner xmi:type="uml:Model" href="migrationParameters.uml#_fduSAEL1EeSSlqpbHKLCqA"/>
+ </styles>
+ <element xmi:type="uml:Model" href="migrationParameters.uml#_fduSAEL1EeSSlqpbHKLCqA"/>
+ <edges xmi:type="notation:Connector" xmi:id="_sluPwHZKEeSwiJkQAQl2Jg" type="Association_Edge" source="_tKu0kUL1EeSSlqpbHKLCqA" target="_erBPcXZKEeSwiJkQAQl2Jg" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPw3ZKEeSwiJkQAQl2Jg" type="Association_StereotypeLabel">
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P8QRYLiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPxHZKEeSwiJkQAQl2Jg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPxXZKEeSwiJkQAQl2Jg" type="Association_NameLabel">
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P8h-MLiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPxnZKEeSwiJkQAQl2Jg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPx3ZKEeSwiJkQAQl2Jg" visible="false" type="Association_TargetRoleLabel">
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P8vZkLiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPyHZKEeSwiJkQAQl2Jg" x="10" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPyXZKEeSwiJkQAQl2Jg" type="Association_SourceRoleLabel">
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_9TsB4HZKEeSwiJkQAQl2Jg" name="maskLabel">
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>multiplicity</stringListValue>
+ </styles>
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P9SzMLiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPynZKEeSwiJkQAQl2Jg" x="-40" y="77"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPy3ZKEeSwiJkQAQl2Jg" visible="false" type="Association_SourceMultiplicityLabel">
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P9bWELiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPzHZKEeSwiJkQAQl2Jg" x="10" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_sluPzXZKEeSwiJkQAQl2Jg" visible="false" type="Association_TargetMultiplicityLabel">
+ <styles xmi:type="notation:BooleanValueStyle" xmi:id="_P9jR4LiZEeapppGB0acXuA" name="IS_UPDATED_POSITION" booleanValue="true"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sluPznZKEeSwiJkQAQl2Jg" x="-38" y="-38"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_sluPwXZKEeSwiJkQAQl2Jg"/>
+ <element xmi:type="uml:Association" href="migrationParameters.uml#_slkew3ZKEeSwiJkQAQl2Jg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sluPwnZKEeSwiJkQAQl2Jg" points="[257, 653, -643984, -643984]$[257, 717, -643984, -643984]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sl4AwHZKEeSwiJkQAQl2Jg" id="(0.47257383966244726,0.9642857142857143)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5rS-4HZKEeSwiJkQAQl2Jg" id="(0.4718498659517426,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_TUWOkLiZEeapppGB0acXuA" type="Generalization_Edge" source="_tKu0kUL1EeSSlqpbHKLCqA" target="_COs8QLiZEeapppGB0acXuA">
+ <children xmi:type="notation:DecorationNode" xmi:id="_TUWOk7iZEeapppGB0acXuA" type="Generalization_StereotypeLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_TUWOlLiZEeapppGB0acXuA" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_TUWOkbiZEeapppGB0acXuA"/>
+ <element xmi:type="uml:Generalization" href="migrationParameters.uml#_TUKoYLiZEeapppGB0acXuA"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TUWOkriZEeapppGB0acXuA" points="[258, 524, -643984, -643984]$[258, 340, -643984, -643984]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TUnUULiZEeapppGB0acXuA" id="(0.4745308310991957,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TUnUUbiZEeapppGB0acXuA" id="(0.5449101796407185,1.0)"/>
+ </edges>
+ </notation:Diagram>
+ <css:ModelStyleSheets xmi:id="_n2Dv0IQ5EeSC0ajaKNekyw"/>
+</xmi:XMI>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.uml b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.uml
new file mode 100644
index 0000000..49af745
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/ui/migrationParameters.uml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_fduSAEL1EeSSlqpbHKLCqA" name="MigrationParameters">
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_fduSAUL1EeSSlqpbHKLCqA">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Class" xmi:id="_tKu0kEL1EeSSlqpbHKLCqA" name="AdvancedConfig">
+ <generalization xmi:type="uml:Generalization" xmi:id="_TUKoYLiZEeapppGB0acXuA" general="_COqgALiZEeapppGB0acXuA"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_slkewHZKEeSwiJkQAQl2Jg" name="mappingParameters" type="_erBPcHZKEeSwiJkQAQl2Jg" aggregation="composite" association="_slkew3ZKEeSwiJkQAQl2Jg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_slkewXZKEeSwiJkQAQl2Jg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_slkewnZKEeSwiJkQAQl2Jg" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Wt4XkEL2EeSSlqpbHKLCqA" name="removeUnmappedDiagrams" visibility="public" isUnique="false">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YchfIEMAEeSX267OQHSClQ" annotatedElement="_Wt4XkEL2EeSSlqpbHKLCqA">
+ <body>If true, the diagrams which were not migrated will be removed. Otherwise, only the successfully imported diagrams will be removed</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Yj3BwEL2EeSSlqpbHKLCqA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Yj3BwUL2EeSSlqpbHKLCqA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_Zf9doEL2EeSSlqpbHKLCqA"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_t42e0EL1EeSSlqpbHKLCqA" name="convertOpaqueExpressionToLiteralString" visibility="public" isUnique="false">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_sSSQAEL9EeSX267OQHSClQ" annotatedElement="_t42e0EL1EeSSlqpbHKLCqA">
+ <body>If true, the Opaque Expressions with a single body and no language (or a single empty language) will be converted to LiteralString</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_0H-TgEL1EeSSlqpbHKLCqA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0IHdcEL1EeSSlqpbHKLCqA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_3f1nMEL1EeSSlqpbHKLCqA" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_65pboEL1EeSSlqpbHKLCqA" name="removeUnmappedProfilesAndStereotypes" visibility="public" isUnique="false">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_zDs5cEL9EeSX267OQHSClQ" annotatedElement="_65pboEL1EeSSlqpbHKLCqA">
+ <body>If true, all unsupported RSA profiles and stereotypes will be deleted at the end of the transformation</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gy7WwEL2EeSSlqpbHKLCqA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gy7WwUL2EeSSlqpbHKLCqA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_H7rHgEL2EeSSlqpbHKLCqA"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Mv8HwEL2EeSSlqpbHKLCqA" name="removeUnmappedAnnotations" visibility="public" isUnique="false">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_rogy4EMAEeSX267OQHSClQ" annotatedElement="_Mv8HwEL2EeSSlqpbHKLCqA">
+ <body>If true, the unmapped RSA EAnnotations will be deleted from the imported model</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_S39O4EL2EeSSlqpbHKLCqA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_S39O4UL2EeSSlqpbHKLCqA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_UQehAEL2EeSSlqpbHKLCqA"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_JWjgUHcbEeSwiJkQAQl2Jg" name="alwaysAcceptSuggestedMappings" visibility="public">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_aOft0HcbEeSwiJkQAQl2Jg" annotatedElement="_JWjgUHcbEeSwiJkQAQl2Jg">
+ <body>If true, the Transformation will not open a dialog to ask user-confirmation for the dependency mappings. The tool will automatically keep going by "guessing" the proper mapping</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_P_5L0HcbEeSwiJkQAQl2Jg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_P_5L0XcbEeSwiJkQAQl2Jg" value="1"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_P_5L0ncbEeSwiJkQAQl2Jg"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:DataType" xmi:id="_MDmyMFOJEeSGbsrkEkSKIA" name="URIMapping">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_MiP2AFOJEeSGbsrkEkSKIA" name="sourceURI" visibility="public" isUnique="false">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_OrbJAFOJEeSGbsrkEkSKIA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_OrbJAVOJEeSGbsrkEkSKIA" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_O-dZwFOJEeSGbsrkEkSKIA" name="targetURI" visibility="public" isUnique="false">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_RAos4FOJEeSGbsrkEkSKIA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_RAos4VOJEeSGbsrkEkSKIA" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_erBPcHZKEeSwiJkQAQl2Jg" name="MappingParameters">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_LgpPEFOJEeSGbsrkEkSKIA" name="uriMappings" visibility="public" type="_MDmyMFOJEeSGbsrkEkSKIA" aggregation="composite">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_iBwD0GW5EeS5_vjAduszYQ" annotatedElement="_LgpPEFOJEeSGbsrkEkSKIA">
+ <body>When models/libraries have been migrated separately, maps the libraries imported from RSA to their Papyrus equivalent</body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_T5kB0FOJEeSGbsrkEkSKIA"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_T5kB0VOJEeSGbsrkEkSKIA" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_pR2YYIQ5EeSC0ajaKNekyw" name="profileUriMappings" visibility="public" type="_MDmyMFOJEeSGbsrkEkSKIA" aggregation="composite">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_49zT4IQ5EeSC0ajaKNekyw" annotatedElement="_pR2YYIQ5EeSC0ajaKNekyw">
+ <body>When profiles have been migrated separately, maps the profiles imported from RSA to their Papyrus equivalent</body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_qweSgIQ5EeSC0ajaKNekyw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_qwfgoIQ5EeSC0ajaKNekyw" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_slkew3ZKEeSwiJkQAQl2Jg" memberEnd="_slkexHZKEeSwiJkQAQl2Jg _slkewHZKEeSwiJkQAQl2Jg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_slkexHZKEeSwiJkQAQl2Jg" name="config" type="_tKu0kEL1EeSSlqpbHKLCqA" association="_slkew3ZKEeSwiJkQAQl2Jg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_slkexXZKEeSwiJkQAQl2Jg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_slkexnZKEeSwiJkQAQl2Jg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_COqgALiZEeapppGB0acXuA" name="ThreadConfig">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_-z_I4LiYEeapppGB0acXuA" name="name">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_AYwUoFOJEeSGbsrkEkSKIA" name="maxThreads" visibility="public" isUnique="false">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_W1iDAGW5EeS5_vjAduszYQ" annotatedElement="_AYwUoFOJEeSGbsrkEkSKIA">
+ <body>The maximum number of threads to use during the migration.
+More threads will provide faster results, at the cost of memory consumption.</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DhmU4FOJEeSGbsrkEkSKIA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DhwF4FOJEeSGbsrkEkSKIA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_E7A-4FOJEeSGbsrkEkSKIA" value="2"/>
+ </ownedAttribute>
+ </packagedElement>
+</uml:Model>