Navigator from HEAD ported to RAP
diff --git a/bundles/org.eclipse.rap.ui.navigator/.classpath b/bundles/org.eclipse.rap.ui.navigator/.classpath
new file mode 100755
index 0000000..2fbb7a2
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.rap.ui.navigator/.cvsignore b/bundles/org.eclipse.rap.ui.navigator/.cvsignore
new file mode 100755
index 0000000..9e03f0a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.cvsignore
@@ -0,0 +1,5 @@
+bin
+temp.folder
+navigator.jar
+build.xml
+doc
diff --git a/bundles/org.eclipse.rap.ui.navigator/.options b/bundles/org.eclipse.rap.ui.navigator/.options
new file mode 100755
index 0000000..7b8cdc7
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.options
@@ -0,0 +1,23 @@
+# Debugging options for the org.eclipse.ui.navigator plugin.
+
+# Turn on debugging for the org.eclipse.navigator plugin.
+org.eclipse.ui.navigator/debug=false
+
+# Drag and drop 
+org.eclipse.ui.navigator/debug/dnd=false
+
+# Extension resolution
+org.eclipse.ui.navigator/debug/resolution=false
+
+# Shows the reading and setup of the extensions
+org.eclipse.ui.navigator/debug/setup=false
+
+# Sort
+org.eclipse.ui.navigator/debug/sort=false
+
+# Map that associates objects in viewer with NavigatorContentDescriptors
+org.eclipse.ui.navigator/debug/viewermap=false
+
+#Reports the time to create the project explorer view
+org.eclipse.ui.navigator/perf/explorer/createPartControl=1300
+
diff --git a/bundles/org.eclipse.rap.ui.navigator/.project b/bundles/org.eclipse.rap.ui.navigator/.project
new file mode 100755
index 0000000..5afd047
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.rap.ui.navigator</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/.api_filters b/bundles/org.eclipse.rap.ui.navigator/.settings/.api_filters
new file mode 100755
index 0000000..4a684a0
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/.api_filters
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.ui.navigator" version="2">
+    <resource path="src/org/eclipse/ui/internal/navigator/extensions/StructuredViewerManager.java" type="org.eclipse.ui.internal.navigator.extensions.StructuredViewerManager$StructuredViewerAccess">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="StructuredViewerInternals"/>
+                <message_argument value="StructuredViewerAccess"/>
+            </message_arguments>
+        </filter>
+        <filter id="640712815">
+            <message_arguments>
+                <message_argument value="StructuredViewerInternals"/>
+                <message_argument value="StructuredViewerAccess"/>
+                <message_argument value="setAssociateListener(StructuredViewer, StructuredViewerInternalsAssociateListener)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/ui/internal/navigator/extensions/StructuredViewerManager.java" type="org.eclipse.ui.internal.navigator.extensions.StructuredViewerManager$StructuredViewerAccess$Listener">
+        <filter id="574619656">
+            <message_arguments>
+                <message_argument value="AssociateListener"/>
+                <message_argument value="Listener"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/ui/navigator/CommonViewer.java" type="org.eclipse.ui.navigator.CommonViewer">
+        <filter id="571473929">
+            <message_arguments>
+                <message_argument value="TreeViewer"/>
+                <message_argument value="CommonViewer"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 0000000..1124f06
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,356 @@
+#Sun Jan 10 12:25:18 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=error
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+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_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_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_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.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.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.format_guardian_clause_on_one_line=false
+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_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=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_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_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_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_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_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_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_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_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_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+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.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.launching.prefs b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.launching.prefs
new file mode 100755
index 0000000..885a110
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Thu Jan 22 12:21:30 PST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.ui.prefs
new file mode 100755
index 0000000..49350ea
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,7 @@
+#Sun Jan 10 12:25:18 PST 2010
+eclipse.preferences.version=1
+formatter_profile=_UI 100 Character Wrap
+formatter_settings_version=11
+internal.default.compliance=user
+org.eclipse.jdt.ui.javadoc=true
+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 Returns 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\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" 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} IBM Corporation and others.\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 *     IBM Corporation - initial API and implementation\n ******************************************************************************/\n</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @since 3.3\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\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\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\="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><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</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></templates>
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.api.tools.prefs b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100755
index 0000000..9be2274
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,91 @@
+#Tue Mar 03 13:39:26 PST 2009
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Error
+ILLEGAL_IMPLEMENT=Error
+ILLEGAL_INSTANTIATE=Error
+ILLEGAL_OVERRIDE=Error
+ILLEGAL_REFERENCE=Error
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Error
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+LEAK_EXTEND=Error
+LEAK_FIELD_DECL=Error
+LEAK_IMPLEMENT=Error
+LEAK_METHOD_PARAM=Error
+LEAK_METHOD_RETURN_TYPE=Error
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Error
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Error
diff --git a/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.prefs b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.prefs
new file mode 100755
index 0000000..d8e8469
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,14 @@
+#Tue Nov 16 14:12:29 EST 2004
+compilers.p.unused-element-or-attribute=1
+compilers.p.unresolved-ex-points=0
+compilers.p.deprecated=0
+compilers.p.unknown-element=1
+compilers.p.unknown-resource=1
+compilers.p.unknown-class=1
+compilers.p.unknown-attribute=0
+compilers.p.no-required-att=0
+eclipse.preferences.version=1
+compilers.p.unresolved-import=0
+compilers.p.not-externalized-att=0
+compilers.p.illegal-att-value=0
+compilers.use-project=true
diff --git a/bundles/org.eclipse.rap.ui.navigator/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.ui.navigator/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..fde3697
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Plugin.name
+Bundle-SymbolicName: org.eclipse.rap.ui.navigator;singleton:=true
+Bundle-Version: 3.5.0.qualifier
+Bundle-Activator: org.eclipse.ui.internal.navigator.NavigatorPlugin
+Bundle-Vendor: %Plugin.providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.ui.internal.navigator;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources",
+ org.eclipse.ui.internal.navigator.actions;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources",
+ org.eclipse.ui.internal.navigator.dnd;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources",
+ org.eclipse.ui.internal.navigator.extensions;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources",
+ org.eclipse.ui.internal.navigator.filters;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources,org.eclipse.ui.tests.navigator",
+ org.eclipse.ui.internal.navigator.framelist;x-friends:="org.eclipse.ui.navigator.ide,org.eclipse.ui.navigator.resources,org.eclipse.ui.tests.navigator",
+ org.eclipse.ui.internal.navigator.sorters;x-internal:=true,
+ org.eclipse.ui.internal.navigator.wizards;x-internal:=true,
+ org.eclipse.ui.navigator
+Require-Bundle: 
+ org.eclipse.core.runtime;bundle-version="[3.6.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.rap.ui;bundle-version="1.3.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.rap.ui.navigator/about.html b/bundles/org.eclipse.rap.ui.navigator/about.html
new file mode 100755
index 0000000..4602330
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/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>June 2, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/build.properties b/bundles/org.eclipse.rap.ui.navigator/build.properties
new file mode 100755
index 0000000..b617651
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2003, 2009 IBM Corporation 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:
+# IBM Corporation - initial API and implementation
+###############################################################################
+source.. = src/
+bin.includes = plugin.xml,\
+               icons/,\
+               .,\
+               META-INF/,\
+               plugin.properties,\
+               about.html,\
+               .options
+output.. = bin/
+src.includes = about.html,\
+               schema/
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/collapseall.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/collapseall.gif
new file mode 100755
index 0000000..0bae56c
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/collapseall.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/elipses.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/elipses.gif
new file mode 100755
index 0000000..cb41506
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/elipses.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/pause.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/pause.gif
new file mode 100755
index 0000000..d645fa5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/pause.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/synced.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/synced.gif
new file mode 100755
index 0000000..f865f3a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/clcl16/synced.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/collapseall.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/collapseall.gif
new file mode 100755
index 0000000..a2d80a9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/collapseall.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/content.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/content.gif
new file mode 100755
index 0000000..17f927e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/content.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/filter_ps.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/filter_ps.gif
new file mode 100755
index 0000000..a4c9e60
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/filter_ps.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/synced.gif b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/synced.gif
new file mode 100755
index 0000000..870934b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/icons/full/elcl16/synced.gif
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/javadoc-images/framework-overview.jpg b/bundles/org.eclipse.rap.ui.navigator/javadoc-images/framework-overview.jpg
new file mode 100755
index 0000000..95122e2
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/javadoc-images/framework-overview.jpg
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/javadoc-images/navigator_logical_extension.jpg b/bundles/org.eclipse.rap.ui.navigator/javadoc-images/navigator_logical_extension.jpg
new file mode 100755
index 0000000..eff9f7c
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/javadoc-images/navigator_logical_extension.jpg
Binary files differ
diff --git a/bundles/org.eclipse.rap.ui.navigator/jdt-patch/org.eclipse.jdt.ui_patch.txt b/bundles/org.eclipse.rap.ui.navigator/jdt-patch/org.eclipse.jdt.ui_patch.txt
new file mode 100755
index 0000000..45bdabc
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/jdt-patch/org.eclipse.jdt.ui_patch.txt
@@ -0,0 +1,1577 @@
+### Eclipse Workspace Patch 1.0
+#P org.eclipse.jdt.ui
+Index: ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java,v
+retrieving revision 1.9
+diff -u -r1.9 ConfigureWorkingSetAction.java
+--- ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	18 Nov 2005 14:45:35 -0000	1.9
++++ ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	8 Feb 2006 00:46:03 -0000
+@@ -14,6 +14,8 @@
+ import java.util.Arrays;
+ import java.util.List;
+ 
++import org.eclipse.swt.widgets.Shell;
++
+ import org.eclipse.jface.action.Action;
+ import org.eclipse.jface.dialogs.IDialogConstants;
+ 
+@@ -21,13 +23,18 @@
+ import org.eclipse.ui.IWorkingSet;
+ 
+ public class ConfigureWorkingSetAction extends Action {
+-
+-	private final IWorkbenchPartSite fSite;
++ 
+ 	private WorkingSetModel fWorkingSetModel;
++	private Shell fShell; 
+ 
+ 	public ConfigureWorkingSetAction(IWorkbenchPartSite site) {
+ 		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
+-		fSite= site;
++		fShell= site.getShell();
++	}
++	
++	public ConfigureWorkingSetAction(Shell shell) {
++		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
++		fShell= shell;
+ 	}
+ 	
+ 	public void setWorkingSetModel(WorkingSetModel model) {
+@@ -39,9 +46,10 @@
+ 	 */
+ 	public void run() {
+ 		List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
++
+ 		IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
+ 		WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(
+-			fSite.getShell(), 
++			fShell, 
+ 			(IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]),
+ 			activeWorkingSets); 
+ 		dialog.setSelection(activeWorkingSets);
+Index: ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java,v
+retrieving revision 1.8
+diff -u -r1.8 ViewActionGroup.java
+--- ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	13 Apr 2005 17:35:11 -0000	1.8
++++ ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	8 Feb 2006 00:46:03 -0000
+@@ -45,7 +45,12 @@
+ 
+ 	public ViewActionGroup(int mode, IPropertyChangeListener changeListener, IWorkbenchPartSite site) {
+ 		fChangeListener= changeListener;
+-		fFilterActionGroup= new WorkingSetFilterActionGroup(site, changeListener);
++		if(fChangeListener == null) {
++			fChangeListener = new IPropertyChangeListener() {
++				public void propertyChange(PropertyChangeEvent event) {}
++			};
++		}
++		fFilterActionGroup= new WorkingSetFilterActionGroup(site, fChangeListener);
+ 		fShowActionGroup= new WorkingSetShowActionGroup(site);
+ 		fMode= mode;
+ 		if (showWorkingSets())
+@@ -70,16 +75,24 @@
+ 	 */
+ 	public void fillActionBars(IActionBars actionBars) {
+ 		super.fillActionBars(actionBars);
+-		fMenuManager= actionBars.getMenuManager();
+-		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
+-		fillShowMenu(showMenu);
+-		fMenuManager.add(showMenu);
+-		fMenuManager.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
++		if(fMenuManager == null) {
++			fMenuManager= actionBars.getMenuManager();
++			fillViewMenu(fMenuManager);
++		}
++
+ 		if (fActiveActionGroup == null)
+ 			fActiveActionGroup= fFilterActionGroup;
+ 		((ActionGroup)fActiveActionGroup).fillActionBars(actionBars);
+ 	}
+ 	
++	private void fillViewMenu(IMenuManager menu) { 
++		
++		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
++		fillShowMenu(showMenu);
++		menu.add(showMenu);
++		menu.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
++	}
++	
+ 	private void fillShowMenu(IMenuManager menu) {
+ 		ViewAction projects= new ViewAction(this, SHOW_PROJECTS);
+ 		projects.setText(WorkingSetMessages.ViewActionGroup_projects_label); 
+@@ -116,7 +129,8 @@
+ 		}
+ 		fActiveActionGroup.fillViewMenu(fMenuManager);
+ 		fMenuManager.updateAll(true);
+-		fChangeListener.propertyChange(event);
++		if(fChangeListener != null)
++			fChangeListener.propertyChange(event);
+ 	}
+ 	
+ 	public WorkingSetFilterActionGroup getFilterGroup() {
+Index: ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java,v
+retrieving revision 1.14
+diff -u -r1.14 WorkingSetModel.java
+--- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	26 Jan 2006 14:54:03 -0000	1.14
++++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	8 Feb 2006 00:46:03 -0000
+@@ -1,13 +1,11 @@
+-/*******************************************************************************
+- * Copyright (c) 2000, 2005 IBM Corporation and others.
+- * All rights reserved. This program and the accompanying materials
+- * are made available under the terms of the Eclipse Public License v1.0
++/***************************************************************************************************
++ * Copyright (c) 2000, 2005 IBM Corporation 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:
+- *     IBM Corporation - initial API and implementation
+- *******************************************************************************/
++ * 
++ * Contributors: IBM Corporation - initial API and implementation
++ **************************************************************************************************/
+ package org.eclipse.jdt.internal.ui.workingsets;
+ 
+ import java.util.ArrayList;
+@@ -36,12 +34,12 @@
+ import org.eclipse.ui.PlatformUI;
+ 
+ public class WorkingSetModel {
+-	
++
+ 	public static final String CHANGE_WORKING_SET_MODEL_CONTENT= "workingSetModelChanged"; //$NON-NLS-1$
+-	
++
+ 	public static final IElementComparer COMPARER= new WorkingSetComparar();
+-	
+-	private static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
++
++	public static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
+ 	private static final String TAG_ACTIVE_WORKING_SET= "activeWorkingSet"; //$NON-NLS-1$
+ 	private static final String TAG_WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
+ 	private static final String TAG_CONFIGURED= "configured"; //$NON-NLS-1$
+@@ -53,28 +51,29 @@
+ 	private OthersWorkingSetUpdater fOthersWorkingSetUpdater;
+ 
+ 	private ElementMapper fElementMapper= new ElementMapper();
+-	
++
+ 	private boolean fConfigured;
+ 
+ 	private static class WorkingSetComparar implements IElementComparer {
+ 		public boolean equals(Object o1, Object o2) {
+-			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet)o1 : null;
+-			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet)o2 : null;
++			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet) o1 : null;
++			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet) o2 : null;
+ 			if (w1 == null || w2 == null)
+ 				return o1.equals(o2);
+ 			return w1 == w2;
+ 		}
++
+ 		public int hashCode(Object element) {
+ 			if (element instanceof IWorkingSet)
+ 				return System.identityHashCode(element);
+ 			return element.hashCode();
+ 		}
+ 	}
+-	
++
+ 	private static class ElementMapper {
+ 		private Map fElementToWorkingSet= new HashMap();
+ 		private Map fWorkingSetToElement= new IdentityHashMap();
+-		
++
+ 		private Map fResourceToWorkingSet= new HashMap();
+ 
+ 		public void clear() {
+@@ -82,14 +81,16 @@
+ 			fWorkingSetToElement.clear();
+ 			fResourceToWorkingSet.clear();
+ 		}
++
+ 		public void rebuild(IWorkingSet[] workingSets) {
+ 			clear();
+ 			for (int i= 0; i < workingSets.length; i++) {
+ 				put(workingSets[i]);
+ 			}
+ 		}
++
+ 		public IAdaptable[] remove(IWorkingSet ws) {
+-			IAdaptable[] elements= (IAdaptable[])fWorkingSetToElement.remove(ws);
++			IAdaptable[] elements= (IAdaptable[]) fWorkingSetToElement.remove(ws);
+ 			if (elements != null) {
+ 				for (int i= 0; i < elements.length; i++) {
+ 					removeElement(elements[i], ws);
+@@ -97,8 +98,9 @@
+ 			}
+ 			return elements;
+ 		}
++
+ 		public IAdaptable[] refresh(IWorkingSet ws) {
+-			IAdaptable[] oldElements= (IAdaptable[])fWorkingSetToElement.get(ws);
++			IAdaptable[] oldElements= (IAdaptable[]) fWorkingSetToElement.get(ws);
+ 			if (oldElements == null)
+ 				return null;
+ 			IAdaptable[] newElements= ws.getElements();
+@@ -106,15 +108,16 @@
+ 			List toAdd= new ArrayList(Arrays.asList(newElements));
+ 			computeDelta(toRemove, toAdd, oldElements, newElements);
+ 			for (Iterator iter= toAdd.iterator(); iter.hasNext();) {
+-				addElement((IAdaptable)iter.next(), ws);
++				addElement((IAdaptable) iter.next(), ws);
+ 			}
+ 			for (Iterator iter= toRemove.iterator(); iter.hasNext();) {
+-				removeElement((IAdaptable)iter.next(), ws);
++				removeElement((IAdaptable) iter.next(), ws);
+ 			}
+ 			if (toRemove.size() > 0 || toAdd.size() > 0)
+ 				fWorkingSetToElement.put(ws, newElements);
+ 			return oldElements;
+ 		}
++
+ 		private void computeDelta(List toRemove, List toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
+ 			for (int i= 0; i < oldElements.length; i++) {
+ 				toAdd.remove(oldElements[i]);
+@@ -122,20 +125,25 @@
+ 			for (int i= 0; i < newElements.length; i++) {
+ 				toRemove.remove(newElements[i]);
+ 			}
+-			
++
+ 		}
++
+ 		public IWorkingSet getFirstWorkingSet(Object element) {
+-			return (IWorkingSet)getFirstElement(fElementToWorkingSet, element);
++			return (IWorkingSet) getFirstElement(fElementToWorkingSet, element);
+ 		}
++
+ 		public List getAllWorkingSets(Object element) {
+ 			return getAllElements(fElementToWorkingSet, element);
+ 		}
++
+ 		public IWorkingSet getFirstWorkingSetForResource(IResource resource) {
+-			return (IWorkingSet)getFirstElement(fResourceToWorkingSet, resource);
++			return (IWorkingSet) getFirstElement(fResourceToWorkingSet, resource);
+ 		}
++
+ 		public List getAllWorkingSetsForResource(IResource resource) {
+ 			return getAllElements(fResourceToWorkingSet, resource);
+ 		}
++
+ 		private void put(IWorkingSet ws) {
+ 			if (fWorkingSetToElement.containsKey(ws))
+ 				return;
+@@ -145,20 +153,23 @@
+ 				addElement(elements[i], ws);
+ 			}
+ 		}
++
+ 		private void addElement(IAdaptable element, IWorkingSet ws) {
+ 			addToMap(fElementToWorkingSet, element, ws);
+-			IResource resource= (IResource)element.getAdapter(IResource.class);
++			IResource resource= (IResource) element.getAdapter(IResource.class);
+ 			if (resource != null) {
+ 				addToMap(fResourceToWorkingSet, resource, ws);
+ 			}
+ 		}
++
+ 		private void removeElement(IAdaptable element, IWorkingSet ws) {
+ 			removeFromMap(fElementToWorkingSet, element, ws);
+-			IResource resource= (IResource)element.getAdapter(IResource.class);
++			IResource resource= (IResource) element.getAdapter(IResource.class);
+ 			if (resource != null) {
+ 				removeFromMap(fResourceToWorkingSet, resource, ws);
+ 			}
+ 		}
++
+ 		private void addToMap(Map map, IAdaptable key, IWorkingSet value) {
+ 			Object obj= map.get(key);
+ 			if (obj == null) {
+@@ -169,21 +180,22 @@
+ 				l.add(value);
+ 				map.put(key, l);
+ 			} else if (obj instanceof List) {
+-				((List)obj).add(value);
++				((List) obj).add(value);
+ 			}
+ 		}
++
+ 		private void removeFromMap(Map map, IAdaptable key, IWorkingSet value) {
+ 			Object current= map.get(key);
+ 			if (current == null) {
+ 				return;
+ 			} else if (current instanceof List) {
+-				List list= (List)current;
++				List list= (List) current;
+ 				list.remove(value);
+ 				switch (list.size()) {
+-					case 0:
++					case 0 :
+ 						map.remove(key);
+ 						break;
+-					case 1:
++					case 1 :
+ 						map.put(key, list.get(0));
+ 						break;
+ 				}
+@@ -191,16 +203,18 @@
+ 				map.remove(key);
+ 			}
+ 		}
++
+ 		private Object getFirstElement(Map map, Object key) {
+ 			Object obj= map.get(key);
+-			if (obj instanceof List) 
+-				return ((List)obj).get(0);
++			if (obj instanceof List)
++				return ((List) obj).get(0);
+ 			return obj;
+ 		}
++
+ 		private List getAllElements(Map map, Object key) {
+ 			Object obj= map.get(key);
+ 			if (obj instanceof List)
+-				return (List)obj;
++				return (List) obj;
+ 			if (obj == null)
+ 				return Collections.EMPTY_LIST;
+ 			List result= new ArrayList(1);
+@@ -208,27 +222,27 @@
+ 			return result;
+ 		}
+ 	}
+-	
++
+ 	public WorkingSetModel() {
+ 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
+ 		addListenersToWorkingSetManagers();
+-    	fActiveWorkingSets= new ArrayList(2);
+-    	
+-    	IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]); 
+-    	others.setId(OthersWorkingSetUpdater.ID);
+-    	fLocalWorkingSetManager.addWorkingSet(others);
+-    	fActiveWorkingSets.add(others);
+-    	
+-    	fOthersWorkingSetUpdater.init(this);
+-    	fElementMapper.rebuild(getActiveWorkingSets());
++		fActiveWorkingSets= new ArrayList(2);
++
++		IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]);
++		others.setId(OthersWorkingSetUpdater.ID);
++		fLocalWorkingSetManager.addWorkingSet(others);
++		fActiveWorkingSets.add(others);
++
++		fOthersWorkingSetUpdater.init(this);
++		fElementMapper.rebuild(getActiveWorkingSets());
+ 	}
+-	
++
+ 	public WorkingSetModel(IMemento memento) {
+ 		restoreState(memento);
+ 		fOthersWorkingSetUpdater.init(this);
+-    	fElementMapper.rebuild(getActiveWorkingSets());
++		fElementMapper.rebuild(getActiveWorkingSets());
+ 	}
+-	
++
+ 	private void addListenersToWorkingSetManagers() {
+ 		fListeners= new ListenerList(ListenerList.IDENTITY);
+ 		fWorkingSetManagerListener= new IPropertyChangeListener() {
+@@ -239,7 +253,7 @@
+ 		PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener);
+ 		fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener);
+ 	}
+-	
++
+ 	public void dispose() {
+ 		if (fWorkingSetManagerListener != null) {
+ 			PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(fWorkingSetManagerListener);
+@@ -248,118 +262,119 @@
+ 			fWorkingSetManagerListener= null;
+ 		}
+ 	}
+-	
+-	//---- model relationships ---------------------------------------
+-	
++
++	// ---- model relationships ---------------------------------------
++
+     public IAdaptable[] getChildren(IWorkingSet workingSet) {
+-    	return workingSet.getElements();
+-    }
+-    
+-    public Object getParent(Object element) {
+-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
+-    		return this;
+-    	return fElementMapper.getFirstWorkingSet(element);
+-    }
+-    
+-    public Object[] getAllParents(Object element) {
+-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
+-    		return new Object[] {this};
+-    	return fElementMapper.getAllWorkingSets(element).toArray();
+-    }
+-    
+-    public Object[] addWorkingSets(Object[] elements) {
+-    	List result= null;
+-    	for (int i= 0; i < elements.length; i++) {
+-    		Object element= elements[i];
+-    		List sets= null;
++		return workingSet.getElements();
++	}
++
++	public Object getParent(Object element) {
++		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
++			return this;
++		return fElementMapper.getFirstWorkingSet(element);
++	}
++
++	public Object[] getAllParents(Object element) {
++		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
++			return new Object[]{this};
++		return fElementMapper.getAllWorkingSets(element).toArray();
++	}
++
++	public Object[] addWorkingSets(Object[] elements) {
++		List result= null;
++		for (int i= 0; i < elements.length; i++) {
++			Object element= elements[i];
++			List sets= null;
+ 			if (element instanceof IResource) {
+-    			sets= fElementMapper.getAllWorkingSetsForResource((IResource)element);
+-    		} else {
+-    			sets= fElementMapper.getAllWorkingSets(element);
+-    		}
++				sets= fElementMapper.getAllWorkingSetsForResource((IResource) element);
++			} else {
++				sets= fElementMapper.getAllWorkingSets(element);
++			}
+ 			if (sets != null && sets.size() > 0) {
+ 				if (result == null)
+ 					result= new ArrayList(Arrays.asList(elements));
+ 				result.addAll(sets);
+ 			}
+ 		}
+-    	if (result == null)
+-    		return elements;
+-    	return result.toArray();
+-    }
+-    
+-    public boolean needsConfiguration() {
+-    	return !fConfigured && fActiveWorkingSets.size() == 1 &&
+-			OthersWorkingSetUpdater.ID.equals(((IWorkingSet)fActiveWorkingSets.get(0)).getId());
+-    }
+-    
+-    public void configured() {
+-    	fConfigured= true;
+-    }
+-    
+-    //---- working set management -----------------------------------
+-    
++		if (result == null)
++			return elements;
++		return result.toArray();
++	}
++
++	public boolean needsConfiguration() {
++		return !fConfigured && fActiveWorkingSets.size() == 1 && OthersWorkingSetUpdater.ID.equals(((IWorkingSet) fActiveWorkingSets.get(0)).getId());
++	}
++
++	public void configured() {
++		fConfigured= true;
++	}
++
++	// ---- working set management -----------------------------------
++
+ 	/**
+-     * Adds a property change listener.
+-     * 
+-     * @param listener the property change listener to add
+-     */
+-    public void addPropertyChangeListener(IPropertyChangeListener listener) {
+-    	fListeners.add(listener);
+-    }
+-    
+-    /**
+-     * Removes the property change listener.
+-     * 
+-     * @param listener the property change listener to remove
+-     */
+-    public void removePropertyChangeListener(IPropertyChangeListener listener) {
+-    	fListeners.remove(listener);
+-    }
+-    
+-    public IWorkingSet[] getActiveWorkingSets() {
+-    	return (IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
+-    }
+-    
+-    public IWorkingSet[] getAllWorkingSets() {
+-    	List result= new ArrayList();
+-    	result.addAll(fActiveWorkingSets);
+-    	IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
+-    	for (int i= 0; i < locals.length; i++) {
++	 * Adds a property change listener.
++	 * 
++	 * @param listener
++	 *            the property change listener to add
++	 */
++	public void addPropertyChangeListener(IPropertyChangeListener listener) {
++		fListeners.add(listener);
++	}
++
++	/**
++	 * Removes the property change listener.
++	 * 
++	 * @param listener
++	 *            the property change listener to remove
++	 */
++	public void removePropertyChangeListener(IPropertyChangeListener listener) {
++		fListeners.remove(listener);
++	}
++
++	public IWorkingSet[] getActiveWorkingSets() {
++		return (IWorkingSet[]) fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
++	}
++
++	public IWorkingSet[] getAllWorkingSets() {
++		List result= new ArrayList();
++		result.addAll(fActiveWorkingSets);
++		IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
++		for (int i= 0; i < locals.length; i++) {
+ 			if (!result.contains(locals[i]))
+ 				result.add(locals[i]);
+ 		}
+-    	IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
+-    	for (int i= 0; i < globals.length; i++) {
++		IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
++		for (int i= 0; i < globals.length; i++) {
+ 			if (!result.contains(globals[i]))
+ 				result.add(globals[i]);
+ 		}
+-    	return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
+-    }
+-    
+-    public void setActiveWorkingSets(IWorkingSet[] workingSets) {
+-    	fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
+-    	fElementMapper.rebuild(getActiveWorkingSets());
+-    	fOthersWorkingSetUpdater.updateElements();
+-    	fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
+-    }
+-	
++		return (IWorkingSet[]) result.toArray(new IWorkingSet[result.size()]);
++	}
++
++	public void setActiveWorkingSets(IWorkingSet[] workingSets) {
++		fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
++		fElementMapper.rebuild(getActiveWorkingSets());
++		fOthersWorkingSetUpdater.updateElements();
++		fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
++	}
++
+ 	public void saveState(IMemento memento) {
+ 		memento.putString(TAG_CONFIGURED, Boolean.toString(fConfigured));
+ 		fLocalWorkingSetManager.saveState(memento.createChild(TAG_LOCAL_WORKING_SET_MANAGER));
+ 		for (Iterator iter= fActiveWorkingSets.iterator(); iter.hasNext();) {
+ 			IMemento active= memento.createChild(TAG_ACTIVE_WORKING_SET);
+-			IWorkingSet workingSet= (IWorkingSet)iter.next();
++			IWorkingSet workingSet= (IWorkingSet) iter.next();
+ 			active.putString(TAG_WORKING_SET_NAME, workingSet.getName());
+ 		}
+ 	}
+-	
++
+ 	private void restoreState(IMemento memento) {
+ 		String configured= memento.getString(TAG_CONFIGURED);
+ 		if (configured != null)
+ 			fConfigured= Boolean.valueOf(configured).booleanValue();
+ 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
+-		addListenersToWorkingSetManagers();
++		addListenersToWorkingSetManagers(); 
+ 		fLocalWorkingSetManager.restoreState(memento.getChild(TAG_LOCAL_WORKING_SET_MANAGER));
+ 		IWorkingSet history= getHistoryWorkingSet();
+ 		if (history != null) {
+@@ -380,54 +395,54 @@
+ 			}
+ 		}
+ 	}
+-    private void workingSetManagerChanged(PropertyChangeEvent event) {
++
++	private void workingSetManagerChanged(PropertyChangeEvent event) {
+ 		String property= event.getProperty();
+-    	if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
+-			IWorkingSetUpdater updater= (IWorkingSetUpdater)event.getNewValue();
++		if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
++			IWorkingSetUpdater updater= (IWorkingSetUpdater) event.getNewValue();
+ 			if (updater instanceof OthersWorkingSetUpdater) {
+-				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater)updater;
++				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater) updater;
+ 			}
+ 			return;
+ 		}
+-    	// don't handle working sets not managed by the model
+-    	if (!isAffected(event))
+-    		return;
+-    	
++		// don't handle working sets not managed by the model
++		if (!isAffected(event))
++			return;
++
+ 		if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) {
+-			IWorkingSet workingSet= (IWorkingSet)event.getNewValue();
++			IWorkingSet workingSet= (IWorkingSet) event.getNewValue();
+ 			IAdaptable[] elements= fElementMapper.refresh(workingSet);
+ 			if (elements != null) {
+ 				fireEvent(event);
+ 			}
+ 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) {
+-			IWorkingSet workingSet= (IWorkingSet)event.getOldValue();
++			IWorkingSet workingSet= (IWorkingSet) event.getOldValue();
+ 			List elements= new ArrayList(fActiveWorkingSets);
+ 			elements.remove(workingSet);
+-			setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()]));
+-    	} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
++			setActiveWorkingSets((IWorkingSet[]) elements.toArray(new IWorkingSet[elements.size()]));
++		} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
+ 			fireEvent(event);
+ 		}
+ 	}
+-    
+-    private void fireEvent(PropertyChangeEvent event) {
+-    	Object[] listeners= fListeners.getListeners();
+-    	for (int i= 0; i < listeners.length; i++) {
+-			((IPropertyChangeListener)listeners[i]).propertyChange(event);
+-		}
+-    }
+-    
+-    private boolean isAffected(PropertyChangeEvent event) {
+-    	if (fActiveWorkingSets == null)
+-    		return false;
+-    	Object oldValue= event.getOldValue();
+-    	Object newValue= event.getNewValue();
+-    	if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) 
+-    		|| (newValue != null && fActiveWorkingSets.contains(newValue))) {
+-    		return true;
+-    	}
+-    	return false;
+-    }
+-	
++
++	private void fireEvent(PropertyChangeEvent event) {
++		Object[] listeners= fListeners.getListeners();
++		for (int i= 0; i < listeners.length; i++) {
++			((IPropertyChangeListener) listeners[i]).propertyChange(event);
++		}
++	}
++
++	private boolean isAffected(PropertyChangeEvent event) {
++		if (fActiveWorkingSets == null)
++			return false;
++		Object oldValue= event.getOldValue();
++		Object newValue= event.getNewValue();
++		if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) || (newValue != null && fActiveWorkingSets.contains(newValue))) {
++			return true;
++		}
++		return false;
++	}
++
+ 	private IWorkingSet getHistoryWorkingSet() {
+ 		IWorkingSet[] workingSets= fLocalWorkingSetManager.getWorkingSets();
+ 		for (int i= 0; i < workingSets.length; i++) {
+Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java,v
+retrieving revision 1.50
+diff -u -r1.50 PackageExplorerContentProvider.java
+--- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	11 Jan 2006 15:49:15 -0000	1.50
++++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	8 Feb 2006 00:46:03 -0000
+@@ -76,14 +76,22 @@
+ 	private PackageFragmentProvider fPackageFragmentProvider= new PackageFragmentProvider();
+ 	
+ 	private int fPendingChanges;
+-	PackageExplorerPart fPart;
++	//PackageExplorerPart fPart;
++	
++	/**
++	 * Creates a new content provider for Java elements.
++	 */
++	public PackageExplorerContentProvider(boolean provideMembers) {
++		super(provideMembers);	
++		//fPart= part;
++	}
+ 	
+ 	/**
+ 	 * Creates a new content provider for Java elements.
+ 	 */
+ 	public PackageExplorerContentProvider(PackageExplorerPart part, boolean provideMembers) {
+ 		super(provideMembers);	
+-		fPart= part;
++		//fPart= part;
+ 	}
+ 	
+ 	/* package */ PackageFragmentProvider getPackageFragmentProvider() {
+@@ -620,7 +628,7 @@
+ 		});
+ 	}
+ 
+-	private void postAdd(final Object parent, final Object element) {
++	/* package */ void postAdd(final Object parent, final Object element) {
+ 		postRunnable(new Runnable() {
+ 			public void run() {
+ 				Control ctrl= fViewer.getControl();
+@@ -647,7 +655,14 @@
+ 	private void postProjectStateChanged(final Object root) {
+ 		postRunnable(new Runnable() {
+ 			public void run() {
+-				fPart.projectStateChanged(root);
++				//fPart.projectStateChanged(root); 
++				Control ctrl= fViewer.getControl();
++				if (ctrl != null && !ctrl.isDisposed()) {
++					fViewer.refresh(root, true);
++					// trigger a syntetic selection change so that action refresh their
++					// enable state.
++					fViewer.setSelection(fViewer.getSelection());
++				}
+ 			}
+ 		});
+ 	}
+Index: plugin.xml
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/plugin.xml,v
+retrieving revision 1.617
+diff -u -r1.617 plugin.xml
+--- plugin.xml	5 Feb 2006 18:11:23 -0000	1.617
++++ plugin.xml	8 Feb 2006 00:46:02 -0000
+@@ -5047,4 +5047,97 @@
+       </objectContribution>
+    </extension>
+ 
++
++    <!-- ADDITIONS BELOW THIS LINE -->
++      
++    <extension
++          point="org.eclipse.ui.navigator.viewer">
++       <viewerContentBinding 
++             viewerId="org.eclipse.ui.navigator.resourceContent">
++          <includes>
++       	      <contentExtension pattern="org.eclipse.jdt.java.ui.javaContent" />       
++          </includes>       
++       </viewerContentBinding>
++    </extension> 
++      
++    <extension
++          point="org.eclipse.ui.navigator.navigatorContent">
++       <navigatorContent
++             activeByDefault="true"
++             contentProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareContentProvider"
++             icon="$nl$/icons/full/obj16/java_model.gif"
++             id="org.eclipse.jdt.java.ui.javaContent"
++             labelProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareLabelProvider"
++             name="Java Elements"
++             priority="high">
++          <triggerPoints> 
++	         <or>           
++               <adapt 
++	                     type="org.eclipse.core.resources.IProject" > 
++		                  <test
++		                     property="org.eclipse.core.resources.projectNature"
++		                     value="org.eclipse.jdt.core.javanature" />
++               </adapt>             
++	           <instanceof 
++	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 
++	                 
++	           <instanceof
++	                 value="org.eclipse.core.resources.IFolder" /> 
++	           <instanceof
++	                value="org.eclipse.core.resources.IFile" /> 
++	           <instanceof 
++	                 value="org.eclipse.jdt.core.IJavaProject" /> 
++	           <instanceof 
++	                 value="org.eclipse.jdt.core.IJavaElement" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.core.IClassFile" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" /> 
++	            <!--
++				<instanceof 
++ 					value="org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel" /> 
++ 					-->
++	         </or>
++          </triggerPoints>
++          <possibleChildren> 
++	         <or>           
++               <adapt 
++					type="org.eclipse.core.resources.IProject" >  
++               </adapt>             
++	           <instanceof 
++	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 	                 
++	           <instanceof
++	                 value="org.eclipse.core.resources.IFolder" /> 
++	           <instanceof
++	                value="org.eclipse.core.resources.IFile" /> 
++	           <instanceof 
++	                 value="org.eclipse.jdt.core.IJavaProject" /> 
++	           <instanceof 
++	                 value="org.eclipse.jdt.core.IJavaElement" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.core.IClassFile" /> 
++	           <instanceof
++	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" />  
++	         </or>
++          </possibleChildren>          
++          <actionProvider 
++	               class="org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionProvider">
++	               <enablement>	               
++	               <adapt 
++	                     type="org.eclipse.jdt.core.IJavaElement" /> 
++	               </enablement>
++          </actionProvider>
++          <override
++                policy="InvokeAlwaysRegardlessOfSuppressedExt"
++                suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
++          <commonSorter
++                class="org.eclipse.jdt.ui.JavaElementSorter"
++                id="org.eclipse.jdt.ui.javaElementSorter"/> 
++       </navigatorContent>
++    </extension>
++     
+ </plugin>
+\ No newline at end of file
+Index: ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
+===================================================================
+RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java,v
+retrieving revision 1.7
+diff -u -r1.7 MultiActionGroup.java
+--- ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	17 Jun 2005 15:51:51 -0000	1.7
++++ ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	8 Feb 2006 00:46:02 -0000
+@@ -37,6 +37,8 @@
+  */
+ public class MultiActionGroup extends ActionGroup {
+ 	
++	public IAction[] NO_ACTIONS = new IAction[0];
++	
+ 	private IAction[] fActions; 
+ 	
+ 	private int fCurrentSelection;
+@@ -57,6 +59,32 @@
+ 		fCurrentSelection= currentSelection;
+ 		fActions= actions;
+ 	}
++	
++	/**
++	 * Creates a new action group with a given set of actions.
++	 * 
++	 * @param actions			the actions for this multi group
++	 * @param currentSelection	decides which action is selected in the menu on start up.
++	 * 							Denotes the location in the actions array of the current
++	 * 							selected state. It cannot be null.
++	 */
++	public MultiActionGroup(int currentSelection) {
++		super();
++		
++		fCurrentSelection= currentSelection;
++		fActions= NO_ACTIONS;
++	}
++	
++	/**
++	 * 
++	 * @param actions			the actions for this multi group 
++	 */
++	protected final void setActions(IAction[] actions) {
++		if(actions != null)
++			fActions = actions;
++		else
++			fActions = NO_ACTIONS;
++	}
+ 
+ 	/**
+ 	 * Add the actions to the given menu manager.
+Index: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
+===================================================================
+RCS file: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
+diff -N ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java	1 Jan 1970 00:00:00 -0000
+@@ -0,0 +1,131 @@
++/*******************************************************************************
++ * Copyright (c) 2000, 2005 IBM Corporation 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:
++ *     IBM Corporation - initial API and implementation
++ *******************************************************************************/
++package org.eclipse.jdt.internal.ui.packageview;
++
++import org.eclipse.jface.action.Action;
++import org.eclipse.jface.action.IAction;
++import org.eclipse.jface.action.IMenuManager;
++import org.eclipse.jface.action.MenuManager;
++import org.eclipse.jface.action.Separator;
++import org.eclipse.jface.viewers.StructuredViewer;
++
++import org.eclipse.ui.IActionBars;
++import org.eclipse.ui.IWorkbenchActionConstants;
++import org.eclipse.ui.PlatformUI;
++import org.eclipse.ui.navigator.IExtensionStateModel;
++
++import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
++import org.eclipse.jdt.internal.ui.JavaPluginImages;
++import org.eclipse.jdt.internal.ui.actions.MultiActionGroup;
++import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
++
++/**
++ * Adds view menus to switch between flat and hierarchical layout.
++ * 
++ * @since 2.1
++ */
++public class CommonLayoutActionGroup extends MultiActionGroup {
++
++	private boolean fHasContributedToViewMenu = false;
++	private IAction fHierarchicalLayout = null;
++	private IAction fFlatLayoutAction = null; 
++
++	public CommonLayoutActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
++		super(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) ? 0 : 1);
++		IAction[] actions = createActions(structuredViewer, stateModel);
++		setActions(actions); 
++	}
++
++	/* (non-Javadoc)
++	 * @see ActionGroup#fillActionBars(IActionBars)
++	 */
++	public void fillActionBars(IActionBars actionBars) {
++		super.fillActionBars(actionBars);
++		if(!fHasContributedToViewMenu) {
++			synchronized(this) {
++				if(!fHasContributedToViewMenu) {
++					fHasContributedToViewMenu = true;
++					contributeToViewMenu(actionBars.getMenuManager());
++				}
++			}
++		}
++	}
++	
++	private void contributeToViewMenu(IMenuManager viewMenu) {
++		viewMenu.add(new Separator());
++
++		// Create layout sub menu
++		
++		IMenuManager layoutSubMenu= new MenuManager(PackagesMessages.LayoutActionGroup_label); 
++		final String layoutGroupName= "layout"; //$NON-NLS-1$
++		Separator marker= new Separator(layoutGroupName);
++
++		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
++		viewMenu.add(marker);
++		viewMenu.appendToGroup(layoutGroupName, layoutSubMenu);
++		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$		
++		addActions(layoutSubMenu);
++	}
++	
++	
++	private IAction[] createActions(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
++		
++		fFlatLayoutAction= new CommonLayoutAction(structuredViewer, stateModel, true);
++		fFlatLayoutAction.setText(PackagesMessages.LayoutActionGroup_flatLayoutAction_label); 
++		JavaPluginImages.setLocalImageDescriptors(fFlatLayoutAction, "flatLayout.gif"); //$NON-NLS-1$
++		
++		fHierarchicalLayout= new CommonLayoutAction(structuredViewer, stateModel, false);
++		fHierarchicalLayout.setText(PackagesMessages.LayoutActionGroup_hierarchicalLayoutAction_label);	  
++		JavaPluginImages.setLocalImageDescriptors(fHierarchicalLayout, "hierarchicalLayout.gif"); //$NON-NLS-1$
++		
++		fHierarchicalLayout.setChecked(!stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
++		fFlatLayoutAction.setChecked(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
++		
++		return new IAction[]{fFlatLayoutAction, fHierarchicalLayout};
++	}
++	
++	public void setFlatLayout(boolean flatLayout) {
++		fHierarchicalLayout.setChecked(!flatLayout);
++		fFlatLayoutAction.setChecked(flatLayout);
++	}
++	 
++}
++
++class CommonLayoutAction extends Action implements IAction {
++
++	private final boolean fIsFlatLayout;
++	private IExtensionStateModel fStateModel;
++	private StructuredViewer fStructuredViewer;
++
++	public CommonLayoutAction(StructuredViewer structuredViewer, IExtensionStateModel stateModel, boolean flat) {
++		super("", AS_RADIO_BUTTON); //$NON-NLS-1$
++		fStateModel = stateModel;
++		fStructuredViewer = structuredViewer;
++		fIsFlatLayout= flat; 
++		if (fIsFlatLayout)
++			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_FLAT_ACTION);
++		else
++			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_HIERARCHICAL_ACTION);
++	}
++
++	/*
++	 * @see org.eclipse.jface.action.IAction#run()
++	 */
++	public void run() {
++		if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) != fIsFlatLayout) {
++			fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, fIsFlatLayout);
++  			 	
++			fStructuredViewer.getControl().setRedraw(false);
++			fStructuredViewer.refresh();
++			fStructuredViewer.getControl().setRedraw(true);
++		}
++	}
++}
+Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
+===================================================================
+RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
+diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java	1 Jan 1970 00:00:00 -0000
+@@ -0,0 +1,174 @@
++/***************************************************************************************************
++ * Copyright (c) 2003, 2004 IBM Corporation 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: IBM Corporation - initial API and implementation
++ **************************************************************************************************/
++package org.eclipse.jdt.internal.ui.packageview;
++
++import java.util.Arrays;
++import java.util.HashSet;
++import java.util.Iterator;
++import java.util.Set;
++
++import org.eclipse.core.resources.IResource;
++import org.eclipse.core.resources.IWorkspaceRoot;
++
++import org.eclipse.jface.preference.IPreferenceStore;
++import org.eclipse.jface.util.IPropertyChangeListener;
++import org.eclipse.jface.util.PropertyChangeEvent;
++import org.eclipse.jface.viewers.Viewer;
++
++import org.eclipse.ui.IMemento;
++import org.eclipse.ui.navigator.IExtensionStateModel;
++import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
++import org.eclipse.ui.navigator.PipelinedShapeModification;
++import org.eclipse.ui.navigator.PipelinedViewerUpdate;
++
++import org.eclipse.jdt.core.IJavaElement;
++import org.eclipse.jdt.core.IJavaModel;
++import org.eclipse.jdt.core.JavaCore;
++
++import org.eclipse.jdt.ui.PreferenceConstants;
++
++import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
++
++public class PreferenceAwareContentProvider extends
++		PackageExplorerContentProvider implements IPipelinedTreeContentProvider {
++
++	public PreferenceAwareContentProvider() {
++		super(false);
++	}
++
++	public PreferenceAwareContentProvider(boolean provideMembers) {
++		super(provideMembers);
++	}
++
++	public static final String JDT_EXTENSION_ID = "org.eclipse.jdt.ui.javaContent"; //$NON-NLS-1$ 
++
++	private IExtensionStateModel fStateModel;
++
++	public void init(IExtensionStateModel stateModel, IMemento memento) {
++		fStateModel = stateModel;
++		// fManager = new WorkingSetModelManager(fStateModel, this);
++		// expose the manager for the action provider
++		// fStateModel.setProperty(WorkingSetModelManager.INSTANCE_KEY,
++		// fManager);
++		restoreState(memento);
++		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
++			public void propertyChange(PropertyChangeEvent event) {
++				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
++					if (event.getNewValue() != null) {
++						boolean newValue = ((Boolean) event.getNewValue())
++								.booleanValue() ? true : false;
++						setIsFlatLayout(newValue);
++					}
++				}
++
++			}
++		});
++
++		IPreferenceStore store = PreferenceConstants.getPreferenceStore();
++		boolean showCUChildren = store
++				.getBoolean(PreferenceConstants.SHOW_CU_CHILDREN);
++		setProvideMembers(showCUChildren);
++	}
++
++	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
++		super.inputChanged(viewer, oldInput, findInputElement(newInput));
++	}
++
++	public Object[] getElements(Object inputElement) {
++		if (inputElement instanceof IWorkspaceRoot)
++			return super.getElements(JavaCore
++					.create((IWorkspaceRoot) inputElement));
++		return super.getElements(inputElement);
++	}
++
++	private Object findInputElement(Object newInput) {
++		if (newInput instanceof IWorkspaceRoot) {
++			return JavaCore.create((IWorkspaceRoot) newInput);
++		}
++		return newInput;
++	}
++
++	public void restoreState(IMemento memento) {
++
++	}
++
++	public void saveState(IMemento memento) {
++
++	}
++
++	public void getPipelinedChildren(Object parent, Set currentChildren) {
++		Object[] children = getChildren(parent);
++		for (Iterator iter = currentChildren.iterator(); iter.hasNext();)
++			if (iter.next() instanceof IResource)
++				iter.remove();
++		currentChildren.addAll(Arrays.asList(children));
++	}
++
++	public void getPipelinedElements(Object input, Set currentElements) {
++		Object[] children = getElements(input);
++
++		for (Iterator iter = currentElements.iterator(); iter.hasNext();)
++			if (iter.next() instanceof IResource)
++				iter.remove();
++
++		currentElements.addAll(Arrays.asList(children));
++	}
++
++	public Object getPipelinedParent(Object object, Object suggestedParent) {
++		return getParent(object);
++	}
++
++	public PipelinedShapeModification interceptAdd(
++			PipelinedShapeModification anAddModification) {
++		// TODO Auto-generated method stub
++		return null;
++	}
++
++	public PipelinedShapeModification interceptRemove(
++			PipelinedShapeModification aRemoveModification) {
++		// TODO Auto-generated method stub
++		return null;
++	}
++
++	public boolean interceptRefresh(
++			PipelinedViewerUpdate aRefreshSynchronization) {
++		IJavaElement javaElement;
++		Set interceptedElements = new HashSet();
++		for (Iterator iter = aRefreshSynchronization.getRefreshTargets()
++				.iterator(); iter.hasNext();) {
++			Object element = iter.next();
++			if (element instanceof IResource) {
++				if ((javaElement = JavaCore.create((IResource) element)) != null && javaElement.exists()) {
++					iter.remove();
++					interceptedElements.add(javaElement);
++				}
++			}
++		}
++		if (interceptedElements.size() > 0) {
++			aRefreshSynchronization.getRefreshTargets().addAll(
++					interceptedElements);
++			return true;
++		}
++		return false;
++
++	}
++
++	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
++		// TODO Auto-generated method stub
++		return false;
++	}
++
++	/* package */void postAdd(final Object parent, final Object element) {
++		if (parent instanceof IJavaModel)
++			super.postAdd(((IJavaModel) parent).getWorkspace(), element);
++		else
++			super.postAdd(parent, element);
++	}
++
++}
+Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
+===================================================================
+RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
+diff -N ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java	1 Jan 1970 00:00:00 -0000
+@@ -0,0 +1,126 @@
++/***************************************************************************************************
++ * Copyright (c) 2003, 2004 IBM Corporation 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: IBM Corporation - initial API and implementation
++ **************************************************************************************************/
++package org.eclipse.jdt.internal.ui.packageview;
++
++import org.eclipse.jface.action.IMenuManager;
++import org.eclipse.jface.preference.IPreferenceStore;
++import org.eclipse.jface.viewers.StructuredViewer;
++
++import org.eclipse.ui.IActionBars;
++import org.eclipse.ui.IMemento;
++import org.eclipse.ui.IViewPart;
++import org.eclipse.ui.navigator.CommonActionProvider;
++import org.eclipse.ui.navigator.CommonActionProviderConfig;
++import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
++import org.eclipse.ui.navigator.IExtensionStateModel;
++import org.eclipse.ui.navigator.INavigatorContentService;
++
++import org.eclipse.jdt.ui.actions.CCPActionGroup;
++
++import org.eclipse.jdt.internal.ui.JavaPlugin;
++import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
++import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup;
++
++public class PackageExplorerActionProvider extends CommonActionProvider { 
++
++	private static final int HIERARCHICAL_LAYOUT = 0x1;
++
++	private static final int FLAT_LAYOUT = 0x2;
++
++	private static final String TAG_LAYOUT = "layout"; //$NON-NLS-1$
++
++	private ViewActionGroup fViewActionGroup;
++
++	private CommonLayoutActionGroup fLayoutActionGroup;
++
++	private boolean fHasFilledViewMenu = false;
++
++	private IExtensionStateModel fStateModel;
++
++	private CCPActionGroup fCCPGroup;
++
++	public void fillActionBars(IActionBars actionBars) {
++		if (!fHasFilledViewMenu) {
++			if(fViewActionGroup != null)
++				fViewActionGroup.fillActionBars(actionBars);
++			fLayoutActionGroup.fillActionBars(actionBars);
++			fHasFilledViewMenu = true;
++		}
++
++	}
++
++	public void fillContextMenu(IMenuManager menu) {
++
++		if(fCCPGroup != null)
++			fCCPGroup.fillContextMenu(menu);
++
++	}
++
++	public void init(CommonActionProviderConfig config) {
++
++		ICommonViewerWorkbenchSite workbenchSite = null;
++		if (config.getViewSite() instanceof ICommonViewerWorkbenchSite)
++			workbenchSite = (ICommonViewerWorkbenchSite) config.getViewSite();
++
++		fStateModel = config.getExtensionStateModel();
++//		WorkingSetModelManager workingSetModelManager = (WorkingSetModelManager) fStateModel
++//				.getProperty(WorkingSetModelManager.INSTANCE_KEY);
++
++		fLayoutActionGroup = new CommonLayoutActionGroup(config
++				.getStructuredViewer(), fStateModel);
++
++		if (workbenchSite != null) {
++//			fViewActionGroup = new ViewActionGroup(
++//					ViewActionGroup.SHOW_PROJECTS, /*workingSetModelManager,*/
++//					workbenchSite.getSite());
++			if (workbenchSite.getPart() != null
++					&& workbenchSite.getPart() instanceof IViewPart) {
++				fCCPGroup = new CCPActionGroup((IViewPart) workbenchSite
++						.getPart());
++			}
++
++		}
++
++	}
++
++	public void init(final String extensionId, final IViewPart viewPart,
++			final INavigatorContentService contentService,
++			final StructuredViewer structuredViewer) {
++
++	}
++
++	public void restoreState(IMemento memento) {
++		super.restoreState(memento);
++		restoreLayoutState(memento);
++	}
++
++	private void restoreLayoutState(IMemento memento) {
++		boolean isCurrentLayoutFlat = true;
++		Integer state = null;
++		if (memento != null)
++			state = memento.getInteger(TAG_LAYOUT);
++
++		// If no memento try an restore from preference store
++		if (state == null) {
++			IPreferenceStore store = JavaPlugin.getDefault()
++					.getPreferenceStore();
++			state = new Integer(store.getInt(TAG_LAYOUT));
++		}
++
++		if (state.intValue() == FLAT_LAYOUT)
++			isCurrentLayoutFlat = true;
++		else if (state.intValue() == HIERARCHICAL_LAYOUT)
++			isCurrentLayoutFlat = false;
++
++		fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT,
++				isCurrentLayoutFlat);
++		fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat);
++	}
++
++}
+Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
+===================================================================
+RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
+diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java	1 Jan 1970 00:00:00 -0000
+@@ -0,0 +1,191 @@
++/***************************************************************************************************
++ * Copyright (c) 2000, 2004 IBM Corporation 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: IBM Corporation - initial API and implementation
++ **************************************************************************************************/
++package org.eclipse.jdt.internal.ui.packageview;
++
++import org.eclipse.core.resources.IContainer;
++import org.eclipse.core.resources.IResource;
++
++import org.eclipse.swt.graphics.Color;
++import org.eclipse.swt.graphics.Image;
++
++import org.eclipse.jface.util.IPropertyChangeListener;
++import org.eclipse.jface.util.PropertyChangeEvent;
++import org.eclipse.jface.viewers.ILabelDecorator;
++import org.eclipse.jface.viewers.ILabelProviderListener;
++import org.eclipse.jface.viewers.ITreeContentProvider;
++
++import org.eclipse.ui.IMemento;
++import org.eclipse.ui.navigator.ICommonLabelProvider;
++import org.eclipse.ui.navigator.IExtensionStateModel;
++
++import org.eclipse.jdt.core.IJavaElement;
++
++import org.eclipse.jdt.ui.JavaElementLabels;
++
++import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
++import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
++import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
++
++/**
++ * Provides the labels for the Package Explorer.
++ * <p>
++ * It provides labels for the packages in hierarchical layout and in all other
++ * cases delegates it to its super class.
++ * </p>
++ * 
++ * @since 2.1
++ */
++public class PreferenceAwareLabelProvider implements ICommonLabelProvider {
++
++	private final long LABEL_FLAGS = JavaElementLabels.DEFAULT_QUALIFIED
++			| JavaElementLabels.ROOT_POST_QUALIFIED
++			| JavaElementLabels.APPEND_ROOT_PATH
++			| JavaElementLabels.M_PARAMETER_TYPES
++			| JavaElementLabels.M_PARAMETER_NAMES
++			| JavaElementLabels.M_APP_RETURNTYPE
++			| JavaElementLabels.M_EXCEPTIONS
++			| JavaElementLabels.F_APP_TYPE_SIGNATURE
++			| JavaElementLabels.T_TYPE_PARAMETERS;
++
++	private PackageExplorerLabelProvider delegeteLabelProvider;
++
++	private PackageExplorerContentProvider fContentProvider;
++
++	private IExtensionStateModel fStateModel;
++
++	public PreferenceAwareLabelProvider() {
++
++	}
++
++	public void init(IExtensionStateModel aStateModel,
++			ITreeContentProvider contentProvider) {
++		fStateModel = aStateModel;
++
++		fContentProvider = (PackageExplorerContentProvider) contentProvider;
++		delegeteLabelProvider = createLabelProvider();
++
++		delegeteLabelProvider.setIsFlatLayout(fStateModel
++				.getBooleanProperty(Values.IS_LAYOUT_FLAT));
++		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
++			public void propertyChange(PropertyChangeEvent event) {
++				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
++					if (event.getNewValue() != null) {
++						boolean newValue = ((Boolean) event.getNewValue())
++								.booleanValue() ? true : false;
++						delegeteLabelProvider.setIsFlatLayout(newValue);
++					}
++				}
++
++			}
++		});
++	}
++
++	public String getDescription(Object anElement) {
++		return formatMessage(anElement);
++	}
++
++	private PackageExplorerLabelProvider createLabelProvider() {
++
++		return new PackageExplorerLabelProvider(
++				AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
++						| JavaElementLabels.P_COMPRESSED,
++				AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS
++						| JavaElementImageProvider.SMALL_ICONS,
++				fContentProvider);
++
++	}
++
++	public void dispose() {
++		delegeteLabelProvider.dispose();
++	}
++
++	public void propertyChange(PropertyChangeEvent event) {
++		delegeteLabelProvider.propertyChange(event);
++	}
++
++	public void addLabelDecorator(ILabelDecorator decorator) {
++		delegeteLabelProvider.addLabelDecorator(decorator);
++	}
++
++	public void addListener(ILabelProviderListener listener) {
++		delegeteLabelProvider.addListener(listener);
++	}
++
++	public Color getBackground(Object element) {
++		return delegeteLabelProvider.getBackground(element);
++	}
++
++	public Color getForeground(Object element) {
++		return delegeteLabelProvider.getForeground(element);
++	}
++
++	public Image getImage(Object element) {
++		return delegeteLabelProvider.getImage(element);
++	}
++
++	public boolean isLabelProperty(Object element, String property) {
++		return delegeteLabelProvider.isLabelProperty(element, property);
++	}
++
++	public void removeListener(ILabelProviderListener listener) {
++		delegeteLabelProvider.removeListener(listener);
++	}
++
++	public boolean equals(Object obj) {
++		return delegeteLabelProvider.equals(obj);
++	}
++
++	public int hashCode() {
++		return delegeteLabelProvider.hashCode();
++	}
++
++	public String toString() {
++		return delegeteLabelProvider.toString();
++	}
++
++	public String getText(Object element) {
++		return delegeteLabelProvider.getText(element);
++	}
++
++	public void setIsFlatLayout(boolean state) {
++		delegeteLabelProvider.setIsFlatLayout(state);
++	}
++
++	// Taken from StatusBarUpdater
++
++	protected String formatMessage(Object element) {
++		if (element instanceof IJavaElement) {
++			return formatJavaElementMessage((IJavaElement) element);
++		} else if (element instanceof IResource) {
++			return formatResourceMessage((IResource) element);
++		}
++		return ""; //$NON-NLS-1$
++	}
++
++	private String formatJavaElementMessage(IJavaElement element) {
++		return JavaElementLabels.getElementLabel(element, LABEL_FLAGS);
++	}
++
++	private String formatResourceMessage(IResource element) {
++		IContainer parent = element.getParent();
++		if (parent != null && parent.getType() != IResource.ROOT)
++			return element.getName() + JavaElementLabels.CONCAT_STRING
++					+ parent.getFullPath().makeRelative().toString();
++		else
++			return element.getName();
++	}
++
++	public void restoreState(IMemento aMemento) {
++
++	}
++
++	public void saveState(IMemento aMemento) {
++
++	}
++}
+Index: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
+===================================================================
+RCS file: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
+diff -N ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java	1 Jan 1970 00:00:00 -0000
+@@ -0,0 +1,23 @@
++/***************************************************************************************************
++ * Copyright (c) 2003, 2004 IBM Corporation 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: IBM Corporation - initial API and implementation
++ **************************************************************************************************/
++package org.eclipse.jdt.internal.ui.packageview;
++
++
++public interface IExtensionStateConstants {
++ 
++	String ROOT_MODE= "rootMode"; //$NON-NLS-1$ 
++
++	interface Values {
++
++		String IS_LAYOUT_FLAT= "isLayoutFlat"; //$NON-NLS-1$
++ 
++
++	}
++
++}
diff --git a/bundles/org.eclipse.rap.ui.navigator/models/CommonNavigator.emx b/bundles/org.eclipse.rap.ui.navigator/models/CommonNavigator.emx
new file mode 100755
index 0000000..42fcc12
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/models/CommonNavigator.emx
@@ -0,0 +1,3387 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--xtools2_universal_type_manager-->
+<uml:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.ibm.com/xtools/1.5.0/Notation" xmlns:uml="http://www.eclipse.org/uml2/1.0.0/UML" xmlns:umlnotation="http://www.ibm.com/xtools/1.5.0/Umlnotation" xmi:id="_SWX3UH5GEdm797szikHjoQ" name="CommonNavigator" appliedProfile="_SWX3VH5GEdm797szikHjoQ _SWX3V35GEdm797szikHjoQ _SWX3Wn5GEdm797szikHjoQ _SWX3XX5GEdm797szikHjoQ _SWX3YH5GEdm797szikHjoQ">
+  <eAnnotations xmi:id="_SWX3UX5GEdm797szikHjoQ" source="uml2.diagrams" references="_SWX3Un5GEdm797szikHjoQ">
+    <contents xmi:type="notation:Diagram" xmi:id="_SWX3Un5GEdm797szikHjoQ" type="Class" name="Core">
+      <children xmi:id="_YIiqQH5GEdm797szikHjoQ" sourceEdges="_gmJvwH5GEdm797szikHjoQ _pbicEH5GEdm797szikHjoQ _cVmOoH5IEdm797szikHjoQ _qqjuAPy4Edm185zvv0WM_Q" targetEdges="_gmP2Y35GEdm797szikHjoQ">
+        <children xmi:id="_YIiqQ35GEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_YIiqRH5GEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_YIiqRX5GEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_YIiqRn5GEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_YIiqR35GEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_YIiqSH5GEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_YIiqSX5GEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_YIiqSn5GEdm797szikHjoQ" filtering="Manual">
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createCommonViewer^sign=(QComposite%3b)QCommonViewer%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=initListeners^sign=(QTreeViewer%3b)V[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=handleDoubleClick^sign=(QDoubleClickEvent%3b)V[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createCommonManager^sign=()QCommonNavigatorManager%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createCommonActionGroup^sign=()QActionGroup%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createCommonFilter^sign=(QCommonViewer%3b)QViewerFilter%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createDisposeListener^sign=()QDisposeListener%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=getInitialInput^sign=()QIAdaptable%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=updateTitle^sign=()V[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=getFrameToolTipText^sign=(QObject%3b)QString%3b[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </styles>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_YIiqS35GEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_YIiqTH5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_YIiqTX5GEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_YIiqTn5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_YIiqQX5GEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YIiqQn5GEdm797szikHjoQ" x="36252" y="1590"/>
+      </children>
+      <children xmi:id="_gYyCIH5GEdm797szikHjoQ" sourceEdges="_gmP2Y35GEdm797szikHjoQ _bpR7MH5IEdm797szikHjoQ" targetEdges="_gmJvwH5GEdm797szikHjoQ _w9XssPy0Edm185zvv0WM_Q">
+        <children xmi:id="_gYyCI35GEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_gYyCJH5GEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_gYyCJX5GEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_gYyCJn5GEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_gYyCJ35GEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_gYyCKH5GEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_gYyCKX5GEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_gYyCKn5GEdm797szikHjoQ" filtering="Manual">
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=init^sign=()V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=selectionChanged^sign=(QSelectionChangedEvent%3b)V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=restoreState^sign=(QIMemento%3b)V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=saveState^sign=(QIMemento%3b)V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=fillContextMenu^sign=(QIMenuManager%3b)V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=initContextMenu^sign=()V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=updateStatusBar^sign=(QISelection%3b)V[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=getDefaultStatusBarMessage^sign=(QIStructuredSelection%3b)QString%3b[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </styles>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_gYyCK35GEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_gYyCLH5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_gYyCLX5GEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_gYyCLn5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_gYyCIX5GEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gYyCIn5GEdm797szikHjoQ" x="43248" y="5406"/>
+      </children>
+      <children xmi:id="_pX0ZsH5GEdm797szikHjoQ" sourceEdges="_cVsVQH5IEdm797szikHjoQ" targetEdges="_pbicEH5GEdm797szikHjoQ">
+        <children xmi:id="_pX0Zs35GEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_pX0ZtH5GEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_pX0ZtX5GEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_pX0Ztn5GEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_pX0Zt35GEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_pX0ZuH5GEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_pX0ZuX5GEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_pX0Zun5GEdm797szikHjoQ" filtering="Manual">
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=init^sign=()V[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=internalAdd^sign=(QWidget%3bQObject%3b%5bQObject%3b)V[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=initDragAndDrop^sign=()V[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=createTreeItem^sign=(QWidget%3bQObject%3bI)V[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </styles>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_pX0Zu35GEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_pX0ZvH5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_pX0ZvX5GEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_pX0Zvn5GEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_pX0ZsX5GEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pX0Zsn5GEdm797szikHjoQ" x="28620" y="1908"/>
+      </children>
+      <children xmi:id="_blp_cH5IEdm797szikHjoQ" sourceEdges="_cVyb4H5IEdm797szikHjoQ _SjfAUPy4Edm185zvv0WM_Q _cYMbofy4Edm185zvv0WM_Q" targetEdges="_bpR7MH5IEdm797szikHjoQ _Vs4hkPy1Edm185zvv0WM_Q">
+        <children xmi:id="_blp_c35IEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_blp_dH5IEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_blp_dX5IEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_blp_dn5IEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_blp_d35IEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_blp_eH5IEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_blp_eX5IEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_blp_en5IEdm797szikHjoQ" filtering="Manual">
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=init^sign=()V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=addCommonActionProviderMenu^sign=(QIMenuManager%3bQIStructuredSelection%3bQActionContext%3b)V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=addContentDescriptorMenu^sign=(QIMenuManager%3bQIStructuredSelection%3bQActionContext%3b)V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=findRelevantActionDescriptors^sign=(QIStructuredSelection%3b)%5bQCommonActionProviderDescriptor%3b[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=getActionProviderInstance^sign=(QCommonActionProviderDescriptor%3b)QICommonActionProvider%3b[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=addActionDescriptor^sign=(QCommonActionProviderDescriptor%3b)V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=complainIfDisposed^sign=()V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=onLoad^sign=(QNavigatorContentDescriptorInstance%3b)V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+            <filteredObjects xmi:type="uml:Operation" href="vizref:///#jmethod^vcore.target=uml2.Operation^name=initialize^sign=(QICommonActionProvider%3b)V[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </styles>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_blp_e35IEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_blp_fH5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_blp_fX5IEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_blp_fn5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_blp_cX5IEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_blp_cn5IEdm797szikHjoQ" x="45792" y="10812"/>
+      </children>
+      <children xmi:id="_cS1OgH5IEdm797szikHjoQ" sourceEdges="_zRaDEH5IEdm797szikHjoQ _2IBD0H5IEdm797szikHjoQ _STCGUfy0Edm185zvv0WM_Q _UZHpEPy0Edm185zvv0WM_Q _UZNvsvy0Edm185zvv0WM_Q _1xTY8Py4Edm185zvv0WM_Q" targetEdges="_cVmOoH5IEdm797szikHjoQ _cVsVQH5IEdm797szikHjoQ _cVyb4H5IEdm797szikHjoQ _zRaDGH5IEdm797szikHjoQ _2IBD2H5IEdm797szikHjoQ _UZNvwvy0Edm185zvv0WM_Q _mNKdAPy1Edm185zvv0WM_Q _SjfAWPy4Edm185zvv0WM_Q _qqjuCPy4Edm185zvv0WM_Q">
+        <children xmi:id="_cS1Og35IEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_cS1OhH5IEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_cS1OhX5IEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cS1Ohn5IEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cS1Oh35IEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cS1OiH5IEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cS1OiX5IEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cS1Oin5IEdm797szikHjoQ" filtering="Automatic" filteringKeys="private,package,protected"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cS1Oi35IEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cS1OjH5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cS1OjX5IEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_cS1Ojn5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_cS1OgX5IEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cS1Ogn5IEdm797szikHjoQ" x="28938" y="16854"/>
+      </children>
+      <children xmi:id="_zPTxUH5IEdm797szikHjoQ" sourceEdges="_zRaDGH5IEdm797szikHjoQ" targetEdges="_zRaDEH5IEdm797szikHjoQ _yKo7oPy1Edm185zvv0WM_Q">
+        <children xmi:id="_zPTxU35IEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_zPTxVH5IEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_zPZ38H5IEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_zPZ38X5IEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_zPZ38n5IEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_zPZ3835IEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_zPZ39H5IEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_zPZ39X5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_zPZ39n5IEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_zPZ3935IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_zPZ3-H5IEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_zPZ3-X5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_zPTxUX5IEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zPTxUn5IEdm797szikHjoQ" x="11086" y="17457"/>
+      </children>
+      <children xmi:id="_2F0rcH5IEdm797szikHjoQ" sourceEdges="_2IBD2H5IEdm797szikHjoQ" targetEdges="_2IBD0H5IEdm797szikHjoQ _ypezwPy1Edm185zvv0WM_Q">
+        <children xmi:id="_2F0rc35IEdm797szikHjoQ" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_2F0rdH5IEdm797szikHjoQ" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_2F0rdX5IEdm797szikHjoQ" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_2F0rdn5IEdm797szikHjoQ" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_2F0rd35IEdm797szikHjoQ" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2F0reH5IEdm797szikHjoQ" filtering="Automatic" filteringKeys="public,protected,private,package"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_2F0reX5IEdm797szikHjoQ" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2F0ren5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_2F0re35IEdm797szikHjoQ" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2F0rfH5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_2F0rfX5IEdm797szikHjoQ" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_2F0rfn5IEdm797szikHjoQ"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_2F0rcX5IEdm797szikHjoQ" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2F0rcn5IEdm797szikHjoQ" x="19393" y="17449"/>
+      </children>
+      <children xmi:id="_SJw1kPy0Edm185zvv0WM_Q" sourceEdges="_STINA_y0Edm185zvv0WM_Q _STOTkvy0Edm185zvv0WM_Q" targetEdges="_STOTkvy0Edm185zvv0WM_Q">
+        <children xmi:id="_SJ28MPy0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_SJ28Mfy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_SJ28Mvy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SJ28M_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SJ28NPy0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SJ28Nfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SJ28Nvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SJ28N_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SJ28OPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SJ28Ofy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SJ28Ovy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_SJ28O_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_SJw1kfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SJw1kvy0Edm185zvv0WM_Q" x="11448" y="31800"/>
+      </children>
+      <children xmi:id="_SLrhIPy0Edm185zvv0WM_Q" targetEdges="_STCGUfy0Edm185zvv0WM_Q _STINA_y0Edm185zvv0WM_Q">
+        <children xmi:id="_SLrhI_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_SLrhJPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_SLrhJfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SLrhJvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SLrhJ_y0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SLrhKPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SLrhKfy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SLrhKvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SLrhK_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_SLrhLPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_SLrhLfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_SLrhLvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_SLrhIfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SLrhIvy0Edm185zvv0WM_Q" x="21624" y="31164"/>
+      </children>
+      <children xmi:id="_UTY0gPy0Edm185zvv0WM_Q" sourceEdges="_UZNvuvy0Edm185zvv0WM_Q _UZNvwvy0Edm185zvv0WM_Q _UZT2Vfy0Edm185zvv0WM_Q" targetEdges="_UZNvsvy0Edm185zvv0WM_Q _UZT2Vfy0Edm185zvv0WM_Q _KhpYMPy1Edm185zvv0WM_Q">
+        <children xmi:id="_UTY0g_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_UTY0hPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_UTY0hfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UTY0hvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UTY0h_y0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UTY0iPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UTY0ify0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UTY0ivy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UTY0i_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UTY0jPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UTY0jfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_UTY0jvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_UTY0gfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UTY0gvy0Edm185zvv0WM_Q" x="37524" y="26394"/>
+      </children>
+      <children xmi:id="_UXl_EPy0Edm185zvv0WM_Q" targetEdges="_UZHpEPy0Edm185zvv0WM_Q _UZNvuvy0Edm185zvv0WM_Q">
+        <children xmi:id="_UXl_E_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_UXl_FPy0Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_UXl_Ffy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UXl_Fvy0Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UXl_F_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UXl_GPy0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UXl_Gfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UXl_Gvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UXl_G_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_UXl_HPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_UXl_Hfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_UXl_Efy0Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UXl_Evy0Edm185zvv0WM_Q" x="30210" y="31164"/>
+      </children>
+      <children xmi:id="_mh4lQPy0Edm185zvv0WM_Q" sourceEdges="_w9XssPy0Edm185zvv0WM_Q" element="_mJViYPy0Edm185zvv0WM_Q">
+        <children xmi:id="_mh4lQ_y0Edm185zvv0WM_Q" type="CommentBody" element="_mJViYPy0Edm185zvv0WM_Q"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_mh4lQfy0Edm185zvv0WM_Q" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mh4lQvy0Edm185zvv0WM_Q" x="45474" y="2226" width="4928" height="1674"/>
+      </children>
+      <children xmi:id="_ADfXQPy1Edm185zvv0WM_Q" sourceEdges="_KhpYMPy1Edm185zvv0WM_Q" element="_ADTKAPy1Edm185zvv0WM_Q">
+        <children xmi:id="_ADfXQ_y1Edm185zvv0WM_Q" type="CommentBody" element="_ADTKAPy1Edm185zvv0WM_Q"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_ADfXQfy1Edm185zvv0WM_Q" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADfXQvy1Edm185zvv0WM_Q" x="50244" y="26712" width="5715" height="2540"/>
+      </children>
+      <children xmi:id="_MRrLYPy1Edm185zvv0WM_Q" sourceEdges="_Vs4hkPy1Edm185zvv0WM_Q" element="_MRe-IPy1Edm185zvv0WM_Q">
+        <children xmi:id="_MRrLY_y1Edm185zvv0WM_Q" type="CommentBody" element="_MRe-IPy1Edm185zvv0WM_Q"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_MRrLYfy1Edm185zvv0WM_Q" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MRrLYvy1Edm185zvv0WM_Q" x="41658" y="10812" width="3175" height="5432"/>
+      </children>
+      <children xmi:id="_XJC9kPy1Edm185zvv0WM_Q" sourceEdges="_mNKdAPy1Edm185zvv0WM_Q" element="_XIwpsPy1Edm185zvv0WM_Q">
+        <children xmi:id="_XJC9k_y1Edm185zvv0WM_Q" type="CommentBody" element="_XIwpsPy1Edm185zvv0WM_Q"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_XJC9kfy1Edm185zvv0WM_Q" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XJC9kvy1Edm185zvv0WM_Q" x="22260" y="11130" width="5715" height="4762"/>
+      </children>
+      <children xmi:id="_vA1SEPy1Edm185zvv0WM_Q" sourceEdges="_yKo7oPy1Edm185zvv0WM_Q _ypezwPy1Edm185zvv0WM_Q" element="_vAWw8Py1Edm185zvv0WM_Q">
+        <children xmi:id="_vA1SE_y1Edm185zvv0WM_Q" type="CommentBody" element="_vAWw8Py1Edm185zvv0WM_Q"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_vA1SEfy1Edm185zvv0WM_Q" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vA1SEvy1Edm185zvv0WM_Q" x="16826" y="9900" width="4471" height="1270"/>
+      </children>
+      <children xmi:id="_She1MPy4Edm185zvv0WM_Q" sourceEdges="_SjfAWPy4Edm185zvv0WM_Q" targetEdges="_SjfAUPy4Edm185zvv0WM_Q _cYSiQ_y4Edm185zvv0WM_Q">
+        <children xmi:id="_She1M_y4Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_She1NPy4Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_She1Nfy4Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_She1Nvy4Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_She1N_y4Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_She1OPy4Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_She1Ofy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_She1Ovy4Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_She1O_y4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_She1PPy4Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_She1Pfy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_She1Mfy4Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_She1Mvy4Edm185zvv0WM_Q" x="49608" y="18444"/>
+      </children>
+      <children xmi:id="_cT5xgPy4Edm185zvv0WM_Q" sourceEdges="_cYSiQ_y4Edm185zvv0WM_Q" targetEdges="_cYMbofy4Edm185zvv0WM_Q">
+        <children xmi:id="_cT_4IPy4Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_cT_4Ify4Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_cT_4Ivy4Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cT_4I_y4Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cT_4JPy4Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cT_4Jfy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cT_4Jvy4Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cT_4J_y4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cT_4KPy4Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_cT_4Kfy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_cT_4Kvy4Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_cT_4K_y4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_cT5xgfy4Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cT5xgvy4Edm185zvv0WM_Q" x="52034" y="10759" width="8804"/>
+      </children>
+      <children xmi:id="_qn-7IPy4Edm185zvv0WM_Q" sourceEdges="_qqjuCPy4Edm185zvv0WM_Q" targetEdges="_qqjuAPy4Edm185zvv0WM_Q">
+        <children xmi:id="_qn-7I_y4Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_qn-7JPy4Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_qn-7Jfy4Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_qn-7Jvy4Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_qn-7J_y4Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_qn-7KPy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_qn-7Kfy4Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_qn-7Kvy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_qn-7K_y4Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_qn-7LPy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_qn-7Lfy4Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_qn-7Lvy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_qn-7Ify4Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qn-7Ivy4Edm185zvv0WM_Q" x="13705" y="25135"/>
+      </children>
+      <children xmi:id="_1ucSMPy4Edm185zvv0WM_Q" targetEdges="_1xTY8Py4Edm185zvv0WM_Q _8M1R8Py4Edm185zvv0WM_Q">
+        <children xmi:id="_1ucSM_y4Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_1ucSNPy4Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_1ucSNfy4Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_1ucSNvy4Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_1ucSN_y4Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_1ucSOPy4Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_1ucSOfy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_1ucSOvy4Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_1ucSO_y4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_1ucSPPy4Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_1ucSPfy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_1ucSMfy4Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1ucSMvy4Edm185zvv0WM_Q" x="4452" y="17490"/>
+      </children>
+      <children xmi:id="_8MEc8Py4Edm185zvv0WM_Q" sourceEdges="_8M1R8Py4Edm185zvv0WM_Q _E9EYgPy5Edm185zvv0WM_Q">
+        <children xmi:id="_8MKjkPy4Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_8MKjkfy4Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_8MKjkvy4Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_8MKjk_y4Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_8MKjlPy4Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_8MKjlfy4Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_8MKjlvy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_8MKjl_y4Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_8MKjmPy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_8MKjmfy4Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_8MKjmvy4Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_8MEc8fy4Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8MEc8vy4Edm185zvv0WM_Q" x="42294" y="21624"/>
+      </children>
+      <children xmi:id="_E7KUAPy5Edm185zvv0WM_Q" targetEdges="_E9EYgPy5Edm185zvv0WM_Q">
+        <children xmi:id="_E7KUA_y5Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_E7KUBPy5Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_E7KUBfy5Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_E7KUBvy5Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_E7KUB_y5Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_E7KUCPy5Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_E7KUCfy5Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_E7KUCvy5Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_E7KUC_y5Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_E7KUDPy5Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_E7KUDfy5Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_E7KUAfy5Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E7KUAvy5Edm185zvv0WM_Q" x="42612" y="18126"/>
+      </children>
+      <styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_SWX3U35GEdm797szikHjoQ"/>
+      <edges xmi:id="_gmJvwH5GEdm797szikHjoQ" source="_YIiqQH5GEdm797szikHjoQ" target="_gYyCIH5GEdm797szikHjoQ">
+        <children xmi:id="_gmJvw35GEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_gmP2YH5GEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_gmP2Yn5GEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_gmP2YX5GEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_gmJvxH5GEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_gmJvwX5GEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gmJvwn5GEdm797szikHjoQ" points="[-14, 3413, -6800, -4577]$[6786, 5000, 0, -2990]"/>
+      </edges>
+      <edges xmi:id="_gmP2Y35GEdm797szikHjoQ" source="_gYyCIH5GEdm797szikHjoQ" target="_YIiqQH5GEdm797szikHjoQ">
+        <children xmi:id="_gmP2Zn5GEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_gmP2aH5GEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_gmP2an5GEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_gmP2aX5GEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_gmP2Z35GEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_gmP2ZH5GEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gmP2ZX5GEdm797szikHjoQ" points="[0, -2990, 6786, 5000]$[-6800, -4577, -14, 3413]"/>
+      </edges>
+      <edges xmi:id="_pbicEH5GEdm797szikHjoQ" source="_YIiqQH5GEdm797szikHjoQ" target="_pX0ZsH5GEdm797szikHjoQ">
+        <children xmi:id="_pbicE35GEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_pbicFX5GEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_pbicF35GEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_pbicFn5GEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_pbicFH5GEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_pbicEX5GEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pbicEn5GEdm797szikHjoQ" points="[-14, 3413, 3161, -4577]$[-3189, 5000, -14, -2990]"/>
+      </edges>
+      <edges xmi:id="_bpR7MH5IEdm797szikHjoQ" source="_gYyCIH5GEdm797szikHjoQ" target="_blp_cH5IEdm797szikHjoQ">
+        <children xmi:id="_bpR7M35IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_bpR7NX5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_bpR7N35IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_bpR7Nn5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_bpR7NH5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_bpR7MX5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_bpR7Mn5IEdm797szikHjoQ" points="[0, 2990, 3915, -5927]$[-3916, 4578, -1, -4339]"/>
+      </edges>
+      <edges xmi:id="_cVmOoH5IEdm797szikHjoQ" source="_YIiqQH5GEdm797szikHjoQ" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_cVmOo35IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_cVmOpX5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVmOp35IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVmOpn5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_cVmOpH5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_cVmOoX5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cVmOon5IEdm797szikHjoQ" points="[-14, 3413, 10001, -25585]$[-14, 21247, 10001, -7751]$[-10015, 22833, 0, -6165]"/>
+      </edges>
+      <edges xmi:id="_cVsVQH5IEdm797szikHjoQ" source="_pX0ZsH5GEdm797szikHjoQ" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_cVsVQ35IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_cVsVRX5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVsVR35IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVsVRn5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_cVsVRH5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_cVsVQX5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewer[jcu^name=CommonViewer.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cVsVQn5IEdm797szikHjoQ" points="[-14, 2990, 6826, -18018]$[2738, 4578, 9578, -16430]$[2738, 13257, 9578, -7751]$[-6840, 14843, 0, -6165]"/>
+      </edges>
+      <edges xmi:id="_cVyb4H5IEdm797szikHjoQ" source="_blp_cH5IEdm797szikHjoQ" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_cVyb435IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_cVyb5X5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVyb535IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cVyb5n5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_cVyb5H5IEdm797szikHjoQ" y="1"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_cVyb4X5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cVyb4n5IEdm797szikHjoQ" points="[26, 2963, 16325, -6244]$[26, 6562, 16325, -2645]$[-13335, 6562, 2964, -2645]"/>
+      </edges>
+      <edges xmi:id="_zRaDEH5IEdm797szikHjoQ" source="_cS1OgH5IEdm797szikHjoQ" target="_zPTxUH5IEdm797szikHjoQ">
+        <children xmi:id="_zRaDE35IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_zRaDFX5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_zRaDF35IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_zRaDFn5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_zRaDFH5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_zRaDEX5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zRaDEn5IEdm797szikHjoQ" points="[0, -6165, 14565, 5926]$[-14579, -7752, -14, 4339]"/>
+      </edges>
+      <edges xmi:id="_zRaDGH5IEdm797szikHjoQ" source="_zPTxUH5IEdm797szikHjoQ" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_zRaDG35IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_zRaDHX5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_zRaDH35IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_zRaDHn5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_zRaDHH5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_zRaDGX5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zRaDGn5IEdm797szikHjoQ" points="[-14, 4339, -14579, -7752]$[14565, 5926, 0, -6165]"/>
+      </edges>
+      <edges xmi:id="_2IBD0H5IEdm797szikHjoQ" source="_cS1OgH5IEdm797szikHjoQ" target="_2F0rcH5IEdm797szikHjoQ">
+        <children xmi:id="_2IBD035IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_2IBD1X5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_2IBD135IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_2IBD1n5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_2IBD1H5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_2IBD0X5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2IBD0n5IEdm797szikHjoQ" points="[0, -6165, 6509, 5926]$[-6509, -7752, 0, 4339]"/>
+      </edges>
+      <edges xmi:id="_2IBD2H5IEdm797szikHjoQ" source="_2F0rcH5IEdm797szikHjoQ" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_2IBD235IEdm797szikHjoQ" type="KindLabel">
+          <children xmi:id="_2IBD3X5IEdm797szikHjoQ" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_2IBD335IEdm797szikHjoQ" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_2IBD3n5IEdm797szikHjoQ" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_2IBD3H5IEdm797szikHjoQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_2IBD2X5IEdm797szikHjoQ" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2IBD2n5IEdm797szikHjoQ" points="[0, 4339, -6509, -7752]$[6509, 5926, 0, -6165]"/>
+      </edges>
+      <edges xmi:id="_STCGUfy0Edm185zvv0WM_Q" source="_cS1OgH5IEdm797szikHjoQ" target="_SLrhIPy0Edm185zvv0WM_Q">
+        <children xmi:id="_STCGVPy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_STIM8Py0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STIM8vy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STIM8fy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_STCGVfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_STCGUvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STCGU_y0Edm185zvv0WM_Q" points="[0, 6165, 3612, -6337]$[-3625, 7752, -13, -4750]"/>
+      </edges>
+      <edges xmi:id="_STINA_y0Edm185zvv0WM_Q" source="_SJw1kPy0Edm185zvv0WM_Q" target="_SLrhIPy0Edm185zvv0WM_Q">
+        <children xmi:id="_STINBvy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_STINCPy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STOTkfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STOTkPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_STINB_y0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_STINBPy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptor[jcu^name=NavigatorViewerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STINBfy0Edm185zvv0WM_Q" points="[0, 6165, -3638, -6337]$[3625, 7752, -13, -4750]"/>
+      </edges>
+      <edges xmi:id="_STOTkvy0Edm185zvv0WM_Q" source="_SJw1kPy0Edm185zvv0WM_Q" target="_SJw1kPy0Edm185zvv0WM_Q">
+        <children xmi:id="_STOTlfy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_STOTl_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STOTmfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_STOTmPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_STOTlvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_STOTk_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerDescriptorRegistry[jcu^name=NavigatorViewerDescriptorRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STOTlPy0Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_UZHpEPy0Edm185zvv0WM_Q" source="_cS1OgH5IEdm797szikHjoQ" target="_UXl_EPy0Edm185zvv0WM_Q">
+        <children xmi:id="_UZHpE_y0Edm185zvv0WM_Q" type="NameLabel">
+          <children xmi:id="_UZNvsPy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZNvsfy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_UZHpFPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_UZHpEfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZHpEvy0Edm185zvv0WM_Q" points="[0, 6165, -3400, -6337]$[3387, 7752, -13, -4750]"/>
+      </edges>
+      <edges xmi:id="_UZNvsvy0Edm185zvv0WM_Q" source="_cS1OgH5IEdm797szikHjoQ" target="_UTY0gPy0Edm185zvv0WM_Q">
+        <children xmi:id="_UZNvtfy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_UZNvt_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZNvufy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZNvuPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_UZNvtvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_UZNvs_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZNvtPy0Edm185zvv0WM_Q" points="[0, -6165, -3387, 5926]$[3387, -7752, 0, 4339]"/>
+      </edges>
+      <edges xmi:id="_UZNvuvy0Edm185zvv0WM_Q" source="_UTY0gPy0Edm185zvv0WM_Q" target="_UXl_EPy0Edm185zvv0WM_Q">
+        <children xmi:id="_UZNvvfy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_UZNvv_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZNvwfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZNvwPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_UZNvvvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_UZNvu_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionActivationListener[jcu^name=IExtensionActivationListener.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZNvvPy0Edm185zvv0WM_Q" points="[0, 4339, -13, -20254]$[0, 19843, -13, -4750]"/>
+      </edges>
+      <edges xmi:id="_UZNvwvy0Edm185zvv0WM_Q" source="_UTY0gPy0Edm185zvv0WM_Q" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_UZT2UPy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_UZT2Uvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZT2VPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZT2U_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_UZT2Ufy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_UZNvw_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZNvxPy0Edm185zvv0WM_Q" points="[0, 4339, 3387, -7752]$[-3387, 5926, 0, -6165]"/>
+      </edges>
+      <edges xmi:id="_UZT2Vfy0Edm185zvv0WM_Q" source="_UTY0gPy0Edm185zvv0WM_Q" target="_UTY0gPy0Edm185zvv0WM_Q">
+        <children xmi:id="_UZT2WPy0Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_UZT2Wvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZT2XPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_UZT2W_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_UZT2Wfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_UZT2Vvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZT2V_y0Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_w9XssPy0Edm185zvv0WM_Q" type="Reference" source="_mh4lQPy0Edm185zvv0WM_Q" target="_gYyCIH5GEdm797szikHjoQ">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_w9Xssfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_w9Xssvy0Edm185zvv0WM_Q" points="[0, 3413, 0, -4577]$[0, 5000, 0, -2990]"/>
+      </edges>
+      <edges xmi:id="_KhpYMPy1Edm185zvv0WM_Q" type="Reference" source="_ADfXQPy1Edm185zvv0WM_Q" target="_UTY0gPy0Edm185zvv0WM_Q">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_KhpYMfy1Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KhpYMvy1Edm185zvv0WM_Q" points="[-13, 2990, -2593, -5927]$[2580, 4578, 0, -4339]"/>
+      </edges>
+      <edges xmi:id="_Vs4hkPy1Edm185zvv0WM_Q" type="Reference" source="_MRrLYPy1Edm185zvv0WM_Q" target="_blp_cH5IEdm797szikHjoQ">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Vs4hkfy1Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Vs4hkvy1Edm185zvv0WM_Q" points="[-14, 2990, -874, -5927]$[859, 4578, -1, -4339]"/>
+      </edges>
+      <edges xmi:id="_mNKdAPy1Edm185zvv0WM_Q" type="Reference" source="_XJC9kPy1Edm185zvv0WM_Q" target="_cS1OgH5IEdm797szikHjoQ">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_mNKdAfy1Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mNKdAvy1Edm185zvv0WM_Q" points="[2170, 2434, -4603, -7064]$[2170, 3782, -4603, -5716]$[3810, 3782, -2963, -5716]"/>
+      </edges>
+      <edges xmi:id="_yKo7oPy1Edm185zvv0WM_Q" type="Reference" source="_vA1SEPy1Edm185zvv0WM_Q" target="_zPTxUH5IEdm797szikHjoQ">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_yKo7ofy1Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yKo7ovy1Edm185zvv0WM_Q" points="[0, 2990, 4035, -5927]$[-4049, 4578, -14, -4339]"/>
+      </edges>
+      <edges xmi:id="_ypezwPy1Edm185zvv0WM_Q" type="Reference" source="_vA1SEPy1Edm185zvv0WM_Q" target="_2F0rcH5IEdm797szikHjoQ">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ypezwfy1Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ypezwvy1Edm185zvv0WM_Q" points="[0, 2990, -4021, -5927]$[4021, 4578, 0, -4339]"/>
+      </edges>
+      <edges xmi:id="_SjfAUPy4Edm185zvv0WM_Q" source="_blp_cH5IEdm797szikHjoQ" target="_She1MPy4Edm185zvv0WM_Q">
+        <children xmi:id="_SjfAU_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_SjfAVfy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_SjfAV_y4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_SjfAVvy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_SjfAVPy4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_SjfAUfy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SjfAUvy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_SjfAWPy4Edm185zvv0WM_Q" source="_She1MPy4Edm185zvv0WM_Q" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_SjfAW_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_SjfAXfy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_SjlG8Py4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_SjfAXvy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_SjfAXPy4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_SjfAWfy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SjfAWvy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_cYMbofy4Edm185zvv0WM_Q" source="_blp_cH5IEdm797szikHjoQ" target="_cT5xgPy4Edm185zvv0WM_Q">
+        <children xmi:id="_cYMbpPy4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_cYSiQPy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cYSiQvy4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cYSiQfy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_cYMbpfy4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_cYMbovy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cYMbo_y4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_cYSiQ_y4Edm185zvv0WM_Q" source="_cT5xgPy4Edm185zvv0WM_Q" target="_She1MPy4Edm185zvv0WM_Q">
+        <children xmi:id="_cYSiRvy4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_cYSiSPy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cYSiSvy4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_cYSiSfy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_cYSiR_y4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_cYSiRPy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonActionProviderDescriptor[jcu^name=CommonActionProviderDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.actions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ICommonActionProvider[jcu^name=ICommonActionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cYSiRfy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_qqjuAPy4Edm185zvv0WM_Q" source="_YIiqQH5GEdm797szikHjoQ" target="_qn-7IPy4Edm185zvv0WM_Q">
+        <children xmi:id="_qqjuA_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_qqjuBfy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_qqjuB_y4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_qqjuBvy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_qqjuBPy4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_qqjuAfy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigator[jcu^name=CommonNavigator.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qqjuAvy4Edm185zvv0WM_Q" points="[-2249, 3439, 17251, -19156]$[-2249, 36459, 17251, 13864]$[-19473, 36459, 27, 13864]$[-19473, 24976, 27, 2381]"/>
+      </edges>
+      <edges xmi:id="_qqjuCPy4Edm185zvv0WM_Q" source="_qn-7IPy4Edm185zvv0WM_Q" target="_cS1OgH5IEdm797szikHjoQ">
+        <children xmi:id="_qqjuC_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_qqjuDfy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_qqjuD_y4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_qqjuDvy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_qqjuDPy4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_qqjuCfy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonSorter[jcu^name=CommonSorter.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qqjuCvy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_1xTY8Py4Edm185zvv0WM_Q" source="_cS1OgH5IEdm797szikHjoQ" target="_1ucSMPy4Edm185zvv0WM_Q">
+        <children xmi:id="_1xTY8_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_1xTY9fy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_1xTY9_y4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_1xTY9vy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_1xTY9Py4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_1xTY8fy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1xTY8vy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_8M1R8Py4Edm185zvv0WM_Q" source="_8MEc8Py4Edm185zvv0WM_Q" target="_1ucSMPy4Edm185zvv0WM_Q">
+        <children xmi:id="_8M1R8_y4Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_8M1R9fy4Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_8M1R9_y4Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_8M1R9vy4Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_8M1R9Py4Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_8M1R8fy4Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IExtensionStateModel[jcu^name=IExtensionStateModel.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_8M1R8vy4Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_E9EYgPy5Edm185zvv0WM_Q" source="_8MEc8Py4Edm185zvv0WM_Q" target="_E7KUAPy5Edm185zvv0WM_Q">
+        <children xmi:id="_E9EYg_y5Edm185zvv0WM_Q" type="NameLabel">
+          <children xmi:id="_E9EYhfy5Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_E9EYhvy5Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_E9EYhPy5Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_E9EYgfy5Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=ICommonLabelProvider[jcu^name=ICommonLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDescriptionProvider[jcu^name=IDescriptionProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_E9EYgvy5Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+    </contents>
+    <contents xmi:type="notation:Diagram" xmi:id="_0Lw7oIOwEdmyd--cXlrqyQ" type="Component" name="Extension">
+      <children xmi:id="_GABgEIO0Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_GABgE4O0Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_GABgFIO0Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_GABgEYO0Edmyd--cXlrqyQ" fillColor="13369343" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GABgEoO0Edmyd--cXlrqyQ" x="14310" y="6042" width="6058" height="8254"/>
+      </children>
+      <children xmi:id="_bdRhQIOzEdmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_bdRhQ4OzEdmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_bdRhRIOzEdmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_bdRhQYOzEdmyd--cXlrqyQ" fillColor="13420443" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bdRhQoOzEdmyd--cXlrqyQ" x="636" y="6350" width="5715" height="7937"/>
+      </children>
+      <children xmi:id="_uX5iwIO0Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_uX5iw4O0Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_uX5ixIO0Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_uX5iwYO0Edmyd--cXlrqyQ" fillColor="13369343" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uX5iwoO0Edmyd--cXlrqyQ" x="635" y="9525" width="5714" height="2222"/>
+      </children>
+      <children xmi:id="_-Cw18IOwEdmyd--cXlrqyQ" targetEdges="_DeykUIOyEdmyd--cXlrqyQ" element="_9330kIOwEdmyd--cXlrqyQ">
+        <children xmi:id="_-DPXEIOwEdmyd--cXlrqyQ" type="Stereotype" element="_9330kIOwEdmyd--cXlrqyQ"/>
+        <children xmi:id="_-DPXEYOwEdmyd--cXlrqyQ" type="Kind" element="_9330kIOwEdmyd--cXlrqyQ"/>
+        <children xmi:id="_-DPXEoOwEdmyd--cXlrqyQ" type="Name" element="_9330kIOwEdmyd--cXlrqyQ"/>
+        <children xmi:id="_-DPXE4OwEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_-DPXFIOwEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_-DPXFYOwEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_-DPXFoOwEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_-DPXF4OwEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_-DPXGIOwEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_-DVdsIOwEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_-DVdsYOwEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_-DVdsoOwEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_-DVds4OwEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_-DVdtIOwEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_9330kIOwEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_-DVdtYOwEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_-Cw18YOwEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Cw18oOwEdmyd--cXlrqyQ" x="1086" y="12402"/>
+      </children>
+      <children xmi:id="_X4hTAIOxEdmyd--cXlrqyQ" sourceEdges="_gS43QIOxEdmyd--cXlrqyQ" element="_X4I4gIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_X4oAsIOxEdmyd--cXlrqyQ" type="Stereotype" element="_X4I4gIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_X4oAsYOxEdmyd--cXlrqyQ" type="Kind" element="_X4I4gIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_X4oAsoOxEdmyd--cXlrqyQ" type="Name" element="_X4I4gIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_X4oAs4OxEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_X4oAtIOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_X4oAtYOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_X4oAtoOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_X4oAt4OxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_X4oAuIOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_X4oAuYOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_X4oAuoOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_X4oAu4OxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_X4oAvIOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_X4oAvYOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_X4I4gIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_X4oAvoOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_X4hTAYOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X4hTAoOxEdmyd--cXlrqyQ" x="954" y="9858"/>
+      </children>
+      <children xmi:id="_b7Ja8IOxEdmyd--cXlrqyQ" targetEdges="_gS43QIOxEdmyd--cXlrqyQ _AbrYoIOyEdmyd--cXlrqyQ" element="_b6MYsIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_b7Ja84OxEdmyd--cXlrqyQ" type="Stereotype" element="_b6MYsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_b7Ja9IOxEdmyd--cXlrqyQ" type="Kind" element="_b6MYsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_b7Ja9YOxEdmyd--cXlrqyQ" type="Name" element="_b6MYsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_b7Ja9oOxEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_b7Ja94OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_b7Ja-IOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_b7Ja-YOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_b7Ja-oOxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_b7Ja-4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_b7Ja_IOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_b7Ja_YOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_b7Ja_oOxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_b7Ja_4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_b7JbAIOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_b6MYsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_b7JbAYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_b7Ja8YOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b7Ja8oOxEdmyd--cXlrqyQ" x="1590" y="7021"/>
+      </children>
+      <children xmi:id="_jhv_8IOxEdmyd--cXlrqyQ" targetEdges="_mJKuIIOxEdmyd--cXlrqyQ _Jsqb0IOyEdmyd--cXlrqyQ" element="_jhjysIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_jhv_84OxEdmyd--cXlrqyQ" type="Stereotype" element="_jhjysIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_jhv_9IOxEdmyd--cXlrqyQ" type="Kind" element="_jhjysIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_jhv_9YOxEdmyd--cXlrqyQ" type="Name" element="_jhjysIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_jhv_9oOxEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_jhv_94OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_jhv_-IOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_jhv_-YOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_jhv_-oOxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_jhv_-4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_jhv__IOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_jhv__YOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_jhv__oOxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_jhv__4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_jhwAAIOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_jhjysIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_jhwAAYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_jhv_8YOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jhv_8oOxEdmyd--cXlrqyQ" x="15713" y="9631"/>
+      </children>
+      <children xmi:id="_kdDxoIOxEdmyd--cXlrqyQ" sourceEdges="_mJKuIIOxEdmyd--cXlrqyQ" element="_kc3kYIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_kdDxo4OxEdmyd--cXlrqyQ" type="Stereotype" element="_kc3kYIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_kdDxpIOxEdmyd--cXlrqyQ" type="Kind" element="_kc3kYIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_kdDxpYOxEdmyd--cXlrqyQ" type="Name" element="_kc3kYIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_kdDxpoOxEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_kdDxp4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_kdDxqIOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_kdDxqYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_kdDxqoOxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_kdDxq4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_kdDxrIOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_kdDxrYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_kdDxroOxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_kdDxr4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_kdDxsIOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_kc3kYIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_kdDxsYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_kdDxoYOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kdDxooOxEdmyd--cXlrqyQ" x="14972" y="12408"/>
+      </children>
+      <children xmi:id="_mor7sIOxEdmyd--cXlrqyQ" targetEdges="_LdKwIIOyEdmyd--cXlrqyQ" element="_mol1EIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_mor7s4OxEdmyd--cXlrqyQ" type="Stereotype" element="_mol1EIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_mor7tIOxEdmyd--cXlrqyQ" type="Kind" element="_mol1EIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_mor7tYOxEdmyd--cXlrqyQ" type="Name" element="_mol1EIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_mor7toOxEdmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_mor7t4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_mor7uIOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_mor7uYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_mor7uoOxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_mor7u4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_moyCUIOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_moyCUYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_moyCUoOxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_moyCU4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_moyCVIOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_mol1EIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_moyCVYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_mor7sYOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mor7soOxEdmyd--cXlrqyQ" x="14839" y="6762"/>
+      </children>
+      <children xmi:id="_4TvoMIOxEdmyd--cXlrqyQ" sourceEdges="_AbrYoIOyEdmyd--cXlrqyQ _DeykUIOyEdmyd--cXlrqyQ _Jsqb0IOyEdmyd--cXlrqyQ _LdKwIIOyEdmyd--cXlrqyQ _IVOVgIO3Edmyd--cXlrqyQ" element="_4TXNsIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_4TvoM4OxEdmyd--cXlrqyQ" type="Stereotype" element="_4TXNsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_4TvoNIOxEdmyd--cXlrqyQ" type="Kind" element="_4TXNsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_4TvoNYOxEdmyd--cXlrqyQ" type="Name" element="_4TXNsIOxEdmyd--cXlrqyQ"/>
+        <children xmi:id="_4TvoNoOxEdmyd--cXlrqyQ" type="AttributeCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_4TvoN4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_4TvoOIOxEdmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_4TvoOYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_4TvoOoOxEdmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_4TvoO4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_4TvoPIOxEdmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_4TvoPYOxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_4TvoPoOxEdmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_4TvoP4OxEdmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_4T1u0IOxEdmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_4TXNsIOxEdmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_4T1u0YOxEdmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_4TvoMYOxEdmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4TvoMoOxEdmyd--cXlrqyQ" x="7923" y="8983" width="4921" height="3256"/>
+      </children>
+      <children xmi:id="_DnN1oIO0Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_DnN1o4O0Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_DnN1pIO0Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_DnN1oYO0Edmyd--cXlrqyQ" bold="true" description="Optional" fillColor="13369343" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DnN1ooO0Edmyd--cXlrqyQ" x="18126" y="14946" width="2247" height="635"/>
+      </children>
+      <children xmi:id="_d429cIO0Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_d49EEoO0Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_d49EE4O0Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_d49EEIO0Edmyd--cXlrqyQ" bold="true" description="Required" fillColor="13420443" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_d49EEYO0Edmyd--cXlrqyQ" x="18126" y="15900" width="2222" height="635"/>
+      </children>
+      <children xmi:id="_hzkqEIO1Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_hzkqE4O1Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_hzkqFIO1Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_hzkqEYO1Edmyd--cXlrqyQ" fillColor="13420443" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hzkqEoO1Edmyd--cXlrqyQ" x="7314" y="9858" width="634" height="317"/>
+      </children>
+      <children xmi:id="_uNsBYIO1Edmyd--cXlrqyQ" type="rectangle">
+        <children xmi:id="_uNsBY4O1Edmyd--cXlrqyQ" type="DiagramName"/>
+        <children xmi:id="_uNsBZIO1Edmyd--cXlrqyQ" type="Description"/>
+        <styles xmi:type="notation:ShapeStyle" xmi:id="_uNsBYYO1Edmyd--cXlrqyQ" fillColor="13420443" lineColor="6737151"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uNsBYoO1Edmyd--cXlrqyQ" x="7314" y="10812" width="635" height="317"/>
+      </children>
+      <children xmi:id="_1rTpgIO1Edmyd--cXlrqyQ" element="_1rBVoIO1Edmyd--cXlrqyQ">
+        <children xmi:id="_1rTpg4O1Edmyd--cXlrqyQ" type="CommentBody" element="_1rBVoIO1Edmyd--cXlrqyQ"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_1rTpgYO1Edmyd--cXlrqyQ" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1rTpgoO1Edmyd--cXlrqyQ" x="636" y="14946" width="6376" height="2565"/>
+      </children>
+      <children xmi:id="_2N_DUIO2Edmyd--cXlrqyQ" targetEdges="_IVOVgIO3Edmyd--cXlrqyQ" element="_2NsvcIO2Edmyd--cXlrqyQ">
+        <children xmi:id="_2N_DU4O2Edmyd--cXlrqyQ" type="Stereotype" element="_2NsvcIO2Edmyd--cXlrqyQ"/>
+        <children xmi:id="_2N_DVIO2Edmyd--cXlrqyQ" type="Kind" element="_2NsvcIO2Edmyd--cXlrqyQ"/>
+        <children xmi:id="_2N_DVYO2Edmyd--cXlrqyQ" type="Name" element="_2NsvcIO2Edmyd--cXlrqyQ"/>
+        <children xmi:id="_2N_DVoO2Edmyd--cXlrqyQ" visible="false" type="AttributeCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2N_DV4O2Edmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_2N_DWIO2Edmyd--cXlrqyQ" visible="false" type="OperationCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2N_DWYO2Edmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_2N_DWoO2Edmyd--cXlrqyQ" visible="false" type="RealizationListCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2N_DW4O2Edmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_2N_DXIO2Edmyd--cXlrqyQ" visible="false" type="RequiredInterfaceListCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2N_DXYO2Edmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_2N_DXoO2Edmyd--cXlrqyQ" visible="false" type="ProvidedInterfaceListCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_2N_DX4O2Edmyd--cXlrqyQ"/>
+        </children>
+        <children xmi:id="_2N_DYIO2Edmyd--cXlrqyQ" visible="false" type="StructureCompartment" element="_2NsvcIO2Edmyd--cXlrqyQ">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_2N_DYYO2Edmyd--cXlrqyQ"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLComponentStyle" xmi:id="_2N_DUYO2Edmyd--cXlrqyQ" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2N_DUoO2Edmyd--cXlrqyQ" x="7725" y="13228"/>
+      </children>
+      <styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_0Lw7oYOwEdmyd--cXlrqyQ"/>
+      <edges xmi:id="_gS43QIOxEdmyd--cXlrqyQ" element="_gSmjYIOxEdmyd--cXlrqyQ" source="_X4hTAIOxEdmyd--cXlrqyQ" target="_b7Ja8IOxEdmyd--cXlrqyQ">
+        <children xmi:id="_gS43Q4OxEdmyd--cXlrqyQ" type="NameLabel" element="_gSmjYIOxEdmyd--cXlrqyQ">
+          <children xmi:id="_gS43RYOxEdmyd--cXlrqyQ" type="Stereotype" element="_gSmjYIOxEdmyd--cXlrqyQ"/>
+          <children xmi:id="_gS43RoOxEdmyd--cXlrqyQ" type="Name" element="_gSmjYIOxEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_gS43RIOxEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_gS43QYOxEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gS43QoOxEdmyd--cXlrqyQ" points="[2, -31, 5, 90]$[62, -95, 65, 26]"/>
+      </edges>
+      <edges xmi:id="_mJKuIIOxEdmyd--cXlrqyQ" element="_mI-g4IOxEdmyd--cXlrqyQ" source="_kdDxoIOxEdmyd--cXlrqyQ" target="_jhv_8IOxEdmyd--cXlrqyQ">
+        <children xmi:id="_mJKuI4OxEdmyd--cXlrqyQ" type="NameLabel" element="_mI-g4IOxEdmyd--cXlrqyQ">
+          <children xmi:id="_mJKuJYOxEdmyd--cXlrqyQ" type="Stereotype" element="_mI-g4IOxEdmyd--cXlrqyQ"/>
+          <children xmi:id="_mJQ0wIOxEdmyd--cXlrqyQ" type="Name" element="_mI-g4IOxEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_mJKuJIOxEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_mJKuIYOxEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mJKuIoOxEdmyd--cXlrqyQ" points="[-42, -820, 11, 2249]$[-42, -2249, 11, 820]"/>
+      </edges>
+      <edges xmi:id="_AbrYoIOyEdmyd--cXlrqyQ" element="_AbfLYIOyEdmyd--cXlrqyQ" source="_4TvoMIOxEdmyd--cXlrqyQ" target="_b7Ja8IOxEdmyd--cXlrqyQ">
+        <children xmi:id="_AbrYo4OyEdmyd--cXlrqyQ" type="KindLabel" element="_AbfLYIOyEdmyd--cXlrqyQ">
+          <children xmi:id="_AbrYpYOyEdmyd--cXlrqyQ" type="Stereotype" element="_AbfLYIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_AbrYp4OyEdmyd--cXlrqyQ" type="Kind" element="_AbfLYIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_AbrYpoOyEdmyd--cXlrqyQ" type="Name" element="_AbfLYIOyEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_AbrYpIOyEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_AbrYoYOyEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AbrYooOyEdmyd--cXlrqyQ" points="[-2434, -1085, 4604, 2011]$[-2857, -1085, 4181, 2011]$[-2857, -2963, 4181, 133]$[-5318, -2963, 1720, 133]"/>
+      </edges>
+      <edges xmi:id="_DeykUIOyEdmyd--cXlrqyQ" element="_DeUDMIOyEdmyd--cXlrqyQ" source="_4TvoMIOxEdmyd--cXlrqyQ" target="_-Cw18IOwEdmyd--cXlrqyQ">
+        <children xmi:id="_DeykU4OyEdmyd--cXlrqyQ" type="KindLabel" element="_DeUDMIOyEdmyd--cXlrqyQ">
+          <children xmi:id="_DeykVYOyEdmyd--cXlrqyQ" type="Stereotype" element="_DeUDMIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_DeykV4OyEdmyd--cXlrqyQ" type="Kind" element="_DeUDMIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_DeykVoOyEdmyd--cXlrqyQ" type="Name" element="_DeUDMIOyEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_DeykVIOyEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_DeykUYOyEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DeykUoOyEdmyd--cXlrqyQ" points="[-2434, 1032, 4524, -1270]$[-2857, 1032, 4101, -1270]$[-2857, 2275, 4101, -27]$[-4630, 2275, 2328, -27]"/>
+      </edges>
+      <edges xmi:id="_Jsqb0IOyEdmyd--cXlrqyQ" element="_JsSBUIOyEdmyd--cXlrqyQ" source="_4TvoMIOxEdmyd--cXlrqyQ" target="_jhv_8IOxEdmyd--cXlrqyQ">
+        <children xmi:id="_Jsqb04OyEdmyd--cXlrqyQ" type="KindLabel" element="_JsSBUIOyEdmyd--cXlrqyQ">
+          <children xmi:id="_Jsqb1YOyEdmyd--cXlrqyQ" type="Stereotype" element="_JsSBUIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_Jsqb14OyEdmyd--cXlrqyQ" type="Kind" element="_JsSBUIOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_Jsqb1oOyEdmyd--cXlrqyQ" type="Name" element="_JsSBUIOyEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Jsqb1IOyEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Jsqb0YOyEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jsqb0oOyEdmyd--cXlrqyQ" points="[2143, 80, -4921, 185]$[5371, 80, -1693, 185]"/>
+      </edges>
+      <edges xmi:id="_LdKwIIOyEdmyd--cXlrqyQ" element="_Lc-i4IOyEdmyd--cXlrqyQ" source="_4TvoMIOxEdmyd--cXlrqyQ" target="_mor7sIOxEdmyd--cXlrqyQ">
+        <children xmi:id="_LdKwI4OyEdmyd--cXlrqyQ" type="KindLabel" element="_Lc-i4IOyEdmyd--cXlrqyQ">
+          <children xmi:id="_LdKwJYOyEdmyd--cXlrqyQ" type="Stereotype" element="_Lc-i4IOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_LdKwJ4OyEdmyd--cXlrqyQ" type="Kind" element="_Lc-i4IOyEdmyd--cXlrqyQ"/>
+          <children xmi:id="_LdKwJoOyEdmyd--cXlrqyQ" type="Name" element="_Lc-i4IOyEdmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_LdKwJIOyEdmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_LdKwIYOyEdmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LdKwIoOyEdmyd--cXlrqyQ" points="[2143, -502, -4895, 2461]$[3122, -502, -3916, 2461]$[3122, -2989, -3916, -26]$[4498, -2989, -2540, -26]"/>
+      </edges>
+      <edges xmi:id="_IVOVgIO3Edmyd--cXlrqyQ" element="_ITURAIO3Edmyd--cXlrqyQ" source="_4TvoMIOxEdmyd--cXlrqyQ" target="_2N_DUIO2Edmyd--cXlrqyQ">
+        <children xmi:id="_IVOVg4O3Edmyd--cXlrqyQ" type="KindLabel" element="_ITURAIO3Edmyd--cXlrqyQ">
+          <children xmi:id="_IVOVhYO3Edmyd--cXlrqyQ" type="Stereotype" element="_ITURAIO3Edmyd--cXlrqyQ"/>
+          <children xmi:id="_IVOVh4O3Edmyd--cXlrqyQ" type="Kind" element="_ITURAIO3Edmyd--cXlrqyQ"/>
+          <children xmi:id="_IVOVhoO3Edmyd--cXlrqyQ" type="Name" element="_ITURAIO3Edmyd--cXlrqyQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_IVOVhIO3Edmyd--cXlrqyQ" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_IVOVgYO3Edmyd--cXlrqyQ" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IVOVgoO3Edmyd--cXlrqyQ" points="[-15, 61, -17, -57]$[-100, 120, -102, 2]"/>
+      </edges>
+    </contents>
+    <contents xmi:type="notation:Diagram" xmi:id="_yKPk8PyzEdm185zvv0WM_Q" type="Class" element="_SWX3UH5GEdm797szikHjoQ" name="Drag-n-Drop">
+      <children xmi:id="_FS5Q0Py0Edm185zvv0WM_Q" sourceEdges="_GBT2APy0Edm185zvv0WM_Q _GBT2CPy0Edm185zvv0WM_Q _GBZ8oPy0Edm185zvv0WM_Q _GBZ8qPy0Edm185zvv0WM_Q">
+        <children xmi:id="_FXGbYPy0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FXGbYfy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FXGbYvy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FXGbY_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FXGbZPy0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FXGbZfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FXGbZvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FXGbZ_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FXGbaPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FXGbafy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FXMiAPy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FXMiAfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FS5Q0fy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FS5Q0vy0Edm185zvv0WM_Q" x="1272" y="7314"/>
+      </children>
+      <children xmi:id="_FYuMAPy0Edm185zvv0WM_Q" sourceEdges="_GBZ8sPy0Edm185zvv0WM_Q" targetEdges="_GBZ8uPy0Edm185zvv0WM_Q _GBsQgPy0Edm185zvv0WM_Q">
+        <children xmi:id="_FYuMA_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FYuMBPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FYuMBfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FYuMBvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FYuMB_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FYuMCPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FYuMCfy0Edm185zvv0WM_Q" visible="false" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FYuMCvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FYuMC_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FYuMDPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FYuMDfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FYuMDvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FYuMAfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FYuMAvy0Edm185zvv0WM_Q" x="1908" y="16218"/>
+      </children>
+      <children xmi:id="_FZ9iIPy0Edm185zvv0WM_Q" sourceEdges="_GBZ8uPy0Edm185zvv0WM_Q _GBgDQPy0Edm185zvv0WM_Q _GBgDSPy0Edm185zvv0WM_Q _GBgDUPy0Edm185zvv0WM_Q _GBgDWPy0Edm185zvv0WM_Q _GBmJ4_y0Edm185zvv0WM_Q" targetEdges="_GCErEfy0Edm185zvv0WM_Q _GCErGfy0Edm185zvv0WM_Q">
+        <children xmi:id="_FZ9iI_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FZ9iJPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FZ9iJfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FZ9iJvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FZ9iJ_y0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FZ9iKPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FZ9iKfy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FZ9iKvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FZ9iK_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FZ9iLPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FZ9iLfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FZ9iLvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FZ9iIfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FZ9iIvy0Edm185zvv0WM_Q" x="13038" y="7314"/>
+      </children>
+      <children xmi:id="_FcKhkPy0Edm185zvv0WM_Q" sourceEdges="_GBmJ7vy0Edm185zvv0WM_Q _GBmJ9vy0Edm185zvv0WM_Q" targetEdges="_GBZ8sPy0Edm185zvv0WM_Q _GBgDSPy0Edm185zvv0WM_Q _GBsQmPy0Edm185zvv0WM_Q _GB4dwPy0Edm185zvv0WM_Q">
+        <children xmi:id="_FcKhk_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FcKhlPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FcKhlfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FcKhlvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FcKhl_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FcKhmPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FcKhmfy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FcKhmvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FcQoMPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FcQoMfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FcQoMvy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FcQoM_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FcKhkfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FcKhkvy0Edm185zvv0WM_Q" x="32754" y="33072"/>
+      </children>
+      <children xmi:id="_Fe1bEPy0Edm185zvv0WM_Q" sourceEdges="_GBmJ_vy0Edm185zvv0WM_Q" targetEdges="_GByXNfy0Edm185zvv0WM_Q _GB4d2Py0Edm185zvv0WM_Q _GB-kcvy0Edm185zvv0WM_Q">
+        <children xmi:id="_Fe1bE_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_Fe1bFPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_Fe7hsPy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fe7hsfy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fe7hsvy0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fe7hs_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fe7htPy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fe7htfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fe7htvy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fe7ht_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fe7huPy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_Fe7hufy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Fe1bEfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fe1bEvy0Edm185zvv0WM_Q" x="32754" y="29892"/>
+      </children>
+      <children xmi:id="_FfgJcPy0Edm185zvv0WM_Q" sourceEdges="_GBsQgPy0Edm185zvv0WM_Q _GBsQiPy0Edm185zvv0WM_Q _GBsQkPy0Edm185zvv0WM_Q _GBsQmPy0Edm185zvv0WM_Q _GBsQoPy0Edm185zvv0WM_Q _GByXIvy0Edm185zvv0WM_Q _GByXKvy0Edm185zvv0WM_Q">
+        <children xmi:id="_FfgJc_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FfgJdPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FfgJdfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FfgJdvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FfgJd_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FfgJePy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FfmQEPy0Edm185zvv0WM_Q" visible="false" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FfmQEfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FfmQEvy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FfmQE_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FfmQFPy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FfmQFfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FfgJcfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FfgJcvy0Edm185zvv0WM_Q" x="9858" y="16218"/>
+      </children>
+      <children xmi:id="_Ff-qkPy0Edm185zvv0WM_Q" targetEdges="_GBZ8qPy0Edm185zvv0WM_Q">
+        <children xmi:id="_Ff-qk_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_Ff-qlPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_Ff-qlfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Ff-qlvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Ff-ql_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Ff-qmPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Ff-qmfy0Edm185zvv0WM_Q" visible="false" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Ff-qmvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Ff-qm_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Ff-qnPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Ff-qnfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_Ff-qnvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Ff-qkfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ff-qkvy0Edm185zvv0WM_Q" y="13674"/>
+      </children>
+      <children xmi:id="_Fhsh0Py0Edm185zvv0WM_Q" targetEdges="_GBT2CPy0Edm185zvv0WM_Q">
+        <children xmi:id="_Fhsh0_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_Fhsh1Py0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_Fhsh1fy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fhsh1vy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fhsh1_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fhsh2Py0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fhsh2fy0Edm185zvv0WM_Q" visible="false" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fhsh2vy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fhsh2_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fhsh3Py0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fhsh3fy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_Fhsh3vy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_Fhsh0fy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fhsh0vy0Edm185zvv0WM_Q" x="5406" y="13674"/>
+      </children>
+      <children xmi:id="_FikEgPy0Edm185zvv0WM_Q" sourceEdges="_GByXNfy0Edm185zvv0WM_Q" targetEdges="_GBmJ7vy0Edm185zvv0WM_Q _GByXPfy0Edm185zvv0WM_Q">
+        <children xmi:id="_FikEg_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FikEhPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FikEhfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FikEhvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FikEh_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FikEiPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FikEify0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FikEivy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FikEi_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FikEjPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FikEjfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FikEjvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FikEgfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FikEgvy0Edm185zvv0WM_Q" x="33072" y="25440"/>
+      </children>
+      <children xmi:id="_FjtUAPy0Edm185zvv0WM_Q" sourceEdges="_GByXPfy0Edm185zvv0WM_Q _GB4dwPy0Edm185zvv0WM_Q _GB4dyPy0Edm185zvv0WM_Q _GB4d0Py0Edm185zvv0WM_Q _GB4d2Py0Edm185zvv0WM_Q" targetEdges="_GBmJ4_y0Edm185zvv0WM_Q _GByXIvy0Edm185zvv0WM_Q _GB4dyPy0Edm185zvv0WM_Q _GCErCfy0Edm185zvv0WM_Q">
+        <children xmi:id="_FjtUA_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_FjtUBPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_FjtUBfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FjtUBvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FjtUB_y0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FjtUCPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FjtUCfy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FjtUCvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FjtUC_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_FjtUDPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FjtUDfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_FjtUDvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FjtUAfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FjtUAvy0Edm185zvv0WM_Q" x="24995" y="25418"/>
+      </children>
+      <children xmi:id="_FyglAPy0Edm185zvv0WM_Q" sourceEdges="_GB-kYPy0Edm185zvv0WM_Q _GB-kY_y0Edm185zvv0WM_Q _GB-kavy0Edm185zvv0WM_Q _GB-kcvy0Edm185zvv0WM_Q _GCErAfy0Edm185zvv0WM_Q _GCErCfy0Edm185zvv0WM_Q" targetEdges="_GBT2APy0Edm185zvv0WM_Q _GBgDWPy0Edm185zvv0WM_Q _GByXKvy0Edm185zvv0WM_Q">
+        <children xmi:id="_FymroPy0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_Fymrofy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_Fymrovy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fymro_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FymrpPy0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fymrpfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fymrpvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fymrp_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_FymrqPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_Fymrqfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_Fymrqvy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_Fymrq_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_FyglAfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FyglAvy0Edm185zvv0WM_Q" x="17808" y="25440"/>
+      </children>
+      <children xmi:id="_F5evsPy0Edm185zvv0WM_Q" sourceEdges="_GCErEfy0Edm185zvv0WM_Q" targetEdges="_GBgDQPy0Edm185zvv0WM_Q _GBmJ9vy0Edm185zvv0WM_Q _GBsQiPy0Edm185zvv0WM_Q _GB4d0Py0Edm185zvv0WM_Q">
+        <children xmi:id="_F5evs_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_F5evtPy0Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_F5evtfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F5evtvy0Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F5evt_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F5evuPy0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5evufy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F5evuvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5evu_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F5evvPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5evvfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_F5evsfy0Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F5evsvy0Edm185zvv0WM_Q" x="33339" y="745"/>
+      </children>
+      <children xmi:id="_F5xDkfy0Edm185zvv0WM_Q" targetEdges="_GBsQoPy0Edm185zvv0WM_Q _GB-kYPy0Edm185zvv0WM_Q _GCErAfy0Edm185zvv0WM_Q">
+        <children xmi:id="_F5xDlPy0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_F5xDlfy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_F5xDlvy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_F5xDl_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_F5xDmPy0Edm185zvv0WM_Q" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5xDmfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_F5xDmvy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5xDm_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_F5xDnPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F5xDnfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_F5xDnvy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_F5xDn_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_F5xDkvy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F5xDk_y0Edm185zvv0WM_Q" x="18126" y="33390"/>
+      </children>
+      <children xmi:id="_F6n_MPy0Edm185zvv0WM_Q" targetEdges="_GBZ8oPy0Edm185zvv0WM_Q _GBgDUPy0Edm185zvv0WM_Q _GBmJ_vy0Edm185zvv0WM_Q _GBsQkPy0Edm185zvv0WM_Q _GB-kY_y0Edm185zvv0WM_Q _GB-kavy0Edm185zvv0WM_Q">
+        <children xmi:id="_F6n_M_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_F6n_NPy0Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_F6n_Nfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F6n_Nvy0Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F6n_N_y0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F6n_OPy0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F6n_Ofy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F6n_Ovy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F6n_O_y0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F6n_PPy0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F6n_Pfy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_F6n_Mfy0Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F6n_Mvy0Edm185zvv0WM_Q" x="28251" y="745"/>
+      </children>
+      <children xmi:id="_F66TEPy0Edm185zvv0WM_Q" sourceEdges="_GCErGfy0Edm185zvv0WM_Q">
+        <children xmi:id="_F66TE_y0Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_F66TFPy0Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_F66TFfy0Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F66TFvy0Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F66TF_y0Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F66TGPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F66TGfy0Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F66TGvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F66TG_y0Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_F66THPy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_F66THfy0Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_F66THvy0Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_F66TEfy0Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F66TEvy0Edm185zvv0WM_Q" x="20670" y="636"/>
+      </children>
+      <styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_yKPk8fyzEdm185zvv0WM_Q"/>
+      <edges xmi:id="_GBT2APy0Edm185zvv0WM_Q" source="_FS5Q0Py0Edm185zvv0WM_Q" target="_FyglAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBT2A_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBT2Bfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBT2B_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBT2Bvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBT2BPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBT2Afy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBT2Avy0Edm185zvv0WM_Q" points="[-14, 3691, -8560, -5491]$[8532, 5279, -14, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBT2CPy0Edm185zvv0WM_Q" source="_FS5Q0Py0Edm185zvv0WM_Q" target="_Fhsh0Py0Edm185zvv0WM_Q">
+        <children xmi:id="_GBT2C_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBT2Dfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBT2D_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBT2Dvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBT2DPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBT2Cfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ResourceTransferDragAdapter[jcu^name=ResourceTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBT2Cvy0Edm185zvv0WM_Q" points="[-14, 3691, 648, -5491]$[-675, 5279, -13, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBZ8oPy0Edm185zvv0WM_Q" source="_FS5Q0Py0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBZ8o_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBZ8pfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8p_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8pvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBZ8pPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBZ8ofy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBZ8ovy0Edm185zvv0WM_Q" points="[27, -2407, -23680, 5504]$[27, -4630, -23680, 3281]$[23733, -4630, 26, 3281]$[23733, -6826, 26, 1085]"/>
+      </edges>
+      <edges xmi:id="_GBZ8qPy0Edm185zvv0WM_Q" source="_FS5Q0Py0Edm185zvv0WM_Q" target="_Ff-qkPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBZ8q_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBZ8rfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8r_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8rvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBZ8rPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBZ8qfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDragAdapter[jcu^name=CommonNavigatorDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=FileTransferDragAdapter[jcu^name=FileTransferDragAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBZ8qvy0Edm185zvv0WM_Q" points="[-14, 3691, 6640, -5491]$[-6655, 5279, -1, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBZ8sPy0Edm185zvv0WM_Q" source="_FYuMAPy0Edm185zvv0WM_Q" target="_FcKhkPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBZ8s_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBZ8tfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8t_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8tvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBZ8tPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBZ8sfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBZ8svy0Edm185zvv0WM_Q" points="[27, 503, -30242, -18468]$[27, 4789, -30242, -14182]$[19976, 4789, -10293, -14182]$[19976, 19315, -10293, 344]$[27887, 19315, -2382, 344]"/>
+      </edges>
+      <edges xmi:id="_GBZ8uPy0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_FYuMAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBZ8u_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBZ8vfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8v_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBZ8vvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBZ8vPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBZ8ufy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBZ8uvy0Edm185zvv0WM_Q" points="[-14, 3691, -10756, -5491]$[10728, 5279, -14, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBgDQPy0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_F5evsPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBgDQ_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBgDRfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDR_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDRvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBgDRPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBgDQfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBgDQvy0Edm185zvv0WM_Q" points="[-14, 3691, -2673, -35084]$[-3665, 5279, -6324, -33496]$[-3665, 34410, -6324, -4365]$[2659, 35997, 0, -2778]"/>
+      </edges>
+      <edges xmi:id="_GBgDSPy0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_FcKhkPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBgDS_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBgDTfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDT_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDTvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBgDTPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBgDSfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBgDSvy0Edm185zvv0WM_Q" points="[3096, 3335, -15928, -21351]$[8652, 3335, -10372, -21351]$[8652, 10478, -10372, -14208]$[15399, 10478, -3625, -14208]$[15399, 24686, -3625, 0]$[16616, 24686, -2408, 0]"/>
+      </edges>
+      <edges xmi:id="_GBgDUPy0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBgDU_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBgDVfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDV_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBgDVvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBgDVPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBgDUfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBgDUvy0Edm185zvv0WM_Q" points="[2117, 3678, -11721, 12859]$[2117, 11563, -11721, 20744]$[15161, 11563, 1323, 20744]$[15161, -8096, 1323, 1085]"/>
+      </edges>
+      <edges xmi:id="_GBgDWPy0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_FyglAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBgDW_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBmJ4Py0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ4vy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ4fy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBgDXPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBgDWfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBgDWvy0Edm185zvv0WM_Q" points="[-14, 3691, -14, -5491]$[-14, 5279, -14, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBmJ4_y0Edm185zvv0WM_Q" source="_FZ9iIPy0Edm185zvv0WM_Q" target="_FjtUAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBmJ5vy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBmJ6Py0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ6vy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ6fy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBmJ5_y0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBmJ5Py0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBmJ5fy0Edm185zvv0WM_Q" points="[-14, 3691, -9036, -15519]$[3294, 5279, -5728, -13931]$[3294, 13085, -5728, -6125]$[9009, 14672, -13, -4538]"/>
+      </edges>
+      <edges xmi:id="_GBmJ7vy0Edm185zvv0WM_Q" source="_FcKhkPy0Edm185zvv0WM_Q" target="_FikEgPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBmJ8fy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBmJ8_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ9fy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ9Py0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBmJ8vy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBmJ7_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBmJ8Py0Edm185zvv0WM_Q" points="[-1, 4537, 5278, -4366]$[-5292, 6125, -13, -2778]"/>
+      </edges>
+      <edges xmi:id="_GBmJ9vy0Edm185zvv0WM_Q" source="_FcKhkPy0Edm185zvv0WM_Q" target="_F5evsPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBmJ-fy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBmJ-_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ_fy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmJ_Py0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBmJ-vy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBmJ9_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBmJ-Py0Edm185zvv0WM_Q" points="[-1, 4537, 11641, -4366]$[-11642, 6125, 0, -2778]"/>
+      </edges>
+      <edges xmi:id="_GBmJ_vy0Edm185zvv0WM_Q" source="_Fe1bEPy0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBmKAfy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBmKA_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmKBfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBmKBPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBmKAvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBmJ__y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBmKAPy0Edm185zvv0WM_Q" points="[-2090, 0, 2778, 28999]$[-5450, 0, -582, 28999]$[-5450, -27914, -582, 1085]"/>
+      </edges>
+      <edges xmi:id="_GBsQgPy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_FYuMAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBsQg_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBsQhfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQh_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQhvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBsQhPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBsQgfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorDropSelectionDialog[jcu^name=NavigatorDropSelectionDialog.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBsQgvy0Edm185zvv0WM_Q" points="[0, 3691, -4009, -5491]$[3995, 5279, -14, -3903]"/>
+      </edges>
+      <edges xmi:id="_GBsQiPy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_F5evsPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBsQi_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBsQjfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQj_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQjvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBsQjPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBsQify0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBsQivy0Edm185zvv0WM_Q" points="[26, -502, -23204, 14605]$[26, -10213, -23204, 4894]$[23283, -10213, 53, 4894]$[23283, -14234, 53, 873]"/>
+      </edges>
+      <edges xmi:id="_GBsQkPy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBsQk_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBsQlfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQl_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQlvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBsQlPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBsQkfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBsQkvy0Edm185zvv0WM_Q" points="[1058, 503, -17066, 15399]$[1058, 8123, -17066, 23019]$[18600, 8123, 476, 23019]$[18600, -13811, 476, 1085]"/>
+      </edges>
+      <edges xmi:id="_GBsQmPy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_FcKhkPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBsQm_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBsQnfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQn_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GBsQnvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBsQnPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBsQmfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBsQmvy0Edm185zvv0WM_Q" points="[26, 503, -23284, -18468]$[26, 19712, -23284, 741]$[20928, 19712, -2382, 741]"/>
+      </edges>
+      <edges xmi:id="_GBsQoPy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_F5xDkfy0Edm185zvv0WM_Q">
+        <children xmi:id="_GBsQo_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GBsQpfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_GByXIfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_GByXIPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GBsQpPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GBsQofy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GBsQovy0Edm185zvv0WM_Q" points="[27, 1376, 6324, -16775]$[27, 20876, 6324, 2725]$[7938, 20876, 14235, 2725]$[7938, 18574, 14235, 423]$[-3466, 18574, 2831, 423]"/>
+      </edges>
+      <edges xmi:id="_GByXIvy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_FjtUAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GByXJfy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GByXJ_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXKfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXKPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GByXJvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GByXI_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GByXJPy0Edm185zvv0WM_Q" points="[0, 1376, -2249, -20161]$[0, 16987, -2249, -4550]"/>
+      </edges>
+      <edges xmi:id="_GByXKvy0Edm185zvv0WM_Q" source="_FfgJcPy0Edm185zvv0WM_Q" target="_FyglAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GByXLfy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GByXL_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXMfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXMPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GByXLvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GByXK_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=PluginDropAction[jcu^name=PluginDropAction.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GByXLPy0Edm185zvv0WM_Q" points="[53, 1376, 6800, -7991]$[53, 6827, 6800, -2540]$[-6720, 6827, 27, -2540]$[-6720, 7620, 27, -1747]"/>
+      </edges>
+      <edges xmi:id="_GByXNfy0Edm185zvv0WM_Q" source="_FikEgPy0Edm185zvv0WM_Q" target="_Fe1bEPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GByXOPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GByXOvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXPPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXO_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GByXOfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GByXNvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GByXN_y0Edm185zvv0WM_Q" points="[-13, 2778, 7673, -3374]$[-7686, 4366, 0, -1786]"/>
+      </edges>
+      <edges xmi:id="_GByXPfy0Edm185zvv0WM_Q" source="_FjtUAPy0Edm185zvv0WM_Q" target="_FikEgPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GByXQPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GByXQvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXRPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GByXQ_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GByXQfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GByXPvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerCollectionDescriptor[jcu^name=SerializerCollectionDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GByXP_y0Edm185zvv0WM_Q" points="[-13, 4537, -13, -15028]$[-13, 16787, -13, -2778]"/>
+      </edges>
+      <edges xmi:id="_GB4dwPy0Edm185zvv0WM_Q" source="_FjtUAPy0Edm185zvv0WM_Q" target="_FcKhkPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB4dw_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB4dxfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4dx_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4dxvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB4dxPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB4dwfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=DropHandlerDescriptor[jcu^name=DropHandlerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB4dwvy0Edm185zvv0WM_Q" points="[-13, 4537, -5292, -6125]$[5278, 6124, -1, -4538]"/>
+      </edges>
+      <edges xmi:id="_GB4dyPy0Edm185zvv0WM_Q" source="_FjtUAPy0Edm185zvv0WM_Q" target="_FjtUAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB4dy_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB4dzfy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4dz_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4dzvy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB4dzPy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB4dyfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB4dyvy0Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_GB4d0Py0Edm185zvv0WM_Q" source="_FjtUAPy0Edm185zvv0WM_Q" target="_F5evsPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB4d0_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB4d1fy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4d1_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4d1vy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB4d1Py0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB4d0fy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB4d0vy0Edm185zvv0WM_Q" points="[-13, 4537, 6350, -15028]$[-4617, 6124, 1746, -13441]$[-4617, 15200, 1746, -4365]$[-6363, 16787, 0, -2778]"/>
+      </edges>
+      <edges xmi:id="_GB4d2Py0Edm185zvv0WM_Q" source="_FjtUAPy0Edm185zvv0WM_Q" target="_Fe1bEPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB4d2_y0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB4d3fy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4d3_y0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB4d3vy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB4d3Py0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB4d2fy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB4d2vy0Edm185zvv0WM_Q" points="[1614, 3466, -5371, 1534]$[1614, 3916, -5371, 1984]$[6297, 3916, -688, 1984]$[6297, 2858, -688, 926]"/>
+      </edges>
+      <edges xmi:id="_GB-kYPy0Edm185zvv0WM_Q" type="OwnedElement" source="_FyglAPy0Edm185zvv0WM_Q" target="_F5xDkfy0Edm185zvv0WM_Q">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB-kYfy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB-kYvy0Edm185zvv0WM_Q" points="[-14, 3902, -477, -6126]$[462, 5490, -1, -4538]"/>
+      </edges>
+      <edges xmi:id="_GB-kY_y0Edm185zvv0WM_Q" source="_FyglAPy0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB-kZvy0Edm185zvv0WM_Q" visible="false" type="NameLabel">
+          <children xmi:id="_GB-kaPy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB-kafy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB-kZ_y0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB-kZPy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Implementation" href="vizref:///#jimpl^vcore.target=uml2.Implementation[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB-kZfy0Edm185zvv0WM_Q" points="[-14, 3902, 4921, -36301]$[-4935, 5490, 0, -34713]$[-4935, 39118, 0, -1085]"/>
+      </edges>
+      <edges xmi:id="_GB-kavy0Edm185zvv0WM_Q" source="_FyglAPy0Edm185zvv0WM_Q" target="_F6n_MPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB-kbfy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB-kb_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB-kcfy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB-kcPy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB-kbvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB-ka_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ISerializer[jcu^name=ISerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB-kbPy0Edm185zvv0WM_Q" points="[2778, 0, -6588, 25189]$[10239, 0, 873, 25189]$[10239, -24104, 873, 1085]"/>
+      </edges>
+      <edges xmi:id="_GB-kcvy0Edm185zvv0WM_Q" source="_FyglAPy0Edm185zvv0WM_Q" target="_Fe1bEPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GB-kdfy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GB-kd_y0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErAPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GB-kePy0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GB-kdvy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GB-kc_y0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=SerializerDescriptor[jcu^name=SerializerDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GB-kdPy0Edm185zvv0WM_Q" points="[2302, 1561, -11932, -2249]$[2302, 13176, -11932, 9366]$[4894, 13176, -9340, 9366]$[4894, 5609, -9340, 1799]$[14287, 5609, 53, 1799]$[14287, 4736, 53, 926]"/>
+      </edges>
+      <edges xmi:id="_GCErAfy0Edm185zvv0WM_Q" source="_FyglAPy0Edm185zvv0WM_Q" target="_F5xDkfy0Edm185zvv0WM_Q">
+        <children xmi:id="_GCErBPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GCErBvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_GCErCPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_GCErB_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GCErBfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GCErAvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorSerializedSelection[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GCErA_y0Edm185zvv0WM_Q" points="[-14, 3902, -477, -6126]$[462, 5490, -1, -4538]"/>
+      </edges>
+      <edges xmi:id="_GCErCfy0Edm185zvv0WM_Q" source="_FyglAPy0Edm185zvv0WM_Q" target="_FjtUAPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GCErDPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GCErDvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErEPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErD_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GCErDfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GCErCvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorSelectionSerializer[jcu^name=NavigatorSelectionSerializer.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonDropHandlerService[jcu^name=CommonDropHandlerService.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GCErC_y0Edm185zvv0WM_Q" points="[-14, 3902, -9036, -6126]$[9009, 5490, -13, -4538]"/>
+      </edges>
+      <edges xmi:id="_GCErEfy0Edm185zvv0WM_Q" source="_F5evsPy0Edm185zvv0WM_Q" target="_FZ9iIPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GCErFPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GCErFvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErGPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErF_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GCErFfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GCErEvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=IDropValidator[jcu^name=IDropValidator.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GCErE_y0Edm185zvv0WM_Q" points="[0, -2778, 2659, 35997]$[-5901, -4365, -3242, 34410]$[-5901, -33496, -3242, 5279]$[-2673, -35084, -14, 3691]"/>
+      </edges>
+      <edges xmi:id="_GCErGfy0Edm185zvv0WM_Q" source="_F66TEPy0Edm185zvv0WM_Q" target="_FZ9iIPy0Edm185zvv0WM_Q">
+        <children xmi:id="_GCErHPy0Edm185zvv0WM_Q" visible="false" type="KindLabel">
+          <children xmi:id="_GCErHvy0Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErIPy0Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_GCErH_y0Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_GCErHfy0Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_GCErGvy0Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=NavigatorDropActionDelegate[jcu^name=NavigatorDropActionDelegate.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=CommonNavigatorDropAdapter[jcu^name=CommonNavigatorDropAdapter.java[jpack^name=org.eclipse.ui.navigator.views.internal.dnd[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GCErG_y0Edm185zvv0WM_Q" points="[-13, 1997, -14, -5278]$[-13, 3584, -14, -3691]"/>
+      </edges>
+    </contents>
+    <contents xmi:type="notation:Diagram" xmi:id="_H10VAPy-Edm185zvv0WM_Q" type="Class" element="_SWX3UH5GEdm797szikHjoQ" name="Link-with-Editor">
+      <children xmi:id="_KDiw0Py-Edm185zvv0WM_Q" targetEdges="_NC76IPy-Edm185zvv0WM_Q">
+        <children xmi:id="_KDiw0_y-Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_KDiw1Py-Edm185zvv0WM_Q" width="530" height="530"/>
+        </children>
+        <children xmi:id="_KDiw1fy-Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_KDiw1vy-Edm185zvv0WM_Q" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_KDiw1_y-Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_KDiw2Py-Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_KDiw2fy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_KDiw2vy-Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_KDiw2_y-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_KDiw3Py-Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_KDiw3fy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_KDiw0fy-Edm185zvv0WM_Q" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KDiw0vy-Edm185zvv0WM_Q" x="5688" y="3439"/>
+      </children>
+      <children xmi:id="_M7rbkPy-Edm185zvv0WM_Q" sourceEdges="_NC1zgfy-Edm185zvv0WM_Q _NC76IPy-Edm185zvv0WM_Q _NC76KPy-Edm185zvv0WM_Q _NC76MPy-Edm185zvv0WM_Q" targetEdges="_NC76KPy-Edm185zvv0WM_Q">
+        <children xmi:id="_M7rbk_y-Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_M7rblPy-Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_M7rblfy-Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_M7rblvy-Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_M7rbl_y-Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M7rbmPy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_M7rbmfy-Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M7rbmvy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_M7rbm_y-Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M7rbnPy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_M7rbnfy-Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_M7rbnvy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_M7rbkfy-Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M7rbkvy-Edm185zvv0WM_Q" x="10176" y="3180"/>
+      </children>
+      <children xmi:id="_M9fZcPy-Edm185zvv0WM_Q" targetEdges="_NC1zgfy-Edm185zvv0WM_Q _NC76MPy-Edm185zvv0WM_Q">
+        <children xmi:id="_M9fZc_y-Edm185zvv0WM_Q" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_M9fZdPy-Edm185zvv0WM_Q" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_M9fZdfy-Edm185zvv0WM_Q" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_M9fZdvy-Edm185zvv0WM_Q" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_M9fZd_y-Edm185zvv0WM_Q" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M9fZePy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_M9fZefy-Edm185zvv0WM_Q" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M9fZevy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_M9fZe_y-Edm185zvv0WM_Q" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_M9fZfPy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_M9fZffy-Edm185zvv0WM_Q" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_M9fZfvy-Edm185zvv0WM_Q"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_M9fZcfy-Edm185zvv0WM_Q" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M9fZcvy-Edm185zvv0WM_Q" x="11561" y="10466"/>
+      </children>
+      <styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_H10VAfy-Edm185zvv0WM_Q"/>
+      <edges xmi:id="_NC1zgfy-Edm185zvv0WM_Q" type="OwnedElement" source="_M7rbkPy-Edm185zvv0WM_Q" target="_M9fZcPy-Edm185zvv0WM_Q">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_NC1zgvy-Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NC1zg_y-Edm185zvv0WM_Q" points="[0, 2857, 0, -6125]$[0, 4444, 0, -4538]"/>
+      </edges>
+      <edges xmi:id="_NC76IPy-Edm185zvv0WM_Q" source="_M7rbkPy-Edm185zvv0WM_Q" target="_KDiw0Py-Edm185zvv0WM_Q">
+        <children xmi:id="_NC76I_y-Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_NC76Jfy-Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_NC76J_y-Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_NC76Jvy-Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_NC76JPy-Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_NC76Ify-Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ILinkHelper[jcu^name=ILinkHelper.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NC76Ivy-Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_NC76KPy-Edm185zvv0WM_Q" source="_M7rbkPy-Edm185zvv0WM_Q" target="_M7rbkPy-Edm185zvv0WM_Q">
+        <children xmi:id="_NC76K_y-Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_NC76Lfy-Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_NC76L_y-Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_NC76Lvy-Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_NC76LPy-Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_NC76Kfy-Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NC76Kvy-Edm185zvv0WM_Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_NC76MPy-Edm185zvv0WM_Q" source="_M7rbkPy-Edm185zvv0WM_Q" target="_M9fZcPy-Edm185zvv0WM_Q">
+        <children xmi:id="_NC76M_y-Edm185zvv0WM_Q" type="KindLabel">
+          <children xmi:id="_NC76Nfy-Edm185zvv0WM_Q" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_NC76N_y-Edm185zvv0WM_Q" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_NC76Nvy-Edm185zvv0WM_Q" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_NC76NPy-Edm185zvv0WM_Q" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_NC76Mfy-Edm185zvv0WM_Q" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=Descriptor[jsrctype^name=LinkHelperRegistry[jcu^name=LinkHelperRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NC76Mvy-Edm185zvv0WM_Q" points="[0, 2857, 0, -6125]$[0, 4444, 0, -4538]"/>
+      </edges>
+    </contents>
+    <contents xmi:type="notation:Diagram" xmi:id="_Mkq0UPy_Edm185zvv0WM_Q" type="Class" element="_SWX3UH5GEdm797szikHjoQ" name="Diagram2">
+      <children xmi:id="_HJWQ8P0IEdmIXMUQntzgXA" sourceEdges="_Hci5wP0IEdmIXMUQntzgXA _Hci5yP0IEdmIXMUQntzgXA" targetEdges="_coh54P0JEdmIXMUQntzgXA">
+        <children xmi:id="_HJok0P0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HJok0f0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HJok0v0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HJok0_0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HJok1P0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HJok1f0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HJok1v0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HJok1_0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HJok2P0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HJok2f0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HJok2v0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HJok2_0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HJWQ8f0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HJWQ8v0IEdmIXMUQntzgXA" x="22260" y="6678"/>
+      </children>
+      <children xmi:id="_HK4iAP0IEdmIXMUQntzgXA" sourceEdges="_HcpAZf0IEdmIXMUQntzgXA _HcpAbf0IEdmIXMUQntzgXA" targetEdges="_Hci5wP0IEdmIXMUQntzgXA _HcpAZf0IEdmIXMUQntzgXA">
+        <children xmi:id="_HK4iA_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HK4iBP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HK4iBf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HK4iBv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HK4iB_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HK4iCP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HK4iCf0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HK4iCv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HK4iC_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HK4iDP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HK4iDf0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HK4iDv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HK4iAf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HK4iAv0IEdmIXMUQntzgXA" x="14746" y="6650"/>
+      </children>
+      <children xmi:id="_HLjQYP0IEdmIXMUQntzgXA" sourceEdges="_HcpAdf0IEdmIXMUQntzgXA _HcpAff0IEdmIXMUQntzgXA _HcvHAf0IEdmIXMUQntzgXA _HcvHCf0IEdmIXMUQntzgXA _HcvHEf0IEdmIXMUQntzgXA" targetEdges="_HcpAbf0IEdmIXMUQntzgXA _Hc1Nu_0IEdmIXMUQntzgXA">
+        <children xmi:id="_HLjQY_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HLjQZP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HLjQZf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HLjQZv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HLjQZ_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HLjQaP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HLjQaf0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HLjQav0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HLjQa_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HLjQbP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HLjQbf0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HLjQbv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HLjQYf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HLjQYv0IEdmIXMUQntzgXA" x="14946" y="13674"/>
+      </children>
+      <children xmi:id="_HSJAkP0IEdmIXMUQntzgXA" sourceEdges="_HcvHGf0IEdmIXMUQntzgXA" targetEdges="_Hc1Ns_0IEdmIXMUQntzgXA _Bl_rMP0KEdmIXMUQntzgXA">
+        <children xmi:id="_HSJAk_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HSJAlP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HSPHMP0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSPHMf0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSPHMv0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HSPHM_0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSPHNP0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HSPHNf0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSPHNv0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HSPHN_0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSPHOP0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HSPHOf0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HSJAkf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HSJAkv0IEdmIXMUQntzgXA" x="7314" y="27348"/>
+      </children>
+      <children xmi:id="_HStoUP0IEdmIXMUQntzgXA" targetEdges="_HcvHGf0IEdmIXMUQntzgXA">
+        <children xmi:id="_HStoU_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HStoVP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HStoVf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HStoVv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HStoV_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HStoWP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HStoWf0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HStoWv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HStoW_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HStoXP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HSzu8P0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HSzu8f0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HStoUf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HStoUv0IEdmIXMUQntzgXA" x="6996" y="22578"/>
+      </children>
+      <children xmi:id="_HTMJcP0IEdmIXMUQntzgXA" sourceEdges="_Hc1NoP0IEdmIXMUQntzgXA _Hc1No_0IEdmIXMUQntzgXA" targetEdges="_HcvHAf0IEdmIXMUQntzgXA _sp32kP0JEdmIXMUQntzgXA">
+        <children xmi:id="_HTMJc_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HTMJdP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HTMJdf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HTMJdv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HTMJd_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HTMJeP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HTMJef0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HTMJev0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HTMJe_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HTMJfP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HTMJff0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HTMJfv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HTMJcf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HTMJcv0IEdmIXMUQntzgXA" x="13722" y="22584"/>
+      </children>
+      <children xmi:id="_HT8-cP0IEdmIXMUQntzgXA" targetEdges="_HcvHCf0IEdmIXMUQntzgXA _Hc1NoP0IEdmIXMUQntzgXA _Hc1No_0IEdmIXMUQntzgXA">
+        <children xmi:id="_HT8-c_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HT8-dP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HT8-df0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_HT8-dv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_HT8-d_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HT8-eP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_HT8-ef0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HT8-ev0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_HT8-e_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HT8-fP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <children xmi:id="_HT8-ff0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HT8-fv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HT8-cf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HT8-cv0IEdmIXMUQntzgXA" x="13992" y="27030"/>
+      </children>
+      <children xmi:id="_HVAHUP0IEdmIXMUQntzgXA" sourceEdges="_Hc1Nq_0IEdmIXMUQntzgXA _Hc1Ns_0IEdmIXMUQntzgXA" targetEdges="_Hci5yP0IEdmIXMUQntzgXA _HcpAff0IEdmIXMUQntzgXA _Hc1Nq_0IEdmIXMUQntzgXA _Hc7UQP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HVAHU_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HVAHVP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HVAHVf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HVAHVv0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HVAHV_0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HVAHWP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HVAHWf0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HVAHWv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HVAHW_0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HVAHXP0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HVAHXf0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HVAHXv0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HVAHUf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HVAHUv0IEdmIXMUQntzgXA" x="6042" y="14628"/>
+      </children>
+      <children xmi:id="_HXk6MP0IEdmIXMUQntzgXA" targetEdges="_HcvHEf0IEdmIXMUQntzgXA">
+        <children xmi:id="_HXk6M_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HXk6NP0IEdmIXMUQntzgXA" width="530" height="530"/>
+        </children>
+        <children xmi:id="_HXk6Nf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HXk6Nv0IEdmIXMUQntzgXA" type="Kind">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HXk6N_0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HXk6OP0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HXk6Of0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HXk6Ov0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HXk6O_0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HXk6PP0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HXk6Pf0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLClassifierStyle" xmi:id="_HXk6Mf0IEdmIXMUQntzgXA" showStereotype="Label" useClassifierShape="true"/>
+        <element xmi:type="uml:Interface" href="vizref:///#jsrctype^vcore.target=uml2.Interface^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HXk6Mv0IEdmIXMUQntzgXA" x="21690" y="22588"/>
+      </children>
+      <children xmi:id="_HYWWQP0IEdmIXMUQntzgXA" sourceEdges="_Hc1Nu_0IEdmIXMUQntzgXA _Hc7UQP0IEdmIXMUQntzgXA" targetEdges="_HcpAdf0IEdmIXMUQntzgXA _ifGrsP0JEdmIXMUQntzgXA">
+        <children xmi:id="_HYWWQ_0IEdmIXMUQntzgXA" type="ImageCompartment">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+          <layoutConstraint xmi:type="notation:Size" xmi:id="_HYWWRP0IEdmIXMUQntzgXA" width="1320" height="1320"/>
+        </children>
+        <children xmi:id="_HYWWRf0IEdmIXMUQntzgXA" type="Stereotype">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HYcc4P0IEdmIXMUQntzgXA" type="Name">
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HYcc4f0IEdmIXMUQntzgXA" visible="false" type="AttributeCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HYcc4v0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HYcc4_0IEdmIXMUQntzgXA" type="OperationCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HYcc5P0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HYcc5f0IEdmIXMUQntzgXA" visible="false" type="SignalCompartment">
+          <styles xmi:type="umlnotation:UMLListCompartmentStyle" xmi:id="_HYcc5v0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <children xmi:id="_HYcc5_0IEdmIXMUQntzgXA" visible="false" type="StructureCompartment">
+          <styles xmi:type="umlnotation:UMLShapeCompartmentStyle" xmi:id="_HYcc6P0IEdmIXMUQntzgXA"/>
+          <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_HYWWQf0IEdmIXMUQntzgXA" showStereotype="Label"/>
+        <element xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HYWWQv0IEdmIXMUQntzgXA" x="6210" y="6661"/>
+      </children>
+      <children xmi:id="_W3B1UP0JEdmIXMUQntzgXA" sourceEdges="_coh54P0JEdmIXMUQntzgXA" element="_WrLxsP0JEdmIXMUQntzgXA">
+        <children xmi:id="_W3H78P0JEdmIXMUQntzgXA" type="CommentBody" element="_WrLxsP0JEdmIXMUQntzgXA"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_W3B1Uf0JEdmIXMUQntzgXA" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_W3B1Uv0JEdmIXMUQntzgXA" x="22260" y="3498" width="4445" height="2222"/>
+      </children>
+      <children xmi:id="_eM52sP0JEdmIXMUQntzgXA" sourceEdges="_ifGrsP0JEdmIXMUQntzgXA" element="_eMhcMP0JEdmIXMUQntzgXA">
+        <children xmi:id="_eM52s_0JEdmIXMUQntzgXA" type="CommentBody" element="_eMhcMP0JEdmIXMUQntzgXA"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_eM52sf0JEdmIXMUQntzgXA" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eM52sv0JEdmIXMUQntzgXA" x="952" y="6667" width="4127" height="2539"/>
+      </children>
+      <children xmi:id="_lGtnIP0JEdmIXMUQntzgXA" sourceEdges="_sp32kP0JEdmIXMUQntzgXA" element="_lGVMoP0JEdmIXMUQntzgXA">
+        <children xmi:id="_lGtnI_0JEdmIXMUQntzgXA" type="CommentBody" element="_lGVMoP0JEdmIXMUQntzgXA"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_lGtnIf0JEdmIXMUQntzgXA" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lGtnIv0JEdmIXMUQntzgXA" x="21942" y="24804" width="5397" height="2248"/>
+      </children>
+      <children xmi:id="_-xrwgP0JEdmIXMUQntzgXA" sourceEdges="_Bl_rMP0KEdmIXMUQntzgXA" element="_-xTWAP0JEdmIXMUQntzgXA">
+        <children xmi:id="_-xrwg_0JEdmIXMUQntzgXA" type="CommentBody" element="_-xTWAP0JEdmIXMUQntzgXA"/>
+        <styles xmi:type="umlnotation:UMLShapeStyle" xmi:id="_-xrwgf0JEdmIXMUQntzgXA" fillColor="16763850" lineColor="16744576" showStereotype="Label"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-xrwgv0JEdmIXMUQntzgXA" x="7314" y="30210" width="3492" height="1587"/>
+      </children>
+      <styles xmi:type="umlnotation:UMLDiagramStyle" xmi:id="_Mkq0Ufy_Edm185zvv0WM_Q"/>
+      <edges xmi:id="_Hci5wP0IEdmIXMUQntzgXA" source="_HJWQ8P0IEdmIXMUQntzgXA" target="_HK4iAP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hci5w_0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hci5xf0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hci5x_0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hci5xv0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hci5xP0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hci5wf0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hci5wv0IEdmIXMUQntzgXA" points="[0, 1799, 4008, -5279]$[-4022, 3387, -14, -3691]"/>
+      </edges>
+      <edges xmi:id="_Hci5yP0IEdmIXMUQntzgXA" source="_HJWQ8P0IEdmIXMUQntzgXA" target="_HVAHUP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcpAYP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcpAYv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAZP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAY_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcpAYf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hci5yf0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hci5yv0IEdmIXMUQntzgXA" points="[0, 1799, 12078, -28509]$[0, 21009, 12078, -9299]$[-12092, 22595, -14, -7713]"/>
+      </edges>
+      <edges xmi:id="_HcpAZf0IEdmIXMUQntzgXA" source="_HK4iAP0IEdmIXMUQntzgXA" target="_HK4iAP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcpAaP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcpAav0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAbP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAa_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcpAaf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcpAZv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcpAZ_0IEdmIXMUQntzgXA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_HcpAbf0IEdmIXMUQntzgXA" source="_HK4iAP0IEdmIXMUQntzgXA" target="_HLjQYP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcpAcP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcpAcv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAdP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAc_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcpAcf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcpAbv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterRegistryManager[jcu^name=ExtensionFilterRegistryManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcpAb_0IEdmIXMUQntzgXA" points="[-14, 3690, 1442, -5914]$[-1469, 5278, -13, -4326]"/>
+      </edges>
+      <edges xmi:id="_HcpAdf0IEdmIXMUQntzgXA" source="_HLjQYP0IEdmIXMUQntzgXA" target="_HYWWQP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcpAeP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcpAev0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAfP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAe_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcpAef0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcpAdv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcpAd_0IEdmIXMUQntzgXA" points="[-13, -4326, 6614, 5278]$[-6628, -5914, -1, 3690]"/>
+      </edges>
+      <edges xmi:id="_HcpAff0IEdmIXMUQntzgXA" source="_HLjQYP0IEdmIXMUQntzgXA" target="_HVAHUP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcpAgP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcpAgv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHAP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcpAg_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcpAgf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcpAfv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcpAf_0IEdmIXMUQntzgXA" points="[-13, 4326, 6601, -9300]$[-6628, 5913, -14, -7713]"/>
+      </edges>
+      <edges xmi:id="_HcvHAf0IEdmIXMUQntzgXA" source="_HLjQYP0IEdmIXMUQntzgXA" target="_HTMJcP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcvHBP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcvHBv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHCP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHB_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcvHBf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcvHAv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcvHA_0IEdmIXMUQntzgXA" points="[-13, 4326, -529, -9300]$[516, 5913, 0, -7713]"/>
+      </edges>
+      <edges xmi:id="_HcvHCf0IEdmIXMUQntzgXA" source="_HLjQYP0IEdmIXMUQntzgXA" target="_HT8-cP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcvHDP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcvHDv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHEP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHD_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcvHDf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcvHCv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcvHC_0IEdmIXMUQntzgXA" points="[-13, 4326, -2514, -20386]$[4485, 5913, 1984, -18799]$[4485, 21339, 1984, -3373]$[2500, 22926, -1, -1786]"/>
+      </edges>
+      <edges xmi:id="_HcvHEf0IEdmIXMUQntzgXA" source="_HLjQYP0IEdmIXMUQntzgXA" target="_HXk6MP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcvHFP0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_HcvHFv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHGP0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHF_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcvHFf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcvHEv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterProvider[jcu^name=ExtensionFilterProvider.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcvHE_0IEdmIXMUQntzgXA" points="[-13, 4326, -7726, -9300]$[7713, 5913, 0, -7713]"/>
+      </edges>
+      <edges xmi:id="_HcvHGf0IEdmIXMUQntzgXA" source="_HSJAkP0IEdmIXMUQntzgXA" target="_HStoUP0IEdmIXMUQntzgXA">
+        <children xmi:id="_HcvHHP0IEdmIXMUQntzgXA" type="NameLabel">
+          <children xmi:id="_HcvHHv0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_HcvHH_0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HcvHHf0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_HcvHGv0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Generalization" href="vizref:///#jgen^vcore.target=uml2.Generalization[jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorExtensionFilter[jcu^name=NavigatorExtensionFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HcvHG_0IEdmIXMUQntzgXA" points="[0, -1786, 3056, 9300]$[-3070, -3373, -14, 7713]"/>
+      </edges>
+      <edges xmi:id="_Hc1NoP0IEdmIXMUQntzgXA" type="OwnedElement" source="_HTMJcP0IEdmIXMUQntzgXA" target="_HT8-cP0IEdmIXMUQntzgXA">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc1Nof0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc1Nov0IEdmIXMUQntzgXA" points="[0, 7713, -1985, -3373]$[1984, 9300, -1, -1786]"/>
+      </edges>
+      <edges xmi:id="_Hc1No_0IEdmIXMUQntzgXA" source="_HTMJcP0IEdmIXMUQntzgXA" target="_HT8-cP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hc1Npv0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hc1NqP0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nqv0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nqf0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hc1Np_0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc1NpP0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ThirdPartyFilterProviderDescriptor[jsrctype^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc1Npf0IEdmIXMUQntzgXA" points="[0, 7713, -1985, -3373]$[1984, 9300, -1, -1786]"/>
+      </edges>
+      <edges xmi:id="_Hc1Nq_0IEdmIXMUQntzgXA" source="_HVAHUP0IEdmIXMUQntzgXA" target="_HVAHUP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hc1Nrv0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hc1NsP0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nsv0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nsf0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hc1Nr_0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc1NrP0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc1Nrf0IEdmIXMUQntzgXA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      </edges>
+      <edges xmi:id="_Hc1Ns_0IEdmIXMUQntzgXA" source="_HVAHUP0IEdmIXMUQntzgXA" target="_HSJAkP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hc1Ntv0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hc1NuP0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nuv0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nuf0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hc1Nt_0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc1NtP0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc1Ntf0IEdmIXMUQntzgXA" points="[-2566, 27, -3519, -10372]$[-3704, 27, -4657, -10372]$[-3704, 10425, -4657, 26]$[-1296, 10425, -2249, 26]"/>
+      </edges>
+      <edges xmi:id="_Hc1Nu_0IEdmIXMUQntzgXA" source="_HYWWQP0IEdmIXMUQntzgXA" target="_HLjQYP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hc1Nvv0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hc1NwP0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nwv0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc1Nwf0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hc1Nv_0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc1NvP0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterViewerRegistry[jcu^name=ExtensionFilterViewerRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc1Nvf0IEdmIXMUQntzgXA" points="[-1, 3690, -6628, -5914]$[6614, 5278, -13, -4326]"/>
+      </edges>
+      <edges xmi:id="_Hc7UQP0IEdmIXMUQntzgXA" source="_HYWWQP0IEdmIXMUQntzgXA" target="_HVAHUP0IEdmIXMUQntzgXA">
+        <children xmi:id="_Hc7UQ_0IEdmIXMUQntzgXA" type="KindLabel">
+          <children xmi:id="_Hc7URf0IEdmIXMUQntzgXA" type="Stereotype">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc7UR_0IEdmIXMUQntzgXA" type="Kind">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <children xmi:id="_Hc7URv0IEdmIXMUQntzgXA" type="Name">
+            <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          </children>
+          <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Hc7URP0IEdmIXMUQntzgXA" y="-185"/>
+        </children>
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Hc7UQf0IEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <element xmi:type="uml:Usage" href="vizref:///#jdep^vcore.target=uml2.Usage[jsrctype^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]][jsrctype^name=ExtensionFilterDescriptor[jcu^name=ExtensionFilterDescriptor.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]]"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hc7UQv0IEdmIXMUQntzgXA" points="[-1, 3690, -14, -19540]$[-1, 15517, -14, -7713]"/>
+      </edges>
+      <edges xmi:id="_coh54P0JEdmIXMUQntzgXA" type="Reference" source="_W3B1UP0JEdmIXMUQntzgXA" target="_HJWQ8P0IEdmIXMUQntzgXA">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_coh54f0JEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_coh54v0JEdmIXMUQntzgXA" points="[-85, 8, 261, -24]$[-129, 8, 217, -24]"/>
+      </edges>
+      <edges xmi:id="_ifGrsP0JEdmIXMUQntzgXA" type="Reference" source="_eM52sP0JEdmIXMUQntzgXA" target="_HYWWQP0IEdmIXMUQntzgXA">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_ifGrsf0JEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ifGrsv0JEdmIXMUQntzgXA" points="[79, 10, -194, -80]$[222, -49, -51, -139]"/>
+      </edges>
+      <edges xmi:id="_sp32kP0JEdmIXMUQntzgXA" type="Reference" source="_lGtnIP0JEdmIXMUQntzgXA" target="_HTMJcP0IEdmIXMUQntzgXA">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_sp32kf0JEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sp32kv0JEdmIXMUQntzgXA" points="[-103, 1, 232, 62]$[-264, 38, 71, 99]"/>
+      </edges>
+      <edges xmi:id="_Bl_rMP0KEdmIXMUQntzgXA" type="Reference" source="_-xrwgP0JEdmIXMUQntzgXA" target="_HSJAkP0IEdmIXMUQntzgXA">
+        <styles xmi:type="umlnotation:UMLConnectorStyle" xmi:id="_Bl_rMf0KEdmIXMUQntzgXA" routing="Rectilinear" showStereotype="Text"/>
+        <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Bl_rMv0KEdmIXMUQntzgXA" points="[67, 28, -126, -35]$[108, 56, -85, -7]"/>
+      </edges>
+    </contents>
+  </eAnnotations>
+  <ownedComment xmi:id="_1rBVoIO1Edmyd--cXlrqyQ" body="The Logical Extension uses various classes to supply information to the Common Navigator. See the extension point: &#xD;&#xA;org.eclipse.ui.navigator.views&#xD;&#xA; for more details."/>
+  <ownedComment xmi:id="_mJViYPy0Edm185zvv0WM_Q" body="The CNM handles the logic for selection listeners and menus for the CommonNavigator view part.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonNavigatorManager[jcu^name=CommonNavigatorManager.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_ADTKAPy1Edm185zvv0WM_Q" body="The NAS can notify interested parties when Content Extensions are initialized for a specific instance of the CommonNavigator. (Used to force the initialization of CommonActionProviders for the various extensions).">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActivationService[jcu^name=NavigatorActivationService.java[jpack^name=org.eclipse.ui.navigator.views.internal.extensions[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_MRe-IPy1Edm185zvv0WM_Q" body="The NAS handles the work of allowing CommonActionProviders to inject items into the context menu of the viewer and to update the action bars as the user changes their selection in the Common Navigator.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorActionService[jcu^name=NavigatorActionService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_XIwpsPy1Edm185zvv0WM_Q" body="The NCS is the heart of the framework for content. Any viewer can use a instance of the NCS. The instance does not have a dependency to an Eclipse view part, so any StructuredViewer could use the service. The NCS will create specific Content Providers and Label Providers for use in any viewer. Each of the provider instances are tied to the NCS that created them.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentService[jcu^name=NavigatorContentService.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_vAWw8Py1Edm185zvv0WM_Q" body="Used to supply a viewer with content or labels">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceContentProvider[jcu^name=NavigatorContentServiceContentProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorContentServiceLabelProvider[jcu^name=NavigatorContentServiceLabelProvider.java[jpack^name=org.eclipse.ui.navigator.views[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_WrLxsP0JEdmIXMUQntzgXA" body="Integrates the filters from extensions. There is one CommonViewerFilter per viewer, not per filter.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=CommonViewerFilter[jcu^name=CommonViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_eMhcMP0JEdmIXMUQntzgXA" body="Handles activating filters and managing the persistance and restoration of these activations.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ExtensionFilterActivationManager[jcu^name=ExtensionFilterActivationManager.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_lGVMoP0JEdmIXMUQntzgXA" body="Provides integration point for Resource Navigator and Package Explorer filters. Likely to be removed.">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=ThirdPartyFilterProviderRegistry[jcu^name=ThirdPartyFilterProviderRegistry.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <ownedComment xmi:id="_-xTWAP0JEdmIXMUQntzgXA" body="Used to wrap filters provided from ThirdPartyProviders">
+    <annotatedElement xmi:type="uml:Class" href="vizref:///#jsrctype^vcore.target=uml2.Class^name=NavigatorViewerFilter[jcu^name=NavigatorViewerFilter.java[jpack^name=org.eclipse.ui.navigator.views.internal.filters[jsrcroot^srcfolder=src[project^vcore.target=uml2.Model^id=org.eclipse.ui.navigator.views]]]]"/>
+  </ownedComment>
+  <packageImport xmi:type="uml:ProfileApplication" xmi:id="_SWX3VH5GEdm797szikHjoQ">
+    <eAnnotations xmi:id="_SWX3VX5GEdm797szikHjoQ" source="attributes">
+      <details xmi:id="_SWX3Vn5GEdm797szikHjoQ" key="version" value="0"/>
+    </eAnnotations>
+    <importedPackage xmi:type="uml:Profile" href="pathmap://UML2_PROFILES/Basic.profile.uml2#_6mFRgK86Edih9-GG5afQ0g"/>
+    <importedProfile href="pathmap://UML2_PROFILES/Basic.profile.uml2#_6mFRgK86Edih9-GG5afQ0g"/>
+  </packageImport>
+  <packageImport xmi:type="uml:ProfileApplication" xmi:id="_SWX3V35GEdm797szikHjoQ">
+    <eAnnotations xmi:id="_SWX3WH5GEdm797szikHjoQ" source="attributes">
+      <details xmi:id="_SWX3WX5GEdm797szikHjoQ" key="version" value="0"/>
+    </eAnnotations>
+    <importedPackage xmi:type="uml:Profile" href="pathmap://UML2_PROFILES/Intermediate.profile.uml2#_Cz7csK87Edih9-GG5afQ0g"/>
+    <importedProfile href="pathmap://UML2_PROFILES/Intermediate.profile.uml2#_Cz7csK87Edih9-GG5afQ0g"/>
+  </packageImport>
+  <packageImport xmi:type="uml:ProfileApplication" xmi:id="_SWX3Wn5GEdm797szikHjoQ">
+    <eAnnotations xmi:id="_SWX3W35GEdm797szikHjoQ" source="attributes">
+      <details xmi:id="_SWX3XH5GEdm797szikHjoQ" key="version" value="0"/>
+    </eAnnotations>
+    <importedPackage xmi:type="uml:Profile" href="pathmap://UML2_PROFILES/Complete.profile.uml2#_M7pTkK87Edih9-GG5afQ0g"/>
+    <importedProfile href="pathmap://UML2_PROFILES/Complete.profile.uml2#_M7pTkK87Edih9-GG5afQ0g"/>
+  </packageImport>
+  <packageImport xmi:type="uml:ProfileApplication" xmi:id="_SWX3XX5GEdm797szikHjoQ">
+    <eAnnotations xmi:id="_SWX3Xn5GEdm797szikHjoQ" source="attributes">
+      <details xmi:id="_SWX3X35GEdm797szikHjoQ" key="version" value="0"/>
+    </eAnnotations>
+    <importedPackage xmi:type="uml:Profile" href="pathmap://UML2_MSL_PROFILES/Default.epx#_a_S3wNWLEdiy4IqP8whjFA?Default"/>
+    <importedProfile href="pathmap://UML2_MSL_PROFILES/Default.epx#_a_S3wNWLEdiy4IqP8whjFA?Default"/>
+  </packageImport>
+  <packageImport xmi:type="uml:ProfileApplication" xmi:id="_SWX3YH5GEdm797szikHjoQ">
+    <eAnnotations xmi:id="_SWX3YX5GEdm797szikHjoQ" source="attributes">
+      <details xmi:id="_SWX3Yn5GEdm797szikHjoQ" key="version" value="0"/>
+    </eAnnotations>
+    <importedPackage xmi:type="uml:Profile" href="pathmap://UML2_MSL_PROFILES/Deployment.epx#_vjbuwOvHEdiDX5bji0iVSA?Deployment"/>
+    <importedProfile href="pathmap://UML2_MSL_PROFILES/Deployment.epx#_vjbuwOvHEdiDX5bji0iVSA?Deployment"/>
+  </packageImport>
+  <packageImport xmi:id="_SWX3Y35GEdm797szikHjoQ">
+    <importedPackage xmi:type="uml:Model" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_EfRZoK86EdieaYgxtVWN8Q"/>
+  </packageImport>
+  <ownedMember xmi:type="uml:Component" xmi:id="_9330kIOwEdmyd--cXlrqyQ" name="ITreeContentProvider"/>
+  <ownedMember xmi:type="uml:Component" xmi:id="_X4I4gIOxEdmyd--cXlrqyQ" name="ICommonLabelProvider" clientDependency="_gSmjYIOxEdmyd--cXlrqyQ">
+    <realization xmi:id="_gSmjYIOxEdmyd--cXlrqyQ" client="_X4I4gIOxEdmyd--cXlrqyQ" supplier="_b6MYsIOxEdmyd--cXlrqyQ" realizingClassifier="_b6MYsIOxEdmyd--cXlrqyQ">
+      <mapping xmi:id="_gSmjYYOxEdmyd--cXlrqyQ"/>
+    </realization>
+  </ownedMember>
+  <ownedMember xmi:type="uml:Component" xmi:id="_b6MYsIOxEdmyd--cXlrqyQ" name="ILabelProvider"/>
+  <ownedMember xmi:type="uml:Component" xmi:id="_jhjysIOxEdmyd--cXlrqyQ" name="IOpenListener"/>
+  <ownedMember xmi:type="uml:Component" xmi:id="_kc3kYIOxEdmyd--cXlrqyQ" name="ICommonOpenListener" clientDependency="_mI-g4IOxEdmyd--cXlrqyQ">
+    <realization xmi:id="_mI-g4IOxEdmyd--cXlrqyQ" client="_kc3kYIOxEdmyd--cXlrqyQ" supplier="_jhjysIOxEdmyd--cXlrqyQ" realizingClassifier="_jhjysIOxEdmyd--cXlrqyQ">
+      <mapping xmi:id="_mI-g4YOxEdmyd--cXlrqyQ"/>
+    </realization>
+  </ownedMember>
+  <ownedMember xmi:type="uml:Component" xmi:id="_mol1EIOxEdmyd--cXlrqyQ" name="ICommonActionProvider"/>
+  <ownedMember xmi:type="uml:Component" xmi:id="_4TXNsIOxEdmyd--cXlrqyQ" name="Logical Extension" clientDependency="_AbfLYIOyEdmyd--cXlrqyQ _DeUDMIOyEdmyd--cXlrqyQ _JsSBUIOyEdmyd--cXlrqyQ _Lc-i4IOyEdmyd--cXlrqyQ _ITURAIO3Edmyd--cXlrqyQ">
+    <ownedAttribute xmi:id="_Ssv8QIOyEdmyd--cXlrqyQ" name="id">
+      <type xmi:type="uml:PrimitiveType" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_IXlH8a86EdieaYgxtVWN8Q"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_T8lzgIOyEdmyd--cXlrqyQ" name="priority">
+      <type xmi:type="uml:PrimitiveType" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_IXlH8a86EdieaYgxtVWN8Q"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_sTa0cIOyEdmyd--cXlrqyQ" name="name">
+      <type xmi:type="uml:PrimitiveType" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_IXlH8a86EdieaYgxtVWN8Q"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_BP7DkIOzEdmyd--cXlrqyQ" name="enabledByDefault">
+      <type xmi:type="uml:PrimitiveType" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_IXfBUK86EdieaYgxtVWN8Q"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_LqEuQIOzEdmyd--cXlrqyQ" name="icon">
+      <type xmi:type="uml:PrimitiveType" href="pathmap://UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2#_IXlH8a86EdieaYgxtVWN8Q"/>
+    </ownedAttribute>
+    <ownedOperation xmi:id="_u47eIIOyEdmyd--cXlrqyQ" name="Operation1"/>
+  </ownedMember>
+  <ownedMember xmi:type="uml:Usage" xmi:id="_AbfLYIOyEdmyd--cXlrqyQ" client="_4TXNsIOxEdmyd--cXlrqyQ" supplier="_b6MYsIOxEdmyd--cXlrqyQ"/>
+  <ownedMember xmi:type="uml:Usage" xmi:id="_DeUDMIOyEdmyd--cXlrqyQ" client="_4TXNsIOxEdmyd--cXlrqyQ" supplier="_9330kIOwEdmyd--cXlrqyQ"/>
+  <ownedMember xmi:type="uml:Usage" xmi:id="_JsSBUIOyEdmyd--cXlrqyQ" client="_4TXNsIOxEdmyd--cXlrqyQ" supplier="_jhjysIOxEdmyd--cXlrqyQ"/>
+  <ownedMember xmi:type="uml:Usage" xmi:id="_Lc-i4IOyEdmyd--cXlrqyQ" client="_4TXNsIOxEdmyd--cXlrqyQ" supplier="_mol1EIOxEdmyd--cXlrqyQ"/>
+  <ownedMember xmi:type="uml:Component" xmi:id="_2NsvcIO2Edmyd--cXlrqyQ" name="Logical Enablement Clause"/>
+  <ownedMember xmi:type="uml:Usage" xmi:id="_ITURAIO3Edmyd--cXlrqyQ" client="_4TXNsIOxEdmyd--cXlrqyQ" supplier="_2NsvcIO2Edmyd--cXlrqyQ"/>
+</uml:Model>
diff --git a/bundles/org.eclipse.rap.ui.navigator/notes.txt b/bundles/org.eclipse.rap.ui.navigator/notes.txt
new file mode 100755
index 0000000..615a25b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/notes.txt
@@ -0,0 +1,238 @@
+Some notes about the CNF in attempt to understand things.
+
+30 Nov 08 FRU
+
+Documentation notes:
+
+There is some good text potentially for the docs in:
+
+https://bugs.eclipse.org/bugs/show_bug.cgi?id=195595
+
+
+
+Navigator Content
+
+The purpose of the navigatorContent extension (NCE) is to bind a content provider
+and label provider to the navigator under the right circumstances depending
+on what is selected.
+
+A navigator content descriptor has a one-to-one correspondence with the
+navigator content extension, which is the higher level object representing
+the navigator content.
+
+Overriding
+
+An NCE may specify that it overrides another through the user of the override
+mechanism where it specifies the NCE extension ID of the extension to override.
+
+When doing the processing associated with the label and content provider, it is possible
+that multiple NCEs meet the criteria for processing based on their triggerPoints and/or 
+possibleChildren.  When this happens, the NCEs are ordered in a tree based
+on the overrides specification, and then with that based on priority.
+The first NCE in the tree that provides the answer (label or content) being
+sought is used.
+
+When the NCE is bound to the viewer (using the contentExtension element) it may
+specify that that NCE serves as "root content" for that viewer, which allows
+the viewer to start with an initial set of NCEs to process the root(s) [why exactly --
+I understand intuitively but can't put it into words].
+
+
+Pipelining
+
+In some cases, it is desirable to have multiple NCEs be invoked during
+content provider processing to modify the objects to be returned by the
+content provider.  This is done using the pipelining mechanism where each NCE
+in the tree has the opportunity to modify the objects to be returned by the
+content provider.  There are also hooks for these pipelined NCEs to 
+be invoked at the Add/Remove/Update/Refresh methods on the viewer.
+
+
+Selecting a Content Extension (NCE)
+
+This is done either through the possibleChildren or triggerPoints expression
+on the NCE.  The enablement expression expression specifies the same expression
+for both triggerPoints and possibleChildren.
+
+The triggerPoints expression is used:
+
+- by the NavigatorContentServiceContentProvider
+to find extensions for getElements() (through the root content extensions) 
+or getChildren().  Given a parent node, that content extension is used
+to determine what children to provide.
+- by the NavigatorPipelineService for ???
+
+The possibleChildren expression is used for all other cases, which include:
+
+- Label/icon/description provider
+- Selecting the NCE for a drop
+
+The current documentation on these uses is incorrect, in particular for 
+the label provides, it says that the triggerPoints expression is used, but
+it's not.
+
+
+
+
+
+
+Dependency
+
+Questions/Issues:
+
+1) In NavigatorContentServicedLabelProvider, seems that we look for
+label providers by looking for matching NCEs by possibleChild.
+However the documentation is clear that content and label providers
+are found by triggerPoint, possibleChild is used only in the content
+provider getParent() case.
+
+<mde>The API documentation for label providers is wrong. It has always been 
+the case that label providers rely on the possibleChildren; we should
+ correct the doc since actual implementations are relying on the 
+ behavior of label providers using possible children (but only in 
+ cases where the framework can't determine which extension contributed 
+ the content with its short term memory mechanism). 
+ Other parts of the framework (like the DND Drop Handlers) also rely on 
+ possible children to determine which content extension's handlers 
+ should be invoked when processing a drop operation. </mde>
+
+
+2) In NavigatorContentServiceLabel provider, there seems to be special
+processing to handle overriding instead of using the normal processing
+to get only the relevant NCEs.  Also, the way to get the NCEs is
+different depending on whether doing a getImage() or getForeground()
+for example and I don't understand why.  Also
+NavigatorContentServiceDescriptionProvider does not seem to consider
+overrides at all.  This all seems wrong.
+
+<mde>
+The content extension has alot of complexity because it has to 
+determine the overrides for each individual child along the path. 
+Labels are a bit simpler because only one value can be returned. 
+The override logic recursively walks the override path by the highest 
+priority label provider. Overriding label providers can opt not to 
+return a label (e.g. null), and the framework will fall back on the 
+base label provider to provide a value.
+
+The getForeground()/getFont() cases weren't retrofitted for 
+overriding values. This was just a legacy/point in time and 
+is arguably a bug. The Font and Color providers were added to 
+support the Team providers (they weren't part of the original product 
+framework). If anything, the getFont()/Foreground/Background() 
+methods should be retrofitted to follow the patter in getText/Image().
+</mde>
+
+
+3) The triggerPoints and possibleChildren descriptions in the exsd are
+confusing:
+
+"The triggerPoints expression defines the nodes in a tree that should
+cause this extension to be invoked for children."
+
+"The possibleChildren expression defines the nodes in a tree that
+could be contributed by this extension.  Clients should describes when
+this content extension could provide a parent for elements that match
+the expression."
+
+I think a clearer description is:
+
+The triggerPoints expression defines the tree nodes for which this
+extension (and associated content/label providers) is to be invoked.
+
+<mde>Remove "label providers" and we're good. </mde>
+
+The possibleChildren expression defines the content provider to be
+selected when processing the ITreeContentProvider.getParent() call.
+
+<mde>As well as the DND Drop Handler and Action Providers.</mde>
+
+4) Why is the overridden tree computed only on
+findDescriptorsForPossibleChild and not for
+findDescriptorsForTriggerPoint?  The extension point documentation for
+the overrides element says that the overrides only applied to
+triggerpoints, it does not mention possibleChildren (except in
+reference to the OnlySuppressedifExtVisibleAndActive option is set,
+but it still seems to say that only triggerPoints is actually used).
+
+<mde>It might be worth setting up an hour to go through a deep dive 
+for this material. If I recall correctly, there was a challenge in 
+computing all of the triggerpoint overrides a priori, but the 
+overrides are used. The NavigatorContentServiceContentProvider 
+processes a given element for children (e.g. getChildren()), 
+and then invokes the overridden providers directly (from within 
+the Service content provider) to compute the overridden tree. 
+The possible children through doesn't have a use case like this, 
+and so these can be computed and returned as needed.</mde>
+
+5) More confusion (from the overrides exsd):
+
+"InvokeAlwaysRegardlessOfSuppressedExt (default): Indicates that this
+extension is a first class extension; it should be given opportunities
+to contribute content regardless if its suppressedExtensionId is
+visible or active to the viewer. Thus, the extension is a first-class
+extension and an overriding extension. It will be invoked whenever its
+triggerPoints expression is matched. When the suppressed extension and
+its triggerPoints extension is matched, it will be invoked with the
+contributed items from its suppressed extension; the suppressed
+extension will not be given an opportunity to directly contribute."
+
+The last sentence of this is unclear.  I think it would be better (and
+consistent with the rest of the explanations) if the suppressed
+extension was just suppressed, it is never invoked at all.
+
+<mde>The use cases here are as follows:
+
+1. I want to contribute my stuff, and I want to specialize an existing provider 
+like Java, and
+
+2. I want to just specialize another provider, and if it's not turned on, I don't 
+even need to be considered.
+
+So in neither case is it completely suppressed, but rather in case 2 it acts 
+like a domino of its source provider. I just want to make sure we don't 
+lose this meaning in the update of the documentation </mde>
+
+
+6) Should the NCE class and NavigatorContentDescriptor classes be
+combined? They seem to be one-to-one and there is a lot of code that
+seems to convert from one to another for no good reason.
+
+<mde>The Descriptor/Extension pattern is used for every part of the framework, here's why:
+
+A Manager handles Descriptors; Managers are singletons, and each known extension
+has exactly one Descriptor. The state associated with a Descriptor is just an API 
+convenience layer on top of the IConfigurationElement API. These are relatively 
+lightweight, and their lifecycle is the lifecycle of the Manager, which is 
+effectively the lifecycle of the workbench.
+
+A Service handles Extensions; Services are 1 instance per Common Navigator viewer 
+(or whatever client is using the Service). Each Service creates an Extension 
+and manages a map from Descriptor (1 instance for each extension for all 
+viewers) to its Extension (1 instance for each instance viewer). The Extension 
+instance creates instances of classes defined by the plugin extension metadata; 
+each of these instances has an associated lifecycle (init .. do work .. dispose) 
+and can hold on to system resources (label providers can hold Fonts or Colors, 
+content providers might talk to a data source across a network). Most of these 
+classes aren't necessarily designed to be re-entrant (they make assumptions 
+about the current state of a given viewer, like whether to show 
+Packages as hierarchical or flattened). So if I create a Project Explorer, 
+and then separately create a MyCustomView and bind Java to each of them, 
+I'll have 1 Java Descriptor, and 2 Java Extensions in memory.
+
+Collapsing Descriptors into Extensions would be a fundamental change to the 
+framework, eliminate the assumption that there's 1 content 
+provider/label provider/etc for each view instance, and make it hard or 
+impossible to know when each of the instantiated classes from each 
+plugin extension can be disposed. I would not recommend this.
+</mde>
+
+
+7) There are substantial chunks of duplicate code where only one
+line is different between the similar methods.
+
+<mde>If you can provide a few examples, I might be able to provide some 
+insights here; in many cases, I tried to use the same simple patterns 
+throughout the frameworks to keep the overall complexity down, which 
+can lead to this kind of pattern.</mde>
+
+
diff --git a/bundles/org.eclipse.rap.ui.navigator/plugin.properties b/bundles/org.eclipse.rap.ui.navigator/plugin.properties
new file mode 100755
index 0000000..4963f53
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/plugin.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+Plugin.name=Common Navigator View
+Plugin.providerName=Eclipse.org
+
+
+Link_Helper= Link Helper
+ExtPoint_navigatorViewer = Navigator Viewer Configuration Extension Port
+ExtPoint_navigatorContent = Navigator Content Extension Point
+
+
diff --git a/bundles/org.eclipse.rap.ui.navigator/plugin.xml b/bundles/org.eclipse.rap.ui.navigator/plugin.xml
new file mode 100755
index 0000000..af55b54
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+   <extension-point id="navigatorContent" name="%ExtPoint_navigatorContent" schema="schema/navigatorContent.exsd"/>
+   <extension-point id="viewer" name="%ExtPoint_navigatorViewer" schema="schema/viewer.exsd"/>
+   <extension-point id="linkHelper" name="%Link_Helper" schema="schema/linkHelper.exsd"/>
+ 
+   <extension
+         point="org.eclipse.ui.dropActions">
+      <action
+            class="org.eclipse.ui.internal.navigator.dnd.NavigatorPluginDropAction"
+            id="org.eclipse.ui.navigator.PluginDropAction">
+      </action>
+   </extension> 
+   
+</plugin>
diff --git a/bundles/org.eclipse.rap.ui.navigator/schema/linkHelper.exsd b/bundles/org.eclipse.rap.ui.navigator/schema/linkHelper.exsd
new file mode 100755
index 0000000..1d311da
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/schema/linkHelper.exsd
@@ -0,0 +1,172 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ui.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.ui.navigator" id="linkHelper" name="Navigator Link Helper"/>
+      </appinfo>
+      <documentation>
+         Provides a hook for clients that wish to extend the &quot;Link with Editor&quot; capability of a Common Navigator.  A link helper must be included in a &lt;b&gt;viewerContentBinding&lt;/b&gt; element of the &lt;b&gt;org.eclipse.ui.navigator.viewer&lt;/b&gt; extension point.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="linkHelper"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="linkHelper">
+      <complexType>
+         <sequence>
+            <element ref="editorInputEnablement"/>
+            <element ref="selectionEnablement" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Implements &lt;code&gt;org.eclipse.ui.navigator.ILinkHelper&lt;/code&gt;.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.navigator.ILinkHelper"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A unique id for this &lt;b&gt;linkHelper&lt;/b&gt; extension.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="editorInputEnablement">
+      <annotation>
+         <documentation>
+            An Eclipse Core Expression that describes when this helper can provide a selection from an editor input.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="selectionEnablement">
+      <annotation>
+         <documentation>
+            An Eclipse Core Expression that describes when this extension can provide an IEditorInput for a given selection.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         3.2
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         &lt;pre&gt;
+    &lt;extension
+          point=&quot;org.eclipse.ui.navigator.linkHelper&quot;&gt;
+       &lt;linkHelper
+             class=&quot;org.eclipse.ui.internal.navigator.resources.workbench.ResourceLinkHelper&quot;
+             id=&quot;org.eclipse.ui.navigator.resources.linkHelper&quot;&gt;
+          &lt;selectionEnablement&gt;
+             &lt;instanceof value=&quot;org.eclipse.core.resources.IFile&quot;/&gt;
+          &lt;/selectionEnablement&gt;
+          &lt;editorInputEnablement&gt;
+             &lt;instanceof value=&quot;org.eclipse.ui.IFileEditorInput&quot;/&gt;
+          &lt;/editorInputEnablement&gt;
+       &lt;/linkHelper&gt;
+    &lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2002, 2009 IBM Corporation and others.&lt;br&gt;
+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 &lt;a 
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.rap.ui.navigator/schema/navigatorContent.exsd b/bundles/org.eclipse.rap.ui.navigator/schema/navigatorContent.exsd
new file mode 100755
index 0000000..7d7a26d
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/schema/navigatorContent.exsd
@@ -0,0 +1,974 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ui.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.ui.navigator" id="navigatorContent" name="navigatorContent"/>
+      </appInfo>
+      <documentation>
+         A content extension provides a content and label provider 
+that can be used by a navigator content service. The
+&lt;b&gt;navigatorContent&lt;/b&gt; extension defines the specific classes 
+for the content provider, label provider, and action provider
+in addition to the types of elements the extension knows about. 
+&lt;p&gt;
+The &lt;b&gt;triggerPoints&lt;/b&gt; expression describes the elements that will
+cause this extension to be invoked for either children or for
+labels. The &lt;b&gt;possibleChildren&lt;/b&gt; expression describes the elements 
+that the extension may be able to provide a parent for. Clients
+should describe all elements that could be set as the selection
+to ensure that the link with editor support can properly 
+expand to the right node.
+&lt;p&gt;
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <choice>
+               <element ref="navigatorContent" minOccurs="0" maxOccurs="unbounded"/>
+               <element ref="actionProvider" minOccurs="0" maxOccurs="unbounded"/>
+               <element ref="commonWizard" minOccurs="0" maxOccurs="unbounded"/>
+               <element ref="commonFilter" minOccurs="0" maxOccurs="unbounded"/>
+            </choice>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="navigatorContent">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+         <documentation>
+            A navigator content extension defines a content provider and label provider that can be used to provide children whenever an element matches the &lt;b&gt;triggerPoints&lt;/b&gt; expression and also to provide a parent whenever an element matches the &lt;b&gt;possibleChildren&lt;/b&gt; expression. 
+&lt;br&gt;&lt;br&gt;
+Optionally, clients may also provide an action provider which can provide menu contributions and action bar contributions when an element is selected that the extension contributed, or that matches the &lt;b&gt;triggerPoints&lt;/b&gt; expression. Clients may also choose to contribute a sorter to sort elements that are contributed by the extension.
+&lt;br&gt;&lt;br&gt;
+When an extension is deactivated by the user, the content and label providers are disposed. However, because many of the Image resources might be in use by other extensions in the Common Navigator Viewer, clients should not dispose of Image Resources until the viewer itself is disposed.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <choice minOccurs="0" maxOccurs="1">
+               <element ref="enablement"/>
+               <sequence>
+                  <element ref="triggerPoints"/>
+                  <element ref="possibleChildren"/>
+               </sequence>
+            </choice>
+            <element ref="actionProvider" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="commonSorter" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="override" minOccurs="0" maxOccurs="1"/>
+            <element ref="dropAssistant" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="commonWizard" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="initialActivation" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A unique ID to identify this extension. Used for extension activation and by other extensions that would like to extend the defined extension (e.g. add another &lt;code&gt;org.eclipse.ui.navigator.CommonActionProvider&lt;/code&gt;)
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Specify a display name for the Content Extension. The display name is used in the activation dialog to allow clients to turn an extension on or off.
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="priority">
+            <annotation>
+               <documentation>
+                  Indicates the relative priority of this extension to other extensions. Used by the Common Navigator to handle sorting and organization of the contributed content from this extension in relation to content from other extensions. Defaults to &quot;normal&quot;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="lowest">
+                  </enumeration>
+                  <enumeration value="lower">
+                  </enumeration>
+                  <enumeration value="low">
+                  </enumeration>
+                  <enumeration value="normal">
+                  </enumeration>
+                  <enumeration value="high">
+                  </enumeration>
+                  <enumeration value="higher">
+                  </enumeration>
+                  <enumeration value="highest">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+         <attribute name="appearsBefore" type="string">
+            <annotation>
+               <documentation>
+                  Specifies the ID of the navigator content that this navigator content appears before.  This navigator content will be processed before the specified navigator content is processed.
+&lt;br&gt;&lt;br&gt;
+The overall order in which the navigator content extensions are processed is calculated by first sorting all of the NCEs by priority, and then rearranging them according to the &lt;b&gt;appearsBefore&lt;/b&gt; relationship. Once the overall order is determined, a unique sequence number is assigned to each navigator content descriptior which is available through the API.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.ui.navigator.navigatorContent/navigatorContent/@id"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="contentProvider" type="string">
+            <annotation>
+               <documentation>
+                  Supplies the name of a class which implements &lt;code&gt;org.eclipse.jface.viewers.ITreeContentProvider&lt;/code&gt; or &lt;code&gt;org.eclipse.ui.navigator.ICommonContentProvider&lt;/code&gt;.
+&lt;br&gt;&lt;br&gt;
+The content provider will be consulted when adding children to the tree. Use the &lt;b&gt;enablement&lt;/b&gt;,  &lt;b&gt;triggerPoints&lt;/b&gt;, or &lt;b&gt;possibleChildren&lt;/b&gt; clauses to indicate what kinds of content should trigger a request to your content provider.
+&lt;br&gt;&lt;br&gt; 
+Elements contributed from the content provider are not guaranteed to appear in the tree in the same order. Clients should take advantage of the sorting extension (&lt;b&gt;commonSorter&lt;/b&gt;) to ensure proper ordering of their elements.
+&lt;br&gt;&lt;br&gt;
+All elements contributed by this content provider
+are associated with this navigatorContent extension for the purposes of determining the label provider, action providers, sorters, drop assistants and common wizards.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.ITreeContentProvider"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="labelProvider" type="string">
+            <annotation>
+               <documentation>
+                  Supplies the name of a class which implements &lt;code&gt;org.eclipse.jface.viewers.ILabelProvider&lt;/code&gt; or for more advanced functionality, the &lt;code&gt;org.eclipse.ui.navigator.ICommonLabelProvider&lt;/code&gt;.
+&lt;br&gt;&lt;br&gt;
+Clients may also implement &lt;code&gt;org.eclipse.ui.navigator.IDescriptionProvider&lt;/code&gt; in order to add text to the status bar at the bottom of the Eclipse workbench based on the selection in the viewer.
+&lt;br&gt;&lt;br&gt;
+Since 3.4, clients may also implement &lt;code&gt;org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider&lt;/code&gt; to provide styled text labels. Note that the empty styled string signals that the label provider does not wish to render the label.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.ILabelProvider"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="icon" type="string">
+            <annotation>
+               <documentation>
+                  A plugin-relative path to an icon for use when displaying the metadata about the content extension to the user.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="resource"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="activeByDefault" type="boolean">
+            <annotation>
+               <documentation>
+                  Indicates whether the current extension will be &lt;i&gt;active&lt;/i&gt; by default. Each content extension may be turned on or off by the user. The &lt;i&gt;active&lt;/i&gt; state is differentiated from the &lt;i&gt;visible&lt;/i&gt; state. See &lt;b&gt;org.eclipse.ui.navigator.viewer/viewerContentBinding&lt;/b&gt; for more information on &lt;i&gt;visibility&lt;/i&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="providesSaveables" type="boolean">
+            <annotation>
+               <documentation>
+                  Indicates whether this extension provides saveables. The default is false. If set to true, the content provider must adapt to SaveablesProvider.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="sortOnly" type="boolean">
+            <annotation>
+               <documentation>
+                  Used when this navigtorContent extension is used only to specifiy &lt;b&gt;commonSorter&lt;/b&gt; elements for the purpose of specifying sorting independent of which NCE contributed an object. If this is true the only children of this element can be &lt;b&gt;commonSorter&lt;/b&gt; elements.
+&lt;br&gt;&lt;br&gt;
+The rules associated with the &lt;b&gt;priority&lt;/b&gt; and &lt;b&gt;appearsBefore&lt;/b&gt; are respected. When calculating the sort for a given object, the first NCE that satisfies the &lt;b&gt;commonSorter&lt;/b&gt;&apos;s &lt;b&gt;parentExpression&lt;/b&gt; will do the calculation.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="enablement">
+      <annotation>
+         <documentation>
+            The enablement expression allows clients to specify the same expression for both &lt;b&gt;triggerPoints&lt;/b&gt; and &lt;b&gt;possibleChildren&lt;/b&gt;.
+&lt;br&gt;&lt;br&gt;
+In the case of &lt;b&gt;actionProvider&lt;/b&gt;, clients must define an expression that will indicate to the framework when their &lt;code&gt;org.eclipse.ui.navigator.CommonActionProvider&lt;/code&gt; should be invoked. Because of contributions to the IActionBars, clients must be invoked whenever an object they are interested in is selected. Therefore, clients should use discretion in deciding when their extension should be enabled.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="triggerPoints">
+      <annotation>
+         <documentation>
+            The &lt;b&gt;triggerPoints&lt;/b&gt; expression defines the nodes to be used when resolving the Common Navigator  content provider&apos;s getElements() or getChildren().  This is also used to select the extension for providing labels, images, descriptions and for sorting.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="possibleChildren">
+      <annotation>
+         <documentation>
+            The &lt;b&gt;possibleChildren&lt;/b&gt; expression defines the node to be used when resolving the Common Navigator content provider&apos;s getParent().  It is also used to help determine the parent when handling drop operations.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="actionProvider">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="class"/>
+         </appInfo>
+         <documentation>
+            Supplies the name of a class that implements &lt;code&gt;org.eclipse.ui.navigator.CommonActionProvider&lt;/code&gt;. The action provider has an opportunity to contribute to the context menu and the retargetable actions defined in the IActionBars for the view that holds the navigator. Clients may also contribute directly to the view menu through the IActionBars view menu.
+&lt;br&gt;&lt;br&gt;
+A top level &lt;b&gt;actionProvider&lt;/b&gt; is &lt;i&gt;visible&lt;/i&gt; to an abstract viewer if there is a &lt;b&gt;viewerActionBinding&lt;/b&gt; for that &lt;b&gt;actionProvider&lt;/b&gt;. For actionProviders that are nested under a &lt;b&gt;navigatorContent&lt;/b&gt; element, the visibility will be controlled by the id of the navigatorContent extension id. Child action providers will automatically
+be picked up by matching &lt;b&gt;viewerContentBinding&lt;/b&gt;s. See &lt;b&gt;org.eclipse.ui.navigator.viewer&lt;/b&gt; for more information on visibility bindings.
+&lt;br&gt;&lt;br&gt;
+Clients may provide &lt;b&gt;actionProvider&lt;/b&gt;(s) under the root &lt;b&gt;extension&lt;/b&gt; element (peer to other &lt;b&gt;navigatorContent&lt;/b&gt;) in order to better control their enablement and viewer binding (see &lt;b&gt;veiwerActionBinding&lt;/b&gt;).
+&lt;br&gt;&lt;br&gt;
+For root &lt;b&gt;actionProviders&lt;/b&gt; with no id, the id defaults to &quot;org.eclipse.ui.navigator.actionProvider.X&quot;. For these &lt;b&gt;actionProvider&lt;/b&gt;s to be given the opportunity to contribute the menus or action bars of a viewer, a &lt;b&gt;viewerActionBinding&lt;/b&gt; must be defined (as part of the &lt;b&gt;org.eclipse.ui.navigator.viewer extension point&lt;/b&gt;) which declares a binding between the specific viewer and the default id (&quot;org.eclipse.ui.navigator.actionProvider.*&quot;). See the documentation for &lt;b&gt;viewerActionBinding&lt;/b&gt; under the schema documentation of &lt;b&gt;org.eclipse.ui.navigator.viewer&lt;/b&gt; for more information.
+&lt;br&gt;&lt;br&gt;
+Any items contributed to the toolbar or the view menu should be removed when the &lt;b&gt;actionProviders&lt;/b&gt; is disposed.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.navigator.CommonActionProvider"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  Clients may optionally define an id to use for filtering purposes (either through activities or &lt;b&gt;viewerContentBinding&lt;/b&gt;s).
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="dependsOn" type="string">
+            <annotation>
+               <documentation>
+                  Specifies the ID of an action provider that configures some menu or submenu that must be prepared before this action provider is applied. 
+&lt;br&gt;&lt;br&gt;
+Specifying a dependency on another action provider does not guarantee that this action provider will be invoked whereever the required action provider is invoked. The downstream action provider must be bound to the particular viewer to be invoked.  
+&lt;br&gt;&lt;br&gt;
+If the required action provider is disabled or unbound to the current viewer, then this action provider will not be applied. If a cycle exists, the framework will try to continue, but there are no guarantees as to what menu items or action bar contributions will be available.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="overrides" type="string">
+            <annotation>
+               <documentation>
+                  Specify the id of an &lt;b&gt;actionProvider&lt;/b&gt; which is defined by an upstream contributor that must be overridden. The upstream &lt;b&gt;actionProvider&lt;/b&gt; will not be given an opportunity to contribute menu options or retargetable actions when this &lt;b&gt;actionProvider&lt;/b&gt; is &lt;i&gt;visible&lt;/i&gt; and &lt;i&gt;enabled&lt;/i&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="priority">
+            <annotation>
+               <documentation>
+                  Indicates the relative priority of this extension to other extensions. Used by the Common Navigator to handle sorting and organization of the contributed content from this extension in relation to content from other extensions. Defaults to &quot;normal&quot;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="lowest">
+                  </enumeration>
+                  <enumeration value="lower">
+                  </enumeration>
+                  <enumeration value="low">
+                  </enumeration>
+                  <enumeration value="normal">
+                  </enumeration>
+                  <enumeration value="high">
+                  </enumeration>
+                  <enumeration value="higher">
+                  </enumeration>
+                  <enumeration value="highest">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+         <attribute name="appearsBefore" type="string">
+            <annotation>
+               <documentation>
+                  Specifies the ID of the action provider that this action provider appears before.  This action provider will be processed (menus filled, etc) before the specified action provider is processed.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.ui.navigator.navigatorContent/actionProvider/@id"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="commonWizard">
+      <annotation>
+         <documentation>
+            Defines a binding between an existing Eclipse New/Import/Export Wizard and a given set of items. Each valid binding determines which menu items will appear in the submenus for New/Import/Export in the context menu of a Common Navigator Viewer. Since Eclipse 3.2.1, the wizard menu items respect Eclipse Capabilities (see &lt;b&gt;org.eclipse.ui.activites&lt;/b&gt; for more information). 
+&lt;br&gt;&lt;br&gt;
+All of the following conditions must be met for a &lt;b&gt;commonWizard&lt;/b&gt; item to appear in the menu: (1) The &lt;b&gt;commonWizard&lt;/b&gt; is NOT filtered by an Eclipse Capability, (2) The identifier of the &lt;b&gt;commonWizard&lt;/b&gt; is NOT null, (3) The associated &lt;b&gt;navigatorContent&lt;/b&gt; extension is &lt;i&gt;visible&lt;/i&gt; for the current content service (the content service used to initialize the &lt;code&gt;NavigatorActionService&lt;/code&gt; or supplied to &lt;code&gt;WizardActionGroup&lt;/code&gt;), (4) The associated &lt;b&gt;navigatorContent&lt;/b&gt; extension is &lt;i&gt;active&lt;/i&gt; for the current content service, and (5) The &lt;b&gt;enablement&lt;/b&gt; of the &lt;b&gt;commonWizard&lt;/b&gt; returns true for the current selection that was supplied to the context menu.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="enablement"/>
+         </sequence>
+         <attribute name="type" use="required">
+            <annotation>
+               <documentation>
+                  The type atttribute should be the value of the root category of the expected wizard. The possible values include &quot;import&quot; for &lt;b&gt;org.eclipse.ui.importWizards&lt;/b&gt;, &quot;export&quot; &lt;b&gt;org.eclipse.ui.exportWizards&lt;/b&gt;, and &quot;new&quot; for &lt;b&gt;org.eclipse.ui.newWizards&lt;/b&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="import">
+                  </enumeration>
+                  <enumeration value="export">
+                  </enumeration>
+                  <enumeration value="new">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+         <attribute name="wizardId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the desired wizard shortcut as defined by &lt;b&gt;org.eclipse.ui.importWizards&lt;/b&gt;, &lt;b&gt;org.eclipse.ui.exportWizards&lt;/b&gt;, or &lt;b&gt;org.eclipse.ui.newWizards&lt;/b&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="menuGroupId" type="string">
+            <annotation>
+               <documentation>
+                  Indicates a user-defined logical grouping id. &lt;b&gt;commonWizard&lt;/b&gt; extensions with matching &lt;i&gt;menuGroupId&lt;/i&gt;s will be indicated as related items when rendered as menu options to endusers. How the grouping will be done is not guaranteed. In particular, clients should never anticipate a menu separator or group marker of the given name to be present in the menu.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="associatedExtensionId" type="string">
+            <annotation>
+               <documentation>
+                  A &lt;b&gt;commonWizard&lt;/b&gt; may be defined as the nested child of a &lt;b&gt;navigatorContent&lt;/b&gt; extension point, in which case the &lt;i&gt;associatedExtensionId&lt;/i&gt; is automatically set to the id of its enclosing &lt;b&gt;naviagatorContent&lt;/b&gt; element. However, when specified as a top-level extension, a &lt;b&gt;commonWizard&lt;/b&gt; may indicate an content extension that it should be associated with explicitly. When a &lt;b&gt;commonWizard&lt;/b&gt; is associated with a content extension, it will inherit the &lt;i&gt;visibility&lt;/i&gt; and the &lt;i&gt;activation&lt;/i&gt; of that content extension. It will not inherit the &lt;i&gt;enablement&lt;/i&gt;; so you must specify an &lt;b&gt;enablement&lt;/b&gt; for the wizard menu item to appear.
+&lt;br&gt;&lt;br&gt;
+That is, if the content extension is bound to a Common Navigator (see &lt;b&gt;org.eclipse.ui.navigator.viewer/viewerContentBinding&lt;/b&gt;) and the user has the content extension &lt;i&gt;activated&lt;/i&gt; either by default or through the &quot;Available Extensions&quot; dialog, then the &lt;b&gt;commonWizard&lt;/b&gt; menu option would appear. However, when the user &lt;i&gt;deactivates&lt;/i&gt; that content extension, the &lt;b&gt;commonWizard&lt;/b&gt; menu option would no longer be shown in the menu.
+&lt;br&gt;&lt;br&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="commonFilter">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+         <documentation>
+            Defines a filter that can big associated with a particular Common Viewer. Common filters are bound to a viewer like content extensions by using &lt;b&gt;org.eclipse.ui.navigator.viewer/viewerContentBinding&lt;/b&gt;.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="filterExpression" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A unique identifier that will be used for management of this &lt;b&gt;filterExpression&lt;/b&gt;. The id will be used by the &lt;b&gt;org.eclipse.ui.navigator.viewer/viewerContentBinding&lt;/b&gt; to bind this filter to a matching viewer.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A translateable name that will be used to refer to this particular filter in dialogs presented to the user.
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  A translatable description of what this filter is designed to hide from the view.
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  Clients may choose to define an explicit ViewerFilter subclass via the &quot;class&quot; attribute. Alternatively, clients may choose to nest a &lt;b&gt;filterExpression&lt;/b&gt; element to describe what the filter should hide. Clients may use either &lt;b&gt;filterExpression&lt;/b&gt; or the &quot;class&quot; attribute, but not both.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.ViewerFilter"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="activeByDefault" type="boolean">
+            <annotation>
+               <documentation>
+                  A value of true indicates the filter should be &quot;on&quot; by default. The user may customize whether the filter is on or off regardless of the value of this attribute. This attribute defines whether the filter is &quot;on&quot; the first time the view is brought up.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="visibleInUI" type="boolean">
+            <annotation>
+               <documentation>
+                  True if the filter is to be shown in the Common Navigator UI to allow a client to disable or enable it.  False if it is hidden from the UI. By default this is true.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="filterExpression">
+      <annotation>
+         <documentation>
+            An optional Eclipse Core Expression that defines what the filter should hide from a particular view. 
+&lt;br&gt;&lt;br&gt;
+For instance, clients may decide to hide all resources that have a particular pattern in their name (like &quot;*.acme&quot;). When the filter is active (turned on by default or by the user), then all resources that end in &quot;acme&quot; would be hidden from the view of the user. 
+&lt;br&gt;&lt;br&gt;
+Clients may use either &lt;b&gt;filterExpression&lt;/b&gt; or the &quot;class&quot; attribute, but not both.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="commonSorter">
+      <annotation>
+         <documentation>
+            A &lt;b&gt;commonSorter&lt;/b&gt; declares an subclass of &lt;code&gt;org.eclipse.jface.viewers.ViewerSorter&lt;/code&gt; which is used to sort children in the tree. The nested &lt;b&gt;parentExpression&lt;/b&gt; describes when the &lt;b&gt;commonSorter&lt;/b&gt; should be used. If an element matches the &lt;b&gt;parentExpression&lt;/b&gt;, then its children will be sorted by this &lt;b&gt;commonSorter&lt;/b&gt;.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="parentExpression" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  The id is used to identify the sorter when debugging a viewer.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A subclass of &lt;code&gt;org.eclipse.jface.viewers.ViewerSorter&lt;/code&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jface.viewers.ViewerSorter:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="parentExpression">
+      <annotation>
+         <documentation>
+            A &lt;b&gt;parentExpression&lt;/b&gt; is used by &lt;b&gt;commonSorter&lt;/b&gt; to identify when it is applicable. If the &lt;b&gt;parentExpression&lt;/b&gt; for a &lt;b&gt;commonSorter&lt;/b&gt; matches a given element, then that &lt;b&gt;commonSorter&lt;/b&gt; will be used to sort the children of that element (as returned by the content provider of the content service).
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="override">
+      <annotation>
+         <documentation>
+            When the &lt;b&gt;triggerPoints&lt;/b&gt; expression of the suppressed extension and the declared extension are both &lt;i&gt;enabled&lt;/i&gt; on a given element, this extension will be invoked after its supressed extension.  The suppressed extension will contribute the original content and this extension can modify that content using the pipeline mechanism by implementing &lt;code&gt;org.eclipse.ui.navigator.IPipelinedTreeContentProvider&lt;/code&gt;.  
+&lt;br&gt;&lt;br&gt;
+When you specify an &lt;b&gt;override&lt;/b&gt; element with a content provider which implements &lt;code&gt;org.eclipse.ui.navigator.IPipelinedTreeContentProvider&lt;/code&gt;, you can intercept requests for children, parents, and direct updates to the viewer.
+&lt;br&gt;&lt;br&gt;
+If the content provider in the &lt;b&gt;override&lt;/b&gt; element does not implement &lt;code&gt;org.eclipse.ui.navigator.IPipelinedTreeContentProvider&lt;/code&gt;, this extension will be considered to provide label/description information for content contributed by one of the overridden extensions.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="suppressedExtensionId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of an extension should be suppressed when this extension is &lt;i&gt;visible&lt;/i&gt; and &lt;i&gt;active&lt;/i&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="policy" use="default" value="InvokeAlwaysRegardlessOfSuppressedExt">
+            <annotation>
+               <documentation>
+                  The policy declares how the extension should be invoked by the framework. If the policy is left unspecified, then it defaults to &lt;i&gt;InvokeAlwaysRegardlessOfSuppressedExt&lt;/i&gt;. The available policies are as follows:&lt;br&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;i&gt;InvokeOnlyIfSuppressedExtAlsoVisibleAndActive&lt;/i&gt;: This extension is expressly an overriding extension; unless its suppressed extension is &lt;i&gt;visible&lt;/i&gt; and &lt;i&gt;active&lt;/i&gt; to the viewer, this extension should not be given opportunities to contribute. When using this policy, this extension will only be invoked when the &lt;b&gt;triggerPoints&lt;/b&gt; expression of its suppressed extension and the &lt;b&gt;triggerPoints&lt;/b&gt; expression of this extension are &lt;i&gt;enabled&lt;/i&gt; for a given element. Therefore, the &lt;b&gt;triggerPoints&lt;/b&gt; and &lt;b&gt;possibleChildren&lt;/b&gt; expressions of this extension should be a subset of the &lt;b&gt;triggerPoints&lt;/b&gt; and &lt;b&gt;possibleChildren&lt;/b&gt; expressions respectively of its suppressed extension.&lt;/li&gt;
+  &lt;li&gt;&lt;i&gt;InvokeAlwaysRegardlessOfSuppressedExt&lt;/i&gt; (default): Indicates that this extension is a first class extension; it should be given opportunities to contribute content regardless if its &lt;i&gt;suppressedExtensionId&lt;/i&gt; is &lt;i&gt;visible&lt;/i&gt; or &lt;i&gt;active&lt;/i&gt; to the viewer. Thus, the extension is a first-class extension and an overriding extension. It will be invoked whenever its &lt;b&gt;triggerPoints&lt;/b&gt; expression is matched. When the suppressed extension and its &lt;b&gt;triggerPoints&lt;/b&gt; extension is matched, it will be invoked with the contributed items from its suppressed extension; the suppressed extension will not be given an opportunity to directly contribute.&lt;/li&gt;
+&lt;/ul&gt;
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="InvokeOnlyIfSuppressedExtAlsoVisibleAndActive">
+                  </enumeration>
+                  <enumeration value="InvokeAlwaysRegardlessOfSuppressedExt">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dropAssistant">
+      <annotation>
+         <documentation>
+            Provides a subclass of &lt;code&gt;org.eclipse.ui.navigator.CommonDropAdapterAssistant&lt;/code&gt; which can provide programatic validation for a drop operation, request additional transfer types, and handle the drop operation. 
+&lt;br&gt;&lt;br&gt;
+A &lt;b&gt;dropAssistant&lt;/b&gt; will be invoked whenever elements that are dragged match the &lt;b&gt;possibleChildren&lt;/b&gt; expression of the containing &lt;b&gt;navigatorContent&lt;/b&gt; extension &lt;i&gt;and&lt;/i&gt; the drop target of the operation is described by the &lt;b&gt;possibleDropTargets&lt;/b&gt; expression of the &lt;b&gt;dropAssistant&lt;/b&gt; element.
+&lt;br&gt;&lt;br&gt;
+An extension may have multiple drop adapters with mutually exclusive &lt;b&gt;possibleDropTargets&lt;/b&gt; expressions. The first drop adapter found that matches the given drop target and returns an OK status for &lt;code&gt;CommonDropAdapterAssistant.validateDrop(...)&lt;/code&gt; will be given an opportunity to handle the drop. 
+&lt;br&gt;&lt;br&gt;
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="possibleDropTargets"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id is used to refer to the drop assistant internally. The id should be unique.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  An implementation of &lt;code&gt;org.eclipse.ui.navigator.CommonDropAdapterAssistant&lt;/code&gt;
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.navigator.CommonDropAdapterAssistant"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="possibleDropTargets">
+      <annotation>
+         <documentation>
+            Describe the possible drop targets that a particular &lt;b&gt;dropAssistant&lt;/b&gt; can handle.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="initialActivation">
+      <annotation>
+         <documentation>
+            A core expression which is checked with the navigator starts to determine of this navigator content extension is to be activated. Only meaningful if &lt;b&gt;activeByDefault&lt;/b&gt; is set to false.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="not"/>
+            <element ref="and"/>
+            <element ref="or"/>
+            <element ref="instanceof"/>
+            <element ref="test"/>
+            <element ref="systemTest"/>
+            <element ref="equals"/>
+            <element ref="count"/>
+            <element ref="with"/>
+            <element ref="resolve"/>
+            <element ref="adapt"/>
+            <element ref="iterate"/>
+            <element ref="reference"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.2
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;br&gt;
+&lt;h2&gt;Adding content&lt;/h2&gt;
+&lt;p&gt;
+The following example describes a content extension that 
+provides resource content. The &lt;b&gt;triggerPoints&lt;/b&gt; expression
+determines when this extension is initially invoked. If 
+a &lt;b&gt;viewerContentBinding&lt;/b&gt; matches this extension with
+the &quot;isRoot&quot; attribute set to true, then the extension
+will be used, regardless of whether the root element
+matches the &lt;b&gt;triggerPoints&lt;/b&gt; expression.   
+&lt;p&gt;
+&lt;pre&gt;
+&lt;extension  
+  point=&quot;org.eclipse.ui.navigator.navigatorContent&quot;&gt;
+ &lt;navigatorContent
+            name=&quot;%resource.extension.name&quot;
+            priority=&quot;low&quot;
+            icon=&quot;icons/full/eview16/resource_persp.gif&quot;
+            activeByDefault=&quot;true&quot;
+               contentProvider=&quot;org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionContentProvider&quot;
+               labelProvider=&quot;org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionLabelProvider&quot;   
+               sorter=&quot;org.eclipse.ui.navigator.resources.internal.workbench.ResourceSorter&quot;
+            id=&quot;org.eclipse.ui.navigator.resourceContent&quot;&gt;         
+  &lt;triggerPoints&gt;
+           &lt;or&gt;         
+              &lt;instanceof 
+                    value=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+              &lt;instanceof
+                    value=&quot;org.eclipse.core.resources.IProject&quot; /&gt;  
+              &lt;instanceof  
+                     value=&quot;org.eclipse.core.resources.IFolder&quot; /&gt; 
+           &lt;/or&gt;
+  &lt;/triggerPoints&gt;
+        &lt;possibleChildren&gt;
+           &lt;or&gt;         
+              &lt;instanceof 
+                    value=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+              &lt;instanceof
+                    value=&quot;org.eclipse.core.resources.IProject&quot; /&gt; 
+              &lt;instanceof 
+                     value=&quot;org.eclipse.core.resources.IResource&quot; /&gt; 
+              &lt;instanceof  
+                     value=&quot;org.eclipse.core.resources.IFolder&quot; /&gt;
+              &lt;instanceof 
+                     value=&quot;org.eclipse.core.resources.IFile&quot; /&gt; 
+         &lt;/or&gt;
+     &lt;/possibleChildren&gt;
+ &lt;/navigatorContent&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+
+&lt;h2&gt;Adding Actions&lt;/h2&gt;
+&lt;p&gt;
+Clients may use object or viewer contributions (see &lt;b&gt;org.eclipse.ui.popupMenus&lt;/b&gt;) to provide
+actions for their view. Sometimes, clients require a greater degree of flexibility than either
+of these approaches allow, and therefore the Common Navigator framework supports adding 
+action providers. &quot;Action providers&quot; subclass &lt;code&gt;org.eclipse.ui.actions.ActionGroup&lt;/code&gt;
+and have opportunities to fill the action bars and the menus based on different events 
+(selection and right click respectively).
+&lt;/p&gt;
+&lt;p&gt;
+Clients may either associate one or more action providers with a particular
+content extension, or declare the action providers as top level contributions, unassociated
+with any particular content extension. Top level action provideers must be associated with
+a particular instance of vierwer using the &lt;b&gt;org.eclipse.ui.navigator.viewer/viewerActionBinding&lt;/b&gt;
+extension point. Nested action providers are automatically bound to a viewer based on whether
+their containing content extension is also bound to the viewer 
+(see &lt;b&gt;org.eclipse.ui.navigator/viewerContentBinding&lt;/b&gt;). 
+&lt;p&gt;
+&lt;p&gt;
+The following example demonstrates both approaches. The &quot;TestNestedActionProvider&quot; will be 
+given an opporunity to contribute to the menu and &lt;code&gt;org.eclipse.ui.IActionBars&lt;/code&gt; only
+when the &quot;org.eclipse.ui.tests.navigator.testContent&quot; extension is &lt;i&gt;visible&lt;/i&gt; and &lt;i&gt;active&lt;/i&gt;.
+If the user deactivates the test extension from the &quot;Available customizations&quot; dialog, then the
+nested action provider will no longer be given the opportunity to contribute. 
+&lt;pre&gt;
+&lt;extension  
+  point=&quot;org.eclipse.ui.navigator.navigatorContent&quot;&gt; 
+      &lt;navigatorContent 
+            id=&quot;org.eclipse.ui.tests.navigator.testContent&quot; 
+            name=&quot;%test.navigator.extension&quot;
+            contentProvider=&quot;org.eclipse.ui.tests.navigator.extension.TestContentProvider&quot;
+            labelProvider=&quot;org.eclipse.ui.tests.navigator.extension.TestLabelProvider&quot;
+            activeByDefault=&quot;true&quot;
+            priority=&quot;normal&quot;&gt;
+         &lt;triggerPoints&gt;
+            &lt;instanceof value=&quot;org.eclipse.core.resources.IProject&quot;/&gt;
+         &lt;/triggerPoints&gt; 
+        &lt;actionProvider
+            class=&quot;org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider&quot;
+            id=&quot;org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider&quot;&gt;
+          &lt;enablement&gt;
+             &lt;instanceof value=&quot;org.eclipse.core.resources.IResource&quot;/&gt;
+          &lt;/enablement&gt;
+        &lt;/actionProvider&gt;
+      &lt;/navigatorContent&gt;  
+        &lt;actionProvider
+             class=&quot;org.eclipse.ui.navigator.resources.internal.actions.NewActionProvider&quot;
+             id=&quot;org.eclipse.ui.navigator.resources.NewActions&quot;&gt; 
+         &lt;enablement&gt;
+    &lt;or&gt;
+     &lt;adapt type=&quot;org.eclipse.core.resources.IFile&quot; /&gt; 
+     &lt;adapt type=&quot;org.eclipse.core.resources.IFolder&quot; /&gt;
+            &lt;adapt type=&quot;org.eclipse.core.resources.IProject&quot; /&gt; 
+                 &lt;adapt type=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+    &lt;/or&gt;
+          &lt;/enablement&gt;
+  &lt;/actionProvider&gt;
+&lt;/extension&gt;  
+&lt;/pre&gt;
+&lt;/p&gt;
+
+
+&lt;p&gt;
+Clients may define filters using either subclasses of &lt;code&gt;org.eclipse.jface.viewers.ViewerFilter&lt;/code&gt; 
+or through Eclipse core expressions. The folowing example demonstrates both techniques. Clients may 
+only use of the two options. Extensions that specify both in error will result in only the core
+expression filter being respected. The name and description fields are translateable, and should externalized
+strings in real environments.
+
+&lt;p&gt;
+&lt;pre&gt;
+&lt;extension  
+  point=&quot;org.eclipse.ui.navigator.navigatorContent&quot;&gt;
+ &lt;commonFilter
+      class=&quot;org.eclipse.ui.tests.navigator.extension.TestItemsThatEndIn3&quot;
+            description=&quot;Hide TestItem objects that end in the number &amp;quot;3&amp;quot;&quot;
+            id=&quot;org.eclipse.ui.tests.navigator.filters.TestItemsThatEndWith3&quot;
+            name=&quot;TestItems that end with &amp;quot;3&amp;quot;&quot;
+            activeByDefault=&quot;true&quot;
+            /&gt; 
+ &lt;commonFilter
+            description=&quot;Hides all instances of Test Item&quot;
+            id=&quot;org.eclipse.ui.tests.navigator.filters.AllTestItems&quot;
+            name=&quot;A TestItem Exp Filter (should be sorted alphab..)&quot;&gt;
+         &lt;filterExpression&gt;
+            &lt;instanceof value=&quot;org.eclipse.ui.tests.navigator.extension.TestExtensionTreeData&quot;/&gt;
+         &lt;/filterExpression&gt;
+ &lt;/commonFilter&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+
+&lt;/p&gt;
+
+&lt;p&gt;
+A common sorter is determined for a set of children based on their parent. The sorter class
+must subclass the &lt;code&gt;org.eclipse.jface.viewers.ViewerSorter&lt;/code&gt;. 
+&lt;p&gt;
+&lt;pre&gt;
+
+&lt;extension  
+  point=&quot;org.eclipse.ui.navigator.navigatorContent&quot;&gt;
+ &lt;commonSorter
+      class=&quot;org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionSorter&quot;
+            id=&quot;org.eclipse.ui.navigator.resources.sorters.defaultSorter&quot;&gt;
+  &lt;parentExpression&gt;
+         &lt;or&gt;         
+       &lt;instanceof 
+           value=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+          &lt;instanceof
+           value=&quot;org.eclipse.core.resources.IProject&quot; /&gt; 
+          &lt;instanceof 
+           value=&quot;org.eclipse.core.resources.IResource&quot; /&gt; 
+          &lt;instanceof  
+           value=&quot;org.eclipse.core.resources.IFolder&quot; /&gt;
+          &lt;instanceof 
+           value=&quot;org.eclipse.core.resources.IFile&quot; /&gt; 
+   &lt;/or&gt;
+  &lt;/parentExpression&gt;
+ &lt;/commonSorter&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+
+&lt;p&gt;
+The following example demonstrates how to add wizard shortcut actions for 
+&quot;New Folder&quot; and &quot;New File&quot;, which are enabled on the specific subclasses 
+of org.eclipse.core.resources.IResource. Clients may use whatever parts of 
+the &lt;b&gt;org.eclipse.core.expressions&lt;/b&gt; that are necessary to describe when the 
+menu options should be available. The wizardId specified below must correspond
+to one of the &lt;b&gt;org.eclipse.ui.xxxWizards&lt;/b&gt; extension points.
+&lt;/p&gt;
+&lt;p&gt;
+For clients building their own viewers or
+view parts, be sure to use &lt;code&gt;org.eclipse.ui.navigator.WizardActionGroup&lt;/code&gt;
+to correctly populate the menu. See that class for more documentation on
+using this feature.
+&lt;/p&gt;
+&lt;p&gt;
+&lt;pre&gt;
+
+&lt;extension  
+  point=&quot;org.eclipse.ui.navigator.navigatorContent&quot;&gt;
+ &lt;commonWizard
+      type=&quot;new&quot;
+   wizardId=&quot;org.eclipse.ui.wizards.new.folder&quot;&gt;
+  &lt;enablement&gt;
+   &lt;or&gt;
+    &lt;adapt type=&quot;org.eclipse.core.resources.IFile&quot; /&gt; 
+    &lt;adapt type=&quot;org.eclipse.core.resources.IFolder&quot; /&gt;
+           &lt;adapt type=&quot;org.eclipse.core.resources.IProject&quot; /&gt; 
+             &lt;adapt type=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+   &lt;/or&gt;
+  &lt;/enablement&gt;
+ &lt;/commonWizard&gt;   
+ &lt;commonWizard
+            type=&quot;new&quot;
+            wizardId=&quot;org.eclipse.ui.wizards.new.file&quot;&gt;
+  &lt;enablement&gt;
+   &lt;or&gt;
+    &lt;adapt type=&quot;org.eclipse.core.resources.IFile&quot; /&gt; 
+    &lt;adapt type=&quot;org.eclipse.core.resources.IFolder&quot; /&gt;
+           &lt;adapt type=&quot;org.eclipse.core.resources.IProject&quot; /&gt; 
+             &lt;adapt type=&quot;org.eclipse.core.resources.IWorkspaceRoot&quot; /&gt; 
+   &lt;/or&gt;
+  &lt;/enablement&gt;
+ &lt;/commonWizard&gt;
+&lt;/extension&gt; 
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2002, 2010 IBM Corporation and others.&lt;br&gt;
+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 &lt;a 
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.rap.ui.navigator/schema/viewer.exsd b/bundles/org.eclipse.rap.ui.navigator/schema/viewer.exsd
new file mode 100755
index 0000000..3829063
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/schema/viewer.exsd
@@ -0,0 +1,636 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ui.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.ui.navigator" id="viewer" name="Common Viewer Configuration"/>
+      </appInfo>
+      <documentation>
+         &lt;p&gt;
+The &lt;b&gt;viewer&lt;/b&gt; element defines the configuration for a common viewer. The extension
+may provide a custom popup menu id, override whether the viewer provides link with
+editor support, provides a filter dialog, and/or provides an &quot;Available customizations&quot; 
+dialog. In addition, nested configuration elements give full control over the structure
+and behavior of the popup context menu.
+&lt;p&gt;
+&lt;b&gt;viewerContentBinding&lt;/b&gt; binds defined content extensions (through the &lt;b&gt;navigatorContent&lt;/b&gt; 
+extension point) to viewers. &lt;b&gt;viewerContentBinding&lt;/b&gt; also binds a 
+&lt;b&gt;linkHelper&lt;/b&gt; extension point to a viewer.  
+Any content extension bound to a viewer is described as &lt;i&gt;visible&lt;/i&gt;. A
+content service (&lt;code&gt;org.eclipse.ui.navigator.INavigatorContentService&lt;/code&gt;)
+will not return any extensions which are not visible for
+its viewer id.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="viewerContentBinding" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="viewerActionBinding" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="dragAssistant" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="viewer">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="id"/>
+         </appInfo>
+         <documentation>
+            Provides basic configuration to establish the characteristics of a viewer. Clients must also define an &lt;b&gt;org.eclipse.ui.views&lt;/b&gt; extension to create the view part.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="popupMenu" minOccurs="0" maxOccurs="1"/>
+            <element ref="options" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="viewerId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the common viewer. If the viewer is in a common navigator then the id must match the navigator&apos;s id defined in its &lt;b&gt;org.eclipse.ui.views&lt;/b&gt; extension.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="popupMenuId" type="string">
+            <annotation>
+               <documentation>
+                  The popupMenuId of the defined viewer. If not specified, the popupMenuId defaults to the id of the viewer. Clients may specify only the &quot;popupMenuId&quot; OR a &lt;b&gt;popupMenu&lt;/b&gt; element, but not both. The default list of insertion points is declared in the documentation for the &lt;b&gt;popupMenu&lt;/b&gt; element.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="inheritBindingsFromViewer" type="string">
+            <annotation>
+               <documentation>
+                  Causes all of the action and content bindings from the specified viewer to be used by this viewer.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.ui.navigator.viewer/viewer/@viewerId"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="helpContext" type="string">
+            <annotation>
+               <documentation>
+                  The help context Id to be associated with the Control associated with the viewer.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="viewerContentBinding">
+      <annotation>
+         <documentation>
+            Clients must define one or more &lt;b&gt;viewerContentBinding&lt;/b&gt; elements to describe which content extensions, common filters, and link helpers are &lt;i&gt;visible&lt;/i&gt; to the viewer. A content extension or common filter is &lt;i&gt;visible&lt;/i&gt; if the id of the content extension or common filter matches an &lt;b&gt;includes&lt;/b&gt; statement under a &lt;b&gt;viewerContentBinding&lt;/b&gt; and is not excluded by an &lt;b&gt;excludes&lt;/b&gt; statement. If a content extension or common filter is not &lt;i&gt;visible&lt;/i&gt; to a viewer, then the extension will never be asked for content by a content service for that viewer or be presented to the user in the available filters dialog. 
+&lt;br&gt;&lt;br&gt;
+Clients may define an &lt;b&gt;includes&lt;/b&gt; element to select which extensions are &lt;i&gt;visible&lt;/i&gt; to the viewer, and similarly an &lt;b&gt;excludes&lt;/b&gt; element for extensions that should not be made &lt;i&gt;visible&lt;/i&gt; to the viewer. Clients may further define the extensions that should be explicitly queried for root elements (through  ITreeContentProvider.getElements()) by the &quot;isRoot&quot; attribute. If one or more &lt;b&gt;contentExtension&lt;/b&gt; elements have &quot;isRoot&quot; set to true within the &lt;b&gt;includes&lt;/b&gt; statement, only those extensions will be queried for root elements. The &quot;isRoot&quot; attribute has no effect for exclusions.
+&lt;br&gt;&lt;br&gt;
+A viewer may have multiple viewerContentBindings defined, and their includes/excludes statements will be aggregated to produce the final behavior.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="includes" minOccurs="0" maxOccurs="1"/>
+            <element ref="excludes" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="viewerId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the common viewer. If the viewer is in a common navigator then the id must match the navigator&apos;s id defined in its &lt;b&gt;org.eclipse.ui.views&lt;/b&gt; extension.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="viewerActionBinding">
+      <annotation>
+         <documentation>
+            Clients must define which action providers are visible to their viewer. Clients may define an &lt;b&gt;includes&lt;/b&gt; element to select which extensions are visible to the viewer, and  similarly an &lt;b&gt;excludes&lt;/b&gt; element for extensions that should not be made visible to the viewer. 
+&lt;br&gt;&lt;br&gt;
+A viewer may have multiple &lt;b&gt;viewerActionBinding&lt;/b&gt;s defined, and their &lt;b&gt;includes&lt;/b&gt;/&lt;b&gt;excludes&lt;/b&gt; statements will be aggregated to produce the final behavior.
+&lt;br&gt;&lt;br&gt;
+For &lt;b&gt;actionProvider&lt;/b&gt; definitions which are not nested under a &lt;b&gt;navigatorContent&lt;/b&gt; definition, clients may specify a custom id. If clients do not specify an id, the id defaults to &quot;org.eclipse.ui.navigator.actionProvider.X&quot;. For clients that wish to pick up &lt;b&gt;actionProvider&lt;/b&gt;s with no specific id, clients must define a &lt;b&gt;viewerActionBinding&lt;/b&gt; for the default id. See the examples section for how this is done.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="includes" minOccurs="0" maxOccurs="1"/>
+            <element ref="excludes" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="viewerId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The id of the common viewer. If the viewer is in a common navigator then the id must match the navigator&apos;s id defined in its &lt;b&gt;org.eclipse.ui.views&lt;/b&gt; extension.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="includes">
+      <annotation>
+         <documentation>
+            Define a set of regular expressions that should be included when looking for content extensions for the viewer that matches the &quot;viewerId&quot; attribute. When the includes and excludes statements intersect, the excludes statement will be given precedence.
+
+&lt;p&gt;
+Note: these are regular expressions and not wildcards.  So if you want to include something like &lt;code&gt;com.mycompany.content*&lt;/code&gt;, the expression would be &lt;code&gt;com\.mycompany\.content.*&lt;/code&gt;.
+         </documentation>
+      </annotation>
+      <complexType>
+         <choice>
+            <sequence>
+               <element ref="contentExtension" minOccurs="1" maxOccurs="unbounded"/>
+            </sequence>
+            <sequence>
+               <element ref="actionExtension" minOccurs="1" maxOccurs="unbounded"/>
+            </sequence>
+         </choice>
+      </complexType>
+   </element>
+
+   <element name="excludes">
+      <annotation>
+         <documentation>
+            Define a set of regular expressions that should be excluded when looking for content extensions for the viewer that matches the &quot;viewerId&quot; attribute. When the includes and excludes statements intersect, the excludes statement will be given precedence.
+            To be meaningful this will be a subset of the includes pattern.
+            
+&lt;p&gt;
+Note: these are regular expressions and not wildcards.  So if you want to include something like &lt;code&gt;com.mycompany.content*&lt;/code&gt;, the expression would be &lt;code&gt;com\.mycompany\.content.*&lt;/code&gt;.
+         </documentation>
+      </annotation>
+      <complexType>
+         <choice>
+            <sequence>
+               <element ref="contentExtension" minOccurs="1" maxOccurs="unbounded"/>
+            </sequence>
+            <sequence>
+               <element ref="actionExtension" minOccurs="1" maxOccurs="unbounded"/>
+            </sequence>
+         </choice>
+      </complexType>
+   </element>
+
+   <element name="contentExtension">
+      <annotation>
+         <documentation>
+            Indicates the id (or matching pattern) of a content extension that should be queried by &lt;code&gt;ITreeContentProvider.getElements()&lt;/code&gt; or &lt;code&gt;ITreeContentProvider.getChildren()&lt;/code&gt;
+for the root of the viewer or a common filter that should be available to the user in the &quot;Available Filters&quot; dialog.
+&lt;br&gt;&lt;br&gt;
+Clients may specify &quot;isRoot&quot; to select specific root extensions to override 
+the extensions which would otherwise be enabled for the viewer input element
+(based on the matching &lt;b&gt;triggerPoints&lt;/b&gt; expression for the viewer input element). 
+&lt;br&gt;&lt;br&gt;
+See the documentation for &lt;b&gt;viewerContentBinding&lt;/b&gt; for more information.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="pattern" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Content extensions may be selected exactly by using their content extension id. Clients may also use a regular expression pattern to select any content extensions that have ids that match the pattern. 
+&lt;p&gt;
+Patterns are regular expressions which match unique identifiers. Please see the Java(tm) Platform documentation for &lt;code&gt;java.util.regex.Pattern&lt;/code&gt; for further details.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="isRoot" type="boolean">
+            <annotation>
+               <documentation>
+                  A value of true indicates the content extension will provide root content, and override the default &lt;b&gt;triggerPoints&lt;/b&gt; expressions defined in the bound content extensions for a given viewer.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="actionExtension">
+      <annotation>
+         <documentation>
+            Indicates that the action extension that should be given opportunities
+to contribute to the context menu and action bars. 
+&lt;br&gt;&lt;br&gt;          
+See the documentation for &lt;b&gt;viewerActionBinding&lt;/b&gt; for more information.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="pattern" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Content extensions may be selected exactly by using their content extension id. Clients may also use a regular expression pattern to select any content extensions that have ids that match the pattern. 
+&lt;p&gt;
+Patterns are regular expressions which match unique identifiers. Please see the Java(tm) Platform documentation for &lt;code&gt;java.util.regex.Pattern&lt;/code&gt; for further details.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="popupMenu">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="id"/>
+         </appInfo>
+         <documentation>
+            A popupMenu element may only be defined if the &quot;popupMenuId&quot; attribute of the 
+&lt;b&gt;viewer&lt;/b&gt; element is not specified. 
+&lt;br&gt;&lt;br&gt;
+The &lt;b&gt;popupMenu&lt;/b&gt; element allows further customization of the context menu associated 
+with the viewer. For the options to be applied correctly, an instance of the viewer
+must delegate to a &lt;code&gt;org.eclipse.ui.navigator.NavigatorActionService&lt;/code&gt;, which behaves
+like a normal &lt;code&gt;org.eclipse.ui.ActionGroup&lt;/code&gt;. See the documentation for this API class
+for more information on exploiting this functionality. For clients that use an 
+instance of &lt;code&gt;org.eclipse.ui.navigator.CommonNavigator&lt;/code&gt; do not need to do any extra work. 
+&lt;br&gt;&lt;br&gt;
+A &lt;b&gt;popupMenu&lt;/b&gt; declares one or more &lt;b&gt;insertionPoints&lt;/b&gt; that will be used by contributors to 
+organize their contributions into a meaningful, more user-friendly, consistent list. 
+&lt;br&gt;
+If clients only specify the &quot;popupMenuId&quot; attribute of the &lt;b&gt;viewer&lt;/b&gt; element, then the
+set of &lt;b&gt;insertionPoints&lt;/b&gt; used by the context menu will default to the following list 
+in the given order:
+&lt;br&gt;
+&lt;pre&gt;
+&quot;group.new&quot;             separator=&quot;true&quot;
+&quot;group.goto&quot;            
+&quot;group.open&quot;            separator=&quot;true&quot;
+&quot;group.openWith&quot;
+&quot;group.show&quot;            separator=&quot;true&quot;
+&quot;group.edit&quot;            separator=&quot;true&quot;
+&quot;group.reorganize&quot;
+&quot;group.port&quot;
+&quot;group.generate&quot;        separator=&quot;true&quot;
+&quot;group.search&quot;          separator=&quot;true&quot;
+&quot;group.build&quot;           separator=&quot;true&quot;
+&quot;additions&quot;             separator=&quot;true&quot; 
+&quot;group.properties&quot;      separator=&quot;true&quot;
+&lt;/pre&gt;
+&lt;br&gt;&lt;br&gt;
+Clients that wish to refer to these values programmatically may use the corresponding constants in &lt;code&gt;org.eclipse.ui.navigator.ICommonMenuConstants&lt;/code&gt;. 
+&lt;br&gt;&lt;br&gt;
+Clients that wish to customize their menus are encouraged to start with this list and add or remove insertion points as necessary. Clients are also
+encouraged to follow the pattern of beginning each group name with &quot;group.&quot;. 
+&lt;br&gt;&lt;br&gt;
+If the &lt;b&gt;popupMenu&lt;/b&gt; element is specified and contains NO &lt;b&gt;insertionPoint&lt;/b&gt; children elements, then the context menu will have no published insertion points. Of course, programmatic clients are not restricted from adding their own insertion points as necessary. Clients defining viewers are encouraged to publish their insertion points for documentation purposes and clarity for downstream extensions to their viewers/navigators, or to explicitly document which insertion points are considered API and which are considered internal.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="insertionPoint" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  The id of the menu. Has the same function as the &quot;popupMenuId&quot; attribute of &lt;b&gt;viewer&lt;/b&gt;, but if a &lt;b&gt;popupMenu&lt;/b&gt; nested element is used, you must use this &quot;popupMenuId&quot; attribute and NOT specify the &quot;popupMenuId&quot; of &lt;b&gt;viewer&lt;/b&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="allowsPlatformContributions" type="boolean">
+            <annotation>
+               <documentation>
+                  A value of &lt;b&gt;true&lt;/b&gt; will register the declared &lt;b&gt;popupMenu&lt;/b&gt; (by id) for object or viewer contributions as declared by the &lt;b&gt;org.eclipse.ui.popupMenus&lt;/b&gt; extension point. A value of &lt;b&gt;false&lt;/b&gt; will restrict the popupMenu to programmatic contributions as declared by &lt;code&gt;org.eclipse.ui.navigator.CommonActionProviders&lt;/code&gt; (see &lt;b&gt;org.eclipse.ui.navigator.navigatorContent/actionProvider&lt;/b&gt; and &lt;b&gt;org.eclipse.ui.navigator.navigatorContent/navigatorContent/actionProvider&lt;/b&gt;).
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="insertionPoint">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+         <documentation>
+            Defines an insertion point for the context menu. Indcludes the name of the point for clients to refer to, and whether the insertion point should be rendered as a separator or a group marker.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Indicates the name of the insertion point. Clients will use the name to refer to the insertion point as part of a menu path when providing either programmatic contributions via &lt;code&gt;org.eclipse.ui.navigator.CommonActionProvider&lt;/code&gt; or declarative contributions via the &lt;b&gt;org.eclipse.ui.popupMenus&lt;/b&gt; extension point.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="separator" type="boolean">
+            <annotation>
+               <documentation>
+                  A value of true will cause the insertion point to be represented as a bar in the menu. This allows clients to visually group items in the context menu, based on their relevance to the user. By default, the value is &lt;b&gt;false&lt;/b&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="options">
+      <annotation>
+         <documentation>
+            Provide options to the viewer to custom how it is presented to the user. See &lt;code&gt;org.eclipse.ui.navigator.INavigatorViewerDescriptor&lt;/code&gt; for the available properties.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="property" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="property">
+      <annotation>
+         <documentation>
+            Provide a name=value pair. The value will be provided as-is to the viewer (so empty strings will be propagated as empty strings). See &lt;code&gt;org.eclipse.ui.navigator.INavigatorViewerDescriptor&lt;/code&gt; for the available properties and their descriptions.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="value" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="dragAssistant">
+      <annotation>
+         <documentation>
+            A Drag and Drop assistant provides lightweight hook to supply extra transfer types and logic to set the drag data. This element is not required as the basic &lt;b&gt;org.eclipse.ui.navigator.CommonViewer&lt;/b&gt; provides a &lt;b&gt;org.eclipse.jface.util.LocalSelectionTransfer&lt;/b&gt; type. 
+&lt;br&gt;&lt;br&gt;
+&lt;b&gt;
+Clients should only define this extension in lightweight plugins with shallow dependency trees. The drag assistants must be loaded up front when the viewer is created, which will force the load of affected plugins. 
+&lt;/b&gt;
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Provide an implementation of &lt;code&gt;org.eclipse.ui.navigator.CommonDragAdapterAssistant&lt;/code&gt;.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.ui.navigator.CommonDragAdapterAssistant"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="viewerId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Associate this drag assistant with a particular viewer id.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.ui.views/view/@id"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.2
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         &lt;p&gt;
+The following example configures the popup menu id for a viewer.      
+&lt;p&gt;
+&lt;pre&gt;
+
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+      &lt;viewer 
+         id=&quot;org.eclipse.testViewer&quot; 
+         popupMenuId=&quot;org.eclipse.testViewer#PopupMenu&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+&lt;p&gt;
+Since the &lt;b&gt;popupMenu&lt;/b&gt; child element of viewer is not used in the above example, the default set of
+&lt;b&gt;insertionPoints&lt;/b&gt; will be used. This set is defined as follows. See the documentation for
+the &lt;b&gt;popupMenu&lt;/b&gt; element for more information.
+&lt;p&gt;
+&lt;pre&gt;
+&quot;group.new&quot;             separator=&quot;true&quot;
+&quot;group.goto&quot;            
+&quot;group.open&quot;            separator=&quot;true&quot;
+&quot;group.openWith&quot;
+&quot;group.show&quot;            separator=&quot;true&quot;
+&quot;group.edit&quot;            separator=&quot;true&quot;
+&quot;group.reorganize&quot;
+&quot;group.port&quot;
+&quot;group.generate&quot;        separator=&quot;true&quot;
+&quot;group.search&quot;          separator=&quot;true&quot;
+&quot;group.build&quot;           separator=&quot;true&quot;
+&quot;additions&quot;             separator=&quot;true&quot; 
+&quot;group.properties&quot;      separator=&quot;true&quot;
+&lt;/pre&gt;
+&lt;/p&gt;
+&lt;p&gt;
+The following example demonstrates a viewer configuration which declares custom
+&lt;b&gt;popupMenu/insertionPoints&lt;/b&gt;, but restricts object and viewer contributions
+with the &quot;allowsPlatformContributions&quot; attribute. Clients may only contribute
+to the defined menu via &lt;code&gt;org.eclipse.ui.navigator.CommonActionProvider&lt;/code&gt;s declared
+for the viewer (either top-level or associated with content extensions). 
+&lt;p&gt;
+Note that the &quot;popupMenuId&quot; attribute is not concurrently specified with the 
+&lt;b&gt;popupMenu&lt;/b&gt; element. Only one or the other, but not both, is a valid configuration.
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+       &lt;viewer
+             viewerId=&quot;org.eclipse.ui.navigator.resourceContent&quot;&gt;
+          &lt;popupMenu
+                allowsPlatformContributions=&quot;false&quot;
+                id=&quot;org.eclipse.ui.navigator.resourceContent#PopupMenu&quot;&gt;  
+             &lt;insertionPoint name=&quot;group.new&quot;/&gt;
+             &lt;insertionPoint
+                   name=&quot;group.open&quot;
+                   separator=&quot;true&quot;/&gt;
+             &lt;insertionPoint name=&quot;group.openWith&quot;/&gt;             
+             &lt;insertionPoint
+                   name=&quot;group.port&quot;
+                   separator=&quot;true&quot;/&gt; 
+             &lt;insertionPoint
+                   name=&quot;additions&quot;
+                   separator=&quot;true&quot;/&gt;              
+             &lt;insertionPoint
+                   name=&quot;group.properties&quot;
+                   separator=&quot;true&quot;/&gt;
+          &lt;/popupMenu&gt;
+       &lt;/viewer&gt;
+       &lt;viewerContentBinding 
+             viewerId=&quot;org.eclipse.ui.navigator.resourceContent&quot;&gt;
+            &lt;includes&gt;
+                &lt;contentExtension pattern=&quot;org.eclipse.ui.navigator.resourceContent&quot; /&gt;
+            &lt;/includes&gt;
+       &lt;/viewerContentBinding&gt;
+   &lt;/extension&gt;
+
+&lt;/pre&gt;
+&lt;/p&gt;
+
+&lt;p&gt;
+The following example declares that one content extension (id: &quot;org.eclipse.ui.navigator.resourceContent&quot;) is bound to a viewer matching the id &quot;org.eclipse.ui.navigator.resourceContent&quot;. (In this example the content extension and viewer ids match, but this is not required.) 
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+       &lt;viewerContentBinding 
+             viewerId=&quot;org.eclipse.ui.navigator.resourceContent&quot;&gt;
+            &lt;includes&gt;
+                &lt;contentExtension pattern=&quot;org.eclipse.ui.navigator.resourceContent&quot; /&gt;
+            &lt;/includes&gt;
+       &lt;/viewerContentBinding&gt;
+   &lt;/extension&gt; 
+&lt;/pre&gt;
+&lt;/p&gt;
+&lt;p&gt;
+The following example declares a &lt;b&gt;viewerActionBinding&lt;/b&gt; for all &lt;b&gt;actionProvider&lt;/b&gt;s (not 
+nested under a &lt;b&gt;navigatorContent&lt;/b&gt; extension) that match the regular expression
+&quot;org.acme.actions.*&quot; but not &quot;org.acme.actions.tests.*&quot;. This expression 
+will make any &lt;b&gt;actionProvider&lt;/b&gt; whose id begins with &quot;org.acme.actions.&quot; but not &quot;org.acme.actions.tests.&quot; &lt;i&gt;visible&lt;/i&gt; to the viewer with the id &quot;org.acme.viewer&quot;.
+Of course, the &lt;b&gt;viewerActionBindings&lt;/b&gt; only apply to &lt;b&gt;actionProvider&lt;/b&gt; elements that 
+are not nested under a &lt;b&gt;navigatorContent&lt;/b&gt; element. The &lt;i&gt;visibility&lt;/i&gt; of nested 
+&lt;b&gt;actionProvider&lt;/b&gt; elements is controlled by &lt;b&gt;viewerContentBindings&lt;/b&gt; for the enclosing
+&lt;b&gt;navigatorContent&lt;/b&gt; element.
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+       &lt;viewerActionBinding 
+             viewerId=&quot;org.acme.viewer&quot;&gt;
+            &lt;includes&gt;
+                &lt;actionExtension pattern=&quot;org.acme.actions.*&quot; /&gt;
+            &lt;/includes&gt;
+            &lt;excludes&gt;
+                &lt;actionExtension pattern=&quot;org.acme.actions.tests.*&quot; /&gt;
+            &lt;/excludes&gt;
+       &lt;/viewerActionBinding&gt;
+   &lt;/extension&gt; 
+&lt;/pre&gt;
+&lt;/p&gt;
+&lt;p&gt;
+The following example makes any actionProvider with no &quot;id&quot; attribute &lt;i&gt;visible&lt;/i&gt;
+to the viewer &quot;org.acme.viewer&quot;. The &lt;b&gt;actionProvider&lt;/b&gt;s with no &quot;id&quot; attribute
+have a default id of &quot;org.eclipse.ui.navigator.actionProvider.X&quot;. Of course,
+the &lt;b&gt;viewerActionBindings&lt;/b&gt; only apply to &lt;b&gt;actionProvider&lt;/b&gt; elements that 
+are not nested under a &lt;b&gt;navigatorContent&lt;/b&gt; element. The &lt;i&gt;visibility&lt;/i&gt; of nested 
+&lt;b&gt;actionProvider&lt;/b&gt; elements is controlled by &lt;b&gt;viewerContentBinding&lt;/b&gt;s for the enclosing
+&lt;b&gt;navigatorContent&lt;/b&gt; element.
+
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+       &lt;viewerActionBinding 
+             viewerId=&quot;org.acme.viewer&quot;&gt;
+            &lt;includes&gt;
+                &lt;actionExtension pattern=&quot;org.eclipse.ui.navigator.actionProvider.*&quot; /&gt;
+            &lt;/includes&gt; 
+       &lt;/viewerActionBinding&gt;
+   &lt;/extension&gt; 
+&lt;/pre&gt;
+&lt;/p&gt;
+
+&lt;p&gt;
+The following example demonstrates the standard properties available to the viewer.
+&lt;/p&gt;
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension
+         point=&quot;org.eclipse.ui.navigator.viewer&quot;&gt;
+      &lt;viewer
+            popupMenuId=&quot;org.eclipse.ui.tests.navigator.TestView#PopupMenu&quot;
+            viewerId=&quot;org.eclipse.ui.tests.navigator.TestView&quot;&gt;
+         &lt;options&gt; 
+            &lt;!-- Hide the &quot;Available Extensions&quot; tab in the &quot;Available Customizations&quot; 
+                 dialog (available from the &quot;Filters&quot; action --&gt;
+            &lt;property
+                  name=&quot;org.eclipse.ui.navigator.hideAvailableExtensionsTab&quot;
+                  value=&quot;true&quot;/&gt;
+            &lt;!-- Hide the &quot;Available Customizations&quot; dialog completely. This includes hiding the 
+              filters and the available content extensions. --&gt;
+            &lt;property
+                  name=&quot;org.eclipse.ui.navigator.hideAvailableCustomizationsDialog&quot;
+                  value=&quot;true&quot;/&gt; 
+            &lt;!-- Hide the &quot;Link with Editor&quot; action from the toolbar of the viewer --&gt;
+            &lt;property
+                  name=&quot;org.eclipse.ui.navigator.hideLinkWithEditorAction&quot;
+                  value=&quot;true&quot;/&gt; 
+            &lt;!-- Hide the &quot;Collapse All&quot; action from the toolbar of the viewer --&gt;
+            &lt;property
+                  name=&quot;org.eclipse.ui.navigator.hideCollapseAllAction&quot;
+                  value=&quot;true&quot;/&gt;  
+         &lt;/options&gt;
+      &lt;/viewer&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2002, 2009 IBM Corporation and others.&lt;br&gt;
+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 &lt;a 
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/bundles/org.eclipse.rap.ui.navigator/scripts/src.jardesc b/bundles/org.eclipse.rap.ui.navigator/scripts/src.jardesc
new file mode 100755
index 0000000..36c3da5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/scripts/src.jardesc
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jardesc>
+	<jar path="C:/dev/workspaces/general-purpose-navigator/org.eclipse.ui.views.navigator/navigator.jar"/>
+	<options compress="true"
+		descriptionLocation="/org.eclipse.ui.views.navigator/scripts/src.jardesc"
+		exportErrors="true" exportWarnings="true" logErrors="true"
+		logWarnings="true" overwrite="false" saveDescription="true" useSourceFolders="false"/>
+	<manifest generateManifest="false"
+		manifestLocation="/org.eclipse.ui.views.navigator/src/META-INF/MANIFEST.MF"
+		manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="false">
+		<sealing sealJar="false"><packagesToSeal/><packagesToUnSeal/></sealing>
+	</manifest>
+	<selectedElements exportClassFiles="true" exportJavaFiles="false">
+		<javaElement handleIdentifier="=org.eclipse.ui.views.navigator/src"/>
+	</selectedElements>
+</jardesc>
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/AdaptabilityUtility.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/AdaptabilityUtility.java
new file mode 100755
index 0000000..68d858a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/AdaptabilityUtility.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+
+/**
+ * Provides utilities for working with adaptable and non-adaptable objects.
+ * 
+ * @since 3.2
+ */
+public class AdaptabilityUtility {
+
+	/**
+	 * <p>
+	 * Returns an adapter of the requested type (anAdapterType)
+	 * 
+	 * @param anElement
+	 *            The element to adapt, which may or may not implement
+	 *            {@link IAdaptable}, or null
+	 * @param anAdapterType
+	 *            The class type to return
+	 * @return An adapter of the requested type or null
+	 */
+	public static Object getAdapter(Object anElement, Class anAdapterType) {
+		Assert.isNotNull(anAdapterType);
+        if (anElement == null) {
+            return null;
+        }
+        if (anAdapterType.isInstance(anElement)) {
+            return anElement;
+        }
+
+        if (anElement instanceof IAdaptable) {
+            IAdaptable adaptable = (IAdaptable) anElement;
+
+            Object result = adaptable.getAdapter(anAdapterType);
+            if (result != null) {
+                // Sanity-check
+                Assert.isTrue(anAdapterType.isInstance(result));
+                return result;
+            }
+        } 
+        
+        if (!(anElement instanceof PlatformObject)) {
+            Object result = Platform.getAdapterManager().getAdapter(anElement, anAdapterType);
+            if (result != null) {
+                return result;
+            }
+        }
+
+        return null;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorActionGroup.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorActionGroup.java
new file mode 100755
index 0000000..98ec69b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorActionGroup.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.commands.ActionHandler;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.handlers.CollapseAllHandler;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.internal.navigator.actions.CollapseAllAction;
+import org.eclipse.ui.internal.navigator.actions.LinkEditorAction;
+import org.eclipse.ui.internal.navigator.filters.FilterActionGroup;
+import org.eclipse.ui.internal.navigator.framelist.BackAction;
+import org.eclipse.ui.internal.navigator.framelist.ForwardAction;
+import org.eclipse.ui.internal.navigator.framelist.FrameList;
+import org.eclipse.ui.internal.navigator.framelist.UpAction;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+import org.eclipse.ui.navigator.LinkHelperService;
+
+/**
+ * @since 3.2
+ */
+public class CommonNavigatorActionGroup extends ActionGroup {
+
+	private static final String FRAME_ACTION_SEPARATOR_ID= "FRAME_ACTION_SEPARATOR_ID"; //$NON-NLS-1$
+	private static final String FRAME_ACTION_GROUP_ID= "FRAME_ACTION_GROUP_ID"; //$NON-NLS-1$
+
+    private BackAction backAction;
+
+    private ForwardAction forwardAction;
+
+    private UpAction upAction;
+
+	private LinkEditorAction toggleLinkingAction;
+
+	private CollapseAllAction collapseAllAction;
+
+	private FilterActionGroup filterGroup;
+
+	private final CommonViewer commonViewer;
+
+	private CommonNavigator commonNavigator;
+
+	private final LinkHelperService linkHelperService;
+
+	private CollapseAllHandler collapseAllHandler;
+
+    private boolean frameActionsShown;
+    
+
+	
+	/**
+	 * Create a action group the common navigator actions.
+	 * 
+	 * @param aNavigator
+	 *            The IViewPart for this action group
+	 * @param aViewer
+	 *            The Viewer for this action group
+	 * @param linkHelperService the link service helper
+	 */
+	public CommonNavigatorActionGroup(CommonNavigator aNavigator,
+			CommonViewer aViewer, LinkHelperService linkHelperService) {
+		super();
+		commonNavigator = aNavigator;
+		commonViewer = aViewer;
+		this.linkHelperService = linkHelperService;
+		makeActions();
+	}
+
+	/**
+	 * Returns the image descriptor with the given relative path.
+	 */
+	protected final ImageDescriptor getImageDescriptor(String relativePath) {
+		return NavigatorPlugin.getImageDescriptor("icons/full/" + relativePath); //$NON-NLS-1$
+	}
+
+	/**
+	 * 
+	 */
+	private void makeActions() {
+        FrameList frameList = commonViewer.getFrameList();
+        backAction = new BackAction(frameList);
+        forwardAction = new ForwardAction(frameList);
+        upAction = new UpAction(frameList);
+        
+		frameList.addPropertyChangeListener(new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (event.getProperty().equals(FrameList.P_RESET)) {
+					upAction.setEnabled(false);
+					backAction.setEnabled(false);
+					forwardAction.setEnabled(false);
+				}
+				commonNavigator.updateTitle();
+				IActionBars actionBars= commonNavigator.getViewSite().getActionBars();
+				updateToolBar(actionBars.getToolBarManager());
+			}
+		});
+
+        IHandlerService service = (IHandlerService) commonNavigator.getSite()
+				.getService(IHandlerService.class);
+
+		INavigatorViewerDescriptor viewerDescriptor = commonViewer
+				.getNavigatorContentService().getViewerDescriptor();
+		boolean hideLinkWithEditorAction = viewerDescriptor
+				.getBooleanConfigProperty(INavigatorViewerDescriptor.PROP_HIDE_LINK_WITH_EDITOR_ACTION);
+		if (!hideLinkWithEditorAction) {
+			toggleLinkingAction = new LinkEditorAction(commonNavigator,
+					commonViewer, linkHelperService);
+			ImageDescriptor syncIcon = getImageDescriptor("elcl16/synced.gif"); //$NON-NLS-1$
+			toggleLinkingAction.setImageDescriptor(syncIcon);
+			toggleLinkingAction.setHoverImageDescriptor(syncIcon);
+			service.activateHandler(toggleLinkingAction.getActionDefinitionId(),
+					new ActionHandler(toggleLinkingAction));
+		}
+
+		boolean hideCollapseAllAction = viewerDescriptor
+				.getBooleanConfigProperty(INavigatorViewerDescriptor.PROP_HIDE_COLLAPSE_ALL_ACTION);
+		if (!hideCollapseAllAction) {
+			collapseAllAction = new CollapseAllAction(commonViewer);
+			ImageDescriptor collapseAllIcon = getImageDescriptor("elcl16/collapseall.gif"); //$NON-NLS-1$
+			collapseAllAction.setImageDescriptor(collapseAllIcon);
+			collapseAllAction.setHoverImageDescriptor(collapseAllIcon);
+			collapseAllHandler = new CollapseAllHandler(commonViewer);
+			service.activateHandler(CollapseAllHandler.COMMAND_ID, collapseAllHandler);
+		}
+
+		filterGroup = new FilterActionGroup(commonViewer);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	public void fillActionBars(IActionBars actionBars) {
+
+        actionBars.setGlobalActionHandler(ActionFactory.BACK.getId(),
+                backAction);
+        actionBars.setGlobalActionHandler(ActionFactory.FORWARD.getId(),
+                forwardAction);
+        actionBars.setGlobalActionHandler(IWorkbenchActionConstants.UP,
+                upAction);
+		
+		filterGroup.fillActionBars(actionBars);
+		fillToolBar(actionBars.getToolBarManager());
+		fillViewMenu(actionBars.getMenuManager());
+		actionBars.updateActionBars();
+	}
+	
+	protected void fillToolBar(IToolBarManager toolBar) {
+		if (backAction.isEnabled() || upAction.isEnabled() || forwardAction.isEnabled()) {
+			toolBar.add(backAction);
+			toolBar.add(forwardAction);
+			toolBar.add(upAction);
+			toolBar.add(new Separator(FRAME_ACTION_SEPARATOR_ID));
+			frameActionsShown= true;
+		}
+		toolBar.add(new GroupMarker(FRAME_ACTION_GROUP_ID));
+		if (collapseAllAction != null) {
+			toolBar.add(collapseAllAction);
+		}
+
+		if (toggleLinkingAction != null) {
+			toolBar.add(toggleLinkingAction);
+		}
+	}
+	
+	protected void fillViewMenu(IMenuManager menu) {
+		menu.add(new Separator());
+		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$
+		if (toggleLinkingAction != null) { 
+			menu
+			.insertAfter(IWorkbenchActionConstants.MB_ADDITIONS
+					+ "-end", toggleLinkingAction); //$NON-NLS-1$
+		}
+	}
+
+	private void updateToolBar(IToolBarManager toolBar) {
+		boolean hasBeenFrameActionsShown= frameActionsShown;
+		frameActionsShown= backAction.isEnabled() || upAction.isEnabled() || forwardAction.isEnabled();
+		if (frameActionsShown != hasBeenFrameActionsShown) {
+			if (hasBeenFrameActionsShown) {
+				toolBar.remove(backAction.getId());
+				toolBar.remove(forwardAction.getId());
+				toolBar.remove(upAction.getId());
+				toolBar.remove(FRAME_ACTION_SEPARATOR_ID);
+			} else {
+				toolBar.prependToGroup(FRAME_ACTION_GROUP_ID, new Separator(FRAME_ACTION_SEPARATOR_ID));
+				toolBar.prependToGroup(FRAME_ACTION_GROUP_ID, upAction);
+				toolBar.prependToGroup(FRAME_ACTION_GROUP_ID, forwardAction);
+				toolBar.prependToGroup(FRAME_ACTION_GROUP_ID, backAction);
+			}
+			toolBar.update(true);
+		}
+	}
+	
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+        backAction.dispose();
+        forwardAction.dispose();
+        upAction.dispose();
+        
+		if (toggleLinkingAction != null) {
+			toggleLinkingAction.dispose();
+		}
+		if (collapseAllHandler!=null) {
+			collapseAllHandler.dispose();
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorFrameSource.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorFrameSource.java
new file mode 100755
index 0000000..ee43166
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorFrameSource.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.ui.internal.navigator.framelist.TreeFrame;
+import org.eclipse.ui.internal.navigator.framelist.TreeViewerFrameSource;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * Frame source for the common navigator.
+ */
+public class CommonNavigatorFrameSource extends TreeViewerFrameSource {
+
+    private CommonNavigator navigator;
+
+    /**
+     * Constructs a new frame source for the specified common navigator.
+     * 
+     * @param navigator the common navigator
+     */
+    public CommonNavigatorFrameSource(CommonNavigator navigator) {
+        super(navigator.getCommonViewer());
+        this.navigator = navigator;
+    }
+
+    /**
+     * Returns a new frame.  This implementation extends the super implementation
+     * by setting the frame's tool tip text to show the full path for the input
+     * element.
+     */
+    protected TreeFrame createFrame(Object input) {
+        TreeFrame frame = super.createFrame(input);
+        frame.setName(navigator.getTitle());
+        frame.setToolTipText(navigator.getFrameToolTipText(input));
+        return frame;
+    }
+
+    /**
+     * Also updates the navigator's title.
+     */
+    protected void frameChanged(TreeFrame frame) {
+        super.frameChanged(frame);
+        navigator.updateTitle();
+    }
+    
+    
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorMessages.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorMessages.java
new file mode 100755
index 0000000..ad06273
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorMessages.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * 
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is a guarantee neither that this API will
+ * work nor that it will remain the same. Please do not use this API without
+ * consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonNavigatorMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.ui.internal.navigator.messages"; //$NON-NLS-1$
+
+	/** */
+	public static String Link_With_Editor_Job_;
+
+	/** */
+	public static String Exception_Invoking_Extension;
+
+	/** */
+	public static String NavigatorViewerDescriptor_Popup_Menu_Overridden;
+
+	/** */
+	public static String StructuredViewerManager_0;
+
+	/** */
+	public static String TextAction_selectAll;
+
+	/** */
+	public static String Cut;
+
+	/** */
+	public static String Copy;
+
+	/** */
+	public static String Paste;
+
+	/** */
+	public static String Delete;
+
+	/** */
+	public static String Navigator_statusLineMultiSelect;
+
+	/** */
+	public static String SelectFiltersActionDelegate_1;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Available_Filters;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Available_Content;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Hides_all_content_associated;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Select_the_available_extensions;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Select_the_filters_to_apply;
+
+	/** */
+	public static String SelectFiltersActionDelegate_0;
+
+	/** */
+	public static String CollapseAllActionDelegate_0;
+
+	/** */
+	public static String LinkEditorActionDelegate_1;
+
+	/** */
+	public static String LinkEditorActionDelegate_0;
+
+	/** */
+	public static String Attribute_Missing_Warning;
+
+	/** */
+	public static String Too_many_elements_Warning;
+
+	/** */
+	public static String Open_action_label;
+
+	/** */
+	public static String NewProjectWizard_errorTitle;
+
+	/** */
+	public static String NewProjectAction_text;
+
+	/** */
+	public static String UpdateFiltersOperation_Update_CommonViewer_Filter_;
+
+	/** */
+	public static String CommonFilterSelectionDialog_enter_name_of_filte_;
+
+	/** */
+	public static String CommonFilterSelectionDialog_Available_customization_;
+
+	/** */
+	public static String CommonSorterDescriptorManager_A_navigatorContent_extesnion_in_0_;
+
+	/** */
+	public static String CommonSorterDescriptorManager_A_navigatorContent_extension_does_n_;
+
+	/** */
+	public static String FilterDialogSelectionListener_Enable_the_0_filter_;
+
+	/** */
+	public static String NavigatorContentServiceLabelProvider_Error_no_label_provider_for_0_;
+
+	/** */
+	public static String CommonViewerSorter_NoContentExtensionForObject;
+	
+	/** */
+	public static String NavigatorContentService_problemSavingPreferences;
+	
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, CommonNavigatorMessages.class);
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteDelegate.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteDelegate.java
new file mode 100755
index 0000000..264d1b6
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteDelegate.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.navigator.ICommonViewerSite;
+
+/**
+ * Provides a delegate implementation of {@link ICommonViewerSite}.
+ * 
+ * @since 3.2
+ *
+ */
+public class CommonViewerSiteDelegate implements ICommonViewerSite {
+	
+	
+	private String id; 
+	private ISelectionProvider selectionProvider; 
+	private Shell shell;
+
+	/**
+	 * 
+	 * @param anId
+	 * @param aSelectionProvider
+	 * @param aShell
+	 */
+	public CommonViewerSiteDelegate(String anId,  ISelectionProvider aSelectionProvider, Shell aShell) {
+		Assert.isNotNull(anId);
+		Assert.isNotNull(aSelectionProvider);
+		Assert.isNotNull(aShell);
+		id = anId;
+		selectionProvider = aSelectionProvider;		
+		shell = aShell;
+	} 
+
+	public String getId() {
+		return id;
+	} 
+
+	public Shell getShell() {
+		return shell;
+	}
+
+	public ISelectionProvider getSelectionProvider() {
+		return selectionProvider;
+	}  
+
+
+	public void setSelectionProvider(ISelectionProvider aSelectionProvider) {
+		selectionProvider = aSelectionProvider;
+	}
+
+	public Object getAdapter(Class adapter) { 
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIEditorPartSiteDelegate.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIEditorPartSiteDelegate.java
new file mode 100755
index 0000000..dc2bbd4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIEditorPartSiteDelegate.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * Provides a delegate implementation of {@link ICommonViewerWorkbenchSite}.
+ * @since 3.2
+ *
+ */
+public class CommonViewerSiteIEditorPartSiteDelegate implements
+		ICommonViewerWorkbenchSite {
+
+	private IEditorSite editorSite;  
+
+	/**
+	 * 
+	 * @param anEditorSite
+	 */
+	public CommonViewerSiteIEditorPartSiteDelegate(IEditorSite anEditorSite) {
+		editorSite = anEditorSite; 
+	}
+
+	public String getId() {
+		return editorSite.getId();
+	}
+
+	public IActionBars getActionBars() {
+		return editorSite.getActionBars();
+	}
+
+	public Object getAdapter(Class adapter) {
+		return editorSite.getAdapter(adapter);
+	} 
+
+	public IWorkbenchPage getPage() {
+		return editorSite.getPage();
+	}
+
+	public ISelectionProvider getSelectionProvider() {
+		return editorSite.getSelectionProvider();
+	}
+
+	public void setSelectionProvider(ISelectionProvider aSelectionProvider) {
+		editorSite.setSelectionProvider(aSelectionProvider);
+	}
+
+	public Shell getShell() {
+		return editorSite.getShell();
+	}
+
+	public IWorkbenchWindow getWorkbenchWindow() {
+		return editorSite.getWorkbenchWindow();
+	}
+
+	public void registerContextMenu(String menuId, MenuManager menuManager,
+			ISelectionProvider selectionProvider) {
+		editorSite.registerContextMenu(menuId, menuManager, selectionProvider);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonViewerWorkbenchSite#getViewPart()
+	 */
+	public IWorkbenchPart getPart() { 
+		return editorSite.getPart();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonViewerWorkbenchSite#getSite()
+	 */
+	public IWorkbenchPartSite getSite() {
+		return editorSite;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIPageSiteDelegate.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIPageSiteDelegate.java
new file mode 100755
index 0000000..f16f919
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIPageSiteDelegate.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.navigator.ICommonViewerSite;
+import org.eclipse.ui.part.IPageSite;
+
+/**
+ * Provides a delegate implementation of {@link ICommonViewerSite}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonViewerSiteIPageSiteDelegate implements ICommonViewerSite {
+
+	private IPageSite pageSite;
+
+	private String viewerId;
+
+	/**
+	 * 
+	 * @param aViewerId
+	 * @param aPageSite
+	 */
+	public CommonViewerSiteIPageSiteDelegate(String aViewerId,
+			IPageSite aPageSite) {
+		viewerId = aViewerId;
+		pageSite = aPageSite;
+	}
+
+	public String getId() {
+		return viewerId;
+	}
+
+	public Object getAdapter(Class adapter) {
+		return pageSite.getAdapter(adapter);
+	}
+
+	public ISelectionProvider getSelectionProvider() {
+		return pageSite.getSelectionProvider();
+	}
+
+	public void setSelectionProvider(ISelectionProvider aSelectionProvider) {
+		pageSite.setSelectionProvider(aSelectionProvider);
+	}
+
+	public Shell getShell() {
+		return pageSite.getShell();
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIViewSiteDelegate.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIViewSiteDelegate.java
new file mode 100755
index 0000000..1c962f7
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonViewerSiteIViewSiteDelegate.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * Provides a delegate implementation of {@link ICommonViewerWorkbenchSite}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonViewerSiteIViewSiteDelegate implements ICommonViewerWorkbenchSite {
+
+	private IViewSite viewSite; 
+
+	/**
+	 * 
+	 * @param aViewSite
+	 */
+	public CommonViewerSiteIViewSiteDelegate(IViewSite aViewSite) {
+		viewSite = aViewSite; 
+	}
+
+	public String getId() {
+		return viewSite.getId();
+	}
+
+	public IActionBars getActionBars() {
+		return viewSite.getActionBars();
+	}
+
+	public Object getAdapter(Class adapter) {
+		return viewSite.getAdapter(adapter);
+	}
+
+	public IWorkbenchPage getPage() {
+		return viewSite.getPage();
+	}
+
+	public ISelectionProvider getSelectionProvider() {
+		return viewSite.getSelectionProvider();
+	}
+
+	public void setSelectionProvider(ISelectionProvider aSelectionProvider) {
+		viewSite.setSelectionProvider(aSelectionProvider);
+	}
+
+	public Shell getShell() {
+		return viewSite.getShell();
+	}
+
+	public IWorkbenchWindow getWorkbenchWindow() {
+		return viewSite.getWorkbenchWindow();
+	}
+
+	public void registerContextMenu(String menuId, MenuManager menuManager,
+			ISelectionProvider selectionProvider) {
+		viewSite.registerContextMenu(menuId, menuManager, selectionProvider);
+	}
+ 
+	public IWorkbenchPart getPart() { 
+		return viewSite.getPart();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonViewerWorkbenchSite#getSite()
+	 */
+	public IWorkbenchPartSite getSite() { 
+		return viewSite;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ContributorTrackingSet.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ContributorTrackingSet.java
new file mode 100755
index 0000000..53c83ec
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ContributorTrackingSet.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+
+/**
+ * Used to associate the NavigatorContentDescriptor (NCD) with an object that it contributes.
+ * 
+ * The NCD/object association is tracked using the NavigatorContentService.rememberContribution().
+ *
+ * @since 3.2
+ *
+ */
+public class ContributorTrackingSet extends LinkedHashSet {
+
+	
+	private static final long serialVersionUID = 2516241537206281972L;
+	
+	private INavigatorContentDescriptor contributor;
+	private INavigatorContentDescriptor firstClassContributor;
+	private NavigatorContentService contentService;
+	
+	/**
+	 * Construct a tracking set.
+	 * 
+	 * @param aContentService 
+	 */
+	public ContributorTrackingSet(NavigatorContentService aContentService) {
+		contentService = aContentService;
+	}
+	
+	/**
+	 * Construct a tracking set.
+	 * 
+	 * @param aContentService
+	 * @param elements
+	 */
+	public ContributorTrackingSet(NavigatorContentService aContentService, Object[] elements) {
+		
+		for (int i = 0; i < elements.length; i++) 
+			super.add(elements[i]); 
+		
+		contentService = aContentService;
+	}
+	
+	public boolean add(Object o) { 
+		if (contributor != null) {
+			contentService.rememberContribution(contributor, firstClassContributor, o);
+		}
+		return super.add(o);
+	}
+	
+	public boolean remove(Object o) { 
+		contentService.forgetContribution(o);
+		return super.remove(o);
+	}
+
+	
+	public void clear() { 
+		Iterator it = iterator();
+		while (it.hasNext())
+			contentService.forgetContribution(it.next());
+		super.clear();
+	}
+
+	/**
+	 * 
+	 * @return The current contributor.
+	 */
+	public INavigatorContentDescriptor getContributor() {
+		return contributor;
+	}
+
+	/**
+	 * 
+	 * @return The current contributor.
+	 */
+	public INavigatorContentDescriptor getFirstClassContributor() {
+		return firstClassContributor;
+	}
+
+	/**
+	 * 
+	 * @param newContributor The contributor to record for the next series of adds.
+	 * @param theFirstClassContributor The first class contributor associated with the newContributor.
+	 */
+	public void setContributor(INavigatorContentDescriptor newContributor, INavigatorContentDescriptor theFirstClassContributor) {
+		contributor = newContributor;
+		firstClassContributor = theFirstClassContributor;
+	}
+
+	/**
+	 * @param contents
+	 */
+	public void setContents(Object[] contents) {
+		super.clear();
+		if(contents != null) 
+			for (int i = 0; i < contents.length; i++) 
+				add(contents[i]); 
+		
+	}
+	
+	public Iterator iterator() {
+		return new Iterator() {
+
+			Iterator delegateIterator = ContributorTrackingSet.super.iterator();
+			Object current;
+
+			public boolean hasNext() {
+				return delegateIterator.hasNext();
+			}
+
+			public Object next() {
+				current = delegateIterator.next();
+				return current;
+			}
+
+			public void remove() {
+				delegateIterator.remove();
+				contentService.forgetContribution(current);
+			}
+		};
+	}
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CustomAndExpression.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CustomAndExpression.java
new file mode 100755
index 0000000..89240bf
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/CustomAndExpression.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.expressions.ElementHandler;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+
+/**
+ * Create an AND-type core expression from an IConfigurationElement of arbitrary
+ * name.
+ * 
+ */
+public class CustomAndExpression extends Expression {
+
+	protected List fExpressions;
+
+	/**
+	 * Create an AND-type core expression from an IConfigurationElement of
+	 * arbitrary name. The children elements are combined using boolean AND
+	 * semantics to evaluate the expression.
+	 * 
+	 * @param element
+	 *            An IConfigurationElement of arbitrary name.
+	 */
+	public CustomAndExpression(IConfigurationElement element) {
+		Assert.isNotNull(element);
+
+		final IConfigurationElement[] children = element.getChildren();
+		if (children.length == 0)
+			return;
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				fExpressions = new ArrayList();
+				for (int i = 0; i < children.length; i++) {
+					fExpressions.add(ElementHandler.getDefault().create(
+							ExpressionConverter.getDefault(), children[i]));
+				}
+			}
+		});
+
+	}
+
+	public EvaluationResult evaluate(IEvaluationContext scope) {
+		if (fExpressions == null) {
+			return EvaluationResult.TRUE;
+		}
+		NavigatorPlugin.Evaluator evaluator = new NavigatorPlugin.Evaluator();
+		EvaluationResult result = EvaluationResult.TRUE;
+		for (Iterator iter = fExpressions.iterator(); iter.hasNext();) {
+			Expression expression = (Expression) iter.next();
+			evaluator.expression = expression;
+			evaluator.scope = scope;
+			SafeRunner.run(evaluator);
+			result = result.and(evaluator.result);
+			// keep iterating even if we have a not loaded found. It can be
+			// that we find a false which will result in a better result.
+			if (result == EvaluationResult.FALSE) {
+				return result;
+			}
+		}
+		return result;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/INavigatorHelpContextIds.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/INavigatorHelpContextIds.java
new file mode 100755
index 0000000..5057c37
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/INavigatorHelpContextIds.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The help context ids used by the Common Navigator. These are defined in the
+ * workbench plugin. There is no separate help for the Common Navigator.
+ * 
+ * @since 3.2
+ * 
+ */
+public interface INavigatorHelpContextIds {
+
+	// Note we are using the workbench help since help requires the
+	// workbench
+	/** */
+	public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
+
+	/** */
+	public static final String GOTO_RESOURCE_ACTION = PREFIX
+			+ "goto_resource_action_context"; //$NON-NLS-1$
+
+	/** */
+	public static final String TEXT_CUT_ACTION = PREFIX
+			+ "text_cut_action_context"; //$NON-NLS-1$
+
+	/** */
+	public static final String TEXT_COPY_ACTION = PREFIX
+			+ "text_copy_action_context"; //$NON-NLS-1$
+
+	/** */
+	public static final String TEXT_PASTE_ACTION = PREFIX
+			+ "text_paste_action_context"; //$NON-NLS-1$
+
+	/** */
+	public static final String TEXT_DELETE_ACTION = PREFIX
+			+ "text_delete_action_context"; //$NON-NLS-1$
+
+	/** */
+	public static final String TEXT_SELECT_ALL_ACTION = PREFIX
+			+ "text_select_all_action_context"; //$NON-NLS-1$
+
+	// Dialogs
+	/** */
+	public static final String GOTO_RESOURCE_DIALOG = PREFIX
+			+ "goto_resource_dialog_context"; //$NON-NLS-1$
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorActivationService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorActivationService.java
new file mode 100755
index 0000000..ae4aed4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorActivationService.java
@@ -0,0 +1,387 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager;
+import org.eclipse.ui.navigator.IExtensionActivationListener;
+import org.eclipse.ui.navigator.INavigatorActivationService;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * 
+ * The activation service determines if an extension is <i>active</i> within the
+ * context of a given viewer. If an extension is <i>active</i> then the extension
+ * will contribute functionality to the viewer. If an extension is not <i>active</i>,
+ * then the extension will not be given opportunities to contribute
+ * functionality to the given viewer. See {@link INavigatorContentService} for
+ * more detail on what states are associated with a content extension.
+ * 
+ * @since 3.2
+ */
+public final class NavigatorActivationService implements
+		INavigatorActivationService {
+
+	private static final String ACTIVATED_EXTENSIONS = ".activatedExtensions"; //$NON-NLS-1$
+
+	private static final NavigatorContentDescriptorManager CONTENT_DESCRIPTOR_REGISTRY = NavigatorContentDescriptorManager
+			.getInstance();	
+
+	private static final INavigatorContentDescriptor[] NO_DESCRIPTORS = new INavigatorContentDescriptor[0];
+
+	private static final String DELIM = ";"; //$NON-NLS-1$
+
+	private static final char EQUALS = '=';  
+
+	/*
+	 * Map of ids of activated extensions. Note this is only synchronized when
+	 * modifying it structurally (that is adding or deleting entries in it). For
+	 * changing of the activated extension state, no synchronization is
+	 * necessary.  Though this is semantically functioning as a Set, it's implemented
+	 * as a Map to avoid the synchronization during the frequent checking of
+	 * extension status.
+	 */
+	private final Map/*<String, Boolean>*/ activatedExtensionsMap = new HashMap();
+
+	/*
+	 * IExtensionActivationListeners
+	 */
+	private final ListenerList listeners = new ListenerList();
+
+	private INavigatorContentService contentService;
+
+	/**
+	 * Create an instance of the service.
+	 * 
+	 * @param aContentService
+	 *            The associated content service.
+	 */
+	public NavigatorActivationService(INavigatorContentService aContentService) {
+		contentService = aContentService;
+		revertExtensionActivations();
+	}
+
+	/**
+	 * 
+	 * Checks the known activation state for the given viewer id to determine if
+	 * the given navigator extension is 'active'.
+	 *  
+	 * @param aNavigatorExtensionId
+	 *            The unique identifier associated with a given extension.
+	 * 
+	 * @return True if the extension is active in the context of the viewer id.
+	 */
+	public boolean isNavigatorExtensionActive(String aNavigatorExtensionId) {
+		Boolean b = (Boolean) activatedExtensionsMap.get(aNavigatorExtensionId);
+		if(b != null)
+			return b.booleanValue();
+		synchronized (activatedExtensionsMap) {
+			NavigatorContentDescriptor descriptor = CONTENT_DESCRIPTOR_REGISTRY.getContentDescriptor(aNavigatorExtensionId);
+			if (descriptor == null)
+				return false;
+			if(descriptor.isActiveByDefault())
+				activatedExtensionsMap.put(aNavigatorExtensionId, Boolean.TRUE);
+			else
+				activatedExtensionsMap.put(aNavigatorExtensionId, Boolean.FALSE);
+			return descriptor.isActiveByDefault();
+		}
+	}
+
+	/**
+	 * Set the activation state for the given extension in the context of the
+	 * given viewer id. Each instance of an INavigatorContentService listens for
+	 * the activation service to update; and if those instances were created
+	 * with viewers, they will issue a refresh. Otherwise, clients are
+	 * responsible for refreshing the viewers.
+	 * 
+	 * <p>
+	 * Clients must call {@link #persistExtensionActivations()} to save
+	 * the the activation state.
+	 * </p>
+	 * 
+	 * <p>
+	 * When clients are updating a batch of extensions, consider using
+	 * {@link #setActive(String[], boolean)} when
+	 * possible to avoid unnecessary notifications.
+	 * </p>
+	 * 
+	 * @param aNavigatorExtensionId
+	 *            The unique identifier associated with a given extension.
+	 * @param toEnable
+	 *            True indicates the extension should be enabled; False
+	 *            indicates otherwise.
+	 * 
+	 */
+	public void setActive(
+			String aNavigatorExtensionId, boolean toEnable) {
+
+		boolean currentlyActive = isNavigatorExtensionActive(aNavigatorExtensionId);
+		if (currentlyActive == toEnable) {
+			return;
+		}
+
+		if (toEnable) {
+			activatedExtensionsMap.put(aNavigatorExtensionId, Boolean.TRUE);
+		} else {
+			activatedExtensionsMap.put(aNavigatorExtensionId, Boolean.FALSE);
+		}
+		notifyListeners(new String[] { aNavigatorExtensionId }, toEnable);
+
+	}
+
+	/**
+	 * Set the activation state for the given extension in the context of the
+	 * given viewer id. Each instance of an INavigatorContentService listens for
+	 * the activation service to update; and if those instances were created
+	 * with viewers, they will issue a refresh. Otherwise, clients are
+	 * responsible for refreshing the viewers.
+	 * 
+	 * <p>
+	 * Clients must call {@link #persistExtensionActivations()} to save
+	 * the the activation state.
+	 * </p>
+	 * 
+	 * @param aNavigatorExtensionIds
+	 *            An array of unique identifiers associated with existing
+	 *            extension.
+	 * @param toEnable
+	 *            True indicates the extension should be enabled; False
+	 *            indicates otherwise.
+	 * 
+	 */
+	public void setActive(String[] aNavigatorExtensionIds,
+			boolean toEnable) {
+
+		if (toEnable) {
+			for (int i = 0; i < aNavigatorExtensionIds.length; i++) {
+				activatedExtensionsMap.put(aNavigatorExtensionIds[i], Boolean.TRUE);
+			}
+		} else {
+			for (int i = 0; i < aNavigatorExtensionIds.length; i++) {
+				activatedExtensionsMap.put(aNavigatorExtensionIds[i], Boolean.FALSE);
+			}
+		}
+		notifyListeners(aNavigatorExtensionIds, toEnable);
+
+	}
+
+	/**
+	 * Save the activation state for the given viewer.
+	 * 
+	 */
+	public void persistExtensionActivations() {
+		IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
+		
+		synchronized (activatedExtensionsMap) {
+			Iterator activatedExtensionsIterator = activatedExtensionsMap.keySet().iterator();
+			
+			/* ensure that the preference will be non-empty */
+			StringBuffer preferenceValue = new StringBuffer();
+			String navigatorExtensionId = null;
+			boolean isActive = false;
+			while (activatedExtensionsIterator.hasNext()) {
+				navigatorExtensionId = (String) activatedExtensionsIterator.next();
+				isActive = isNavigatorExtensionActive(navigatorExtensionId);
+				preferenceValue.append(navigatorExtensionId)
+									.append(EQUALS)
+										.append( isActive ? Boolean.TRUE : Boolean.FALSE )				
+											.append(DELIM);
+			}
+			prefs.put(getPreferenceKey(), preferenceValue.toString());
+		}
+
+		NavigatorContentService.flushPreferences(prefs);
+	}
+
+	/**
+	 * Request notification when the activation state changes for the given
+	 * viewer id.
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IExtensionActivationListener}
+	 */
+	public void addExtensionActivationListener(
+			IExtensionActivationListener aListener) {
+		listeners.add(aListener);
+	}
+
+	/**
+	 * No longer receive notification when activation state changes.
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IExtensionActivationListener}
+	 */
+	public void removeExtensionActivationListener(
+			IExtensionActivationListener aListener) {
+		listeners.remove(aListener);
+	}
+
+	private void notifyListeners(String[] navigatorExtensionIds,
+			boolean toEnable) {
+		
+		if(navigatorExtensionIds != null) { // should really never be null, but just in case
+			if(navigatorExtensionIds.length > 1)
+				Arrays.sort(navigatorExtensionIds);
+			
+			Object[] listenerArray = listeners.getListeners();
+			for (int i = 0; i < listenerArray.length; i++) {
+				((IExtensionActivationListener) listenerArray[i])
+						.onExtensionActivation(contentService.getViewerId(),
+								navigatorExtensionIds, toEnable);
+			}
+		}
+
+	}
+
+	private void revertExtensionActivations() {
+
+		IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
+
+		String activatedExtensionsString = prefs
+				.get(getPreferenceKey(), null);
+
+		if (activatedExtensionsString != null
+				&& activatedExtensionsString.length() > 0) {
+			String[] contentExtensionIds = activatedExtensionsString
+					.split(DELIM);
+			
+			String id = null;
+			String booleanString = null;
+			int indx=0;
+			for (int i = 0; i < contentExtensionIds.length; i++) {
+				if( (indx = contentExtensionIds[i].indexOf(EQUALS)) > -1) {
+					// up to but not including the equals
+					id = contentExtensionIds[i].substring(0, indx);
+					booleanString = contentExtensionIds[i].substring(indx+1, contentExtensionIds[i].length());
+					activatedExtensionsMap.put(id, Boolean.valueOf(booleanString));
+				} else {
+					// IS THIS THE RIGHT WAY TO HANDLE THIS CASE?
+					NavigatorContentDescriptor descriptor = CONTENT_DESCRIPTOR_REGISTRY.getContentDescriptor(contentExtensionIds[i]);
+					if(descriptor != null)
+						activatedExtensionsMap.put(id, Boolean.valueOf(descriptor.isActiveByDefault()));
+				}
+			}
+
+		} else {
+			/*
+			 * We add the default activation of every known extension, even
+			 * though some may not be bound to the associated content service;
+			 * this is because they could be bound at a later time through the
+			 * programmatic binding mechanism in INavigatorContentService.
+			 */
+			INavigatorContentDescriptor[] contentDescriptors = CONTENT_DESCRIPTOR_REGISTRY
+					.getAllContentDescriptors();
+			for (int i = 0; i < contentDescriptors.length; i++) {
+				if (contentDescriptors[i].isActiveByDefault()) {					
+					activatedExtensionsMap.put(contentDescriptors[i].getId(), Boolean.TRUE);
+				}
+			}
+		} 
+	}
+
+	private String getPreferenceKey() {
+		return contentService.getViewerId() + ACTIVATED_EXTENSIONS;
+	}
+
+
+	public INavigatorContentDescriptor[] activateExtensions(
+			String[] extensionIds, boolean toDeactivateAllOthers) {
+
+		Set activatedDescriptors = new HashSet(); 
+		setActive(extensionIds, true);
+		for (int extId = 0; extId < extensionIds.length; extId++) {
+			activatedDescriptors.add(CONTENT_DESCRIPTOR_REGISTRY
+					.getContentDescriptor(extensionIds[extId]));
+		}
+
+		if (toDeactivateAllOthers) {
+			NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+					.getAllContentDescriptors();
+			List descriptorList = new ArrayList(Arrays.asList(descriptors));
+
+			for (int descriptorIndx = 0; descriptorIndx < descriptors.length; descriptorIndx++) {
+				for (int extId = 0; extId < extensionIds.length; extId++) {
+					if (descriptors[descriptorIndx].getId().equals(
+							extensionIds[extId])) {
+						descriptorList.remove(descriptors[descriptorIndx]);
+					}
+				}
+			}
+
+			String[] deactivatedExtensions = new String[descriptorList.size()];
+			for (int i = 0; i < descriptorList.size(); i++) {
+				INavigatorContentDescriptor descriptor = (INavigatorContentDescriptor) descriptorList
+						.get(i);
+				deactivatedExtensions[i] = descriptor.getId();
+			}
+			setActive(deactivatedExtensions, false);
+		}
+
+		if (activatedDescriptors.size() == 0) {
+			return NO_DESCRIPTORS;
+		}
+		return (INavigatorContentDescriptor[]) activatedDescriptors
+				.toArray(new NavigatorContentDescriptor[activatedDescriptors
+						.size()]);
+	}
+
+	public INavigatorContentDescriptor[] deactivateExtensions(
+			String[] extensionIds, boolean toEnableAllOthers) {
+
+		Set activatedDescriptors = new HashSet(); 
+		setActive(extensionIds, false);
+
+		if (toEnableAllOthers) {
+			NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+					.getAllContentDescriptors();
+			List descriptorList = new ArrayList(Arrays.asList(descriptors));
+
+			for (int descriptorIndx = 0; descriptorIndx < descriptors.length; descriptorIndx++) {
+				for (int extId = 0; extId < extensionIds.length; extId++) {
+					if (descriptors[descriptorIndx].getId().equals(
+							extensionIds[extId])) {
+						descriptorList.remove(descriptors[descriptorIndx]);
+					}
+				}
+			}
+
+			String[] activatedExtensions = new String[descriptorList.size()];
+			for (int i = 0; i < descriptorList.size(); i++) {
+				NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor) descriptorList
+						.get(i);
+				activatedExtensions[i] = descriptor.getId();
+				activatedDescriptors.add(descriptor);
+			}
+			setActive(activatedExtensions,	true);
+		}
+		if (activatedDescriptors.size() == 0) {
+			return NO_DESCRIPTORS;
+		}
+
+		return (INavigatorContentDescriptor[]) activatedDescriptors
+				.toArray(new NavigatorContentDescriptor[activatedDescriptors
+						.size()]);
+	}
+
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java
new file mode 100755
index 0000000..f88527f
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java
@@ -0,0 +1,1267 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * Fair Issac Corp - bug 287103 - NCSLabelProvider does not properly handle overrides
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+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.LinkedHashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.internal.navigator.dnd.NavigatorDnDService;
+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorViewerDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorViewerDescriptorManager;
+import org.eclipse.ui.internal.navigator.extensions.StructuredViewerManager;
+import org.eclipse.ui.internal.navigator.sorters.NavigatorSorterService;
+import org.eclipse.ui.navigator.IDescriptionProvider;
+import org.eclipse.ui.navigator.IExtensionActivationListener;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.IMementoAware;
+import org.eclipse.ui.navigator.INavigatorActivationService;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorContentServiceListener;
+import org.eclipse.ui.navigator.INavigatorDnDService;
+import org.eclipse.ui.navigator.INavigatorFilterService;
+import org.eclipse.ui.navigator.INavigatorPipelineService;
+import org.eclipse.ui.navigator.INavigatorSaveablesService;
+import org.eclipse.ui.navigator.INavigatorSorterService;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+
+/**
+ * <p>
+ * Provides centralized access to the information provided by
+ * NavigatorContentExtensions. Can be instantiated as needed, but should be
+ * cached for active viewers. Information specific to a given viewer will be
+ * cached by the NavigatorContentService, not including ContentProviders and
+ * Label Providers created by {@link #createCommonContentProvider()}and
+ * {@link #createCommonLabelProvider()}respectively.
+ * </p>
+ * 
+ * <p>
+ * The following class is experimental until fully documented.
+ * </p>
+ */
+public class NavigatorContentService implements IExtensionActivationListener,
+		IMementoAware, INavigatorContentService {
+
+	/**
+	 * 
+	 */
+	public static final String WIDGET_KEY = "org.eclipse.ui.navigator"; //$NON-NLS-1$
+	
+	private static final NavigatorContentDescriptorManager CONTENT_DESCRIPTOR_REGISTRY = NavigatorContentDescriptorManager
+			.getInstance();
+
+	private static final NavigatorViewerDescriptorManager VIEWER_DESCRIPTOR_REGISTRY = NavigatorViewerDescriptorManager
+			.getInstance();
+
+	private static final ITreeContentProvider[] NO_CONTENT_PROVIDERS = new ITreeContentProvider[0];
+
+	private static final ILabelProvider[] NO_LABEL_PROVIDERS = new ILabelProvider[0];
+
+	private static final INavigatorContentDescriptor[] NO_DESCRIPTORS = new INavigatorContentDescriptor[0];
+
+	private static final String[] NO_EXTENSION_IDS = new String[0];
+
+	private final NavigatorViewerDescriptor viewerDescriptor;
+
+	private final List listeners = new ArrayList();
+
+	/*
+	 * A map of (String-based-Navigator-Content-Extension-IDs,
+	 * NavigatorContentExtension-objects)-pairs
+	 */
+	private final Map contentExtensions = new HashMap();
+
+	private StructuredViewerManager structuredViewerManager;
+
+	private ITreeContentProvider[] rootContentProviders;
+
+	private ITreeContentProvider contentProvider;
+
+	/*
+	 * Used when providing objects to the CommonViewer by the contentProvider
+	 * to record the object/description associations which are when stored
+	 * in the Tree associated with the viewer.
+	 */
+	private Map contributionMemory;
+	private Map contributionMemoryFirstClass;
+	
+	private ILabelProvider labelProvider;
+
+	private final VisibilityAssistant assistant;
+
+	private NavigatorFilterService navigatorFilterService;
+
+	private NavigatorSorterService navigatorSorterService;
+
+	private INavigatorPipelineService navigatorPipelineService;
+
+	private INavigatorDnDService navigatorDnDService;
+
+	private INavigatorActivationService navigatorActivationService;
+
+	private NavigatorSaveablesService navigatorSaveablesService;
+
+	private NavigatorExtensionStateService navigatorExtensionStateService;
+
+	private IDescriptionProvider descriptionProvider;
+
+	private boolean contentProviderInitialized;
+
+	private boolean labelProviderInitialized;
+
+	private boolean isDisposed;
+	
+	/**
+	 * @param aViewerId
+	 *            The viewer id for this content service; normally from the
+	 *            <b>org.eclipse.ui.views</b> extension.
+	 */
+	public NavigatorContentService(String aViewerId) {
+		super();
+		aViewerId = aViewerId != null ? aViewerId : ""; //$NON-NLS-1$
+		viewerDescriptor = VIEWER_DESCRIPTOR_REGISTRY
+				.getNavigatorViewerDescriptor(aViewerId);
+		assistant = new VisibilityAssistant(viewerDescriptor,
+				getActivationService());
+		getActivationService().addExtensionActivationListener(this);
+		contributionMemory = new HashMap();
+		contributionMemoryFirstClass = new HashMap();
+	}
+
+	/**
+	 * @param aViewerId
+	 *            The viewer id for this content service; normally from the
+	 *            <b>org.eclipse.ui.views</b> extension.
+	 * @param aViewer
+	 *            The viewer that this content service will be associated with.
+	 */
+	public NavigatorContentService(String aViewerId, StructuredViewer aViewer) {
+		this(aViewerId);
+		structuredViewerManager = new StructuredViewerManager(aViewer, this);
+	}
+
+	public String[] getVisibleExtensionIds() {
+
+		List visibleExtensionIds = new ArrayList();
+
+		NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+				.getAllContentDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			if (assistant.isVisible(descriptors[i].getId())) {
+				visibleExtensionIds.add(descriptors[i].getId());
+			}
+		}
+		if (visibleExtensionIds.isEmpty()) {
+			return NO_EXTENSION_IDS;
+		}
+		return (String[]) visibleExtensionIds
+				.toArray(new String[visibleExtensionIds.size()]);
+
+	}
+
+	public INavigatorContentDescriptor[] getVisibleExtensions() {
+		List visibleDescriptors = new ArrayList();
+
+		NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+				.getAllContentDescriptors();
+		for (int i = 0; i < descriptors.length; i++) {
+			if (assistant.isVisible(descriptors[i].getId())) {
+				visibleDescriptors.add(descriptors[i]);
+			}
+		}
+		if (visibleDescriptors.isEmpty()) {
+			return NO_DESCRIPTORS;
+		}
+		return (INavigatorContentDescriptor[]) visibleDescriptors
+				.toArray(new INavigatorContentDescriptor[visibleDescriptors
+						.size()]);
+
+	}
+
+	/* package */INavigatorContentDescriptor[] getActiveDescriptorsWithSaveables() {
+		List result = new ArrayList();
+
+		NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+				.getContentDescriptorsWithSaveables();
+		for (int i = 0; i < descriptors.length; i++) {
+			if (assistant.isVisible(descriptors[i].getId())
+					&& assistant.isActive(descriptors[i])) {
+				result.add(descriptors[i]);
+			}
+		}
+		if (result.isEmpty()) {
+			return NO_DESCRIPTORS;
+		}
+		return (INavigatorContentDescriptor[]) result
+				.toArray(new INavigatorContentDescriptor[result.size()]);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.navigator.INavigatorContentService#bindExtensions(java
+	 * .lang.String[], boolean)
+	 */
+	public INavigatorContentDescriptor[] bindExtensions(String[] extensionIds,
+			boolean isRoot) {
+		if (extensionIds == null || extensionIds.length == 0) {
+			return NO_DESCRIPTORS;
+		}
+
+		for (int i = 0; i < extensionIds.length; i++) {
+			assistant.bindExtensions(extensionIds, isRoot);
+		}
+		Set boundDescriptors = new HashSet();
+		INavigatorContentDescriptor descriptor;
+		for (int i = 0; i < extensionIds.length; i++) {
+			descriptor = CONTENT_DESCRIPTOR_REGISTRY
+					.getContentDescriptor(extensionIds[i]);
+			if (descriptor != null) {
+				boundDescriptors.add(descriptor);
+			}
+		}
+
+		if (boundDescriptors.size() == 0) {
+			return NO_DESCRIPTORS;
+		}
+		
+		if (Policy.DEBUG_EXTENSION_SETUP) {
+			System.out.println("bindExtensions: " + //$NON-NLS-1$
+					boundDescriptors);
+		}
+		return (INavigatorContentDescriptor[]) boundDescriptors
+				.toArray(new INavigatorContentDescriptor[boundDescriptors
+						.size()]);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.eclipse.ui.internal.navigator.INavigatorContentService#
+	 * createCommonContentProvider()
+	 */
+	public ITreeContentProvider createCommonContentProvider() {
+		if (contentProviderInitialized) {
+			return contentProvider;
+		}
+		synchronized (this) {
+			if (contentProvider == null) {
+				contentProvider = new NavigatorContentServiceContentProvider(
+						this);
+			}
+			contentProviderInitialized = true;
+		}
+		return contentProvider;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.eclipse.ui.internal.navigator.INavigatorContentService#
+	 * createCommonLabelProvider()
+	 */
+	public ILabelProvider createCommonLabelProvider() {
+		if (labelProviderInitialized) {
+			return labelProvider;
+		}
+		synchronized (this) {
+			if (labelProvider == null) {
+				labelProvider = new NavigatorContentServiceLabelProvider(this);
+			}
+			labelProviderInitialized = true;
+		}
+		return labelProvider;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.eclipse.ui.navigator.INavigatorContentService#
+	 * createCommonDescriptionProvider()
+	 */
+	public IDescriptionProvider createCommonDescriptionProvider() {
+		if (descriptionProvider != null) {
+			return descriptionProvider;
+		}
+		synchronized (this) {
+			if (descriptionProvider == null) {
+				descriptionProvider = new NavigatorContentServiceDescriptionProvider(
+						this);
+			}
+		}
+		return descriptionProvider;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.INavigatorContentService#dispose()
+	 */
+	public void dispose() {
+		if (navigatorSaveablesService != null) {
+			assistant.removeListener(navigatorSaveablesService);
+		}
+		if (navigatorSorterService != null) {
+			assistant.removeListener(navigatorSorterService);
+		}
+		synchronized (this) {
+			for (Iterator contentItr = contentExtensions.values().iterator(); contentItr
+					.hasNext();) {
+				((NavigatorContentExtension) contentItr.next()).dispose();
+			}
+		}
+		getActivationService().removeExtensionActivationListener(this);
+		assistant.dispose();
+		isDisposed = true;
+	}
+
+	protected void updateService(Viewer aViewer, Object anOldInput,
+			Object aNewInput) {
+
+		// Prevents the world from being started again once we have been disposed.  In
+		// the dispose process, the ContentViewer will call setInput() on the
+		// NavigatorContentServiceContentProvider, which gets us here
+		if (isDisposed)
+			return;
+		synchronized (this) {
+
+			if (structuredViewerManager == null) {
+				structuredViewerManager = new StructuredViewerManager((StructuredViewer) aViewer, this);
+				structuredViewerManager.inputChanged(anOldInput, aNewInput);
+			} else {
+				structuredViewerManager.inputChanged(aViewer, anOldInput,
+						aNewInput);
+			}
+
+			for (Iterator contentItr = contentExtensions.values().iterator(); contentItr
+					.hasNext();) {
+				NavigatorContentExtension ext = (NavigatorContentExtension) contentItr
+						.next();
+				if (ext.isLoaded()) {
+					structuredViewerManager
+							.initialize(ext.internalGetContentProvider());
+				}
+			}
+
+			rootContentProviders = extractContentProviders(findRootContentExtensions(aNewInput));
+		}
+	}
+
+	public IExtensionStateModel findStateModel(String anExtensionId) {
+		if (anExtensionId == null) {
+			return null;
+		}
+		INavigatorContentDescriptor desc = CONTENT_DESCRIPTOR_REGISTRY
+				.getContentDescriptor(anExtensionId);
+		if (desc == null) {
+			return null;
+		}
+		INavigatorContentExtension ext = getExtension(desc);
+		if (ext == null) {
+			return null;
+		}
+		return ext.getStateModel();
+	}
+
+	/**
+	 * <p>
+	 * Return all of the content providers that are relevant for the viewer. The
+	 * viewer is determined by the ID used to create the
+	 * INavigatorContentService ({@link #getViewerId() }). See
+	 * {@link #createCommonContentProvider() } for more information about how
+	 * content providers are located for the root of the viewer. The root
+	 * content providers are calculated once. If a new element is supplied, a
+	 * client must call {@link #update() } prior in order to reset the calculated
+	 * root providers.
+	 * </p>
+	 * 
+	 * @param anElement
+	 *            An element from the tree (generally the input of the viewer)
+	 * @return The set of content providers that can provide root elements for a
+	 *         viewer.
+	 */
+	public ITreeContentProvider[] findRootContentProviders(Object anElement) {
+		if (rootContentProviders != null) {
+			return rootContentProviders;
+		}
+		synchronized (this) {
+			if (rootContentProviders == null) {
+				rootContentProviders = extractContentProviders(findRootContentExtensions(anElement));
+
+			}
+		}
+		return rootContentProviders;
+	}
+	
+	/**
+	 * Returns the list of extensions that should be considered as possible
+	 * contributors of CNF artifacts (labels, sorters, ...). The algorithm
+	 * first considers the source of contribution and its overrides, and then
+	 * any possibleChildren and their overrides in order.
+	 * 
+	 * @param anElement
+	 *            An element from the tree (any element contributed to the
+	 *            tree).
+	 * @return A Collection of NCEs sorted in the correct order for label provider application
+	 */
+	public Collection findPossibleLabelExtensions(Object anElement) {
+		LinkedHashSet contributors = new LinkedHashSet();
+		INavigatorContentDescriptor sourceDescriptor = getSourceOfContribution(anElement);
+		
+		// This is a TreeSet sorted ascending
+		Set possibleChildDescriptors = findDescriptorsWithPossibleChild(anElement, false);
+
+		// Add the source so that it gets sorted into the right place
+		if (sourceDescriptor != null) {
+			possibleChildDescriptors.add(sourceDescriptor);
+		}
+
+		for (Iterator iter = possibleChildDescriptors.iterator(); iter.hasNext();) {
+			NavigatorContentDescriptor ncd = (NavigatorContentDescriptor) iter.next();
+			findOverridingLabelExtensions(anElement, ncd, contributors);
+		}
+		
+		return contributors;
+	}
+
+	private void findOverridingLabelExtensions(Object anElement,
+			INavigatorContentDescriptor descriptor, LinkedHashSet contributors) {
+		ListIterator iter = ((NavigatorContentDescriptor) descriptor).getOverridingExtensionsListIterator(false);
+		while (iter.hasPrevious()) {
+			INavigatorContentDescriptor child = (INavigatorContentDescriptor) iter.previous();
+			if (assistant.isVisibleAndActive(child) && child.isPossibleChild(anElement)) {
+				findOverridingLabelExtensions(anElement, child, contributors);
+			}
+		}
+		contributors.add(getExtension(descriptor));
+	}
+	
+	/**
+	 * 
+	 * The label provider that is are enabled for the given element.
+	 * A label provider is 'enabled' if its corresponding content provider
+	 * returned the element.
+	 * 
+	 * @param anElement
+	 *            An element from the tree (any element contributed to the
+	 *            tree).
+	 * @return The label provider
+	 */
+	public ILabelProvider[] findRelevantLabelProviders(Object anElement) {
+		Collection extensions = findPossibleLabelExtensions(anElement);
+		
+		if (extensions.size() == 0) {
+			return NO_LABEL_PROVIDERS;
+		}
+		List resultProvidersList = new ArrayList();
+		for (Iterator itr = extensions.iterator(); itr.hasNext();) {
+			resultProvidersList.add(((NavigatorContentExtension) itr.next()).getLabelProvider());
+		}
+		return (ILabelProvider[]) resultProvidersList.toArray(new ILabelProvider[resultProvidersList.size()]);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         either declared through a
+	 *         <b>org.eclipse.ui.navigator.viewer/viewerContentBinding</b> to be
+	 *         a root element or have a <b>triggerPoints</b> expression that is
+	 *         <i>enabled</i> for the given element.
+	 */
+	public Set findRootContentExtensions(Object anElement) {
+		return findRootContentExtensions(anElement, true);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @param toRespectViewerRoots
+	 *            True respect the <b>viewerContentBinding</b>s, False will look
+	 *            only for matching <b>triggerPoints</b> expressions.
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         either declared through a
+	 *         <b>org.eclipse.ui.navigator.viewer/viewerContentBinding</b> to be
+	 *         a root element or have a <b>triggerPoints</b> expression that is
+	 *         <i>enabled</i> for the given element.
+	 */
+	public Set findRootContentExtensions(Object anElement,
+			boolean toRespectViewerRoots) {
+
+		SortedSet rootExtensions = new TreeSet(
+				ExtensionSequenceNumberComparator.INSTANCE);
+		if (toRespectViewerRoots
+				/*&& viewerDescriptor.hasOverriddenRootExtensions()*/) {
+
+			NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY
+					.getAllContentDescriptors();
+
+			NavigatorContentExtension extension = null;
+			for (int i = 0; i < descriptors.length; i++) {
+				if (isActive(descriptors[i].getId())
+						&& isRootExtension(descriptors[i].getId())) {
+					extension = getExtension(descriptors[i]);
+					if (!extension.hasLoadingFailed()) {
+						rootExtensions.add(extension);
+					}
+				}
+			}
+		}
+		if (rootExtensions.isEmpty()) {
+			return findContentExtensionsByTriggerPoint(anElement);
+		}
+		return rootExtensions;
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	public Set findOverrideableContentExtensionsForPossibleChild(
+			Object anElement) {
+		Set overrideableExtensions = new TreeSet(
+				ExtensionSequenceNumberComparator.INSTANCE);
+		Set descriptors = findDescriptorsWithPossibleChild(anElement, false);
+		for (Iterator iter = descriptors.iterator(); iter.hasNext();) {
+			INavigatorContentDescriptor descriptor = (INavigatorContentDescriptor) iter
+					.next();
+			if (descriptor.hasOverridingExtensions()) {
+				overrideableExtensions.add(getExtension(descriptor));
+			}
+		}
+		return overrideableExtensions;
+	}
+
+	/*
+	 * (Non-Javadoc)
+	 * 
+	 * @see INavigatorContentService#getContentDescriptorById(String)
+	 */
+	public INavigatorContentDescriptor getContentDescriptorById(
+			String anExtensionId) {
+		return CONTENT_DESCRIPTOR_REGISTRY.getContentDescriptor(anExtensionId);
+	}
+
+	/**
+	 * 
+	 * @param anExtensionId
+	 *            The id used to define the
+	 *            <b>org.eclipse.ui.navigator.navigatorContent
+	 *            /navigatorContent</b> extension.
+	 * @return An instance of the content extension for the given extension id.
+	 *         May return <b>null</b> if the id is invalid.
+	 */
+	public INavigatorContentExtension getContentExtensionById(
+			String anExtensionId) {
+		NavigatorContentDescriptor descriptor = CONTENT_DESCRIPTOR_REGISTRY
+				.getContentDescriptor(anExtensionId);
+		if (descriptor != null)
+			return getExtension(descriptor);
+		return null;
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>triggerPoints</b> expression that is <i>enabled</i> for
+	 *         the given element.
+	 */
+	public Set findContentExtensionsByTriggerPoint(Object anElement) {
+		return findContentExtensionsByTriggerPoint(anElement, true, !CONSIDER_OVERRIDES);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @param toLoadIfNecessary
+	 *            True will force the load of the extension, False will not
+	 * @param computeOverrides
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>triggerPoints</b> expression that is <i>enabled</i> for
+	 *         the given element.
+	 */
+	public Set findContentExtensionsByTriggerPoint(Object anElement,
+			boolean toLoadIfNecessary, boolean computeOverrides) {
+		Set enabledDescriptors = findDescriptorsByTriggerPoint(anElement, computeOverrides);
+		return extractDescriptorInstances(enabledDescriptors, toLoadIfNecessary);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	public Set findContentExtensionsWithPossibleChild(Object anElement) {
+		return findContentExtensionsWithPossibleChild(anElement, true);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @param toLoadIfNecessary
+	 *            True will force the load of the extension, False will not
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	public Set findContentExtensionsWithPossibleChild(Object anElement,
+			boolean toLoadIfNecessary) {
+		Set enabledDescriptors = findDescriptorsWithPossibleChild(anElement);
+		return extractDescriptorInstances(enabledDescriptors, toLoadIfNecessary);
+	}
+
+	/**
+	 * 
+	 * 
+	 * @param firstClassSource
+	 * @param source
+	 * @param element
+	 */
+	public void rememberContribution(INavigatorContentDescriptor source,
+			INavigatorContentDescriptor firstClassSource, Object element) {
+		/*
+		 * We want to write to (overwrite) the contributionMemory only if we
+		 * have never heard of the element before, or if the element is coming
+		 * from the same first class NCE, which means that the subsequent NCE is
+		 * an override. The override will take precedence over the originally
+		 * contributing NCE. However in the case of different first class NCEs,
+		 * the first one wins, so we don't update the contribution memory.
+		 */
+		synchronized (this) {
+			if (contributionMemory.get(element) == null
+					|| contributionMemoryFirstClass.get(element) == firstClassSource) {
+				if (Policy.DEBUG_RESOLUTION)
+					System.out
+							.println("rememberContribution: " + Policy.getObjectString(element) + " source: " + source); //$NON-NLS-1$//$NON-NLS-2$
+				contributionMemory.put(element, source);
+				contributionMemoryFirstClass.put(element, firstClassSource);
+			}
+		}
+	}
+
+	/**
+	 * Forget about the specified element
+	 * 
+	 * @param element
+	 *            The element to forget.
+	 */
+	public void forgetContribution(Object element) {
+		synchronized (this) {
+			contributionMemory.remove(element);
+			contributionMemoryFirstClass.remove(element);
+		}
+	}
+
+	/**
+	 * @param element
+	 * @return the remembered NavigatorContentDescriptor
+	 */
+	public NavigatorContentDescriptor getContribution(Object element)
+	{
+		NavigatorContentDescriptor desc;
+		synchronized (this) {
+			desc = (NavigatorContentDescriptor) contributionMemory.get(element);
+		}
+		return desc;
+	}
+	
+	/**
+	 * Used only for the tests
+	 * @return the size of the contribution memory
+	 */
+	public int getContributionMemorySize() {
+		synchronized (this) {
+			return contributionMemory.size();
+		}
+	}
+	
+	/**
+	 * 
+	 * @param element
+	 *            The element contributed by the descriptor to be returned
+	 * @return The descriptor that contributed the element or null.
+	 * @see #findContentExtensionsByTriggerPoint(Object)
+	 */
+	public synchronized NavigatorContentDescriptor getSourceOfContribution(Object element) {
+		if (element == null)
+			return null;
+		if (structuredViewerManager == null)
+			return null;
+		// Try here first because it might not yet be in the tree
+		NavigatorContentDescriptor src;
+		synchronized (this) {
+			src = (NavigatorContentDescriptor) contributionMemory.get(element);
+		}
+		if (src != null)
+			return src;
+		return (NavigatorContentDescriptor) structuredViewerManager.getData(element);
+	}
+	/**
+	 * 
+	 */
+	public static final boolean CONSIDER_OVERRIDES = true;
+	
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @param considerOverrides
+	 * 
+	 * @return The set of {@link INavigatorContentDescriptor}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>triggerPoints</b> expression that is <i>enabled</i> for
+	 *         the given element.
+	 */
+	public Set findDescriptorsByTriggerPoint(Object anElement, boolean considerOverrides) {
+		// Here we use the cache, since objects are inserted into the
+		// cache in response to the trigger point
+		NavigatorContentDescriptor descriptor = getSourceOfContribution(anElement);
+		Set result = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE);
+		if (descriptor != null) {
+			result.add(descriptor);
+		}
+		result.addAll(CONTENT_DESCRIPTOR_REGISTRY
+				.findDescriptorsForTriggerPoint(anElement, assistant, considerOverrides));
+		return result;
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentDescriptor}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	public Set findDescriptorsWithPossibleChild(Object anElement) {
+		return findDescriptorsWithPossibleChild(anElement, true);
+	}
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @param toComputeOverrides
+	 *            True indicates the overridden tree should be traversed.
+	 * @return The set of {@link INavigatorContentDescriptor}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	public Set findDescriptorsWithPossibleChild(Object anElement,
+			boolean toComputeOverrides) {
+		// Don't use the cache which is only used for triggerPoints
+		Set result = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE);
+		result.addAll(CONTENT_DESCRIPTOR_REGISTRY
+				.findDescriptorsForPossibleChild(anElement, assistant,
+						toComputeOverrides));
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.eclipse.ui.internal.navigator.INavigatorContentService#
+	 * onExtensionActivation(java.lang.String, java.lang.String, boolean)
+	 */
+	public void onExtensionActivation(String aViewerId,
+			String[] aNavigatorExtensionId, boolean toEnable) {
+		synchronized (this) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					NavigatorContentDescriptor key;
+					NavigatorContentExtension extension;
+					for (Iterator iter = contentExtensions.keySet().iterator(); iter
+							.hasNext();) {
+						key = (NavigatorContentDescriptor) iter.next();
+						INavigatorActivationService activation = getActivationService();
+						if (!activation.isNavigatorExtensionActive(key.getId())) {
+							extension = (NavigatorContentExtension) contentExtensions
+									.get(key);
+							iter.remove();
+							extension.dispose();
+						}
+					}
+				}
+			});
+		}
+		if (structuredViewerManager != null) {
+			structuredViewerManager.resetViewerData();
+		}
+		update();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.INavigatorContentService#update()
+	 */
+	public void update() {
+		rootContentProviders = null;
+		if (structuredViewerManager != null) {
+			structuredViewerManager.safeRefresh();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.INavigatorContentService#getViewerId()
+	 */
+	public final String getViewerId() {
+		return viewerDescriptor.getViewerId();
+	}
+
+	/**
+	 * Returns the remembered data (the NavigatorContentDescriptor) associated with
+	 * an object in the viewer. This can be used to test an object's presence in the viewer.
+	 * @param element
+	 * @return the object stored as data in the viewer
+	 */
+	public Object getViewerElementData(Object element) {
+		if (structuredViewerManager != null) {
+			return structuredViewerManager.getData(element);
+		}
+		return null;
+	}
+	
+	/**
+	 * 
+	 * @param aDescriptorKey
+	 *            A descriptor
+	 * @return The cached NavigatorContentExtension from the descriptor
+	 */
+	public final NavigatorContentExtension getExtension(
+			INavigatorContentDescriptor aDescriptorKey) {
+		return getExtension(aDescriptorKey, true);
+	}
+
+	/**
+	 * 
+	 * @param aDescriptorKey
+	 * @param toLoadIfNecessary
+	 *            True if the extension should be loaded if it is not already.
+	 * @return The instance of the extension for the given descriptor key.
+	 */
+	public final NavigatorContentExtension getExtension(
+			INavigatorContentDescriptor aDescriptorKey,
+			boolean toLoadIfNecessary) {
+		/* Query and return the relevant descriptor instance */
+		NavigatorContentExtension extension = (NavigatorContentExtension) contentExtensions
+				.get(aDescriptorKey);
+		if (extension != null || !toLoadIfNecessary) {
+			return extension;
+		}
+
+		/*
+		 * If the descriptor instance hasn't been created yet, then we need to
+		 * (1) verify that it wasn't added by another thread, (2) create and add
+		 * the result into the map
+		 */
+		synchronized (this) {
+			extension = (NavigatorContentExtension) contentExtensions
+					.get(aDescriptorKey);
+			if (extension == null) {
+				contentExtensions.put(aDescriptorKey,
+						(extension = new NavigatorContentExtension(
+								(NavigatorContentDescriptor) aDescriptorKey,
+								this, structuredViewerManager)));
+				notifyListeners(extension);
+			}
+		}
+		return extension;
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.eclipse.ui.internal.navigator.INavigatorContentService#
+	 * getViewerDescriptor()
+	 */
+	public INavigatorViewerDescriptor getViewerDescriptor() {
+		return viewerDescriptor;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.INavigatorContentService#restoreState
+	 * (org.eclipse.ui.IMemento)
+	 */
+	public void restoreState(final IMemento aMemento) {
+		synchronized (this) {
+			for (Iterator extensionItr = getExtensions().iterator(); extensionItr.hasNext();) {
+				final NavigatorContentExtension element = (NavigatorContentExtension) extensionItr
+						.next();
+				SafeRunner.run(new NavigatorSafeRunnable(((NavigatorContentDescriptor) element
+						.getDescriptor()).getConfigElement()) {
+					public void run() throws Exception {
+						element.restoreState(aMemento);
+					}
+				});
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.INavigatorContentService#saveState(
+	 * org.eclipse.ui.IMemento)
+	 */
+	public void saveState(final IMemento aMemento) {
+		synchronized (this) {
+			for (Iterator extensionItr = getExtensions().iterator(); extensionItr.hasNext();) {
+				final NavigatorContentExtension element = (NavigatorContentExtension) extensionItr
+						.next();
+				SafeRunner.run(new NavigatorSafeRunnable(((NavigatorContentDescriptor) element
+						.getDescriptor()).getConfigElement()) {
+					public void run() throws Exception {
+						element.saveState(aMemento);
+					}
+				});
+			}
+		}
+	}
+
+	public boolean isActive(String anExtensionId) {
+		return assistant.isActive(anExtensionId);
+	}
+
+	public boolean isVisible(String anExtensionId) {
+		return assistant.isVisible(anExtensionId);
+	}
+
+	protected final Collection getExtensions() {
+		return (contentExtensions.size() > 0) ? Collections
+				.unmodifiableCollection(contentExtensions.values())
+				: Collections.EMPTY_LIST;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.INavigatorContentService#addListener
+	 * (org
+	 * .eclipse.ui.internal.navigator.extensions.INavigatorContentServiceListener
+	 * )
+	 */
+	public void addListener(INavigatorContentServiceListener aListener) {
+		listeners.add(aListener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorContentService#getFilterService()
+	 */
+	public INavigatorFilterService getFilterService() {
+		if (navigatorFilterService == null) {
+			navigatorFilterService = new NavigatorFilterService(this);
+		}
+		return navigatorFilterService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorContentService#getFilterService()
+	 */
+	public INavigatorSorterService getSorterService() {
+		if (navigatorSorterService == null) {
+			navigatorSorterService = new NavigatorSorterService(this);
+			assistant.addListener(navigatorSorterService);
+		}
+		return navigatorSorterService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorContentService#getFilterService()
+	 */
+	public INavigatorPipelineService getPipelineService() {
+		if (navigatorPipelineService == null) {
+			navigatorPipelineService = new NavigatorPipelineService(this);
+		}
+		return navigatorPipelineService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorContentService#getDnDService()
+	 */
+	public INavigatorDnDService getDnDService() {
+		if (navigatorDnDService == null) {
+			navigatorDnDService = new NavigatorDnDService(this);
+		}
+		return navigatorDnDService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.navigator.INavigatorContentService#getActivationService()
+	 */
+	public INavigatorActivationService getActivationService() {
+
+		if (navigatorActivationService == null) {
+			navigatorActivationService = new NavigatorActivationService(this);
+		}
+		return navigatorActivationService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.navigator.INavigatorContentService#getSaveableService()
+	 */
+	public INavigatorSaveablesService getSaveablesService() {
+		synchronized (this) {
+			if (navigatorSaveablesService == null) {
+				navigatorSaveablesService = new NavigatorSaveablesService(this);
+				assistant.addListener(navigatorSaveablesService);
+			}
+			return navigatorSaveablesService;
+		}
+	}
+
+	/**
+	 * Not API as of 3.3.
+	 * 
+	 * @return The extension state service for this content service.
+	 * 
+	 */
+	public NavigatorExtensionStateService getExtensionStateService() {
+		if (navigatorExtensionStateService == null) {
+			navigatorExtensionStateService = new NavigatorExtensionStateService(
+					this);
+		}
+		return navigatorExtensionStateService;
+	}
+
+	/**
+	 * Non-API method to return a shell.
+	 * 
+	 * @return A shell associated with the current viewer (if any) or
+	 *         <b>null</b>.
+	 */
+	public Shell getShell() {
+		if (structuredViewerManager != null
+				&& structuredViewerManager.getViewer() != null) {
+			return structuredViewerManager.getViewer().getControl().getShell();
+		}
+		return null;
+	}
+
+	protected boolean isRootExtension(String anExtensionId) {
+		return assistant.isRootExtension(anExtensionId);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.INavigatorContentService#removeListener
+	 * (
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentServiceListener
+	 * )
+	 */
+	public void removeListener(INavigatorContentServiceListener aListener) {
+		listeners.remove(aListener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "ContentService[" + viewerDescriptor.getViewerId() + "]"; //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	private void notifyListeners(final NavigatorContentExtension aDescriptorInstance) {
+
+		if (listeners.size() == 0) {
+			return;
+		}
+
+		final List failedListeners = new ArrayList();
+
+		for (Iterator listenersItr = listeners.iterator(); listenersItr.hasNext();) {
+			final INavigatorContentServiceListener listener = (INavigatorContentServiceListener) listenersItr
+					.next();
+			SafeRunner.run(new NavigatorSafeRunnable() {
+
+				public void run() throws Exception {
+					listener.onLoad(aDescriptorInstance);
+				}
+
+				public void handleException(Throwable e) {
+					super.handleException(e);
+					failedListeners.add(listener);
+				}
+			});
+		}
+
+		if (failedListeners.size() > 0) {
+			listeners.removeAll(failedListeners);
+		}		
+	}
+
+	private ITreeContentProvider[] extractContentProviders(
+			Set theDescriptorInstances) {
+		if (theDescriptorInstances.size() == 0) {
+			return NO_CONTENT_PROVIDERS;
+		}
+		List resultProvidersList = new ArrayList();
+		for (Iterator itr = theDescriptorInstances.iterator(); itr.hasNext();) {
+			resultProvidersList.add(((NavigatorContentExtension) itr.next())
+					.internalGetContentProvider());
+		}
+		return (ITreeContentProvider[]) resultProvidersList
+				.toArray(new ITreeContentProvider[resultProvidersList.size()]);
+	}
+
+	private Set extractDescriptorInstances(Set theDescriptors,
+			boolean toLoadAllIfNecessary) {
+		if (theDescriptors.size() == 0) {
+			return Collections.EMPTY_SET;
+		}
+		Set resultInstances = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE);
+		for (Iterator descriptorIter = theDescriptors.iterator(); descriptorIter
+				.hasNext();) {
+			NavigatorContentExtension extension = getExtension(
+					(NavigatorContentDescriptor) descriptorIter.next(),
+					toLoadAllIfNecessary);
+			if (extension != null) {
+				resultInstances.add(extension);
+
+			}
+		}
+		return resultInstances;
+	}
+
+	/**
+	 * @return the viewer
+	 */
+	public Viewer getViewer() {
+		return structuredViewerManager.getViewer();
+	}
+
+	
+	/**
+	 * Get our preferences
+	 */
+	static IEclipsePreferences getPreferencesRoot() {
+		IEclipsePreferences root = (IEclipsePreferences) Platform.getPreferencesService().getRootNode().node(
+				InstanceScope.SCOPE);
+		return (IEclipsePreferences) root.node(NavigatorPlugin.PLUGIN_ID);
+	}
+	
+	
+	static void flushPreferences(IEclipsePreferences prefs) {
+		try {
+			prefs.flush();
+		} catch (BackingStoreException e) {
+			IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, IStatus.ERROR,
+					CommonNavigatorMessages.NavigatorContentService_problemSavingPreferences, e);
+			Platform.getLog(Platform.getBundle(NavigatorPlugin.PLUGIN_ID)).log(status);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
new file mode 100755
index 0000000..b25b1d2
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
@@ -0,0 +1,677 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *     Anton Leherbauer, Wind River
+ *       bug 261031 [CommonNavigator] IPipelinedContentProvider getParent() returning the suggested parent is not ignored
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreePathContentProvider;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorViewerDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.OverridePolicy;
+
+/**
+ * <p>
+ * Provides relevant content based on the associated
+ * {@link org.eclipse.ui.internal.navigator.NavigatorContentService}&nbsp; for a
+ * TreeViewer .
+ * </p>
+ * <p>
+ * Except for the dependency on
+ * {@link org.eclipse.ui.internal.navigator.NavigatorContentService}, this class
+ * has no dependencies on the rest of the Common Navigator framework. Tree
+ * viewers that would like to use the extensions defined by the Common
+ * Navigator, without using the actual view part or other pieces of
+ * functionality (filters, sorting, etc) may choose to use this class, in effect
+ * using an extensible, aggregating, delegate content provider.
+ * </p>
+ * 
+ * @see org.eclipse.ui.internal.navigator.NavigatorContentService
+ * @see org.eclipse.ui.internal.navigator.NavigatorContentServiceLabelProvider
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorContentServiceContentProvider implements ITreeContentProvider, ITreePathContentProvider {
+
+	private static final Object[] NO_CHILDREN = new Object[0];
+
+	private final NavigatorContentService contentService;
+
+	private boolean disposeContentService;
+
+	private final boolean enforceHasChildren;
+
+	private Viewer viewer;
+
+	/**
+	 * <p>
+	 * Creates a cached {@link NavigatorContentService}&nbsp;from the given
+	 * viewer Id.
+	 * </p>
+	 * 
+	 * @param aViewerId
+	 *            The associated viewer id that this
+	 *            NavigatorContentServiceContentProvider will provide content
+	 *            for
+	 */
+	public NavigatorContentServiceContentProvider(String aViewerId) {
+		this(new NavigatorContentService(aViewerId));
+		disposeContentService = true;
+	}
+
+	/**
+	 * <p>
+	 * Uses the supplied content service to acquire the available extensions.
+	 * </p>
+	 * 
+	 * @param aContentService
+	 *            The associated NavigatorContentService that should be used to
+	 *            acquire information.
+	 */
+	public NavigatorContentServiceContentProvider(NavigatorContentService aContentService) {
+		super();
+		contentService = aContentService;
+		INavigatorViewerDescriptor vDesc = contentService.getViewerDescriptor();
+		enforceHasChildren = vDesc.getBooleanConfigProperty(NavigatorViewerDescriptor.PROP_ENFORCE_HAS_CHILDREN);
+	}
+
+	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
+		viewer = aViewer;
+		contentService.updateService(aViewer, anOldInput, aNewInput);
+	}
+
+	public Object[] getElements(Object anInputElement) {
+		Set rootContentExtensions = contentService.findRootContentExtensions(anInputElement);
+		return internalGetChildren(anInputElement, anInputElement, rootContentExtensions, ELEMENTS);
+	}
+
+	public Object[] getChildren(Object aParentElement) {
+		Set enabledExtensions = contentService.findContentExtensionsByTriggerPoint(aParentElement);
+		return internalGetChildren(aParentElement, aParentElement, enabledExtensions, !ELEMENTS);
+	}
+
+	public Object[] getChildren(TreePath parentPath) {
+		Object aParentElement = internalAsElement(parentPath);
+		Set enabledExtensions = contentService.findContentExtensionsByTriggerPoint(aParentElement);
+		return internalGetChildren(aParentElement, parentPath, enabledExtensions, !ELEMENTS);
+	}
+	
+	private static final boolean ELEMENTS = true;
+
+	private Object[] internalGetChildren(final Object aParentElement,
+			final Object aParentElementOrPath, final Set enabledExtensions, final boolean elements) {
+		if (enabledExtensions.size() == 0) {
+			return NO_CHILDREN;
+		}
+		final Set finalSet = new LinkedHashSet();
+		final ContributorTrackingSet localSet = new ContributorTrackingSet(contentService);
+
+		for (final Iterator itr = enabledExtensions.iterator(); itr.hasNext();) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				NavigatorContentExtension foundExtension = (NavigatorContentExtension) itr.next();
+				Object[] contributedChildren = null;
+				NavigatorContentExtension[] overridingExtensions;
+
+				public void run() throws Exception {
+					if (!isOverridingExtensionInSet(foundExtension.getDescriptor(),
+							enabledExtensions)) {
+						if (elements)
+							contributedChildren = foundExtension.internalGetContentProvider()
+									.getElements(aParentElementOrPath);
+						else
+							contributedChildren = foundExtension.internalGetContentProvider()
+									.getChildren(aParentElementOrPath);
+						overridingExtensions = foundExtension
+								.getOverridingExtensionsForTriggerPoint(aParentElement);
+						INavigatorContentDescriptor foundDescriptor = foundExtension
+								.getDescriptor();
+						localSet.setContributor(foundDescriptor, foundDescriptor);
+						localSet.setContents(contributedChildren);
+
+						if (overridingExtensions.length > 0) {
+							pipelineChildren(aParentElement, overridingExtensions, foundDescriptor,
+									localSet, elements);
+						}
+						finalSet.addAll(localSet);
+					}
+				}
+
+				public void handleException(Throwable e) {
+					NavigatorPlugin.logError(0, NLS.bind(
+							CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+									foundExtension.getDescriptor().getId(), aParentElement }), e);
+				}
+			});
+		}		
+
+		return finalSet.toArray();
+	}
+
+	/**
+	 * Query each of <code>theOverridingExtensions</code> for children, and then
+	 * pipe them through the Pipeline content provider.
+	 * 
+	 * @param aParent
+	 *            The parent element in the tree
+	 * @param theOverridingExtensions
+	 *            The set of overriding extensions that should participate in
+	 *            the pipeline chain
+	 * @param pipelinedChildren
+	 *            The current children to return to the viewer (should be
+	 *            modifiable)
+	 */
+	private void pipelineChildren(Object aParent, NavigatorContentExtension[] theOverridingExtensions,
+			INavigatorContentDescriptor firstClassDescriptor, ContributorTrackingSet pipelinedChildren, boolean elements) {
+		IPipelinedTreeContentProvider pipelinedContentProvider;
+		NavigatorContentExtension[] overridingExtensions;
+		for (int i = 0; i < theOverridingExtensions.length; i++) {
+
+			if (theOverridingExtensions[i].internalGetContentProvider().isPipelined()) {
+				pipelinedContentProvider = (IPipelinedTreeContentProvider) theOverridingExtensions[i]
+						.internalGetContentProvider();
+				pipelinedChildren.setContributor(theOverridingExtensions[i]
+						.getDescriptor(), firstClassDescriptor);
+				if (elements) {
+					pipelinedContentProvider.getPipelinedElements(aParent, pipelinedChildren);
+				} else {
+					pipelinedContentProvider.getPipelinedChildren(aParent, pipelinedChildren);
+				}
+				overridingExtensions = theOverridingExtensions[i].getOverridingExtensionsForTriggerPoint(aParent);
+				if (overridingExtensions.length > 0) {
+					pipelineChildren(aParent, overridingExtensions, firstClassDescriptor, pipelinedChildren, elements);
+				}
+			}
+		}
+	}
+
+	
+	/**
+	 * Currently this method only checks one level deep. If the suppressed
+	 * extension of the given descriptor is contained lower in the tree, then
+	 * the extension could still be invoked twice.
+	 * 
+	 * @param aDescriptor
+	 *            The descriptor which may be overriding other extensions.
+	 * @param theEnabledExtensions
+	 *            The other available extensions.
+	 * @return True if the results should be pipelined through the downstream
+	 *         extensions.
+	 */
+	private boolean isOverridingExtensionInSet(INavigatorContentDescriptor aDescriptor, Set theEnabledExtensions) {
+
+		if (aDescriptor.getSuppressedExtensionId() != null /*
+															 * The descriptor is
+															 * an override
+															 * descriptor
+															 */
+				&& aDescriptor.getOverridePolicy() == OverridePolicy.InvokeAlwaysRegardlessOfSuppressedExt) {
+			/*
+			 * if the policy is set as such, it can lead to this extension being
+			 * invoked twice; once as a first class extension, and once an
+			 * overriding extension.
+			 */
+			if (theEnabledExtensions.contains(contentService.getExtension(aDescriptor.getOverriddenDescriptor()))) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Currently this method only checks one level deep. If the suppressed
+	 * extension of the given descriptor is contained lower in the tree, then
+	 * the extension could still be invoked twice.
+	 * 
+	 * @param aDescriptor
+	 *            The descriptor which may be overriding other extensions.
+	 * @param theEnabledDescriptors
+	 *            The other available descriptors.
+	 * @return True if the results should be pipelined through the downstream
+	 *         extensions.
+	 */
+	private boolean isOverridingDescriptorInSet(INavigatorContentDescriptor aDescriptor, Set theEnabledDescriptors) {
+
+		if (aDescriptor.getSuppressedExtensionId() != null /*
+															 * The descriptor is
+															 * an override
+															 * descriptor
+															 */
+				&& aDescriptor.getOverridePolicy() == OverridePolicy.InvokeAlwaysRegardlessOfSuppressedExt) {
+			/*
+			 * if the policy is set as such, it can lead to this extension being
+			 * invoked twice; once as a first class extension, and once an
+			 * overriding extension.
+			 */
+			if (theEnabledDescriptors.contains(aDescriptor.getOverriddenDescriptor())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public Object getParent(final Object anElement) {
+		final Set extensions = contentService.findContentExtensionsWithPossibleChild(anElement);
+		final Object[] parent = new Object[1];
+
+		for (Iterator itr = extensions.iterator(); itr.hasNext();) {
+			final NavigatorContentExtension foundExtension = (NavigatorContentExtension) itr.next();
+
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				NavigatorContentExtension[] overridingExtensions;
+
+				public void run() throws Exception {
+					if (!isOverridingExtensionInSet(foundExtension.getDescriptor(), extensions)) {
+						parent[0] = foundExtension.internalGetContentProvider()
+								.getParent(anElement);
+						overridingExtensions = foundExtension
+								.getOverridingExtensionsForPossibleChild(anElement);
+						if (overridingExtensions.length > 0) {
+							parent[0] = pipelineParent(anElement, overridingExtensions, parent);
+						}
+
+						if (parent[0] != null) {
+							return;
+						}
+					}
+				}
+
+				public void handleException(Throwable e) {
+					NavigatorPlugin.logError(0, NLS.bind(
+							CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+									foundExtension.getDescriptor().getId(), anElement }), e);
+				}
+			});
+		}
+		return parent[0];
+	}
+
+	public TreePath[] getParents(Object anElement) {
+		List paths = new ArrayList();
+		TreePathCompiler compiler = new TreePathCompiler(anElement);
+		Set compilers = findPaths(compiler);
+		for (Iterator iter = compilers.iterator(); iter.hasNext();) {
+			TreePathCompiler c = (TreePathCompiler) iter.next();
+			paths.add(c.createParentPath());
+		}
+		return (TreePath[]) paths.toArray(new TreePath[paths.size()]);
+
+	}
+	/**
+	 * Query each of <code>theOverridingExtensions</code> for elements, and then
+	 * pipe them through the Pipeline content provider.
+	 * 
+	 * @param anInputElement
+	 *            The input element in the tree
+	 * @param theOverridingExtensions
+	 *            The set of overriding extensions that should participate in
+	 *            the pipeline chain
+	 * @param theCurrentParent
+	 *            The current elements to return to the viewer (should be
+	 *            modifiable)
+	 * @return The set of elements to return to the viewer
+	 */
+	private Object pipelineParent(Object anInputElement, NavigatorContentExtension[] theOverridingExtensions,
+			Object theCurrentParent) {
+		IPipelinedTreeContentProvider pipelinedContentProvider;
+		NavigatorContentExtension[] overridingExtensions;
+		Object aSuggestedParent = null;
+		for (int i = 0; i < theOverridingExtensions.length; i++) {
+
+			if (theOverridingExtensions[i].internalGetContentProvider().isPipelined()) {
+				pipelinedContentProvider = (IPipelinedTreeContentProvider) theOverridingExtensions[i]
+						.internalGetContentProvider();
+
+				aSuggestedParent = pipelinedContentProvider.getPipelinedParent(anInputElement, aSuggestedParent);
+
+				overridingExtensions = theOverridingExtensions[i]
+						.getOverridingExtensionsForTriggerPoint(anInputElement);
+				if (overridingExtensions.length > 0) {
+					aSuggestedParent = pipelineParent(anInputElement, overridingExtensions, aSuggestedParent);
+				}
+			}
+		}
+		return aSuggestedParent != null ? aSuggestedParent : theCurrentParent;
+	}
+
+	/**
+	 * Calculate hasChildren for both an element or a path.
+	 * 
+	 *  If any of the first class NCEs don't implement the IPipelinedTreeContentProviderHasChildren 
+	 *  and they return true, then we have to use that as the value, as we are obliged to take
+	 *  the union of the non-pipelined calls. This may result in a false positive hasChildren
+	 *  indication if the pipeline mechanism does not actually contribute children later.
+	 *  For pipelined calls, we simply ask the pipelined content provider about the children
+	 *  and they can override this as they would in the case where they are providing the objects.
+	 */
+	public boolean hasChildren(final Object anElementOrPath) {
+		final Object anElement = internalAsElement(anElementOrPath);
+		final Set enabledExtensions = contentService.findContentExtensionsByTriggerPoint(anElement);
+		final boolean suggestedHasChildren[] = new boolean[1];
+
+		for (final Iterator itr = enabledExtensions.iterator(); itr.hasNext();) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				NavigatorContentExtension ext;
+
+				public void run() throws Exception {
+					ext = (NavigatorContentExtension) itr.next();
+
+					if (!ext.isLoaded() && !enforceHasChildren) {
+						suggestedHasChildren[0] = true;
+						return;
+					}
+
+					NavigatorContentExtension[] overridingExtensions;
+					if (!isOverridingExtensionInSet(ext.getDescriptor(), enabledExtensions)) {
+						SafeDelegateTreeContentProvider cp = ext.internalGetContentProvider();
+						suggestedHasChildren[0] |= callNormalHasChildren(anElementOrPath,
+								anElement, cp);
+						overridingExtensions = ext
+								.getOverridingExtensionsForTriggerPoint(anElement);
+
+						if (overridingExtensions.length > 0) {
+							suggestedHasChildren[0] = pipelineHasChildren(anElementOrPath,
+									anElement, overridingExtensions, suggestedHasChildren[0]);
+						}
+						if (suggestedHasChildren[0]) {
+							return;
+
+						}
+					}
+				}
+
+				public void handleException(Throwable e) {
+					NavigatorPlugin.logError(0, NLS.bind(
+							CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+									ext.getDescriptor().getId(), anElementOrPath }), e);
+				}
+			});
+		}
+		return suggestedHasChildren[0];
+	}
+
+	public boolean hasChildren(TreePath path) {
+		return hasChildren((Object)path);
+	}
+
+	private boolean callNormalHasChildren(Object anElementOrPath, Object anElement, SafeDelegateTreeContentProvider cp) {
+		if (cp.isTreePath() && anElementOrPath instanceof TreePath) {
+			ITreePathContentProvider tpcp = (ITreePathContentProvider) cp;
+			return tpcp.hasChildren((TreePath) anElementOrPath);
+		}
+		return ((ITreeContentProvider) cp).hasChildren(anElement);
+	}
+
+	private boolean pipelineHasChildren(Object anElementOrPath, Object anElement,
+			NavigatorContentExtension[] theOverridingExtensions, boolean suggestedHasChildren) {
+		NavigatorContentExtension[] overridingExtensions;
+		for (int i = 0; i < theOverridingExtensions.length; i++) {
+
+			SafeDelegateTreeContentProvider cp = theOverridingExtensions[i].internalGetContentProvider();
+			if (cp.isPipelinedHasChildren()) {
+				suggestedHasChildren = cp.hasPipelinedChildren(
+						anElement, suggestedHasChildren);
+				overridingExtensions = theOverridingExtensions[i]
+						.getOverridingExtensionsForTriggerPoint(anElement);
+				if (overridingExtensions.length > 0) {
+					suggestedHasChildren = pipelineHasChildren(anElementOrPath, anElement,
+							overridingExtensions, suggestedHasChildren);
+				}
+			} else  {
+				suggestedHasChildren |= callNormalHasChildren(anElementOrPath, anElement, cp);
+			}
+		}
+		return suggestedHasChildren;
+	}		
+
+	/**
+	 * <p>
+	 * Handles any necessary clean up of the {@link NavigatorContentService}
+	 * </p>
+	 * 
+	 * <p>
+	 * <b>If a client uses this class outside of the framework of
+	 * {@link CommonViewer}, the client must ensure that this method is called
+	 * when finished. </b>
+	 * </p>
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		if (disposeContentService) {
+			contentService.dispose();
+		}
+	}
+
+	/**
+	 * Get the element from an element or tree path argument.
+	 * 
+	 * @param parentElementOrPath
+	 *            the element or tree path
+	 * @return the element
+	 */
+	private Object internalAsElement(Object parentElementOrPath) {
+		if (parentElementOrPath instanceof TreePath) {
+			TreePath tp = (TreePath) parentElementOrPath;
+			if (tp.getSegmentCount() > 0) {
+				return tp.getLastSegment();
+			}
+			// If the path is empty, the parent element is the root
+			return viewer.getInput();
+		}
+		return parentElementOrPath;
+	}
+
+	class CyclicPathException extends Exception {
+
+		private static final long serialVersionUID = 2111962579612444989L;
+
+		protected CyclicPathException(TreePathCompiler compiler, Object invalidSegment, boolean asChild) {
+			super("Cannot add " + invalidSegment + //$NON-NLS-1$ 
+					" to the list of segments in " + compiler + //$NON-NLS-1$ 
+					(asChild ? " as a child." : " as a parent.")); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	class TreePathCompiler {
+
+		private final LinkedList segments = new LinkedList();
+
+		protected TreePathCompiler(Object segment) {
+			segments.add(segment);
+		}
+
+		protected TreePathCompiler(TreePathCompiler aCompiler) {
+			segments.addAll(aCompiler.segments);
+		}
+
+		protected TreePathCompiler(TreePath aPath) {
+			for (int i = 0; i < aPath.getSegmentCount(); i++) {
+				segments.addLast(aPath.getSegment(i));
+			}
+		}
+
+		protected void addParent(Object segment) throws CyclicPathException {
+			if (segments.contains(segment)) {
+				throw new CyclicPathException(this, segment, false);
+			}
+			segments.addFirst(segment);
+		}
+
+		protected void addChild(Object segment) throws CyclicPathException {
+			if (segments.contains(segment)) {
+				throw new CyclicPathException(this, segment, false);
+			}
+			segments.addLast(segment);
+		}
+
+		/**
+		 * Create the full tree path.
+		 * 
+		 * @return A TreePath with all segments from the compiler.
+		 */
+		public TreePath createPath() {
+			return new TreePath(segments.toArray());
+		}
+
+		/**
+		 * Create parent tree path.
+		 * 
+		 * @return A TreePath with all segments but the last from the compiler
+		 */
+		public TreePath createParentPath() {
+			LinkedList parentSegments = new LinkedList(segments);
+			parentSegments.removeLast();
+			return new TreePath(parentSegments.toArray());
+		}
+
+		public Object getLastSegment() {
+			return segments.getLast();
+		}
+
+		public Object getFirstSegment() {
+			return segments.getFirst();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#toString()
+		 */
+		public String toString() {
+
+			StringBuffer buffer = new StringBuffer();
+			for (Iterator iter = segments.iterator(); iter.hasNext();) {
+				Object segment = iter.next();
+				buffer.append(segment).append("::"); //$NON-NLS-1$  
+			}
+			return buffer.toString();
+		}
+
+	}
+
+	private Set findPaths(TreePathCompiler aPathCompiler) {
+
+		Set/* <Object> */parents = findParents(aPathCompiler.getFirstSegment());
+		Set/* <TreePathCompiler> */parentPaths = new LinkedHashSet();
+		Set/* <TreePathCompiler> */foundPaths = Collections.EMPTY_SET;
+		if (parents.size() > 0) {
+			for (Iterator parentIter = parents.iterator(); parentIter.hasNext();) {
+				Object parent = (Object) parentIter.next();
+				TreePathCompiler c = new TreePathCompiler(aPathCompiler);
+				try {
+					c.addParent(parent);
+					foundPaths = findPaths(c);
+				} catch (CyclicPathException cpe) {
+					String msg = cpe.getMessage() != null ? cpe.getMessage() : cpe.toString();
+					NavigatorPlugin.logError(0, msg, cpe);
+				}
+				if (foundPaths.isEmpty())
+					parentPaths.add(c);
+				else
+					parentPaths.addAll(foundPaths);
+			}
+		}
+		return parentPaths;
+
+	}
+
+	private Set findParents(final Object anElement) {
+		final Set descriptors = contentService.findDescriptorsWithPossibleChild(anElement, false);
+		final Set parents = new LinkedHashSet();
+
+		for (final Iterator itr = descriptors.iterator(); itr.hasNext();) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				NavigatorContentDescriptor foundDescriptor;
+				NavigatorContentExtension foundExtension;
+				Object parent = null;
+
+				public void run() throws Exception {
+					foundDescriptor = (NavigatorContentDescriptor) itr.next();
+					foundExtension = contentService.getExtension(foundDescriptor);
+
+					if (!isOverridingDescriptorInSet(foundExtension.getDescriptor(), descriptors)) {
+						if (foundExtension.internalGetContentProvider().isTreePath()) {
+							TreePath[] parentTreePaths = ((ITreePathContentProvider) foundExtension
+									.internalGetContentProvider()).getParents(anElement);
+
+							for (int i = 0; i < parentTreePaths.length; i++) {
+
+								parent = parentTreePaths[i].getLastSegment();
+								if ((parent = findParent(foundExtension, anElement, parent)) != null)
+									parents.add(parent);
+							}
+
+						} else {
+							parent = foundExtension.internalGetContentProvider().getParent(
+									anElement);
+							if ((parent = findParent(foundExtension, anElement, parent)) != null)
+								parents.add(parent);
+						}
+					}
+				}
+
+				public void handleException(Throwable e) {
+					NavigatorPlugin.logError(0, NLS.bind(
+							CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+									foundExtension.getDescriptor().getId(), anElement }), e);
+				}
+			});
+		}
+
+		return parents;
+
+	}
+
+	private Object findParent(NavigatorContentExtension anExtension, Object anElement, Object aSuggestedParent) {
+
+		/* the last valid (non-null) parent for the anElement */
+		Object lastValidParent = aSuggestedParent;
+		/* used to keep track of new suggestions */
+		Object suggestedOverriddenParent = null;
+		IPipelinedTreeContentProvider piplineContentProvider;
+		NavigatorContentExtension[] overridingExtensions = anExtension
+				.getOverridingExtensionsForPossibleChild(anElement);
+		for (int i = 0; i < overridingExtensions.length; i++) {
+			if (overridingExtensions[i].internalGetContentProvider().isPipelined()) {
+				piplineContentProvider = (IPipelinedTreeContentProvider) overridingExtensions[i].internalGetContentProvider();
+				suggestedOverriddenParent = piplineContentProvider.getPipelinedParent(anElement, lastValidParent);
+
+				if (suggestedOverriddenParent != null && !suggestedOverriddenParent.equals(aSuggestedParent))
+					lastValidParent = suggestedOverriddenParent;
+
+				// should never return null
+				lastValidParent = findParent(overridingExtensions[i], anElement, lastValidParent);
+			}
+
+		}
+		return lastValidParent;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceDescriptionProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceDescriptionProvider.java
new file mode 100755
index 0000000..47555bf
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceDescriptionProvider.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IDescriptionProvider;
+
+/**
+ * 
+ * @since 3.2
+ * 
+ */
+public final class NavigatorContentServiceDescriptionProvider implements
+		IDescriptionProvider {
+
+	private final NavigatorContentService contentService;
+
+	/**
+	 * Creates a description provider that targets the given service.
+	 * 
+	 * @param aContentService
+	 *            The content service associated with this provider.
+	 */
+	public NavigatorContentServiceDescriptionProvider(
+			NavigatorContentService aContentService) {
+		Assert.isNotNull(aContentService);
+		contentService = aContentService;
+	}
+
+	public String getDescription(Object anElement) {
+
+		Object target;
+
+		if (anElement instanceof IStructuredSelection) {
+
+			IStructuredSelection structuredSelection = (IStructuredSelection) anElement;
+			if (structuredSelection.size() > 1) {
+				return getDefaultStatusBarMessage(structuredSelection.size());
+			}
+			target = structuredSelection.getFirstElement();
+		} else {
+			target = anElement;
+		}
+		String message = null;
+		ILabelProvider[] providers = contentService
+				.findRelevantLabelProviders(target);
+		if (providers.length == 0) {
+			return getDefaultStatusBarMessage(0);
+		}
+		for (int i = 0; i < providers.length && (message == null || message.length() == 0); i++) {
+			if (providers[i] instanceof ICommonLabelProvider) {
+				message = ((ICommonLabelProvider) providers[i])
+						.getDescription(target); 
+			}
+		}
+		message = (message != null) ? message : getDefaultStatusBarMessage(1);
+		return message;
+
+	}
+
+	/**
+	 * @param aSize
+	 *            The number of items selected.
+	 * @return A string of the form "# items selected"
+	 */
+	protected final String getDefaultStatusBarMessage(int aSize) {
+		return NLS.bind(
+				CommonNavigatorMessages.Navigator_statusLineMultiSelect,
+				new Object[] { new Integer(aSize) });
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceLabelProvider.java
new file mode 100755
index 0000000..5b0ff4b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceLabelProvider.java
@@ -0,0 +1,390 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *     Fair Issac Corp - bug 287103 - NCSLabelProvider does not properly handle overrides 
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IFontProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreePathLabelProvider;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+// RAP [bmichalik]: styled text
+//import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.ViewerLabel;
+// RAP [bmichalik]: styled text
+//import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * <p>
+ * Provides relevant labels based on the associated
+ * {@link INavigatorContentService}for the contents of a
+ * TreeViewer .
+ * <p>
+ * 
+ * <p>
+ * Except for the dependency on
+ * {@link INavigatorContentService}, this class has no
+ * dependencies on the rest of the Common Navigator framework. Tree viewers that would like to use
+ * the extensions defined by the Common Navigator, without using the actual view part or other
+ * pieces of functionality (filters, sorting, etc) may choose to use this class, in effect using an
+ * extensible label provider.
+ * </p>
+ * <p>
+ * 
+ * @since 3.2
+ * 
+ * @see org.eclipse.ui.internal.navigator.NavigatorContentService
+ * @see org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider
+ */
+// RAP [bmichalik]: styled text
+//public class NavigatorContentServiceLabelProvider extends EventManager
+//		implements ILabelProvider, IColorProvider, IFontProvider, ITreePathLabelProvider, ITableLabelProvider, ILabelProviderListener, IStyledLabelProvider {
+public class NavigatorContentServiceLabelProvider extends EventManager
+implements ILabelProvider, IColorProvider, IFontProvider, ITreePathLabelProvider, ITableLabelProvider, ILabelProviderListener{ 
+	private final NavigatorContentService contentService;
+	private final boolean isContentServiceSelfManaged;
+	private final ReusableViewerLabel reusableLabel = new ReusableViewerLabel();
+
+  
+	/**
+	 * <p>
+	 * Uses the supplied content service to acquire the available extensions.
+	 * </p>
+	 * 
+	 * @param aContentService
+	 *            The associated NavigatorContentService that should be used to acquire information.
+	 */
+	public NavigatorContentServiceLabelProvider(NavigatorContentService aContentService) {
+		contentService = aContentService; 
+		isContentServiceSelfManaged = false;
+	}
+
+	/**
+	 * <p>
+	 * Return the appropriate image for anElement. The image will be used as the icon for anElement
+	 * when displayed in the tree viewer. This method uses information from its contentService to
+	 * know what extensions to use to supply the correct label.
+	 * </p>
+	 * {@inheritDoc}
+	 * 
+	 * @param anElement 
+	 *            An element from the Tree Viewer 
+	 * @return The Image that will be used as the icon when anElement is displayed in the viewer.
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object anElement) {
+		return getColumnImage(anElement, -1);
+	}
+
+	public Image getColumnImage(Object element, int columnIndex) {
+		Collection contentExtensions = contentService.findPossibleLabelExtensions(element);
+		Image image = null; 
+		for (Iterator itr = contentExtensions.iterator(); itr.hasNext() && image == null; ) { 
+			image = findImage((NavigatorContentExtension) itr.next(), element, columnIndex);
+		}
+		return image;
+	}
+
+	/**
+	 * <p>
+	 * Return a String representation of anElement to be used as the display name in the tree
+	 * viewer.
+	 * </p>
+	 * 
+	 * @param anElement
+	 *            An element from the Tree Viewer 
+	 * @return The String label to display for the object when represented in the viewer.
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object anElement) {
+		return getColumnText(anElement, -1);
+	}
+
+	public String getColumnText(Object anElement, int aColumn) {
+		ILabelProvider[] labelProviders = contentService.findRelevantLabelProviders(anElement);
+		if (labelProviders.length == 0)
+			return NLS.bind(CommonNavigatorMessages.NavigatorContentServiceLabelProvider_Error_no_label_provider_for_0_, makeSmallString(anElement));	
+		String text = null;
+		for (int i = 0; i < labelProviders.length; i++) {
+			if (labelProviders[i] instanceof ITableLabelProvider && aColumn != -1)
+				text = ((ITableLabelProvider)labelProviders[i]).getColumnText(anElement, aColumn);
+			else
+				text = labelProviders[i].getText(anElement);
+			if (text != null && text.length() > 0)
+				return text;
+		}
+		return text;
+	}
+	
+// RAP [bmichalik]: styled text
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
+	 */
+//	public StyledString getStyledText(Object anElement) {
+//		Collection extensions = contentService.findPossibleLabelExtensions(anElement);
+//		if (extensions.size() == 0)
+//			return new StyledString(NLS.bind(CommonNavigatorMessages.NavigatorContentServiceLabelProvider_Error_no_label_provider_for_0_, makeSmallString(anElement)));	
+//
+//		StyledString text = null;
+//		for (Iterator itr = extensions.iterator(); itr.hasNext() && text == null; ) { 
+//			text = findStyledText((NavigatorContentExtension) itr.next(), anElement);
+//		}
+//		return text != null ? text : new StyledString();
+//	}
+//	
+//	/**
+//	 * Search for a styled text label and take overrides into account. 
+//	 * Uses only simple ITreeContentProvider.getParent() style semantics. 
+//	 * 
+//	 * @returns the styled text or <code>null</code> if no extension has been found that provides a label
+//	 */
+//	private StyledString findStyledText(NavigatorContentExtension foundExtension, Object anElement) { 
+//		ICommonLabelProvider labelProvider= foundExtension.getLabelProvider();
+//		if (labelProvider instanceof IStyledLabelProvider) {
+//			StyledString styledText= ((IStyledLabelProvider) labelProvider).getStyledText(anElement);
+//			// paranoia check for null, although null is not a valid return value for IStyledLabelProvider.getStyledText
+//			if (styledText != null && styledText.length() > 0) {
+//				return styledText;
+//			}
+//		} else {
+//			String text= labelProvider.getText(anElement);
+//			if (text != null && text.length() > 0) {
+//				return new StyledString(text);
+//			}
+//		}  
+//		return null;
+//	}
+	
+	private String makeSmallString(Object obj) {
+		if (obj == null)
+			return "null"; //$NON-NLS-1$
+		String str = obj.toString();
+		int len = str.length();
+		return str.substring(0, len < 50 ? len : 49);
+	}
+	
+	/**
+	 * Search for image and take overrides into account. 
+	 * Uses only simple ITreeContentProvider.getParent() style semantics. 
+	 */
+	private Image findImage(NavigatorContentExtension foundExtension, Object anElement, int aColumn) { 
+		Image image = null;
+		ICommonLabelProvider provider = foundExtension.getLabelProvider();
+		if (provider instanceof ITableLabelProvider && aColumn >= 0)
+			image = ((ITableLabelProvider)provider).getColumnImage(anElement, aColumn);
+		else
+			image = provider.getImage(anElement);
+  
+		return image;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
+	 */
+	public Font getFont(Object anElement) {
+		ILabelProvider[] labelProviders = contentService.findRelevantLabelProviders(anElement);
+		for (int i = 0; i < labelProviders.length; i++) {
+			ILabelProvider provider = labelProviders[i];
+			if (provider instanceof IFontProvider) {
+				IFontProvider fontProvider = (IFontProvider) provider;
+				Font font = fontProvider.getFont(anElement);
+				if (font != null) {
+					return font;
+				}
+			}
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+	 */
+	public Color getForeground(Object anElement) {
+		ILabelProvider[] labelProviders = contentService.findRelevantLabelProviders(anElement);
+		for (int i = 0; i < labelProviders.length; i++) {
+			ILabelProvider provider = labelProviders[i];
+			if (provider instanceof IColorProvider) {
+				IColorProvider colorProvider = (IColorProvider) provider;
+				Color color = colorProvider.getForeground(anElement);
+				if (color != null) {
+					return color;
+				}
+			}
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+	 */
+	public Color getBackground(Object anElement) {
+		ILabelProvider[] labelProviders = contentService.findRelevantLabelProviders(anElement);
+		for (int i = 0; i < labelProviders.length; i++) {
+			ILabelProvider provider = labelProviders[i];
+			if (provider instanceof IColorProvider) {
+				IColorProvider colorProvider = (IColorProvider) provider;
+				Color color = colorProvider.getBackground(anElement);
+				if (color != null) {
+					return color;
+				}
+			}
+		}
+		return null;
+	}	
+
+	/**
+	 * <p>
+	 * Indicates whether anElelement has aProperty that affects the display of the label.
+	 * </p>
+	 * {@inheritDoc}
+	 * 
+	 * @param anElement
+	 *            An element from the Tree Viewer
+	 * @param aProperty
+	 *            A property of the given element that could be a label provider
+	 * @return True if any of the extensions enabled on anElement consider aProperty a
+	 *         label-changing property.
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+	 *      java.lang.String)
+	 */
+	public boolean isLabelProperty(Object anElement, String aProperty) {
+		boolean result = false;
+		ILabelProvider[] labelProviders = contentService.findRelevantLabelProviders(anElement);
+		for (int i = 0; i < labelProviders.length && !result; i++) {
+			result = labelProviders[i].isLabelProperty(anElement, aProperty);
+		}
+		return result;
+	}
+
+
+	/**
+	 * <p>
+	 * Label provider listeners are currently supported.
+	 * </p>
+	 * 
+	 * {@inheritDoc}
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener aListener) {
+		addListenerObject(aListener);
+	}
+
+	/**
+	 * <p>
+	 * Label provider listeners are currently supported.
+	 * </p>
+	 * 
+	 * {@inheritDoc}
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener aListener) {
+		removeListenerObject(aListener);
+	}
+
+	/**
+	 * <p>
+	 * Dispose of the content service, if it was created and not supplied.
+	 * </p>
+	 * <p>
+	 * <b>If a client uses this class outside of the framework of {@link CommonViewer}, this method
+	 * must be called when finished. </b>
+	 * </p>
+	 * 
+	 * {@inheritDoc}
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		if (isContentServiceSelfManaged) {
+			contentService.dispose();
+		}
+
+	}
+	
+	/**
+     * Fires a label provider changed event to all registered listeners
+     * Only listeners registered at the time this method is called are notified.
+     *
+     * @param event a label provider changed event
+     *
+     * @see ILabelProviderListener#labelProviderChanged
+     */
+    protected void fireLabelProviderChanged(
+            final LabelProviderChangedEvent event) {
+        Object[] theListeners = getListeners();
+        for (int i = 0; i < theListeners.length; ++i) {
+            final ILabelProviderListener l = (ILabelProviderListener) theListeners[i];
+            SafeRunner.run(new SafeRunnable() {
+                public void run() {
+                    l.labelProviderChanged(event);
+                }
+            });
+
+        }
+    }
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreePathLabelProvider#updateLabel(org.eclipse.jface.viewers.ViewerLabel, org.eclipse.jface.viewers.TreePath)
+	 */
+	public void updateLabel(ViewerLabel label, TreePath elementPath) { 
+		 
+		Collection contentExtensions = contentService.findPossibleLabelExtensions(elementPath.getLastSegment());
+		reusableLabel.reset(label);
+		for (Iterator itr = contentExtensions.iterator(); itr.hasNext() && !(reusableLabel.isValid() && reusableLabel.hasChanged()); ) {			 
+			findUpdateLabel((NavigatorContentExtension)itr.next(), reusableLabel, elementPath);			 
+		}
+		reusableLabel.fill(label);
+	}
+
+
+	/**
+	 * Search for text label and take overrides into account. 
+	 * Uses only simple ITreeContentProvider.getParent() style semantics. 
+	 */
+	private void findUpdateLabel(NavigatorContentExtension foundExtension, ReusableViewerLabel label, TreePath elementPath) {
+		
+		ILabelProvider labelProvider = foundExtension.getLabelProvider();
+		if (labelProvider instanceof ITreePathLabelProvider) {
+			ITreePathLabelProvider tplp = (ITreePathLabelProvider) labelProvider;
+			tplp.updateLabel(label, elementPath);
+		} else {
+			label.setImage(labelProvider.getImage(elementPath.getLastSegment()));
+			label.setText(labelProvider.getText(elementPath.getLastSegment()));
+		}
+	}
+ 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ILabelProviderListener#labelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent)
+	 */
+	public void labelProviderChanged(LabelProviderChangedEvent event) { 
+		fireLabelProviderChanged(event);		
+	}
+
+
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorDecoratingLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorDecoratingLabelProvider.java
new file mode 100755
index 0000000..4b2dc99
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorDecoratingLabelProvider.java
@@ -0,0 +1,239 @@
+///*******************************************************************************
+// * Copyright (c) 2009 IBM Corporation 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:
+// *     IBM Corporation - initial API and implementation
+// *     rob.stryker@jboss.com - bug 243824 [CommonNavigator] lacks table / tree-table support
+// *******************************************************************************/
+//package org.eclipse.ui.internal.navigator;
+//
+//import org.eclipse.jface.preference.JFacePreferences;
+//import org.eclipse.jface.resource.JFaceResources;
+//import org.eclipse.jface.util.IPropertyChangeListener;
+//import org.eclipse.jface.util.PropertyChangeEvent;
+//import org.eclipse.jface.viewers.ColumnViewer;
+//import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
+//import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+//import org.eclipse.jface.viewers.IColorProvider;
+//import org.eclipse.jface.viewers.IFontProvider;
+//import org.eclipse.jface.viewers.ILabelProvider;
+//import org.eclipse.jface.viewers.ILabelProviderListener;
+//import org.eclipse.jface.viewers.ITableLabelProvider;
+//// RAP [bmichalik]: styled text
+////import org.eclipse.jface.viewers.StyledString;
+//import org.eclipse.jface.viewers.ViewerColumn;
+//import org.eclipse.swt.graphics.Color;
+//import org.eclipse.swt.graphics.Font;
+//import org.eclipse.swt.graphics.Image;
+//import org.eclipse.swt.widgets.Display;
+//import org.eclipse.ui.IWorkbenchPreferenceConstants;
+//import org.eclipse.ui.PlatformUI;
+//
+///**
+// * Decorating label provider with styled label support for the navigator.
+// * <p>
+// * If the wrapped label provider is a {@link DelegatingStyledCellLabelProvider.IStyledLabelProvider} it will use
+// * the styled label it provides.
+// * </p>
+// * <p>The label provider listens to the built-in decoration colors ({@link JFacePreferences#QUALIFIER_COLOR}, 
+// * {@link JFacePreferences#COUNTER_COLOR} and {@link JFacePreferences#DECORATIONS_COLOR}. If other
+// * colors are used, it is the responsibility of the wrapped label provider to fire the refresh.
+// * </p>
+// */
+//public class NavigatorDecoratingLabelProvider extends DecoratingStyledCellLabelProvider implements IPropertyChangeListener, ILabelProvider, ITableLabelProvider {
+//
+//	private static class StyledLabelProviderAdapter implements IStyledLabelProvider, ITableLabelProvider, IColorProvider, IFontProvider {
+//
+//		private final ILabelProvider provider;
+//
+//		public StyledLabelProviderAdapter(ILabelProvider provider) {
+//			this.provider= provider;
+//		}
+//		
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getImage(java.lang.Object)
+//		 */
+//		public Image getImage(Object element) {
+//			return provider.getImage(element);
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
+//		 */
+//		public StyledString getStyledText(Object element) {
+//			if (provider instanceof IStyledLabelProvider) {
+//				return ((IStyledLabelProvider) provider).getStyledText(element);
+//			}
+//			String text= provider.getText(element);
+//			if (text == null)
+//				text= ""; //$NON-NLS-1$
+//			return new StyledString(text);
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+//		 */
+//		public void addListener(ILabelProviderListener listener) {
+//			provider.addListener(listener);
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+//		 */
+//		public void dispose() {
+//			provider.dispose();
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
+//		 */
+//		public boolean isLabelProperty(Object element, String property) {
+//			return provider.isLabelProperty(element, property);
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+//		 */
+//		public void removeListener(ILabelProviderListener listener) {
+//			provider.removeListener(listener);
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+//		 */
+//		public Color getBackground(Object element) {
+//			if (provider instanceof IColorProvider) {
+//				return ((IColorProvider) provider).getBackground(element);
+//			}
+//			return null;
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+//		 */
+//		public Color getForeground(Object element) {
+//			if (provider instanceof IColorProvider) {
+//				return ((IColorProvider) provider).getForeground(element);
+//			}
+//			return null;
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
+//		 */
+//		public Font getFont(Object element) {
+//			if (provider instanceof IFontProvider) {
+//				return ((IFontProvider) provider).getFont(element);
+//			}
+//			return null;
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+//		 */
+//		public Image getColumnImage(Object element, int columnIndex) {
+//			if (provider instanceof ITableLabelProvider) {
+//				return ((ITableLabelProvider) provider).getColumnImage(element, columnIndex);
+//			}
+//			return null;
+//		}
+//
+//		/* (non-Javadoc)
+//		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+//		 */
+//		public String getColumnText(Object element, int columnIndex) {
+//			if (provider instanceof ITableLabelProvider) {
+//				return ((ITableLabelProvider) provider).getColumnText(element, columnIndex);
+//			}
+//			return null;
+//		}	
+//	}
+//	
+//	/**
+//	 * Creates a {@link NavigatorDecoratingLabelProvider}
+//	 * 
+//	 * @param commonLabelProvider the label provider to use
+//	 */
+//	public NavigatorDecoratingLabelProvider(ILabelProvider commonLabelProvider) {
+//		super(new StyledLabelProviderAdapter(commonLabelProvider), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(), null);
+//	}
+//	
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.StyledCellLabelProvider#initialize(org.eclipse.jface.viewers.ColumnViewer, org.eclipse.jface.viewers.ViewerColumn)
+//	 */
+//	public void initialize(ColumnViewer viewer, ViewerColumn column) {
+//		PlatformUI.getPreferenceStore().addPropertyChangeListener(this);
+//		JFaceResources.getColorRegistry().addListener(this);
+//		
+//		setOwnerDrawEnabled(showColoredLabels());
+//		
+//		super.initialize(viewer, column);
+//	}
+//	
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider#dispose()
+//	 */
+//	public void dispose() {
+//		super.dispose();
+//		PlatformUI.getPreferenceStore().removePropertyChangeListener(this);
+//		JFaceResources.getColorRegistry().removeListener(this);
+//	}
+//	
+//	private void refresh() {
+//		ColumnViewer viewer= getViewer();
+//		if (viewer == null) {
+//			return;
+//		}
+//		boolean showColoredLabels= showColoredLabels();
+//		if (showColoredLabels != isOwnerDrawEnabled()) {
+//			setOwnerDrawEnabled(showColoredLabels);
+//			viewer.refresh();
+//		} else if (showColoredLabels) {
+//			viewer.refresh();
+//		}
+//	}
+//	
+//	private static boolean showColoredLabels() {
+//		return PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS);
+//	}
+//	
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+//	 */
+//	public void propertyChange(PropertyChangeEvent event) {
+//		String property= event.getProperty();
+//		if (property.equals(JFacePreferences.QUALIFIER_COLOR) || property.equals(JFacePreferences.COUNTER_COLOR) || property.equals(JFacePreferences.DECORATIONS_COLOR)
+//				|| property.equals(IWorkbenchPreferenceConstants.USE_COLORED_LABELS)) {
+//			Display.getDefault().asyncExec(new Runnable() {
+//				public void run() {
+//					refresh();
+//				}
+//			});
+//		}
+//	}
+//
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+//	 */
+//	public String getText(Object element) {
+//		return getStyledText(element).getString();
+//	}
+//
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+//	 */
+//	public Image getColumnImage(Object element, int columnIndex) {
+//		return ((StyledLabelProviderAdapter)getStyledStringProvider()).getColumnImage(element, columnIndex);
+//	}
+//
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+//	 */
+//	public String getColumnText(Object element, int columnIndex) {
+//		return ((StyledLabelProviderAdapter)getStyledStringProvider()).getColumnText(element, columnIndex);
+//	}
+//}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorExtensionStateService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorExtensionStateService.java
new file mode 100755
index 0000000..385d466
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorExtensionStateService.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.ui.internal.navigator.extensions.ExtensionStateModel;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * 
+ * A content extension may have its content and label providers disposed
+ * whenever the extension is activated or deactivated. However, the state model
+ * lives throughout the life of the viewer to allow Action Providers to drive
+ * their behavior from it.
+ * 
+ * @since 3.3
+ * 
+ */
+public class NavigatorExtensionStateService {
+
+	private final Object lock = new Object();
+	private INavigatorContentService contentService;
+
+	/**
+	 * Create an ExtensionStateServie that will keep track of the state models
+	 * of content extensions.
+	 * 
+	 * @param theContentService
+	 *            The content service which manages this state model service.
+	 */
+	public NavigatorExtensionStateService(INavigatorContentService theContentService) {
+		contentService = theContentService;
+	}
+
+	/*
+	 * A map of (String-based-Navigator-Content-Extension-IDs,
+	 * NavigatorContentExtension-objects)-pairs
+	 */
+	private final Map/* <INavigatorContentDescriptor, IExtensionStateModel> */stateModels = new HashMap();
+
+	/**
+	 * Return the state model for the given descriptor. 
+	 * 
+	 * @param aDescriptor A content descriptor 
+	 * @return The state model for the given descriptor.
+	 */
+	public IExtensionStateModel getExtensionStateModel(
+			INavigatorContentDescriptor aDescriptor) {
+		synchronized (lock) {
+			IExtensionStateModel model = (IExtensionStateModel) stateModels
+					.get(aDescriptor);
+			if (model == null)
+				stateModels.put(aDescriptor, model = new ExtensionStateModel(
+						aDescriptor.getId(), contentService.getViewerId()));
+			return model;
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java
new file mode 100755
index 0000000..e31f101
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java
@@ -0,0 +1,323 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptor;
+import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptorManager;
+import org.eclipse.ui.internal.navigator.filters.SkeletonViewerFilter;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorFilterService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class NavigatorFilterService implements INavigatorFilterService {
+
+	private static final ViewerFilter[] NO_FILTERS = new ViewerFilter[0];
+
+	private static final String ACTIVATION_KEY = ".filterActivation"; //$NON-NLS-1$
+
+	private static final String DELIM = ":"; //$NON-NLS-1$
+
+	private final NavigatorContentService contentService;
+
+	/* Map of (ICommonFilterDescriptor, ViewerFilter)-pairs */
+	private final Map declaredViewerFilters = new HashMap();
+
+	/* Set of ViewerFilters enforced from visible/active content extensions */
+	private final Set enforcedViewerFilters = new HashSet();
+
+	/* A set of active filter String ids */
+	private final Set activeFilters = new HashSet();
+
+	/**
+	 * @param aContentService
+	 *            The corresponding content service
+	 */
+	public NavigatorFilterService(NavigatorContentService aContentService) {
+		contentService = aContentService;
+		restoreFilterActivation();
+	}
+
+	private synchronized void restoreFilterActivation() {
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
+
+				if (prefs.get(getFilterActivationPreferenceKey(), null) != null) {
+					String activatedFiltersPreferenceValue = prefs.get(
+							getFilterActivationPreferenceKey(), null);
+					String[] activeFilterIds = activatedFiltersPreferenceValue.split(DELIM);
+					for (int i = 0; i < activeFilterIds.length; i++) {
+						activeFilters.add(activeFilterIds[i]);
+					}
+
+				} else {
+					ICommonFilterDescriptor[] visibleFilterDescriptors = getVisibleFilterDescriptors();
+					for (int i = 0; i < visibleFilterDescriptors.length; i++) {
+						if (visibleFilterDescriptors[i].isActiveByDefault()) {
+							activeFilters.add(visibleFilterDescriptors[i].getId());
+						}
+					}
+				}
+			}
+		});
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorFilterService#persistFilterActivationState()
+	 */
+	public void persistFilterActivationState() {
+
+		synchronized (activeFilters) {
+			CommonFilterDescriptorManager dm = CommonFilterDescriptorManager
+			.getInstance();
+
+			/*
+			 * by creating a StringBuffer with DELIM, we ensure the string is
+			 * not empty when persisted.
+			 */
+			StringBuffer activatedFiltersPreferenceValue = new StringBuffer(DELIM);
+
+			for (Iterator activeItr = activeFilters.iterator(); activeItr.hasNext();) {
+				String id = activeItr.next().toString();
+				if (!dm.getFilterById(id).isVisibleInUi())
+					continue;
+				activatedFiltersPreferenceValue.append(id).append(DELIM);
+			}
+
+			IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
+			prefs.put(getFilterActivationPreferenceKey(), activatedFiltersPreferenceValue.toString());
+			NavigatorContentService.flushPreferences(prefs);
+		}
+	}
+	
+	/**
+	 * Used for the tests
+	 */
+	public void resetFilterActivationState() {
+		IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
+		prefs.remove(getFilterActivationPreferenceKey());
+		NavigatorContentService.flushPreferences(prefs);
+	}
+
+	/**
+	 * @return The correct filter activation preference key for the
+	 *         corresponding content service.
+	 */
+	private String getFilterActivationPreferenceKey() {
+		return contentService.getViewerId() + ACTIVATION_KEY;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorFilterService#getVisibleFilters(boolean)
+	 */
+	public ViewerFilter[] getVisibleFilters(boolean toReturnOnlyActiveFilters) {
+		CommonFilterDescriptor[] descriptors = CommonFilterDescriptorManager
+				.getInstance().findVisibleFilters(contentService);
+
+		List filters = new ArrayList();
+
+		ViewerFilter instance;
+		for (int i = 0; i < descriptors.length; i++) {
+			if (!toReturnOnlyActiveFilters || isActive(descriptors[i].getId())) {
+				instance = getViewerFilter(descriptors[i]);
+				if (instance != null) {
+					filters.add(instance);
+				}
+			}
+		}
+
+		/* return the enforced viewer filters always */
+		filters.addAll(enforcedViewerFilters);
+
+		if (filters.size() == 0) {
+			return NO_FILTERS;
+		}
+		return (ViewerFilter[]) filters
+				.toArray(new ViewerFilter[filters.size()]);
+	}
+
+	/**
+	 * @param descriptor
+	 *            A key into the viewerFilters map.
+	 * @return A non-null ViewerFilter from the extension (or
+	 *         {@link SkeletonViewerFilter#INSTANCE}).
+	 */
+	public ViewerFilter getViewerFilter(ICommonFilterDescriptor descriptor) {
+		ViewerFilter filter = null;
+		synchronized (declaredViewerFilters) {
+			filter = (ViewerFilter) declaredViewerFilters.get(descriptor);
+			if (filter == null) {
+				declaredViewerFilters.put(descriptor,
+						(filter = ((CommonFilterDescriptor) descriptor)
+								.createFilter()));
+			}
+		}
+		return filter;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorFilterService#getVisibleFilterIds()
+	 */
+	public ICommonFilterDescriptor[] getVisibleFilterDescriptors() {
+		return CommonFilterDescriptorManager.getInstance().findVisibleFilters(
+				contentService);
+	}
+
+	/**
+	 * @return the visible filter descriptors for the UI
+	 */
+	public ICommonFilterDescriptor[] getVisibleFilterDescriptorsForUI() {
+		return CommonFilterDescriptorManager.getInstance().findVisibleFilters(
+				contentService, CommonFilterDescriptorManager.FOR_UI);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorFilterService#isActive(java.lang.String)
+	 */
+	public boolean isActive(String aFilterId) {
+		synchronized (activeFilters) {
+			return activeFilters.contains(aFilterId);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorFilterService#activateFilters(java.lang.String[])
+	 */
+	public void setActiveFilterIds(String[] theFilterIds) {
+		Assert.isNotNull(theFilterIds);
+		synchronized (activeFilters) {
+			activeFilters.clear();
+			activeFilters.addAll(Arrays.asList(theFilterIds));
+		}
+	}
+	
+	public void activateFilterIdsAndUpdateViewer(String[] filterIdsToActivate) {
+		boolean updateFilterActivation = false;
+
+		// we sort the array in order to use Array.binarySearch();
+		Arrays.sort(filterIdsToActivate);
+		CommonFilterDescriptor[] visibleFilterDescriptors = (CommonFilterDescriptor[]) getVisibleFilterDescriptors();
+
+		int indexofFilterIdToBeActivated;
+
+		List nonUiVisible = null;
+		
+		/* is there a delta? */
+		for (int i = 0; i < visibleFilterDescriptors.length; i++) {
+			indexofFilterIdToBeActivated = Arrays.binarySearch(filterIdsToActivate,
+					visibleFilterDescriptors[i].getId());
+			/*
+			 * Either we have a filter that should be active that isn't XOR a
+			 * filter that shouldn't be active that is currently
+			 */
+			if (indexofFilterIdToBeActivated >= 0 ^ isActive(visibleFilterDescriptors[i].getId())) {
+				updateFilterActivation = true;
+			}
+			
+			// We don't turn of non-UI visible filters here, they have to be manipulated explicitly
+			if (!visibleFilterDescriptors[i].isVisibleInUi()) {
+				if (nonUiVisible == null)
+					nonUiVisible = new ArrayList();
+				nonUiVisible.add(visibleFilterDescriptors[i].getId());
+			}
+		}
+
+		/* If so, update */
+		if (updateFilterActivation) {
+			if (nonUiVisible != null) {
+				for (int i = 0; i < filterIdsToActivate.length; i++)
+					nonUiVisible.add(filterIdsToActivate[i]);
+				filterIdsToActivate = (String[]) nonUiVisible.toArray(new String[]{});
+			}
+			
+			setActiveFilterIds(filterIdsToActivate);
+			persistFilterActivationState();
+			updateViewer();
+			// the action providers may no longer be enabled, so we
+			// reset the selection.
+			StructuredViewer commonViewer = (StructuredViewer) contentService.getViewer();
+			commonViewer.setSelection(StructuredSelection.EMPTY);
+		}
+	}
+
+	/**
+	 * Updates the viewer filters to match the active filters.
+	 */
+	public void updateViewer() {
+		StructuredViewer commonViewer = (StructuredViewer) contentService.getViewer();
+
+		ViewerFilter[] visibleFilters =	getVisibleFilters(true);
+		commonViewer.setFilters(visibleFilters);
+	}		
+		
+	/**
+	 * Activate the given array without disabling all other filters.
+	 * 
+	 * @param theFilterIds
+	 *            The filter ids to activate.
+	 */
+	public void addActiveFilterIds(String[] theFilterIds) {
+		Assert.isNotNull(theFilterIds);
+		synchronized (activeFilters) {
+			activeFilters.addAll(Arrays.asList(theFilterIds));
+		}
+	}
+	
+	/**
+	 * 
+	 * @param aFilterId The id of the filter to activate or deactivate
+	 * @param toMakeActive True to make the filter active, false to make the filter inactive
+	 */
+	public void setActive(String aFilterId, boolean toMakeActive) {
+
+		synchronized (activeFilters) {
+			boolean isActive = activeFilters.contains(aFilterId);
+			if(isActive ^ toMakeActive) {
+				if(toMakeActive)
+					activeFilters.remove(aFilterId);
+				else
+					activeFilters.add(aFilterId);
+					
+			}
+				
+		}
+	}
+ 
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorImages.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorImages.java
new file mode 100755
index 0000000..01fe175
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorImages.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ *  
+ * 
+ * @since 3.2
+ */
+public class NavigatorImages {
+
+	// Create image registry
+	private final static ImageRegistry NAVIGATOR_PLUGIN_REGISTRY = NavigatorPlugin
+			.getDefault().getImageRegistry();
+
+	private static URL ICONS_LOCATION;
+	static {
+		ICONS_LOCATION = FileLocator.find(NavigatorPlugin.getDefault()
+				.getBundle(), new Path("icons/full/"), Collections.EMPTY_MAP); //$NON-NLS-1$  
+	}
+
+	/**
+	 * Gets the current image.
+	 * 
+	 * @param key
+	 *            Name of the icon.
+	 * @return Image
+	 */
+	public static Image get(String key) {
+		return NAVIGATOR_PLUGIN_REGISTRY.get(key);
+	}
+
+	/**
+	 * Create and returns a image descriptor and adds the image to the
+	 * registery.
+	 * 
+	 * @param prefix
+	 *            Icon dir structure.
+	 * @param name
+	 *            The name of the icon.
+	 * @return ImageDescriptor
+	 */
+	public static ImageDescriptor createManaged(String prefix, String name) {
+		ImageDescriptor result = ImageDescriptor.createFromURL(makeIconFileURL(
+				prefix, name));
+		NAVIGATOR_PLUGIN_REGISTRY.put(name, result);
+		return result;
+	}
+
+	/**
+	 * Creates the icon url
+	 * 
+	 * @param prefix
+	 *            Icon dir structure.
+	 * @param name
+	 *            The name of the icon.
+	 * @return URL
+	 */
+	private static URL makeIconFileURL(String prefix, String name) {
+		StringBuffer buffer = new StringBuffer(prefix);
+		buffer.append(name);
+		try {
+			return new URL(ICONS_LOCATION, buffer.toString());
+		} catch (MalformedURLException ex) {
+			return null;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java
new file mode 100755
index 0000000..8e2431a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.osgi.util.NLS;
+
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorPipelineService;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class NavigatorPipelineService implements INavigatorPipelineService {
+
+	private NavigatorContentService contentService;
+
+	/**
+	 * Create a pipeline assistant for the given content service.
+	 * 
+	 * @param aContentService
+	 *            The content service that will drive this pipeline assistant.
+	 */
+	public NavigatorPipelineService(NavigatorContentService aContentService) {
+		contentService = aContentService;
+	}
+
+	public PipelinedShapeModification interceptAdd(
+			PipelinedShapeModification anAddModification) {
+		
+		ContributorTrackingSet trackedSet =(ContributorTrackingSet) anAddModification.getChildren();
+		
+		Set contentDescriptors = contentService.findDescriptorsByTriggerPoint(anAddModification.getParent(), !NavigatorContentService.CONSIDER_OVERRIDES);
+		
+		
+		for (Iterator descriptorsItr = contentDescriptors.iterator(); descriptorsItr.hasNext();) {
+			INavigatorContentDescriptor descriptor = (INavigatorContentDescriptor) descriptorsItr.next();
+			pipelineInterceptAdd(anAddModification, trackedSet, descriptor);
+		}
+		return anAddModification;
+	}
+ 
+	private void pipelineInterceptAdd(final PipelinedShapeModification anAddModification,
+			final ContributorTrackingSet trackedSet, final INavigatorContentDescriptor descriptor) {
+		if (descriptor.hasOverridingExtensions()) {
+			Set overridingDescriptors = descriptor.getOverriddingExtensions();
+			for (Iterator overridingDescriptorsItr = overridingDescriptors.iterator(); overridingDescriptorsItr
+					.hasNext();) {
+				INavigatorContentDescriptor overridingDescriptor = (INavigatorContentDescriptor) overridingDescriptorsItr
+						.next();
+				if (contentService.isVisible(overridingDescriptor.getId())
+						&& contentService.isActive(overridingDescriptor.getId())) {
+					trackedSet.setContributor((NavigatorContentDescriptor) overridingDescriptor,
+							(NavigatorContentDescriptor) descriptor);
+					final NavigatorContentExtension extension = contentService
+							.getExtension(overridingDescriptor);
+					if (extension.internalGetContentProvider().isPipelined()) {
+						SafeRunner.run(new NavigatorSafeRunnable() {
+							public void run() throws Exception {
+								((IPipelinedTreeContentProvider) extension
+										.internalGetContentProvider())
+										.interceptAdd(anAddModification);
+							}
+
+							public void handleException(Throwable e) {
+								NavigatorPlugin.logError(0, NLS.bind(
+										CommonNavigatorMessages.Exception_Invoking_Extension,
+										new Object[] { extension.getDescriptor().getId(), null }),
+										e);
+							}
+						});
+					}
+					trackedSet.setContributor(null, null);
+					pipelineInterceptAdd(anAddModification, trackedSet, overridingDescriptor);
+				}
+			}
+		}
+	}
+
+	public PipelinedShapeModification interceptRemove(
+			PipelinedShapeModification aRemoveModification) {
+		
+		ContributorTrackingSet trackedSet =(ContributorTrackingSet) aRemoveModification.getChildren();
+
+		Set interestedExtensions = new LinkedHashSet();
+		for (Iterator iter = trackedSet.iterator(); iter.hasNext();) {
+			Object element = (Object) iter.next();
+			if(element instanceof TreePath) {
+				interestedExtensions.addAll(contentService.findOverrideableContentExtensionsForPossibleChild(((TreePath)element).getLastSegment()));
+			} else {
+				interestedExtensions = contentService.findOverrideableContentExtensionsForPossibleChild(element);
+				
+			}
+		}
+		for (Iterator overridingExtensionsIter = interestedExtensions.iterator(); overridingExtensionsIter.hasNext();)
+			pipelineInterceptRemove(aRemoveModification, trackedSet, (NavigatorContentExtension) overridingExtensionsIter.next());
+		return aRemoveModification;
+	}
+	
+	private void pipelineInterceptRemove(final PipelinedShapeModification aRemoveModification,
+			final ContributorTrackingSet trackedSet,
+			final NavigatorContentExtension overrideableExtension) {
+
+		final Set overridingExtensions = new LinkedHashSet();
+		overridingExtensions.addAll(Arrays.asList(overrideableExtension
+				.getOverridingExtensions()));
+
+		for (Iterator extensionsItr = overridingExtensions.iterator(); extensionsItr
+				.hasNext();) {
+			final NavigatorContentExtension overridingExtension = (NavigatorContentExtension) extensionsItr
+					.next();
+			trackedSet.setContributor((NavigatorContentDescriptor) overridingExtension
+					.getDescriptor(), null);
+			if (overridingExtension.internalGetContentProvider().isPipelined()) {
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						((IPipelinedTreeContentProvider) overridingExtension
+								.internalGetContentProvider()).interceptRemove(aRemoveModification);
+					}
+
+					public void handleException(Throwable e) {
+						NavigatorPlugin.logError(0, NLS.bind(
+								CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+										overridingExtension.getDescriptor().getId(), null }), e);
+					}
+				});
+			}
+			trackedSet.setContributor(null, null);
+			if (overridingExtension.getDescriptor().hasOverridingExtensions())
+				pipelineInterceptRemove(aRemoveModification, trackedSet, overridingExtension);
+		}
+
+	}
+
+	public boolean interceptRefresh(
+			PipelinedViewerUpdate aRefreshSynchronization) {
+ 
+		boolean pipelined = false;
+		Object refreshable = null;
+		Set overrideableExtensions = new LinkedHashSet();
+		for (Iterator iter = aRefreshSynchronization.getRefreshTargets().iterator(); iter.hasNext();) {
+			refreshable = iter.next();
+			overrideableExtensions.addAll(contentService.findOverrideableContentExtensionsForPossibleChild(refreshable));
+		}
+		for (Iterator overrideableExtensionItr = overrideableExtensions.iterator(); overrideableExtensionItr.hasNext();) {
+			pipelined |= pipelineInterceptRefresh((NavigatorContentExtension) overrideableExtensionItr.next(), aRefreshSynchronization, refreshable);
+		}
+
+		return pipelined;
+		
+	}
+
+	private boolean pipelineInterceptRefresh(final NavigatorContentExtension overrideableExtension,
+			final PipelinedViewerUpdate aRefreshSynchronization, final Object refreshable) {
+
+		final boolean[] intercepted = new boolean[1];
+
+		final NavigatorContentExtension[] overridingExtensions = overrideableExtension
+				.getOverridingExtensions();
+		for (int i = 0; i < overridingExtensions.length; i++) {
+			final NavigatorContentExtension nceLocal = overridingExtensions[i];
+			if (nceLocal.internalGetContentProvider().isPipelined()) {
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						intercepted[0] |= ((IPipelinedTreeContentProvider) nceLocal
+								.internalGetContentProvider())
+								.interceptRefresh(aRefreshSynchronization);
+
+						if (nceLocal.getDescriptor().hasOverridingExtensions())
+							intercepted[0] |= pipelineInterceptRefresh(nceLocal,
+									aRefreshSynchronization, refreshable);
+					}
+
+					public void handleException(Throwable e) {
+						NavigatorPlugin.logError(0, NLS.bind(
+								CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+										nceLocal.getDescriptor().getId(), refreshable }), e);
+					}
+				});
+			}
+		}
+
+		return intercepted[0];
+	}	
+
+	public boolean interceptUpdate(
+			PipelinedViewerUpdate anUpdateSynchronization) {
+		 
+		boolean pipelined = false;
+		Object refreshable = null;
+
+		Set overrideableExtensions = new LinkedHashSet();
+		for (Iterator iter = anUpdateSynchronization.getRefreshTargets().iterator(); iter.hasNext();) {
+			refreshable = iter.next();
+			overrideableExtensions.addAll(contentService.findOverrideableContentExtensionsForPossibleChild(refreshable));
+		}
+		for (Iterator overrideableExtensionItr = overrideableExtensions.iterator(); overrideableExtensionItr.hasNext();) {
+			pipelined |= pipelineInterceptUpdate((NavigatorContentExtension) overrideableExtensionItr.next(), anUpdateSynchronization, refreshable);
+		}
+
+		return pipelined;
+		
+	}
+
+	private boolean pipelineInterceptUpdate(final NavigatorContentExtension overrideableExtension,
+			final PipelinedViewerUpdate anUpdateSynchronization, final Object refreshable) {
+
+		final boolean[] intercepted = new boolean[1];
+		final NavigatorContentExtension[] overridingExtensions = overrideableExtension
+				.getOverridingExtensions();
+		for (int i = 0; i < overridingExtensions.length; i++) {
+			if (overridingExtensions[i].internalGetContentProvider().isPipelined()) {
+				final NavigatorContentExtension nceLocal = overridingExtensions[i];
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						intercepted[0] |= ((IPipelinedTreeContentProvider) nceLocal
+								.internalGetContentProvider())
+								.interceptUpdate(anUpdateSynchronization);
+
+						if (nceLocal.getDescriptor().hasOverridingExtensions())
+							intercepted[0] |= pipelineInterceptUpdate(nceLocal,
+									anUpdateSynchronization, refreshable);
+					}
+
+					public void handleException(Throwable e) {
+						NavigatorPlugin.logError(0, NLS.bind(
+								CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+										nceLocal.getDescriptor().getId(), refreshable }), e);
+					}
+				});
+
+			}
+		}
+
+		return intercepted[0];
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPlugin.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPlugin.java
new file mode 100755
index 0000000..e02c14a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPlugin.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import java.util.Collections;
+
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.services.IEvaluationService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+
+/**
+ * The main plugin class for the Navigator. 
+ *  
+ * @since 3.2
+ */
+public class NavigatorPlugin extends AbstractUIPlugin {
+	// The shared instance.
+	private static NavigatorPlugin plugin;
+	
+	private static final int LOG_DELAY = 100;
+	
+	/**
+	 * The delay before updating the action bars. Must be shorter than the
+	 * LINK_HELPER_DELAY to make sure the linking works after the boot.
+	 */
+	public static final int ACTION_BAR_DELAY = 100;
+
+	/**
+	 * The delay before responding to a selection/activation event in processing
+	 * for linking with the editor.
+	 */
+	public static final int LINK_HELPER_DELAY = ACTION_BAR_DELAY + 20;
+
+	private static class LogJob extends Job { 		
+		
+		
+		private ListenerList messages = new ListenerList() {
+			
+			public synchronized Object[] getListeners() {
+				Object[] mesgs = super.getListeners();
+				clear();
+				return mesgs;
+			}
+		};
+
+		
+		/**
+		 * Creates a Job which offloads the logging work into a non-UI thread.
+		 *
+		 */
+		public LogJob() {
+			super("");  //$NON-NLS-1$
+			setSystem(true); 
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		protected IStatus run(IProgressMonitor monitor) {
+			
+			Object[] mesgs = messages.getListeners();
+			ILog pluginLog = getDefault().getLog();
+			for (int i = 0; i < mesgs.length; i++) {
+				pluginLog.log((IStatus)mesgs[i]);
+			}
+			return Status.OK_STATUS;
+						
+		}
+		
+		/**
+		 * @param mesg The message to add to the Plugin's log.
+		 */
+		public void log(IStatus mesg) {
+			messages.add(mesg);
+
+		}
+		
+	}
+	
+	private static final LogJob logJob = new LogJob(); 
+
+	/** The id of the orge.eclipse.ui.navigator plugin. */
+	public static String PLUGIN_ID = "org.eclipse.ui.navigator"; //$NON-NLS-1$
+
+	private BundleListener bundleListener = new BundleListener() {
+		public void bundleChanged(BundleEvent event) {
+			NavigatorSaveablesService.bundleChanged(event);
+		}
+	};
+
+	/**
+	 * Creates a new instance of the receiver
+	 */
+	public NavigatorPlugin() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * @return the shared instance.
+	 */
+	public static NavigatorPlugin getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path.
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
+	} 
+	
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path.
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the image 
+	 */
+	public Image getImage(String path) {
+		Image image = getImageRegistry().get(path);
+		if(image == null) {
+			ImageDescriptor descriptor = getImageDescriptor(path);
+			if(descriptor != null) {
+				getImageRegistry().put(path, image = descriptor.createImage());
+			}
+		}
+		return image;
+	} 
+
+	/**
+	 * Record an error against this plugin's log. 
+	 * 
+	 * @param aCode
+	 * @param aMessage
+	 * @param anException
+	 */
+	public static void logError(int aCode, String aMessage,
+			Throwable anException) {
+		getDefault().getLog().log(
+				createErrorStatus(aCode, aMessage, anException));
+	}
+
+	/**
+	 * 
+	 * Record a message against this plugin's log. 
+	 * 
+	 * @param severity
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 */
+	public static void log(int severity, int aCode, String aMessage,
+			Throwable exception) {
+		log(createStatus(severity, aCode, aMessage, exception));
+	}
+
+	/**
+	 * 
+	 * Record a status against this plugin's log. 
+	 * 
+	 * @param aStatus
+	 */
+	public static void log(IStatus aStatus) {
+		//getDefault().getLog().log(aStatus);
+		logJob.log(aStatus);
+		logJob.schedule(LOG_DELAY);
+	}
+
+	/**
+	 * @return an evaluation context
+	 */
+	public static IEvaluationContext getApplicationContext() {
+		IEvaluationService es = (IEvaluationService) PlatformUI.getWorkbench().getService(
+				IEvaluationService.class);
+		return es == null ? null : es.getCurrentState();
+	}
+
+	/**
+	 * @return an evaluation context
+	 */
+	public static IEvaluationContext getEmptyEvalContext() {
+		IEvaluationContext c = new EvaluationContext(getApplicationContext(),
+				Collections.EMPTY_LIST);
+		c.setAllowPluginActivation(true);
+		return c;
+	}
+
+	/**
+	 * @param selection 
+	 * @return an evaluation context
+	 */
+	public static IEvaluationContext getEvalContext(Object selection) {
+		IEvaluationContext c = new EvaluationContext(getApplicationContext(), selection);
+		c.setAllowPluginActivation(true);
+		return c;
+	}
+	
+	
+	/**
+	 * Helper class to evaluate an expression.
+	 */
+	public static class Evaluator implements ISafeRunnable {
+		EvaluationResult result;
+		Expression expression;
+		IEvaluationContext scope;
+
+		public void handleException(Throwable exception) {
+			result = EvaluationResult.FALSE;
+		}
+
+		public void run() throws Exception {
+			result = expression.evaluate(scope);
+		}
+	}
+
+	/**
+	 * Safely evaluation an expression, logging appropriately on error
+	 * 
+	 * @param expression
+	 * @param scope
+	 * @return the EvaluationResult
+	 */
+	public static EvaluationResult safeEvaluate(Expression expression, IEvaluationContext scope) {
+		Evaluator evaluator = new Evaluator();
+		evaluator.expression = expression;
+		evaluator.scope = scope;
+		SafeRunner.run(evaluator);
+		return evaluator.result;
+	}
+	
+	/**
+	 * Create a status associated with this plugin.
+	 *  
+	 * @param severity
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 * @return A status configured with this plugin's id and the given parameters.
+	 */
+	public static IStatus createStatus(int severity, int aCode,
+			String aMessage, Throwable exception) {
+		return new Status(severity, PLUGIN_ID, aCode,
+				aMessage != null ? aMessage : "No message.", exception); //$NON-NLS-1$
+	}
+
+	/**
+	 * 
+	 * @param aCode
+	 * @param aMessage
+	 * @param exception
+	 * @return A status configured with this plugin's id and the given parameters.
+	 */
+	public static IStatus createErrorStatus(int aCode, String aMessage,
+			Throwable exception) {
+		return createStatus(IStatus.ERROR, aCode, aMessage, exception);
+	}
+
+	public void start(BundleContext context) throws Exception {
+		// System.out.println("Navigator plugin starting"); //$NON-NLS-1$
+		super.start(context);
+		context.addBundleListener(bundleListener);
+	}
+
+	public void stop(BundleContext context) throws Exception {
+		context.removeBundleListener(bundleListener);
+		super.stop(context);
+		// System.out.println("Navigator plugin stopped"); //$NON-NLS-1$
+	}
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSafeRunnable.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSafeRunnable.java
new file mode 100644
index 0000000..aa8bf08
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSafeRunnable.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * @since 3.5
+ * 
+ */
+public abstract class NavigatorSafeRunnable extends SafeRunnable {
+
+	protected String _message;
+	protected IConfigurationElement _element;
+	protected Object _object;
+
+	/**
+	 * 
+	 */
+	public NavigatorSafeRunnable() {
+		super();
+	}
+
+	/**
+	 * @param message
+	 */
+	public NavigatorSafeRunnable(String message) {
+		_message = message;
+	}
+
+	/**
+	 * @param element
+	 */
+	public NavigatorSafeRunnable(IConfigurationElement element) {
+		_element = element;
+	}
+
+	/**
+	 * @param element
+	 * @param object
+	 *            an object to provide additional context
+	 */
+	public NavigatorSafeRunnable(IConfigurationElement element, Object object) {
+		_element = element;
+		_object = object;
+	}
+
+	public abstract void run() throws Exception;
+
+	public void handleException(Throwable e) {
+		String msg = _message;
+		if (msg == null)
+			msg = e.getMessage() != null ? e.getMessage() : e.toString();
+		if (_element != null) {
+			msg += ": " + //$NON-NLS-1$
+					NLS.bind(CommonNavigatorMessages.Exception_Invoking_Extension, new Object[] {
+							_element.getAttribute("id") + ": " + _element.getName(), _object }); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		NavigatorPlugin.log(IStatus.ERROR, 0, msg, e);
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java
new file mode 100755
index 0000000..fd248e9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java
@@ -0,0 +1,601 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreePathContentProvider;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.ISaveablesLifecycleListener;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.Saveable;
+import org.eclipse.ui.SaveablesLifecycleEvent;
+import org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener;
+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorSaveablesService;
+import org.eclipse.ui.navigator.SaveablesProvider;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleEvent;
+
+/**
+ * Implementation of INavigatorSaveablesService.
+ * <p>
+ * Implementation note: all externally callable methods are synchronized. The
+ * private helper methods are not synchronized since they can only be called
+ * from methods that already hold the lock.
+ * </p>
+ * @since 3.2
+ * 
+ */
+public class NavigatorSaveablesService implements INavigatorSaveablesService, VisibilityListener {
+
+	private NavigatorContentService contentService;
+
+	private static List instances = new ArrayList();
+
+	/**
+	 * @param contentService
+	 */
+	public NavigatorSaveablesService(NavigatorContentService contentService) {
+		this.contentService = contentService;
+	}
+
+	private static void addInstance(NavigatorSaveablesService saveablesService) {
+		synchronized (instances) {
+			instances.add(saveablesService);
+		}
+	}
+
+	private static void removeInstance(
+			NavigatorSaveablesService saveablesService) {
+		synchronized (instances) {
+			instances.remove(saveablesService);
+		}
+	}
+
+	/**
+	 * @param event
+	 */
+	/* package */ static void bundleChanged(BundleEvent event) {
+		synchronized(instances) {
+			if (event.getType() == BundleEvent.STARTED) {
+				// System.out.println("bundle started: " + event.getBundle().getSymbolicName()); //$NON-NLS-1$
+				for (Iterator it = instances.iterator(); it.hasNext();) {
+					NavigatorSaveablesService instance = (NavigatorSaveablesService) it
+							.next();
+					instance.handleBundleStarted(event.getBundle()
+							.getSymbolicName());
+				}
+			} else if (event.getType() == BundleEvent.STOPPED) {
+				// System.out.println("bundle stopped: " + event.getBundle().getSymbolicName()); //$NON-NLS-1$
+				for (Iterator it = instances.iterator(); it.hasNext();) {
+					NavigatorSaveablesService instance = (NavigatorSaveablesService) it
+							.next();
+					instance.handleBundleStopped(event.getBundle()
+							.getSymbolicName());
+				}
+			}
+		}
+	}
+
+	private class LifecycleListener implements ISaveablesLifecycleListener {
+		public void handleLifecycleEvent(SaveablesLifecycleEvent event) {
+			Saveable[] saveables = event.getSaveables();
+			Saveable[] shownSaveables = null;
+			// synchronize in the same order as in the init method.
+			synchronized (instances) {
+				synchronized (NavigatorSaveablesService.this) {
+					if (isDisposed())
+						return;
+					switch (event.getEventType()) {
+					case SaveablesLifecycleEvent.POST_OPEN:
+						recomputeSaveablesAndNotify(false, null);
+						break;
+					case SaveablesLifecycleEvent.POST_CLOSE:
+						recomputeSaveablesAndNotify(false, null);
+						break;
+					case SaveablesLifecycleEvent.DIRTY_CHANGED:
+						Set result = new HashSet(Arrays.asList(currentSaveables));
+						result.retainAll(Arrays.asList(saveables));
+						shownSaveables = (Saveable[]) result.toArray(new Saveable[result.size()]);
+						break;
+					}
+				}
+			}
+
+			// Notify outside of synchronization
+			if (shownSaveables != null && shownSaveables.length > 0) {
+				outsideListener.handleLifecycleEvent(new SaveablesLifecycleEvent(saveablesSource, SaveablesLifecycleEvent.DIRTY_CHANGED,
+						shownSaveables, false));
+			}
+		}
+	}
+
+	private Saveable[] currentSaveables;
+
+	private ISaveablesLifecycleListener outsideListener;
+
+	private ISaveablesLifecycleListener saveablesLifecycleListener = new LifecycleListener();
+
+	private ISaveablesSource saveablesSource;
+
+	private StructuredViewer viewer;
+
+	private SaveablesProvider[] saveablesProviders;
+
+	private DisposeListener disposeListener = new DisposeListener() {
+
+		public void widgetDisposed(DisposeEvent e) {
+			// synchronize in the same order as in the init method.
+			synchronized (instances) {
+				synchronized (NavigatorSaveablesService.this) {
+					if (saveablesProviders != null) {
+						for (int i = 0; i < saveablesProviders.length; i++) {
+							saveablesProviders[i].dispose();
+						}
+					}
+					removeInstance(NavigatorSaveablesService.this);
+					contentService = null;
+					currentSaveables = null;
+					outsideListener = null;
+					saveablesLifecycleListener = null;
+					saveablesSource = null;
+					viewer = null;
+					saveablesProviders = null;
+					disposeListener = null;
+				}
+			}
+		}
+	};
+
+	private Map inactivePluginsWithSaveablesProviders;
+
+    /**
+	 * a TreeMap (NavigatorContentDescriptor->SaveablesProvider) which uses
+	 * ExtensionPriorityComparator.INSTANCE as its Comparator
+	 */
+	private Map saveablesProviderMap;
+
+	/**
+	 * Implementation note: This is not synchronized at the method level because it needs to
+	 * synchronize on "instances" first, then on "this", to avoid potential deadlock.
+	 * 
+	 * @param saveablesSource
+	 * @param viewer
+	 * @param outsideListener
+	 * 
+	 */
+	public void init(final ISaveablesSource saveablesSource,
+			final StructuredViewer viewer,
+			ISaveablesLifecycleListener outsideListener) {
+		// Synchronize on instances to make sure that we don't miss bundle started events. 
+		synchronized (instances) {
+			// Synchronize on this because we are calling computeSaveables.
+			// Synchronization must remain in this order to avoid deadlock.
+			// This might not be necessary because at this time, no other
+			// concurrent calls should be possible, but it doesn't hurt either.
+			// For example, the initialization sequence might change in the
+			// future.
+			synchronized (this) {
+				this.saveablesSource = saveablesSource;
+				this.viewer = viewer;
+				this.outsideListener = outsideListener;
+				currentSaveables = computeSaveables();
+				// add this instance after we are fully inialized.
+				addInstance(this);
+			}
+		}
+		viewer.getControl().addDisposeListener(disposeListener);
+	}
+
+	private boolean isDisposed() {
+		return contentService == null;
+	}
+	
+	/** helper to compute the saveables for which elements are part of the tree.
+	 * Must be called from a synchronized method.
+	 * 
+	 * @return the saveables
+	 */ 
+	private Saveable[] computeSaveables() {
+		ITreeContentProvider contentProvider = (ITreeContentProvider) viewer
+				.getContentProvider();
+		boolean isTreepathContentProvider = contentProvider instanceof ITreePathContentProvider;
+		Object viewerInput = viewer.getInput();
+		List result = new ArrayList();
+		Set roots = new HashSet(Arrays.asList(contentProvider
+				.getElements(viewerInput)));
+		SaveablesProvider[] saveablesProviders = getSaveablesProviders();
+		for (int i = 0; i < saveablesProviders.length; i++) {
+			SaveablesProvider saveablesProvider = saveablesProviders[i];
+			Saveable[] saveables = saveablesProvider.getSaveables();
+			for (int j = 0; j < saveables.length; j++) {
+				Saveable saveable = saveables[j];
+				Object[] elements = saveablesProvider.getElements(saveable);
+				// the saveable is added to the result if at least one of the
+				// elements representing the saveable appears in the tree, i.e.
+				// if its parent chain leads to a root node.
+				boolean foundRoot = false;
+				for (int k = 0; !foundRoot && k < elements.length; k++) {
+					Object element = elements[k];
+					if (roots.contains(element)) {
+					    result.add(saveable);
+					    foundRoot = true;
+					} else if (isTreepathContentProvider) {
+						ITreePathContentProvider treePathContentProvider = (ITreePathContentProvider) contentProvider;
+						TreePath[] parentPaths = treePathContentProvider.getParents(element);
+						for (int l = 0; !foundRoot && l < parentPaths.length; l++) {
+							TreePath parentPath = parentPaths[l];
+                            for (int m = 0; !foundRoot && m < parentPath.getSegmentCount(); m++) {
+                                if (roots.contains(parentPath.getSegment(m))) {
+                                    result.add(saveable);
+                                    foundRoot = true;
+                                }
+                            }
+						}
+					} else {
+						while (!foundRoot && element != null) {
+							if (roots.contains(element)) {
+								// found a parent chain leading to a root. The
+								// saveable is part of the tree.
+								result.add(saveable);
+								foundRoot = true;
+							} else {
+								element = contentProvider.getParent(element);
+							}
+						}
+					}
+				}
+			}
+		}
+		return (Saveable[]) result.toArray(new Saveable[result.size()]);
+	}
+
+	public synchronized Saveable[] getActiveSaveables() {
+		ITreeContentProvider contentProvider = (ITreeContentProvider) viewer
+				.getContentProvider();
+		IStructuredSelection selection = (IStructuredSelection) viewer
+				.getSelection();
+		if (selection instanceof ITreeSelection) {
+			return getActiveSaveablesFromTreeSelection((ITreeSelection) selection);
+		} else if (contentProvider instanceof ITreePathContentProvider) {
+			return getActiveSaveablesFromTreePathProvider(selection, (ITreePathContentProvider) contentProvider);
+		} else {
+			return getActiveSaveablesFromTreeProvider(selection, contentProvider);
+		}
+	}
+	
+	/**
+	 * @param selection
+	 * @return the active saveables
+	 */
+	private Saveable[] getActiveSaveablesFromTreeSelection(
+			ITreeSelection selection) {
+		Set result = new HashSet();
+		TreePath[] paths = selection.getPaths();
+		for (int i = 0; i < paths.length; i++) {
+			TreePath path = paths[i];
+			Saveable saveable = findSaveable(path);
+			if (saveable != null) {
+				result.add(saveable);
+			}
+		}
+		return (Saveable[]) result.toArray(new Saveable[result.size()]);
+	}
+
+	/**
+	 * @param selection
+	 * @param provider
+	 * @return the active saveables
+	 */
+	private Saveable[] getActiveSaveablesFromTreePathProvider(
+			IStructuredSelection selection, ITreePathContentProvider provider) {
+		Set result = new HashSet();
+		for (Iterator it = selection.iterator(); it.hasNext();) {
+			Object element = it.next();
+			Saveable saveable = getSaveable(element);
+			if (saveable != null) {
+				result.add(saveable);
+			} else {
+				TreePath[] paths = provider.getParents(element);
+				saveable = findSaveable(paths);
+				if (saveable != null) {
+					result.add(saveable);
+				}
+			}
+		}
+		return (Saveable[]) result.toArray(new Saveable[result.size()]);
+	}
+
+	/**
+	 * @param selection
+	 * @param contentProvider
+	 * @return the active saveables
+	 */
+	private Saveable[] getActiveSaveablesFromTreeProvider(
+			IStructuredSelection selection, ITreeContentProvider contentProvider) {
+		Set result = new HashSet();
+		for (Iterator it = selection.iterator(); it.hasNext();) {
+			Object element = it.next();
+			Saveable saveable = findSaveable(element, contentProvider);
+			if (saveable != null) {
+				result.add(saveable);
+			}
+		}
+		return (Saveable[]) result.toArray(new Saveable[result.size()]);
+	}
+
+	/**
+	 * @param element
+	 * @param contentProvider
+	 * @return the saveable, or null
+	 */
+	private Saveable findSaveable(Object element,
+			ITreeContentProvider contentProvider) {
+		while (element != null) {
+			Saveable saveable = getSaveable(element);
+			if (saveable != null) {
+				return saveable;
+			}
+			element = contentProvider.getParent(element);
+		}
+		return null;
+	}
+
+	/**
+	 * @param paths
+	 * @return the saveable, or null
+	 */
+	private Saveable findSaveable(TreePath[] paths) {
+		for (int i = 0; i < paths.length; i++) {
+			Saveable saveable = findSaveable(paths[i]);
+			if (saveable != null) {
+				return saveable;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * @param path
+	 * @return a saveable, or null
+	 */
+	private Saveable findSaveable(TreePath path) {
+		int count = path.getSegmentCount();
+		for (int j = count - 1; j >= 0; j--) {
+			Object parent = path.getSegment(j);
+			Saveable saveable = getSaveable(parent);
+			if (saveable != null) {
+				return saveable;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @param element
+	 * @return the saveable associated with the given element
+	 */
+	private Saveable getSaveable(Object element) {
+		if (saveablesProviderMap==null) {
+			// has the side effect of recomputing saveablesProviderMap:
+			getSaveablesProviders();
+		}
+        for(Iterator sItr = saveablesProviderMap.keySet().iterator(); sItr.hasNext();) {
+        	NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor) sItr.next();
+                if(descriptor.isTriggerPoint(element) || descriptor.isPossibleChild(element)) {
+                	SaveablesProvider provider = (SaveablesProvider) saveablesProviderMap.get(descriptor);
+                	Saveable  saveable = provider.getSaveable(element);
+                        if(saveable != null) {
+                                return saveable;
+                        }
+                }
+        }
+        return null;
+	}
+
+	/**
+	 * @return the saveables
+	 */
+	public synchronized Saveable[] getSaveables() {
+		return currentSaveables;
+	}
+
+	/**
+	 * @return all SaveablesProvider objects
+	 */
+	private SaveablesProvider[] getSaveablesProviders() {
+		// TODO optimize this
+		if (saveablesProviders == null) {
+			inactivePluginsWithSaveablesProviders = new HashMap();
+			saveablesProviderMap = new TreeMap(ExtensionSequenceNumberComparator.INSTANCE);
+			INavigatorContentDescriptor[] descriptors = contentService
+					.getActiveDescriptorsWithSaveables();
+			List result = new ArrayList();
+			for (int i = 0; i < descriptors.length; i++) {
+				NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor) descriptors[i];
+				String pluginId = ((NavigatorContentDescriptor) descriptor)
+						.getContribution().getPluginId();
+				if (Platform.getBundle(pluginId).getState() != Bundle.ACTIVE) {
+					List inactiveDescriptors = (List) inactivePluginsWithSaveablesProviders
+							.get(pluginId);
+					if (inactiveDescriptors == null) {
+						inactiveDescriptors = new ArrayList();
+						inactivePluginsWithSaveablesProviders.put(pluginId,
+								inactiveDescriptors);
+					}
+					inactiveDescriptors.add(descriptor);
+				} else {
+					SaveablesProvider saveablesProvider = createSaveablesProvider(descriptor);
+					if (saveablesProvider != null) {
+						saveablesProvider.init(saveablesLifecycleListener);
+						result.add(saveablesProvider);
+						saveablesProviderMap.put(descriptor, saveablesProvider);
+					}
+				}
+			}
+			saveablesProviders = (SaveablesProvider[]) result
+					.toArray(new SaveablesProvider[result.size()]);
+		}
+		return saveablesProviders;
+	}
+
+	/**
+	 * @param descriptor
+	 * @return the SaveablesProvider, or null
+	 */
+	private SaveablesProvider createSaveablesProvider(NavigatorContentDescriptor descriptor) {
+		NavigatorContentExtension extension = contentService
+				.getExtension(descriptor, true);
+		// Use getContentProvider to get the client objects, this is important
+		// for the adaptation below. See bug 306545
+		ITreeContentProvider contentProvider = extension
+				.getContentProvider();
+        
+        return (SaveablesProvider)AdaptabilityUtility.getAdapter(contentProvider, SaveablesProvider.class);
+	}
+
+	private void recomputeSaveablesAndNotify(boolean recomputeProviders,
+			String startedBundleIdOrNull) {
+		if (recomputeProviders && startedBundleIdOrNull == null
+				&& saveablesProviders != null) {
+			// a bundle was stopped, dispose of all saveablesProviders and
+			// recompute
+			// TODO optimize this
+			for (int i = 0; i < saveablesProviders.length; i++) {
+				saveablesProviders[i].dispose();
+			}
+			saveablesProviders = null;
+		} else if (startedBundleIdOrNull != null){
+			if(inactivePluginsWithSaveablesProviders.containsKey(startedBundleIdOrNull)) {
+				updateSaveablesProviders(startedBundleIdOrNull);
+			}
+		}
+		Set oldSaveables = new HashSet(Arrays.asList(currentSaveables));
+		currentSaveables = computeSaveables();
+		Set newSaveables = new HashSet(Arrays.asList(currentSaveables));
+		final Set removedSaveables = new HashSet(oldSaveables);
+		removedSaveables.removeAll(newSaveables);
+		final Set addedSaveables = new HashSet(newSaveables);
+		addedSaveables.removeAll(oldSaveables);
+		if (addedSaveables.size() > 0) {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+					if (isDisposed()) {
+						return;
+					}
+					outsideListener.handleLifecycleEvent(new SaveablesLifecycleEvent(
+							saveablesSource, SaveablesLifecycleEvent.POST_OPEN,
+							(Saveable[]) addedSaveables
+							.toArray(new Saveable[addedSaveables.size()]),
+							false));
+				}
+			});
+		}
+		// TODO this will make the closing of saveables non-cancelable.
+		// Ideally, we should react to PRE_CLOSE events and fire
+		// an appropriate PRE_CLOSE
+		if (removedSaveables.size() > 0) {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+					if (isDisposed()) {
+						return;
+					}
+					outsideListener
+							.handleLifecycleEvent(new SaveablesLifecycleEvent(
+									saveablesSource,
+									SaveablesLifecycleEvent.PRE_CLOSE,
+									(Saveable[]) removedSaveables
+											.toArray(new Saveable[removedSaveables
+													.size()]), true));
+					outsideListener
+							.handleLifecycleEvent(new SaveablesLifecycleEvent(
+									saveablesSource,
+									SaveablesLifecycleEvent.POST_CLOSE,
+									(Saveable[]) removedSaveables
+											.toArray(new Saveable[removedSaveables
+													.size()]), false));
+				}
+			});
+		}
+	}
+
+	/**
+	 * @param startedBundleId
+	 */
+	private void updateSaveablesProviders(String startedBundleId) {
+		List result = new ArrayList(Arrays.asList(saveablesProviders));
+		List descriptors = (List) inactivePluginsWithSaveablesProviders
+				.get(startedBundleId);
+		for (Iterator it = descriptors.iterator(); it.hasNext();) {
+			NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor) it
+					.next();
+			SaveablesProvider saveablesProvider = createSaveablesProvider(descriptor);
+			if (saveablesProvider != null) {
+				saveablesProvider.init(saveablesLifecycleListener);
+				result.add(saveablesProvider);
+				saveablesProviderMap.put(descriptor, saveablesProvider);
+			}
+		}
+		saveablesProviders = (SaveablesProvider[]) result
+				.toArray(new SaveablesProvider[result.size()]);
+	}
+
+	/**
+	 * @param symbolicName
+	 */
+	private synchronized void handleBundleStarted(String symbolicName) {
+		if (!isDisposed()) {
+			if (inactivePluginsWithSaveablesProviders.containsKey(symbolicName)) {
+				recomputeSaveablesAndNotify(true, symbolicName);
+			}
+		}
+	}
+
+	/**
+	 * @param symbolicName
+	 */
+	private synchronized void handleBundleStopped(String symbolicName) {
+		if (!isDisposed()) {
+			recomputeSaveablesAndNotify(true, null);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener#onVisibilityOrActivationChange()
+	 */
+	public synchronized void onVisibilityOrActivationChange() {
+		if (!isDisposed()) {
+			recomputeSaveablesAndNotify(true, null);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSiteEditor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSiteEditor.java
new file mode 100755
index 0000000..6cf2da3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSiteEditor.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TreeEditor;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorSiteEditor;
+import org.eclipse.ui.navigator.CommonViewer;
+
+
+/**
+ * A NavigatorSiteEditor is used to edit (i.e., rename) elements in a Navigator view. It displays a
+ * text editor box overlay on the Navigator tree widget.
+ *  
+ * @since 3.2
+ */
+public class NavigatorSiteEditor implements INavigatorSiteEditor {
+
+	private Tree navigatorTree;
+	private TreeEditor treeEditor;
+	private Text textEditor;
+	private Composite textEditorParent;
+	private TextActionHandler textActionHandler;
+	private String text; // the text being edited
+	private CommonViewer commonViewer;
+
+
+	/**
+	 * Creates an instance of a NavigatorSiteEditor.
+	 * 
+	 * @param aCommonViewer
+	 *            the viewer this editor applies to
+	 * @param navigatorTree
+	 *            the tree that is being edited
+	 */
+	public NavigatorSiteEditor(CommonViewer aCommonViewer, Tree navigatorTree) {
+		commonViewer = aCommonViewer;
+		this.navigatorTree = navigatorTree;
+		treeEditor = new TreeEditor(navigatorTree);
+	}
+
+	/**
+	 * Creates the parent composite for the editor overlay.
+	 * 
+	 * @return the parent composite for the editor overlay
+	 */
+	Composite createParent() {
+		Composite result = new Composite(navigatorTree, SWT.NONE);
+		TreeItem[] selectedItems = navigatorTree.getSelection();
+		treeEditor.horizontalAlignment = SWT.LEFT;
+		treeEditor.grabHorizontal = true;
+		treeEditor.setEditor(result, selectedItems[0]);
+		return result;
+	}
+
+	/**
+	 * Creates the text editor widget.
+	 * 
+	 * @param runnable
+	 *            the Runnable to execute when editing ends by the user pressing enter or clicking
+	 *            outside the text editor box.
+	 */
+	void createTextEditor(final Runnable runnable) {
+		// Create text editor parent. This draws a nice bounding rect.
+		textEditorParent = createParent();
+		textEditorParent.setVisible(false);
+// RAP [bmichalik]: unsupported event type handler removed  
+//		textEditorParent.addListener(SWT.Paint, new Listener() {
+//			public void handleEvent(Event e) {
+//				Point textSize = textEditor.getSize();
+//				Point parentSize = textEditorParent.getSize();
+//				e.gc.drawRectangle(0, 0, Math.min(textSize.x + 4, parentSize.x - 1), parentSize.y - 1);
+//			}
+//		});
+
+		// Create inner text editor.
+		textEditor = new Text(textEditorParent, SWT.NONE);
+		textEditorParent.setBackground(textEditor.getBackground());
+		textEditor.addListener(SWT.Modify, new Listener() {
+			public void handleEvent(Event e) {
+				Point textSize = textEditor.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+				textSize.x += textSize.y; // Add extra space for new characters.
+				Point parentSize = textEditorParent.getSize();
+				textEditor.setBounds(2, 1, Math.min(textSize.x, parentSize.x - 4), parentSize.y - 2);
+				textEditorParent.redraw();
+			}
+		});
+		textEditor.addListener(SWT.Traverse, new Listener() {
+			public void handleEvent(Event event) {
+				//Workaround for Bug 20214 due to extra
+				//traverse events
+				switch (event.detail) {
+					case SWT.TRAVERSE_ESCAPE :
+						//Do nothing in this case
+						disposeTextWidget();
+						event.doit = true;
+						event.detail = SWT.TRAVERSE_NONE;
+						break;
+					case SWT.TRAVERSE_RETURN :
+						saveChangesAndDispose(runnable);
+						event.doit = true;
+						event.detail = SWT.TRAVERSE_NONE;
+						break;
+				}
+			}
+		});
+		textEditor.addFocusListener(new FocusAdapter() {
+			public void focusLost(FocusEvent fe) {
+				saveChangesAndDispose(runnable);
+			}
+		});
+
+		if (textActionHandler != null) {
+			textActionHandler.addText(textEditor);
+		}
+	}
+
+	/**
+	 * Closes the text editor widget.
+	 */
+	void disposeTextWidget() {
+		if (textActionHandler != null) {
+			textActionHandler.removeText(textEditor);
+		}
+		if (textEditorParent != null) {
+			textEditorParent.dispose();
+			textEditorParent = null;
+			textEditor = null;
+			treeEditor.setEditor(null, null);
+		}
+	}
+
+	/**
+	 * Displays a text editor overlay on the tree widget.
+	 * 
+	 * @param runnable
+	 *            Runnable to execute when editing ends either by the user pressing enter or
+	 *            clicking outside the editor box.
+	 */
+	public void edit(Runnable runnable) {
+		IStructuredSelection selection = (IStructuredSelection) commonViewer.getSelection();
+
+		if (selection.size() != 1) {
+			return;
+		}
+		text = getLabel(selection.getFirstElement());
+		if (text == null) {
+			return;
+		}
+		// Make sure text editor is created only once. Simply reset text
+		// editor when action is executed more than once. Fixes bug 22269.
+		if (textEditorParent == null) {
+			createTextEditor(runnable);
+		}
+		textEditor.setText(text);
+		// Open text editor with initial size.
+		textEditorParent.setVisible(true);
+		Point textSize = textEditor.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+		textSize.x += textSize.y; // Add extra space for new characters.
+		Point parentSize = textEditorParent.getSize();
+		textEditor.setBounds(2, 1, Math.min(textSize.x, parentSize.x - 4), parentSize.y - 2);
+		textEditorParent.redraw();
+		textEditor.selectAll();
+		textEditor.setFocus();
+	}
+
+	/**
+	 * Returns the displayed label of the given element.
+	 * 
+	 * @param element
+	 *            the element that is displayed in the navigator
+	 * @return the displayed label of the given element.
+	 */
+	String getLabel(Object element) {
+		return ((ILabelProvider) commonViewer.getLabelProvider()).getText(element);
+	}
+
+ 
+	public String getText() {
+		return text;
+	}
+
+	/**
+	 * Saves the changes and disposes of the text widget.
+	 * 
+	 * @param runnable
+	 *            Runnable to execute
+	 */
+	void saveChangesAndDispose(final Runnable runnable) {
+		final String newText = textEditor.getText();
+		// Run this in an async to make sure that the operation that triggered
+		// this action is completed. Otherwise this leads to problems when the
+		// icon of the item being renamed is clicked (i.e., which causes the rename
+		// text widget to lose focus and trigger this method).
+		Runnable editRunnable = new Runnable() {
+			public void run() {
+				disposeTextWidget();
+				if (newText.length() > 0 && newText.equals(text) == false) {
+					text = newText;
+					runnable.run();
+				}
+				text = null;
+			}
+		};
+		navigatorTree.getShell().getDisplay().asyncExec(editRunnable);
+	}
+
+ 
+	public void setTextActionHandler(TextActionHandler actionHandler) {
+		textActionHandler = actionHandler;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/Policy.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/Policy.java
new file mode 100755
index 0000000..acbd60e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/Policy.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Policy is the class for the debug arguments in the navigator
+ * 
+ */
+public class Policy {
+
+	/**
+	 * The default value
+	 */
+	public static final boolean DEFAULT = false;
+
+	/**
+	 * Option for tracing the reading and setup of the extensions
+	 */
+	public static boolean DEBUG_EXTENSION_SETUP = DEFAULT;
+
+	/**
+	 * Option for tracing extension resolution
+	 */
+	public static boolean DEBUG_RESOLUTION = DEFAULT;
+
+	/**
+	 * Option for tracing sort
+	 */
+	public static boolean DEBUG_SORT = DEFAULT;
+
+	/**
+	 * Option for tracing drag and drop
+	 */
+	public static boolean DEBUG_DND = DEFAULT;
+
+	/**
+	 * Option for tracing viewer/content descriptor association map
+	 */
+	public static boolean DEBUG_VIEWER_MAP = DEFAULT;
+
+	static {
+		if (getDebugOption("/debug")) { //$NON-NLS-1$
+			DEBUG_DND = getDebugOption("/debug/dnd"); //$NON-NLS-1$
+			DEBUG_RESOLUTION = getDebugOption("/debug/resolution"); //$NON-NLS-1$
+			DEBUG_EXTENSION_SETUP = getDebugOption("/debug/setup"); //$NON-NLS-1$
+			DEBUG_SORT = getDebugOption("/debug/sort"); //$NON-NLS-1$
+			DEBUG_VIEWER_MAP = getDebugOption("/debug/viewermap"); //$NON-NLS-1$
+		}
+	}
+
+	private static boolean getDebugOption(String option) {
+		return "true".equalsIgnoreCase(Platform.getDebugOption(NavigatorPlugin.PLUGIN_ID + option)); //$NON-NLS-1$
+	}
+	
+	/**
+	 * @param obj
+	 * @return a String
+	 */
+	public static String getObjectString(Object obj) {
+		if (obj == null)
+			return "(null)"; //$NON-NLS-1$
+		String elemStr = obj.toString();
+		if (elemStr.length() > 30)
+			elemStr = elemStr.substring(0, 29);
+		return "(" + obj.getClass().getName() + "): " + elemStr;  //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ReusableViewerLabel.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ReusableViewerLabel.java
new file mode 100755
index 0000000..4fb27b9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/ReusableViewerLabel.java
@@ -0,0 +1,85 @@
+/***************************************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.viewers.ViewerLabel;
+
+/**
+ * Provides a subclass of ViewerLabel that can be re-used for multiple viewer updates.
+ * 
+ * @since 3.2
+ * 
+ */
+public class ReusableViewerLabel extends ViewerLabel {
+
+	private ViewerLabel original = null;
+	/**
+	 * Creates a ViewerLabel with null text and image.
+	 *
+	 */
+	public ReusableViewerLabel() {
+		super(null, null);
+	}
+
+
+	/**
+	 * Updates the Background, Foreground, and Font to the given ViewerLabel. The 
+	 * Text and Image are reset to <b>null</b>.
+	 * 
+	 * @param theOriginal The ViewerLabel to represent.
+	 */
+	public void reset(ViewerLabel theOriginal) {
+		original = theOriginal;
+		setBackground(original.getBackground());
+		setFont(original.getFont());
+		setForeground(original.getForeground());
+		setImage(null);
+		setText(null);
+	}
+	
+	/**
+	 * 
+	 * @param theOriginal The ViewerLabel to fill with my values. 
+	 */
+	public void fill(ViewerLabel theOriginal) {
+
+		theOriginal.setBackground(getBackground());
+		theOriginal.setFont(getFont());
+		theOriginal.setForeground(getForeground());
+		theOriginal.setImage(getImage());
+		theOriginal.setText(getText() != null ? getText() : ""); //$NON-NLS-1$
+	}
+
+	/** 
+	 * 
+	 * @return True if the ReusableViewerLabel has different text or image than the original
+	 *         ViewerLabel.
+	 */
+	public boolean hasChanged() {
+		
+		boolean changed = false;
+		if(original != null) {
+			if(original.getText() == null ^ getText() != null)
+				changed |= getText() != null;
+			if(original.getText() != null && getImage() != null)
+				changed |= !getImage().equals(original.getImage());
+		}
+		return changed;
+	}
+
+	/**
+	 * @return True if the text is non-null and non-zero in length.
+	 */
+	public boolean isValid() {
+		return getText() != null && getText().length() > 0 && getImage() != null;
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/StringMatcher.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/StringMatcher.java
new file mode 100755
index 0000000..238cea4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/StringMatcher.java
@@ -0,0 +1,492 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.Vector;
+
+/**
+ * A string pattern matcher, suppporting "*" and "?" wildcards.
+ */
+public class StringMatcher {
+	protected String fPattern;
+
+	protected int fLength; // pattern length
+
+	protected boolean fIgnoreWildCards;
+
+	protected boolean fIgnoreCase;
+
+	protected boolean fHasLeadingStar;
+
+	protected boolean fHasTrailingStar;
+
+	protected String fSegments[]; // the given pattern is split into *
+
+	// separated segments
+
+	/* boundary value beyond which we don't need to search in the text */
+	protected int fBound = 0;
+
+	protected static final char fSingleWildCard = '\u0000';
+
+	/**
+	 * 
+	 */
+	static class Position {
+		int start; // inclusive
+
+		int end; // exclusive
+
+		Position(int start, int end) {
+			this.start = start;
+			this.end = end;
+		}
+
+		int getStart() {
+			return start;
+		}
+
+		int getEnd() {
+			return end;
+		}
+	}
+
+	/**
+	 * StringMatcher constructor takes in a String object that is a simple
+	 * pattern which may contain '*' for 0 and many characters and '?' for
+	 * exactly one character.
+	 * 
+	 * Literal '*' and '?' characters must be escaped in the pattern e.g., "\*"
+	 * means literal "*", etc.
+	 * 
+	 * Escaping any other character (including the escape character itself),
+	 * just results in that character in the pattern. e.g., "\a" means "a" and
+	 * "\\" means "\"
+	 * 
+	 * If invoking the StringMatcher with string literals in Java, don't forget
+	 * escape characters are represented by "\\".
+	 * 
+	 * @param pattern
+	 *            the pattern to match text against
+	 * @param ignoreCase
+	 *            if true, case is ignored
+	 * @param ignoreWildCards
+	 *            if true, wild cards and their escape sequences are ignored
+	 *            (everything is taken literally).
+	 */
+	public StringMatcher(String pattern, boolean ignoreCase,
+			boolean ignoreWildCards) {
+		if (pattern == null) {
+			throw new IllegalArgumentException();
+		}
+		fIgnoreCase = ignoreCase;
+		fIgnoreWildCards = ignoreWildCards;
+		fPattern = pattern;
+		fLength = pattern.length();
+
+		if (fIgnoreWildCards) {
+			parseNoWildCards();
+		} else {
+			parseWildCards();
+		}
+	}
+
+	/**
+	 * Find the first occurrence of the pattern between
+	 * <code>start</code)(inclusive) 
+	 * and <code>end</code>(exclusive).  
+	 * @param  text  the String object to search in 
+	 * @param  start  the starting index of the search range, inclusive
+	 * @param  end  the ending index of the search range, exclusive
+	 * @return an <code>StringMatcher.Position</code> object that keeps the starting 
+	 * (inclusive) and ending positions (exclusive) of the first occurrence of the 
+	 * pattern in the specified range of the text; return null if not found or subtext
+	 * is empty (start==end). A pair of zeros is returned if pattern is empty string
+	 * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc"
+	 * is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned
+	 */
+	public StringMatcher.Position find(String text, int start, int end) {
+		if (text == null) {
+			throw new IllegalArgumentException();
+		}
+
+		int tlen = text.length();
+		if (start < 0) {
+			start = 0;
+		}
+		if (end > tlen) {
+			end = tlen;
+		}
+		if (end < 0 || start >= end) {
+			return null;
+		}
+		if (fLength == 0) {
+			return new Position(start, start);
+		}
+		if (fIgnoreWildCards) {
+			int x = posIn(text, start, end);
+			if (x < 0) {
+				return null;
+			}
+			return new Position(x, x + fLength);
+		}
+
+		int segCount = fSegments.length;
+		if (segCount == 0) {
+			return new Position(start, end);
+		}
+
+		int curPos = start;
+		int matchStart = -1;
+		int i;
+		for (i = 0; i < segCount && curPos < end; ++i) {
+			String current = fSegments[i];
+			int nextMatch = regExpPosIn(text, curPos, end, current);
+			if (nextMatch < 0) {
+				return null;
+			}
+			if (i == 0) {
+				matchStart = nextMatch;
+			}
+			curPos = nextMatch + current.length();
+		}
+		if (i < segCount) {
+			return null;
+		}
+		return new Position(matchStart, curPos);
+	}
+
+	/**
+	 * match the given <code>text</code> with the pattern
+	 * 
+	 * @return true if matched eitherwise false
+	 * @param text
+	 *            a String object
+	 */
+	public boolean match(String text) {
+		if (text == null) {
+			return false;
+		}
+		return match(text, 0, text.length());
+	}
+
+	/**
+	 * Given the starting (inclusive) and the ending (exclusive) positions in
+	 * the <code>text</code>, determine if the given substring matches with
+	 * aPattern
+	 * 
+	 * @return true if the specified portion of the text matches the pattern
+	 * @param text
+	 *            a String object that contains the substring to match
+	 * @param start
+	 *            marks the starting position (inclusive) of the substring
+	 * @param end
+	 *            marks the ending index (exclusive) of the substring
+	 */
+	public boolean match(String text, int start, int end) {
+		if (null == text) {
+			throw new IllegalArgumentException();
+		}
+
+		if (start > end) {
+			return false;
+		}
+
+		if (fIgnoreWildCards) {
+			return (end - start == fLength)
+					&& fPattern.regionMatches(fIgnoreCase, 0, text, start,
+							fLength);
+		}
+		int segCount = fSegments.length;
+		if (segCount == 0 && (fHasLeadingStar || fHasTrailingStar)) {
+			// contains
+			// only
+			// '*'(s)
+			return true;
+		}
+		if (start == end) {
+			return fLength == 0;
+		}
+		if (fLength == 0) {
+			return start == end;
+		}
+
+		int tlen = text.length();
+		if (start < 0) {
+			start = 0;
+		}
+		if (end > tlen) {
+			end = tlen;
+		}
+
+		int tCurPos = start;
+		int bound = end - fBound;
+		if (bound < 0) {
+			return false;
+		}
+		int i = 0;
+		String current = fSegments[i];
+		int segLength = current.length();
+
+		/* process first segment */
+		if (!fHasLeadingStar) {
+			if (!regExpRegionMatches(text, start, current, 0, segLength)) {
+				return false;
+			}
+			++i;
+			tCurPos = tCurPos + segLength;
+
+		}
+		if ((fSegments.length == 1) && (!fHasLeadingStar)
+				&& (!fHasTrailingStar)) {
+			// only one segment to match, no wildcards specified
+			return tCurPos == end;
+		}
+		/* process middle segments */
+		while (i < segCount) {
+			current = fSegments[i];
+			int currentMatch;
+			int k = current.indexOf(fSingleWildCard);
+			if (k < 0) {
+				currentMatch = textPosIn(text, tCurPos, end, current);
+				if (currentMatch < 0) {
+					return false;
+				}
+			} else {
+				currentMatch = regExpPosIn(text, tCurPos, end, current);
+				if (currentMatch < 0) {
+					return false;
+				}
+			}
+			tCurPos = currentMatch + current.length();
+			i++;
+		}
+
+		/* process final segment */
+		if (!fHasTrailingStar && tCurPos != end) {
+			int clen = current.length();
+			return regExpRegionMatches(text, end - clen, current, 0, clen);
+		}
+		return i == segCount;
+	}
+
+	/**
+	 * This method parses the given pattern into segments seperated by wildcard
+	 * '*' characters. Since wildcards are not being used in this case, the
+	 * pattern consists of a single segment.
+	 */
+	private void parseNoWildCards() {
+		fSegments = new String[1];
+		fSegments[0] = fPattern;
+		fBound = fLength;
+	}
+
+	/**
+	 * Parses the given pattern into segments seperated by wildcard '*'
+	 * characters.
+	 * 
+	 */
+	private void parseWildCards() {
+		if (fPattern.startsWith("*")) { //$NON-NLS-1$
+			fHasLeadingStar = true;
+		}
+		if (fPattern.endsWith("*")) {//$NON-NLS-1$
+			/* make sure it's not an escaped wildcard */
+			if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') {
+				fHasTrailingStar = true;
+			}
+		}
+
+		Vector temp = new Vector();
+
+		int pos = 0;
+		StringBuffer buf = new StringBuffer();
+		while (pos < fLength) {
+			char c = fPattern.charAt(pos++);
+			switch (c) {
+			case '\\':
+				if (pos >= fLength) {
+					buf.append(c);
+				} else {
+					char next = fPattern.charAt(pos++);
+					/* if it's an escape sequence */
+					if (next == '*' || next == '?' || next == '\\') {
+						buf.append(next);
+					} else {
+						/* not an escape sequence, just insert literally */
+						buf.append(c);
+						buf.append(next);
+					}
+				}
+				break;
+			case '*':
+				if (buf.length() > 0) {
+					/* new segment */
+					temp.addElement(buf.toString());
+					fBound += buf.length();
+					buf.setLength(0);
+				}
+				break;
+			case '?':
+				/* append special character representing single match wildcard */
+				buf.append(fSingleWildCard);
+				break;
+			default:
+				buf.append(c);
+			}
+		}
+
+		/* add last buffer to segment list */
+		if (buf.length() > 0) {
+			temp.addElement(buf.toString());
+			fBound += buf.length();
+		}
+
+		fSegments = new String[temp.size()];
+		temp.copyInto(fSegments);
+	}
+
+	/**
+	 * @param text
+	 *            a string which contains no wildcard
+	 * @param start
+	 *            the starting index in the text for search, inclusive
+	 * @param end
+	 *            the stopping point of search, exclusive
+	 * @return the starting index in the text of the pattern , or -1 if not
+	 *         found
+	 */
+	protected int posIn(String text, int start, int end) {// no wild card in
+		// pattern
+		int max = end - fLength;
+
+		if (!fIgnoreCase) {
+			int i = text.indexOf(fPattern, start);
+			if (i == -1 || i > max) {
+				return -1;
+			}
+			return i;
+		}
+
+		for (int i = start; i <= max; ++i) {
+			if (text.regionMatches(true, i, fPattern, 0, fLength)) {
+				return i;
+			}
+		}
+
+		return -1;
+	}
+
+	/**
+	 * @param text
+	 *            a simple regular expression that may only contain '?'(s)
+	 * @param start
+	 *            the starting index in the text for search, inclusive
+	 * @param end
+	 *            the stopping point of search, exclusive
+	 * @param p
+	 *            a simple regular expression that may contains '?'
+	 * @return the starting index in the text of the pattern , or -1 if not
+	 *         found
+	 */
+	protected int regExpPosIn(String text, int start, int end, String p) {
+		int plen = p.length();
+
+		int max = end - plen;
+		for (int i = start; i <= max; ++i) {
+			if (regExpRegionMatches(text, i, p, 0, plen)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * 
+	 * @return boolean
+	 * @param text
+	 *            a String to match
+	 * @param tStart
+	 *            indicates the starting index of match, inclusive
+	 * @param p
+	 *            a simple regular expression that may contain '?'
+	 * @param pStart
+	 * @param plen
+	 */
+	protected boolean regExpRegionMatches(String text, int tStart, String p,
+			int pStart, int plen) {
+		while (plen-- > 0) {
+			char tchar = text.charAt(tStart++);
+			char pchar = p.charAt(pStart++);
+
+			/* process wild cards */
+			if (!fIgnoreWildCards) {
+				/* skip single wild cards */
+				if (pchar == fSingleWildCard) {
+					continue;
+				}
+			}
+			if (pchar == tchar) {
+				continue;
+			}
+			if (fIgnoreCase) {
+				if (Character.toUpperCase(tchar) == Character
+						.toUpperCase(pchar)) {
+					continue;
+				}
+				// comparing after converting to upper case doesn't handle all
+				// cases;
+				// also compare after converting to lower case
+				if (Character.toLowerCase(tchar) == Character
+						.toLowerCase(pchar)) {
+					continue;
+				}
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * @param text
+	 *            the string to match
+	 * @param start
+	 *            the starting index in the text for search, inclusive
+	 * @param end
+	 *            the stopping point of search, exclusive
+	 * @param p
+	 *            a string that has no wildcard
+	 * @return the starting index in the text of the pattern , or -1 if not
+	 *         found
+	 */
+	protected int textPosIn(String text, int start, int end, String p) {
+
+		int plen = p.length();
+		int max = end - plen;
+
+		if (!fIgnoreCase) {
+			int i = text.indexOf(p, start);
+			if (i == -1 || i > max) {
+				return -1;
+			}
+			return i;
+		}
+
+		for (int i = start; i <= max; ++i) {
+			if (text.regionMatches(true, i, p, 0, plen)) {
+				return i;
+			}
+		}
+
+		return -1;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/TextActionHandler.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/TextActionHandler.java
new file mode 100755
index 0000000..b8e8ca5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/TextActionHandler.java
@@ -0,0 +1,541 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+
+/**
+ * Handles the redirection of the global Cut, Copy, Paste, and
+ * Select All actions to either the current inline text control
+ * or the part's supplied action handler.
+ * <p>
+ * This class may be instantiated; it is not intended to be subclassed.
+ * </p><p>
+ * Example usage:
+ * <pre>
+ * textActionHandler = new TextActionHandler(this.getViewSite().getActionBars());
+ * textActionHandler.addText((Text)textCellEditor1.getControl());
+ * textActionHandler.addText((Text)textCellEditor2.getControl());
+ * textActionHandler.setSelectAllAction(selectAllAction);
+ * </pre>
+ * </p>
+ */
+public class TextActionHandler {
+    private DeleteActionHandler textDeleteAction = new DeleteActionHandler();
+
+    private CutActionHandler textCutAction = new CutActionHandler();
+
+    private CopyActionHandler textCopyAction = new CopyActionHandler();
+
+    private PasteActionHandler textPasteAction = new PasteActionHandler();
+
+    private SelectAllActionHandler textSelectAllAction = new SelectAllActionHandler();
+
+    private IAction deleteAction;
+
+    private IAction cutAction;
+
+    private IAction copyAction;
+
+    private IAction pasteAction;
+
+    private IAction selectAllAction;
+
+    private IPropertyChangeListener deleteActionListener = new PropertyChangeListener(
+            textDeleteAction);
+
+    private IPropertyChangeListener cutActionListener = new PropertyChangeListener(
+            textCutAction);
+
+    private IPropertyChangeListener copyActionListener = new PropertyChangeListener(
+            textCopyAction);
+
+    private IPropertyChangeListener pasteActionListener = new PropertyChangeListener(
+            textPasteAction);
+
+    private IPropertyChangeListener selectAllActionListener = new PropertyChangeListener(
+            textSelectAllAction);
+
+    private Listener textControlListener = new TextControlListener();
+
+    private Text activeTextControl;
+
+    private MouseAdapter mouseAdapter = new MouseAdapter() {
+        public void mouseUp(MouseEvent e) {
+            updateActionsEnableState();
+        }
+    };
+
+    private KeyAdapter keyAdapter = new KeyAdapter() {
+        public void keyReleased(KeyEvent e) {
+            updateActionsEnableState();
+        }
+    };
+
+    private class TextControlListener implements Listener {
+        public void handleEvent(Event event) {
+            switch (event.type) {
+            case SWT.Activate:
+                activeTextControl = (Text) event.widget;
+                updateActionsEnableState();
+                break;
+            case SWT.Deactivate:
+                activeTextControl = null;
+                updateActionsEnableState();
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+    private class PropertyChangeListener implements IPropertyChangeListener {
+        private IAction actionHandler;
+
+        protected PropertyChangeListener(IAction actionHandler) {
+            super();
+            this.actionHandler = actionHandler;
+        }
+
+        public void propertyChange(PropertyChangeEvent event) {
+            if (activeTextControl != null) {
+				return;
+			}
+            if (event.getProperty().equals(IAction.ENABLED)) {
+                Boolean bool = (Boolean) event.getNewValue();
+                actionHandler.setEnabled(bool.booleanValue());
+            }
+        }
+    }
+
+    private class DeleteActionHandler extends Action {
+        protected DeleteActionHandler() {
+            super(CommonNavigatorMessages.Delete);
+            setId("TextDeleteActionHandler");//$NON-NLS-1$
+            setEnabled(false);
+            PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+            		INavigatorHelpContextIds.TEXT_DELETE_ACTION);
+        }
+
+        public void runWithEvent(Event event) {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                activeTextControl.clearSelection();
+                return;
+            }
+            if (deleteAction != null) {
+                deleteAction.runWithEvent(event);
+                return;
+            }
+        }
+
+        /**
+         * Update state.
+         */
+        public void updateEnabledState() {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                setEnabled(activeTextControl.getSelectionCount() > 0
+                        || activeTextControl.getCaretPosition() < activeTextControl
+                                .getCharCount());
+                return;
+            }
+            if (deleteAction != null) {
+                setEnabled(deleteAction.isEnabled());
+                return;
+            }
+            setEnabled(false);
+        }
+    }
+
+    private class CutActionHandler extends Action {
+        protected CutActionHandler() {
+            super(CommonNavigatorMessages.Cut);
+            setId("TextCutActionHandler");//$NON-NLS-1$
+            setEnabled(false);
+            PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+            		INavigatorHelpContextIds.TEXT_CUT_ACTION);
+        }
+
+        public void runWithEvent(Event event) {
+// RAP [bmichalik]: text action
+//            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+//                activeTextControl.cut();
+//                return;
+//            }
+            if (cutAction != null) {
+                cutAction.runWithEvent(event);
+                return;
+            }
+        }
+
+        /**
+         * Update state.
+         */
+        public void updateEnabledState() {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                setEnabled(activeTextControl.getSelectionCount() > 0);
+                return;
+            }
+            if (cutAction != null) {
+                setEnabled(cutAction.isEnabled());
+                return;
+            }
+            setEnabled(false);
+        }
+    }
+
+    private class CopyActionHandler extends Action {
+        protected CopyActionHandler() {
+            super(CommonNavigatorMessages.Copy);
+            setId("TextCopyActionHandler");//$NON-NLS-1$
+            setEnabled(false);
+            PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+            		INavigatorHelpContextIds.TEXT_COPY_ACTION);
+        }
+
+        public void runWithEvent(Event event) {
+// RAP [bmichalik]: text action
+//            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+//                activeTextControl.copy();
+//                return;
+//            }
+            if (copyAction != null) {
+                copyAction.runWithEvent(event);
+                return;
+            }
+        }
+
+        /**
+         * Update the state.
+         */
+        public void updateEnabledState() {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                setEnabled(activeTextControl.getSelectionCount() > 0);
+                return;
+            }
+            if (copyAction != null) {
+                setEnabled(copyAction.isEnabled());
+                return;
+            }
+            setEnabled(false);
+        }
+    }
+
+    private class PasteActionHandler extends Action {
+        protected PasteActionHandler() {
+            super(CommonNavigatorMessages.Paste);
+            setId("TextPasteActionHandler");//$NON-NLS-1$
+            setEnabled(false);
+            PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+            		INavigatorHelpContextIds.TEXT_PASTE_ACTION);
+        }
+
+        public void runWithEvent(Event event) {
+// RAP [bmichalik]: text action
+//            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+//                activeTextControl.paste();
+//                return;
+//            }
+            if (pasteAction != null) {
+                pasteAction.runWithEvent(event);
+                return;
+            }
+        }
+
+        /**
+         * Update the state
+         */
+        public void updateEnabledState() {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                setEnabled(true);
+                return;
+            }
+            if (pasteAction != null) {
+                setEnabled(pasteAction.isEnabled());
+                return;
+            }
+            setEnabled(false);
+        }
+    }
+
+    private class SelectAllActionHandler extends Action {
+        protected SelectAllActionHandler() {
+            super(CommonNavigatorMessages.TextAction_selectAll);
+            setId("TextSelectAllActionHandler");//$NON-NLS-1$
+            setEnabled(false);
+            PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+					INavigatorHelpContextIds.TEXT_SELECT_ALL_ACTION);
+        }
+
+        public void runWithEvent(Event event) {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                activeTextControl.selectAll();
+                return;
+            }
+            if (selectAllAction != null) {
+                selectAllAction.runWithEvent(event);
+                return;
+            }
+        }
+
+        /**
+         * Update the state.
+         */
+        public void updateEnabledState() {
+            if (activeTextControl != null && !activeTextControl.isDisposed()) {
+                setEnabled(true);
+                return;
+            }
+            if (selectAllAction != null) {
+                setEnabled(selectAllAction.isEnabled());
+                return;
+            }
+            setEnabled(false);
+        }
+    }
+
+    /**
+     * Creates a <code>Text</code> control action handler
+     * for the global Cut, Copy, Paste, Delete, and Select All 
+     * of the action bar.
+     *
+     * @param actionBar the action bar to register global
+     *    action handlers for Cut, Copy, Paste, Delete, 
+     * 	  and Select All
+     */
+    public TextActionHandler(IActionBars actionBar) {
+        super();
+        actionBar.setGlobalActionHandler(ActionFactory.CUT.getId(),
+                textCutAction);
+        actionBar.setGlobalActionHandler(ActionFactory.COPY.getId(),
+                textCopyAction);
+        actionBar.setGlobalActionHandler(ActionFactory.PASTE.getId(),
+                textPasteAction);
+        actionBar.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
+                textSelectAllAction);
+        actionBar.setGlobalActionHandler(ActionFactory.DELETE.getId(),
+                textDeleteAction);
+    }
+
+    /**
+     * Add a <code>Text</code> control to the handler
+     * so that the Cut, Copy, Paste, Delete, and Select All 
+     * actions are redirected to it when active.
+     *
+     * @param textControl the inline <code>Text</code> control
+     */
+    public void addText(Text textControl) {
+        if (textControl == null) {
+			return;
+		}
+
+        activeTextControl = textControl;
+        textControl.addListener(SWT.Activate, textControlListener);
+        textControl.addListener(SWT.Deactivate, textControlListener);
+
+        // We really want a selection listener but it is not supported so we
+        // use a key listener and a mouse listener to know when selection changes
+        // may have occured
+        textControl.addKeyListener(keyAdapter);
+        textControl.addMouseListener(mouseAdapter);
+
+    }
+
+    /**
+     * Dispose of this action handler
+     */
+    public void dispose() {
+        setCutAction(null);
+        setCopyAction(null);
+        setPasteAction(null);
+        setSelectAllAction(null);
+        setDeleteAction(null);
+    }
+
+    /**
+     * Removes a <code>Text</code> control from the handler
+     * so that the Cut, Copy, Paste, Delete, and Select All 
+     * actions are no longer redirected to it when active.
+     *
+     * @param textControl the inline <code>Text</code> control
+     */
+    public void removeText(Text textControl) {
+        if (textControl == null) {
+			return;
+		}
+
+        textControl.removeListener(SWT.Activate, textControlListener);
+        textControl.removeListener(SWT.Deactivate, textControlListener);
+
+        textControl.removeMouseListener(mouseAdapter);
+        textControl.removeKeyListener(keyAdapter);
+
+        activeTextControl = null;
+        updateActionsEnableState();
+    }
+
+    /**
+     * Set the default <code>IAction</code> handler for the Copy
+     * action. This <code>IAction</code> is run only if no active
+     * inline text control.
+     *
+     * @param action the <code>IAction</code> to run for the
+     *    Copy action, or <code>null</code> if not interested.
+     */
+    public void setCopyAction(IAction action) {
+        if (copyAction == action) {
+			return;
+		}
+
+        if (copyAction != null) {
+			copyAction.removePropertyChangeListener(copyActionListener);
+		}
+
+        copyAction = action;
+
+        if (copyAction != null) {
+			copyAction.addPropertyChangeListener(copyActionListener);
+		}
+
+        textCopyAction.updateEnabledState();
+    }
+
+    /**
+     * Set the default <code>IAction</code> handler for the Cut
+     * action. This <code>IAction</code> is run only if no active
+     * inline text control.
+     *
+     * @param action the <code>IAction</code> to run for the
+     *    Cut action, or <code>null</code> if not interested.
+     */
+    public void setCutAction(IAction action) {
+        if (cutAction == action) {
+			return;
+		}
+
+        if (cutAction != null) {
+			cutAction.removePropertyChangeListener(cutActionListener);
+		}
+
+        cutAction = action;
+
+        if (cutAction != null) {
+			cutAction.addPropertyChangeListener(cutActionListener);
+		}
+
+        textCutAction.updateEnabledState();
+    }
+
+    /**
+     * Set the default <code>IAction</code> handler for the Paste
+     * action. This <code>IAction</code> is run only if no active
+     * inline text control.
+     *
+     * @param action the <code>IAction</code> to run for the
+     *    Paste action, or <code>null</code> if not interested.
+     */
+    public void setPasteAction(IAction action) {
+        if (pasteAction == action) {
+			return;
+		}
+
+        if (pasteAction != null) {
+			pasteAction.removePropertyChangeListener(pasteActionListener);
+		}
+
+        pasteAction = action;
+
+        if (pasteAction != null) {
+			pasteAction.addPropertyChangeListener(pasteActionListener);
+		}
+
+        textPasteAction.updateEnabledState();
+    }
+
+    /**
+     * Set the default <code>IAction</code> handler for the Select All
+     * action. This <code>IAction</code> is run only if no active
+     * inline text control.
+     *
+     * @param action the <code>IAction</code> to run for the
+     *    Select All action, or <code>null</code> if not interested.
+     */
+    public void setSelectAllAction(IAction action) {
+        if (selectAllAction == action) {
+			return;
+		}
+
+        if (selectAllAction != null) {
+			selectAllAction
+                    .removePropertyChangeListener(selectAllActionListener);
+		}
+
+        selectAllAction = action;
+
+        if (selectAllAction != null) {
+			selectAllAction.addPropertyChangeListener(selectAllActionListener);
+		}
+
+        textSelectAllAction.updateEnabledState();
+    }
+
+    /**
+     * Set the default <code>IAction</code> handler for the Delete
+     * action. This <code>IAction</code> is run only if no active
+     * inline text control.
+     *
+     * @param action the <code>IAction</code> to run for the
+     *    Delete action, or <code>null</code> if not interested.
+     */
+    public void setDeleteAction(IAction action) {
+        if (deleteAction == action) {
+			return;
+		}
+
+        if (deleteAction != null) {
+			deleteAction.removePropertyChangeListener(deleteActionListener);
+		}
+
+        deleteAction = action;
+
+        if (deleteAction != null) {
+			deleteAction.addPropertyChangeListener(deleteActionListener);
+		}
+
+        textDeleteAction.updateEnabledState();
+    }
+
+    /**
+     * Update the enable state of the Cut, Copy,
+     * Paste, Delete, and Select All action handlers
+     */
+    private void updateActionsEnableState() {
+        textCutAction.updateEnabledState();
+        textCopyAction.updateEnabledState();
+        textPasteAction.updateEnabledState();
+        textSelectAllAction.updateEnabledState();
+        textDeleteAction.updateEnabledState();
+    }
+}
+
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/VisibilityAssistant.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/VisibilityAssistant.java
new file mode 100755
index 0000000..dc0446f
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/VisibilityAssistant.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.ui.navigator.IExtensionActivationListener;
+import org.eclipse.ui.navigator.INavigatorActivationService;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+
+/**
+ * Stores information about programmatic bindings and activation settings.
+ * 
+ */
+public class VisibilityAssistant implements IExtensionActivationListener {
+
+	private final INavigatorViewerDescriptor viewerDescriptor;
+
+	private final Set programmaticVisibilityBindings = new HashSet();
+
+	private final Set programmaticRootBindings = new HashSet();
+
+	private final ListenerList listeners = new ListenerList();
+
+	private final INavigatorActivationService activationService;
+
+	/**
+	 * Notifies clients of changes in extension visibility or activation.
+	 * 
+	 */
+	public interface VisibilityListener {
+
+		/**
+		 * Respond to the change in visibility or activation.
+		 * 
+		 */
+		void onVisibilityOrActivationChange();
+	}
+
+	/**
+	 * Create a visibility assistant for the given viewer descriptor.
+	 * 
+	 * @param aViewerDescriptor
+	 *            A non-nullviewer descriptor.
+	 * @param anActivationService
+	 *            The activation service associated with the content service.
+	 */
+	public VisibilityAssistant(INavigatorViewerDescriptor aViewerDescriptor,
+			INavigatorActivationService anActivationService) {
+		Assert.isNotNull(aViewerDescriptor);
+		viewerDescriptor = aViewerDescriptor;
+
+		activationService = anActivationService;
+		activationService.addExtensionActivationListener(this);
+	}
+
+	/**
+	 * Dispose of any resources held onto by this assistant.
+	 * 
+	 */
+	public void dispose() {
+		activationService.removeExtensionActivationListener(this);
+	}
+
+	/**
+	 * 
+	 * @param theExtensions
+	 *            The extensions that should be made visible to the viewer.
+	 * @param isRoot
+	 */
+	public void bindExtensions(String[] theExtensions, boolean isRoot) {
+		if (theExtensions == null) {
+			return;
+		}
+		for (int i = 0; i < theExtensions.length; i++) {
+			programmaticVisibilityBindings.add(theExtensions[i]);
+			if (isRoot) {
+				programmaticRootBindings.add(theExtensions[i]);
+			}
+		}
+		notifyClients();
+	}
+
+	/**
+	 * Add a listener to be notified when the visibility or activation state
+	 * associated with this assistant changes.
+	 * 
+	 * @param aListener
+	 *            a listener to be notified when the visibility or activation
+	 *            state associated with this assistant changes.
+	 */
+	public void addListener(VisibilityListener aListener) {
+		listeners.add(aListener);
+	}
+
+	/**
+	 * Remove a listener to be notified when the visibility or activation state
+	 * associated with this assistant changes.
+	 * 
+	 * @param aListener
+	 *            a listener to be notified when the visibility or activation
+	 *            state associated with this assistant changes.
+	 */
+	public void removeListener(VisibilityListener aListener) {
+		listeners.remove(aListener);
+	}
+
+	private void notifyClients() {
+		Object[] clients = listeners.getListeners();
+		for (int i = 0; i < clients.length; i++) {
+			((VisibilityListener) clients[i]).onVisibilityOrActivationChange();
+		}
+	}
+
+	/**
+	 * 
+	 * @param aContentDescriptor
+	 *            The content descriptor of inquiry
+	 * @return True if and only if the content descriptor is <i>active</i> and
+	 *         <i>visible</i> for the viewer descriptor and enabled for the
+	 *         given element.
+	 */
+	public boolean isVisibleAndActive(
+			INavigatorContentDescriptor aContentDescriptor) {
+		return isActive(aContentDescriptor) && isVisible(aContentDescriptor);
+	}
+
+	/**
+	 * 
+	 * @param aContentDescriptor
+	 *            The content descriptor of inquiry
+	 * @return True if and only if the given extension is <i>active</i>
+	 * 
+	 * @see INavigatorContentService For more information on what <i>active</i>
+	 *      means.
+	 * @see INavigatorActivationService#activateExtensions(String[], boolean)
+	 * @see INavigatorActivationService#deactivateExtensions(String[], boolean)
+	 */
+	public boolean isActive(INavigatorContentDescriptor aContentDescriptor) {
+		return activationService.isNavigatorExtensionActive(aContentDescriptor
+				.getId());
+	}
+
+	/**
+	 * 
+	 * @param aContentExtensionId
+	 *            The unique id of the content extension
+	 * @return True if and only if the given extension is <i>active</i>
+	 * @see INavigatorContentService For more information on what <i>active</i>
+	 *      means.
+	 * @see INavigatorActivationService#activateExtensions(String[], boolean)
+	 * @see INavigatorActivationService#deactivateExtensions(String[], boolean)
+	 */
+	public boolean isActive(String aContentExtensionId) {
+		return activationService
+				.isNavigatorExtensionActive(aContentExtensionId);
+	}
+
+	/**
+	 * 
+	 * @param aContentDescriptor
+	 *            The content descriptor of inquiry
+	 * @return True if and only if the given content extension is declaratively
+	 *         or programmatically made visible to the viewer.
+	 * @see INavigatorContentService#bindExtensions(String[], boolean) For more
+	 *      information on what <i>visible</i> means.
+	 */
+	public boolean isVisible(INavigatorContentDescriptor aContentDescriptor) {
+		return programmaticVisibilityBindings.contains(aContentDescriptor
+				.getId())
+				|| viewerDescriptor
+						.isVisibleContentExtension(aContentDescriptor.getId());
+	}
+
+	/**
+	 * 
+	 * @param aContentExtensionId
+	 *            The unique id of the content extension
+	 * @return True if and only if the given content extension is declaratively
+	 *         or programmatically made visible to the viewer.
+	 * @see INavigatorContentService#bindExtensions(String[], boolean) For more
+	 *      information on what <i>visible</i> means.
+	 */
+	public boolean isVisible(String aContentExtensionId) {
+		return programmaticVisibilityBindings.contains(aContentExtensionId)
+				|| viewerDescriptor
+						.isVisibleContentExtension(aContentExtensionId);
+	}
+
+	/**
+	 * Return whether the given content extension is a root extension.
+	 * 
+	 * @param aContentExtensionId
+	 *            the id of the content extension.
+	 * @return whether the given content extension is a root extension
+	 */
+	public boolean isRootExtension(String aContentExtensionId) {
+		return programmaticRootBindings.contains(aContentExtensionId)
+				|| viewerDescriptor.isRootExtension(aContentExtensionId);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IExtensionActivationListener#onExtensionActivation(java.lang.String,
+	 *      java.lang.String[], boolean)
+	 */
+	public void onExtensionActivation(String aViewerId,
+			String[] theNavigatorExtensionIds, boolean isActive) {
+		if (aViewerId.equals(viewerDescriptor.getViewerId())) {
+			notifyClients();
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CollapseAllAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CollapseAllAction.java
new file mode 100755
index 0000000..17e9a71
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CollapseAllAction.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.handlers.CollapseAllHandler;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * This action delegate collapses all expanded elements in a Navigator view.
+ * 
+ */
+public class CollapseAllAction extends Action {
+
+	private final CommonViewer commonViewer;
+
+	/**
+	 * Create the CollapseAll action.
+	 * 
+	 * @param aViewer
+	 *            The viewer to be collapsed.
+	 */
+	public CollapseAllAction(CommonViewer aViewer) {
+		super(CommonNavigatorMessages.CollapseAllActionDelegate_0);
+		setToolTipText(CommonNavigatorMessages.CollapseAllActionDelegate_0);
+		setActionDefinitionId(CollapseAllHandler.COMMAND_ID);
+		commonViewer = aViewer;
+	}
+
+	public void run() {
+		if (commonViewer != null) {
+			commonViewer.collapseAll();
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionDescriptorManager.java
new file mode 100755
index 0000000..2108d89
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionDescriptorManager.java
@@ -0,0 +1,383 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+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.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.Priority;
+
+/**
+ * Manages descriptors consumed from the 'actionProvider' elements of the
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension point.
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonActionDescriptorManager {
+
+	private static final CommonActionProviderDescriptor[] NO_DESCRIPTORS = new CommonActionProviderDescriptor[0];
+
+	private static final CommonActionDescriptorManager INSTANCE = new CommonActionDescriptorManager();
+
+	private CommonActionDescriptorManager() {
+
+		new ActionProviderRegistry().readRegistry();
+	}
+
+	/**
+	 * @return the singleton instance of the registry
+	 */
+	public static CommonActionDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+	
+	/* Provides a map of (ids, CommonActionProviderDescriptor)-pairs. */
+	private final Map dependentDescriptors = new LinkedHashMap();
+
+	/* Provides a map of (ids, CommonActionProviderDescriptor)-pairs. */
+	private final Map rootDescriptors = new LinkedHashMap();
+
+	/* Provides a map of (ids, CommonActionProviderDescriptor)-pairs. */
+	private final Set overridingDescriptors = new LinkedHashSet();
+
+	
+	private final LinkedList rootDescriptorsList = new LinkedList();
+	private final LinkedList dependentDescriptorsList = new LinkedList();
+
+	
+	/**
+	 * 
+	 * @param aDescriptor
+	 *            A valid descriptor to begin managing.
+	 */
+	protected void addActionDescriptor(
+			CommonActionProviderDescriptor aDescriptor) {
+
+		if (aDescriptor.getDependsOnId() == null) {
+			rootDescriptorsList.add(aDescriptor);
+		} else {
+			dependentDescriptorsList.add(aDescriptor);
+		}
+
+		if (aDescriptor.getOverridesId() != null) {
+			overridingDescriptors.add(aDescriptor);
+		}
+	}
+
+	private int findId(List list, String id) {
+		for (int i= 0, len = list.size(); i< len; i++) {
+			CommonActionProviderDescriptor desc = (CommonActionProviderDescriptor) list.get(i);
+			if (desc.getId().equals(id))
+				return i;
+		}
+		return -1;
+	}
+	
+	
+	
+	/**
+	 * Sorts the descriptors according to the appearsBefore property
+	 */
+	private void sortDescriptors(LinkedList list, Map outMap) {
+		boolean changed = true;
+		while (changed) {
+			changed = false;
+			for (int i = 0, len = list.size(); i < len; i++) {
+				CommonActionProviderDescriptor desc = (CommonActionProviderDescriptor) list.get(i);
+				if (desc.getAppearsBeforeId() != null) {
+					int beforeInd = findId(list, desc.getAppearsBeforeId());
+					if (beforeInd < i) {
+						list.add(beforeInd, desc);
+						list.remove(i + 1);
+						changed = true;
+					}
+				}
+			}
+		}
+		for (int i = 0, len = list.size(); i < len; i++) {
+			CommonActionProviderDescriptor desc = (CommonActionProviderDescriptor) list.get(i);
+			outMap.put(desc.getDefinedId(), desc);
+		}
+	}
+	
+	
+	/**
+	 * Orders the set of available descriptors based on the order defined by the
+	 * <i>dependsOn</i> attribute from the <actionProvider /> element in
+	 * <b>org.eclipse.ui.navigator.navigatorContent</b>
+	 * 
+	 */
+	protected void computeOrdering() {
+		sortDescriptors(rootDescriptorsList, rootDescriptors);
+		sortDescriptors(dependentDescriptorsList, dependentDescriptors);
+		
+		CommonActionProviderDescriptor dependentDescriptor;
+		CommonActionProviderDescriptor requiredDescriptor;
+
+		CommonActionProviderDescriptor descriptor;
+		CommonActionProviderDescriptor overriddenDescriptor;
+		for (Iterator iter = overridingDescriptors.iterator(); iter.hasNext();) {
+			descriptor = (CommonActionProviderDescriptor) iter.next();
+			if (rootDescriptors.containsKey(descriptor.getOverridesId())) {
+				overriddenDescriptor = (CommonActionProviderDescriptor) rootDescriptors
+						.get(descriptor.getOverridesId());
+				overriddenDescriptor.addOverridingDescriptor(descriptor);
+			} else if (dependentDescriptors.containsKey(descriptor
+					.getOverridesId())) {
+				overriddenDescriptor = (CommonActionProviderDescriptor) dependentDescriptors
+						.get(descriptor.getOverridesId());
+				overriddenDescriptor.addOverridingDescriptor(descriptor);
+			}
+
+		}
+
+		Collection unresolvedDependentDescriptors = new ArrayList(
+				dependentDescriptors.values());
+
+		for (Iterator iter = dependentDescriptors.values().iterator(); iter
+				.hasNext();) {
+			dependentDescriptor = (CommonActionProviderDescriptor) iter.next();
+			requiredDescriptor = (CommonActionProviderDescriptor) rootDescriptors
+					.get(dependentDescriptor.getDependsOnId());
+			if (requiredDescriptor == null) {
+				requiredDescriptor = (CommonActionProviderDescriptor) dependentDescriptors
+						.get(dependentDescriptor.getDependsOnId());
+			}
+			if (requiredDescriptor != null) {
+				requiredDescriptor.addDependentDescriptor(dependentDescriptor);
+				unresolvedDependentDescriptors.remove(dependentDescriptor);
+			}
+
+		}
+
+		dependentDescriptors.clear();
+
+		if (!unresolvedDependentDescriptors.isEmpty()) {
+			StringBuffer errorMessage = new StringBuffer(
+					"There were unresolved dependencies for action provider extensions to a Common Navigator.\n" + //$NON-NLS-1$
+							"Verify that the \"dependsOn\" attribute for each <actionProvider /> element is valid."); //$NON-NLS-1$
+
+			CommonActionProviderDescriptor[] unresolvedDescriptors = (CommonActionProviderDescriptor[]) unresolvedDependentDescriptors
+					.toArray(new CommonActionProviderDescriptor[unresolvedDependentDescriptors
+							.size()]);
+			for (int i = 0; i < unresolvedDescriptors.length; i++) {
+				errorMessage
+						.append(
+								"\nUnresolved dependency specified for actionProvider: ").append(unresolvedDescriptors[i].getDefinedId()); //$NON-NLS-1$
+			}
+
+			NavigatorPlugin.log(IStatus.WARNING, 0, errorMessage.toString(),
+					null);
+
+		}
+		unresolvedDependentDescriptors.clear();
+
+	}
+
+	/**
+	 * 
+	 * @param aContentService
+	 *            The content service to use when filtering action providers;
+	 *            only action providers bound directly or indirectly will be
+	 *            returned.
+	 * @param aContext
+	 *            The action context that contains a valid selection.
+	 * @return An array of visible, active, and enabled CommonActionProviders.
+	 *         See <b>org.eclipse.ui.navigator.navigatorContent</b> for the
+	 *         details of what each of these adjectives implies.
+	 */
+	public CommonActionProviderDescriptor[] findRelevantActionDescriptors(
+			INavigatorContentService aContentService, ActionContext aContext) {
+		Assert.isNotNull(aContext);
+		IStructuredSelection structuredSelection = null;
+		if (aContext.getSelection() instanceof IStructuredSelection) {
+			structuredSelection = (IStructuredSelection) aContext
+					.getSelection();
+		} else {
+			structuredSelection = StructuredSelection.EMPTY;
+		}
+
+		Set blockedProviders = new HashSet();
+		CommonActionProviderDescriptor actionDescriptor = null;
+		Set providers = new LinkedHashSet();
+		for (Iterator providerItr = rootDescriptors.values().iterator(); providerItr
+				.hasNext();) {
+			actionDescriptor = (CommonActionProviderDescriptor) providerItr
+					.next();
+			addProviderIfRelevant(aContentService, structuredSelection,
+					actionDescriptor, providers, blockedProviders);
+		}
+		if (providers.size() > 0) {
+			providers.removeAll(blockedProviders);
+			return (CommonActionProviderDescriptor[]) providers
+					.toArray(new CommonActionProviderDescriptor[providers
+							.size()]);
+		}
+		return NO_DESCRIPTORS;
+	}
+
+	/**
+	 * @param aContentService
+	 * @param structuredSelection
+	 * @param actionDescriptor
+	 * @param providers
+	 */
+	private boolean addProviderIfRelevant(
+			INavigatorContentService aContentService,
+			IStructuredSelection structuredSelection,
+			CommonActionProviderDescriptor actionDescriptor, Set providers, Set blockedProviders) {
+		if (isVisible(aContentService, actionDescriptor)
+				&& actionDescriptor.isEnabledFor(structuredSelection)) {
+			
+			if(actionDescriptor.hasOverridingDescriptors()) {
+				for (Iterator iter = actionDescriptor.overridingDescriptors(); iter.hasNext();) {
+					CommonActionProviderDescriptor descriptor = (CommonActionProviderDescriptor) iter.next();
+					if(addProviderIfRelevant(aContentService, structuredSelection, descriptor, providers, blockedProviders)) {
+						while(iter.hasNext())
+							blockedProviders.add(iter.next());
+						return true;
+					}
+					
+				}
+			}			
+			providers.add(actionDescriptor);
+			if (actionDescriptor.hasDependentDescriptors()) {
+				for (Iterator iter = actionDescriptor.dependentDescriptors(); iter
+						.hasNext();) {
+					addProviderIfRelevant(aContentService, structuredSelection,
+							(CommonActionProviderDescriptor) iter.next(),
+							providers, blockedProviders);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	private boolean isVisible(INavigatorContentService aContentService,
+			CommonActionProviderDescriptor descriptor) {
+		if (descriptor.isNested()) {
+			return aContentService.isActive(descriptor.getId())
+					&& aContentService.isVisible(descriptor.getId());
+		}
+		return aContentService.getViewerDescriptor().isVisibleActionExtension(
+				descriptor.getId());
+	}
+
+	private class ActionProviderRegistry extends NavigatorContentRegistryReader {
+
+		public void readRegistry() {
+			super.readRegistry();
+			computeOrdering();
+		}
+
+		protected boolean readElement(IConfigurationElement anElement) {
+			if (TAG_ACTION_PROVIDER.equals(anElement.getName())) {
+				addActionDescriptor(new CommonActionProviderDescriptor(
+						anElement));
+				return true;
+			} else if (TAG_NAVIGATOR_CONTENT.equals(anElement.getName())) {
+				
+				IConfigurationElement[] actionProviders = anElement.getChildren(TAG_ACTION_PROVIDER);
+				
+				if (actionProviders.length > 0) {
+					
+					IConfigurationElement defaultEnablement = null;
+					IConfigurationElement[] inheritedEnablement = anElement.getChildren(TAG_ENABLEMENT);
+					if (inheritedEnablement.length == 0) {
+						inheritedEnablement = anElement.getChildren(TAG_POSSIBLE_CHILDREN);
+					}
+					
+					defaultEnablement = inheritedEnablement.length == 1 ? inheritedEnablement[0] : null;
+  
+					Priority defaultPriority = Priority.get(anElement.getAttribute(ATT_PRIORITY));
+					
+					
+					if(defaultEnablement == null) {
+						NavigatorPlugin.logError(0, 
+							"An actionProvider has been defined as the child " + //$NON-NLS-1$
+							"of a navigatorContent extension that does not specify " + //$NON-NLS-1$
+							"an <enablement/> or <possibleChildren /> expression. Please " + //$NON-NLS-1$
+							"review the documentation and correct this error.", null); //$NON-NLS-1$
+					}
+					for (int i = 0; i < actionProviders.length; i++) { 
+						if(defaultEnablement == null) { 
+							NavigatorPlugin.logError(0, 
+											"Disabling actionProvider: " + actionProviders[i].getAttribute(ATT_ID), null); //$NON-NLS-1$
+						} else {
+							SafeRunner.run(new AddProviderSafeRunner(actionProviders[i], defaultEnablement, defaultPriority, anElement));
+						}
+					}
+				}
+				return true;
+			}
+			return super.readElement(anElement);
+		}
+	
+		private class AddProviderSafeRunner implements ISafeRunnable {
+			
+			private IConfigurationElement parentElement;
+			private IConfigurationElement defaultEnablement;
+			private IConfigurationElement actionProvider;
+			private Priority defaultPriority;
+
+			protected AddProviderSafeRunner(IConfigurationElement actionProvider, 
+											 IConfigurationElement defaultEnablement, 
+											 Priority defaultPriority,
+											 IConfigurationElement parentElement) {
+				this.actionProvider = actionProvider;
+				this.defaultEnablement = defaultEnablement;
+				this.defaultPriority = defaultPriority;
+				this.parentElement = parentElement;
+			}
+			
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+			 */
+			public void run() throws Exception { 
+				addActionDescriptor(new CommonActionProviderDescriptor(
+							actionProvider, defaultEnablement, defaultPriority, parentElement
+									.getAttribute(ATT_ID), true));
+			}
+			
+			/* (non-Javadoc)
+			 * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable)
+			 */
+			public void handleException(Throwable t) {
+				NavigatorPlugin.logError(0, "Recovering from error while parsing actionProviders.", t); //$NON-NLS-1$ 
+			}
+			
+			
+		}
+	}
+
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionProviderDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionProviderDescriptor.java
new file mode 100755
index 0000000..7744986
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/CommonActionProviderDescriptor.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.actions;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.core.expressions.ElementHandler;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+import org.eclipse.ui.internal.navigator.extensions.SkeletonActionProvider;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.Priority;
+
+/**
+ *  
+ * 
+ * @since 3.2
+ */
+public class CommonActionProviderDescriptor implements
+		INavigatorContentExtPtConstants {
+
+	private static final String DEFAULT_ID = "org.eclipse.ui.navigator.actionProvider"; //$NON-NLS-1$
+	
+	private static int count = 0;
+
+	private final IConfigurationElement configurationElement;
+
+	private final String pluginId;
+	
+	private final boolean isNested;
+
+	private Set dependentDescriptors;
+
+	private Set overridingDescriptors;
+
+	private IConfigurationElement enablementElement;
+
+	private Expression enablement;
+
+	private boolean hasLoadingFailed;
+
+	private String definedId;
+
+	private String visibilityId;
+
+	private String dependsOnId;
+
+	private String overridesId;
+	
+	private String appearsBeforeId;
+
+	private String toString;
+
+	private Priority priority;
+
+	/**
+	 * @param aConfigElement
+	 *            A configuration element with the name "actionProvider" and a
+	 *            "class" attribute which subclasses
+	 *            {@link CommonActionProvider}.
+	 */
+	public CommonActionProviderDescriptor(IConfigurationElement aConfigElement) {
+		super();
+		Assert.isTrue(TAG_ACTION_PROVIDER.equals(aConfigElement.getName()));
+		configurationElement = aConfigElement;
+		pluginId = configurationElement.getContributor().getName();
+		isNested = false;
+		init();
+	}
+
+	/**
+	 * @param aConfigElement
+	 *            A configuration element with the name "actionProvider" and a
+	 *            "class" attribute which subclasses
+	 *            {@link CommonActionProvider}.
+	 * @param anEnablementExpression
+	 *            A configuration element with the name 'enablement' or
+	 *            'triggerPoints' and containing an Eclipse Core Expression
+	 * @param defaultPriority 
+	 * @param anOverrideId
+	 *            A unique identifier for this descriptor. Ids can be used as a
+	 *            filtering device for activities or viewer***Bindings.
+	 * @param nestedUnderNavigatorContent
+	 *            A value of <b>true</b> indicates that this
+	 *            CommonActionProvider was declared as a nested
+	 *            &lt;actionProvider /&gt; element under a &lt;navigatorContent
+	 *            /&gt; element.
+	 */
+	public CommonActionProviderDescriptor(IConfigurationElement aConfigElement,
+			IConfigurationElement anEnablementExpression, Priority defaultPriority, String anOverrideId,
+			boolean nestedUnderNavigatorContent) {
+		super();
+		Assert.isTrue(TAG_ACTION_PROVIDER.equals(aConfigElement.getName()));
+		Assert.isTrue(TAG_POSSIBLE_CHILDREN.equals(anEnablementExpression
+				.getName())
+				|| TAG_ENABLEMENT.equals(anEnablementExpression.getName()));
+		configurationElement = aConfigElement;
+		pluginId = configurationElement.getContributor().getName();
+		enablementElement = anEnablementExpression;
+		visibilityId = anOverrideId;
+		isNested = nestedUnderNavigatorContent;
+		priority = defaultPriority;
+		init();
+	}
+
+	private void init() {
+		try {
+			definedId = configurationElement.getAttribute(ATT_ID);
+
+			// if there was no id attribute, use the default id.
+			if (definedId == null) {
+				definedId = DEFAULT_ID + "." + count++; //$NON-NLS-1$
+			}
+
+			// we try the id attribute if no override id was supplied.
+			if (visibilityId == null) {
+				visibilityId = definedId;
+			}
+
+			dependsOnId = configurationElement.getAttribute(ATT_DEPENDS_ON);
+			overridesId = configurationElement.getAttribute(ATT_OVERRIDES);
+
+			appearsBeforeId = configurationElement.getAttribute(ATT_APPEARS_BEFORE);
+			
+			if(priority == null) {
+				String prio = configurationElement.getAttribute(ATT_PRIORITY);
+				if(prio != null)
+					priority = Priority.get(prio);
+				else
+					priority = Priority.NORMAL;
+			}
+
+			IConfigurationElement[] children = configurationElement
+					.getChildren(TAG_ENABLEMENT);
+			// if no child enablement is specified, and we have an override, use
+			// it
+			if (children.length == 0 && enablementElement != null) {
+				enablement = new CustomAndExpression(enablementElement);
+				// otherwise the child enablement takes priority
+			} else if (children.length == 1) {
+				enablement = ElementHandler.getDefault().create(
+						ExpressionConverter.getDefault(), children[0]);
+
+			} else {
+				System.err.println("Incorrect number of expressions: " + //$NON-NLS-1$
+						TAG_ENABLEMENT
+						+ " in navigator extension: " + //$NON-NLS-1$
+						configurationElement.getDeclaringExtension()
+								.getUniqueIdentifier() + " in plugin " + //$NON-NLS-1$ 
+								configurationElement.getDeclaringExtension().getNamespaceIdentifier());
+			}
+		} catch (CoreException e) {
+			NavigatorPlugin.log(IStatus.ERROR, 0, e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * 
+	 * @return The instantiated CommonActionProvider for this descriptor as
+	 *         declared in the ATT_CLASS attribute or
+	 *         {@link SkeletonActionProvider} if a problem occurs while loading
+	 *         the instance.
+	 */
+	public CommonActionProvider createActionProvider() {
+		if (hasLoadingFailed) {
+			return SkeletonActionProvider.INSTANCE;
+		}
+		final CommonActionProvider[] provider = new CommonActionProvider[1];
+		SafeRunner.run(new NavigatorSafeRunnable(configurationElement) {
+			public void run() throws Exception {
+				provider[0] = (CommonActionProvider) configurationElement
+						.createExecutableExtension(ATT_CLASS);
+			}
+		});
+
+		if (provider[0] != null)
+			return provider[0];
+		hasLoadingFailed = true;
+		return SkeletonActionProvider.INSTANCE;
+	}
+
+	/**
+	 * Determine if this action provider descriptor is enabled for the given selection.
+	 * The action provider descriptor is enabled for the selection if and only if it is
+	 * enabled for each element in the selection.
+	 * 
+	 * @param aStructuredSelection
+	 *            The selection from the viewer
+	 * @return True if and only if the extension is enabled for each element in
+	 *         the selection.
+	 */
+	public boolean isEnabledFor(IStructuredSelection aStructuredSelection) {
+		if (enablement == null) {
+			return false;
+		}
+		
+		if(aStructuredSelection.isEmpty()) {
+			IEvaluationContext context = null; 
+			context = NavigatorPlugin.getEmptyEvalContext();
+			if (NavigatorPlugin.safeEvaluate(enablement, context) != EvaluationResult.TRUE) {
+				return false;
+			}
+		} else {
+			IEvaluationContext context = null;
+			IEvaluationContext parentContext = NavigatorPlugin.getApplicationContext();
+			Iterator elements = aStructuredSelection.iterator();
+			while (elements.hasNext()) {
+				context = new EvaluationContext(parentContext, elements.next());
+				context.setAllowPluginActivation(true);
+				if (NavigatorPlugin.safeEvaluate(enablement, context) != EvaluationResult.TRUE) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Determine if this content extension is enabled for the given element.
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension is enabled for the element.
+	 */
+	public boolean isEnabledFor(Object anElement) {
+		if (enablement == null || anElement == null) {
+			return false;
+		}
+
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anElement);
+		return NavigatorPlugin.safeEvaluate(enablement, context) == EvaluationResult.TRUE;
+	}
+
+	/**
+	 * 
+	 * @return An identifier for this ICommonActionProvider. Defaults to
+	 *         "org.eclipse.ui.navigator.actionProvider". May not be unique.
+	 *         Used to filter the actionProvider using the visibility state
+	 *         information.
+	 */
+	public String getId() {
+		return visibilityId;
+	}
+
+	/**
+	 * 
+	 * @return An identifier for this ICommonActionProvider. Defaults to
+	 *         'org.eclipse.ui.navigator.actionProvider'. May not be unique.
+	 *         Used to determine override or depends on cases.
+	 */
+	public String getDefinedId() {
+		return definedId;
+	}
+
+	/**
+	 * 
+	 * @return True if this is a nested &lt;actionProvider /&gt; element.
+	 */
+	public boolean isNested() {
+		return isNested;
+	}
+
+	/**
+	 * 
+	 * @return The value specified by the <i>dependsOn</i> attribute of the
+	 *         &lt;actionProvider /&gt; element.
+	 */
+	public String getDependsOnId() {
+		return dependsOnId;
+	}
+
+	/**
+	 * 
+	 * @return The value specified by the <i>overridesId</i> attribute of the
+	 *         &lt;actionProvider /&gt; element.
+	 */
+	public String getOverridesId() {
+		return overridesId;
+	}
+	
+	/**
+	 * 
+	 * @return The value specified by the <i>appearsBefore</i> attribute of the
+	 *         &lt;actionProvider /&gt; element.
+	 */
+	public String getAppearsBeforeId() {
+		return appearsBeforeId;
+	}
+	
+	/**
+	 * Only nested Action Providers have priority (as of 3.2.1). 
+	 * 
+	 * @return The priority associated with this Action Provider Descriptor. 
+	 */
+	public Priority getPriority() {
+		return priority;
+	}
+
+
+	public int hashCode() {
+		final int PRIME = 31;
+		int result = 1;
+		result = PRIME * result + ((definedId == null) ? 0 : definedId.hashCode());
+		result = PRIME * result + ((visibilityId == null) ? 0 : visibilityId.hashCode());
+		return result;
+	}
+
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final CommonActionProviderDescriptor other = (CommonActionProviderDescriptor) obj;
+		if (definedId == null) {
+			if (other.definedId != null)
+				return false;
+		} else if (!definedId.equals(other.definedId))
+			return false;
+		if (visibilityId == null) {
+			if (other.visibilityId != null)
+				return false;
+		} else if (!visibilityId.equals(other.visibilityId))
+			return false;
+		return true;
+	} 
+	
+	 
+
+	protected void addDependentDescriptor(
+			CommonActionProviderDescriptor dependentDescriptor) {
+		Assert.isTrue(this != dependentDescriptor);
+		if (dependentDescriptors == null) {
+			dependentDescriptors = new LinkedHashSet();
+		}
+		dependentDescriptors.add(dependentDescriptor);
+	}
+
+	protected void addOverridingDescriptor(
+			CommonActionProviderDescriptor overridingDescriptor) {
+		Assert.isTrue(this != overridingDescriptor);
+		if (overridingDescriptors == null) {
+			overridingDescriptors = new TreeSet(CommonActionProviderDescriptorCompator.INSTANCE);
+		}
+		overridingDescriptors.add(overridingDescriptor);
+	}
+
+	protected boolean hasDependentDescriptors() {
+		return dependentDescriptors != null && !dependentDescriptors.isEmpty();
+	}
+
+	protected boolean hasOverridingDescriptors() {
+		return overridingDescriptors != null
+				&& !overridingDescriptors.isEmpty();
+	}
+
+	protected Iterator dependentDescriptors() {
+		return dependentDescriptors.iterator();
+	}
+
+	protected Iterator overridingDescriptors() {
+		return overridingDescriptors.iterator();
+	}
+
+	/**
+	 * @return the id of the contributing plugin
+	 */
+	public String getPluginId() {
+		return pluginId;
+	}
+	
+	public String toString() {
+		if (toString == null) {
+			toString = "CommonActionProviderDescriptor[definedId=" + getDefinedId() + ", visibilityId=" + getId() + ", dependsOn=" + getDependsOnId() + ", overrides=" + getOverridesId() + "]"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+		}
+		return toString;
+	} 
+
+	
+	/**
+	 * Sorts CommonActionProviderDescriptors by priority, and then by defined id. 
+	 * @since 3.2
+	 *
+	 */
+	public static class CommonActionProviderDescriptorCompator implements Comparator { 
+
+		/**
+		 * The singleton instance.
+		 */
+		public static final CommonActionProviderDescriptorCompator INSTANCE = new CommonActionProviderDescriptorCompator();
+		
+		private static final int LESS_THAN = -1;
+		private static final int EQUALS = 0; 
+		
+		/* (non-Javadoc)
+		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+		 */
+		public int compare(Object o1, Object o2) {
+			CommonActionProviderDescriptor lvalue= null, rvalue= null;
+			
+			if(o1 instanceof CommonActionProviderDescriptor)
+				lvalue = (CommonActionProviderDescriptor) o1;
+			
+			if(o2 instanceof CommonActionProviderDescriptor)
+				rvalue = (CommonActionProviderDescriptor) o2;
+			
+			if(lvalue == null || rvalue == null)
+				return LESS_THAN;
+			if(lvalue.equals(rvalue))
+				return EQUALS;
+
+			int comparison = lvalue.getPriority().getValue() - rvalue.getPriority().getValue();
+			if(comparison == 0) 
+				return lvalue.getDefinedId().compareTo(rvalue.getDefinedId());
+			return comparison;
+			
+		}
+	}
+
+}
+ 
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/LinkEditorAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/LinkEditorAction.java
new file mode 100755
index 0000000..c6b06cd
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/actions/LinkEditorAction.java
@@ -0,0 +1,269 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.actions;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.jface.action.Action;
+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.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IPropertyListener;
+// RAP [bmichalik]
+//import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ILinkHelper;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.LinkHelperService;
+import org.eclipse.ui.part.ISetSelectionTarget;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * This action links the activate editor with the Navigator selection.
+ * 
+ * @since 3.2
+ */
+public class LinkEditorAction extends Action implements
+		ISelectionChangedListener, IPropertyListener {
+	// RAP [bmichalik]: added to bypass lack of org.eclipse.ui.IWorkbenchCommandConstants  
+	/**
+     * Id for command "Toggle Link with Editor " in category "Navigate"
+     * (value is <code>"org.eclipse.ui.navigate.linkWithEditor"</code>).
+     * 
+     */
+	public static final String NAVIGATE_TOGGLE_LINK_WITH_EDITOR = "org.eclipse.ui.navigate.linkWithEditor"; //$NON-NLS-1$
+    //RAPEND
+    
+	private IPartListener partListener;
+
+	private final CommonNavigator commonNavigator;
+
+	private final CommonViewer commonViewer;
+
+	private final LinkHelperService linkService;
+
+	private boolean ignoreSelectionChanged;
+	private boolean ignoreEditorActivation;
+	
+	private UIJob activateEditorJob = new UIJob(
+			CommonNavigatorMessages.Link_With_Editor_Job_) {
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+
+			if (!commonViewer.getControl().isDisposed()) {
+				ISelection selection = commonViewer.getSelection();
+				if (selection != null && !selection.isEmpty()
+						&& selection instanceof IStructuredSelection) {
+
+					final IStructuredSelection sSelection = (IStructuredSelection) selection;
+					if (sSelection.size() == 1) {
+						final ILinkHelper[] helpers = linkService
+								.getLinkHelpersFor(sSelection.getFirstElement());
+						if (helpers.length > 0) {
+							ignoreEditorActivation = true;
+							SafeRunner.run(new NavigatorSafeRunnable() {
+								public void run() throws Exception {
+									helpers[0].activateEditor(commonNavigator.getSite()
+											.getPage(), sSelection);
+								}
+							});
+							ignoreEditorActivation = false;
+						}
+					}
+				}
+			}
+			return Status.OK_STATUS;
+		}
+	};
+
+	private UIJob updateSelectionJob = new UIJob(
+			CommonNavigatorMessages.Link_With_Editor_Job_) {
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+
+			if (!commonNavigator.getCommonViewer().getControl().isDisposed()) {
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						IWorkbenchPage page = commonNavigator.getSite()
+								.getPage();
+						if (page != null) {
+							IEditorPart editor = page.getActiveEditor();
+							if (editor != null) {
+								IEditorInput input = editor.getEditorInput();
+								IStructuredSelection newSelection = linkService
+										.getSelectionFor(input);
+								if (!newSelection.isEmpty()) {
+									ignoreSelectionChanged = true;
+									commonNavigator.selectReveal(newSelection);
+									ignoreSelectionChanged = false;
+								}
+							}
+						}
+					}
+				});
+			}
+
+			return Status.OK_STATUS;
+		}
+	};
+
+	/**
+	 * Create a LinkEditorAction for the given navigator and viewer.
+	 * 
+	 * @param aNavigator
+	 *            The navigator which defines whether linking is enabled and
+	 *            implements {@link ISetSelectionTarget}.
+	 * @param aViewer
+	 *            The common viewer instance with a
+	 *            {@link INavigatorContentService}.
+	 * @param linkHelperService
+	 */
+	public LinkEditorAction(CommonNavigator aNavigator, CommonViewer aViewer,
+			LinkHelperService linkHelperService) {
+		super(CommonNavigatorMessages.LinkEditorActionDelegate_0);
+		linkService = linkHelperService;
+		setToolTipText(CommonNavigatorMessages.LinkEditorActionDelegate_1);
+		commonNavigator = aNavigator;
+		commonViewer = aViewer;
+// RAP [bmichalik]
+//		setActionDefinitionId(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR);
+		setActionDefinitionId(NAVIGATE_TOGGLE_LINK_WITH_EDITOR);
+		init();
+	}
+
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	protected void init() {
+		partListener = new IPartListener() {
+
+			public void partActivated(IWorkbenchPart part) {
+				if (part instanceof IEditorPart && !ignoreEditorActivation) {
+					updateSelectionJob.schedule(NavigatorPlugin.LINK_HELPER_DELAY);
+				}
+			}
+
+			public void partBroughtToTop(IWorkbenchPart part) {
+				if (part instanceof IEditorPart && !ignoreEditorActivation) {
+					updateSelectionJob.schedule(NavigatorPlugin.LINK_HELPER_DELAY);
+				}
+			}
+
+			public void partClosed(IWorkbenchPart part) {
+
+			}
+
+			public void partDeactivated(IWorkbenchPart part) {
+			}
+
+			public void partOpened(IWorkbenchPart part) {
+			}
+		};
+
+		updateLinkingEnabled(commonNavigator.isLinkingEnabled());
+
+		commonNavigator.addPropertyListener(this);
+
+		// linkHelperRegistry = new
+		// LinkHelperManager(commonViewer.getNavigatorContentService());
+	}
+
+	/**
+	 * 
+	 */
+	public void dispose() {
+		commonNavigator.removePropertyListener(this);
+		if (isChecked()) {
+			commonViewer.removePostSelectionChangedListener(this);
+			commonNavigator.getSite().getPage()
+					.removePartListener(partListener);
+		}
+
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run() {
+		commonNavigator.setLinkingEnabled(!commonNavigator.isLinkingEnabled());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ISelectionChangedList
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		if (commonNavigator.isLinkingEnabled() && !ignoreSelectionChanged) {
+			activateEditor();
+		}
+	}
+
+	/**
+	 * Update the active editor based on the current selection in the Navigator.
+	 */
+	protected void activateEditor() {
+		ISelection selection = commonViewer.getSelection();
+		if (selection != null && !selection.isEmpty()
+				&& selection instanceof IStructuredSelection) {
+			/*
+			 * Create and schedule a UI Job to activate the editor in a valid
+			 * Display thread
+			 */
+			activateEditorJob.schedule(NavigatorPlugin.LINK_HELPER_DELAY);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object,
+	 *      int)
+	 */
+	public void propertyChanged(Object aSource, int aPropertyId) {
+		switch (aPropertyId) {
+		case CommonNavigator.IS_LINKING_ENABLED_PROPERTY:
+			updateLinkingEnabled(((CommonNavigator) aSource).isLinkingEnabled());
+		}
+	}
+
+	/**
+	 * @param toEnableLinking
+	 */
+	private void updateLinkingEnabled(boolean toEnableLinking) {
+		setChecked(toEnableLinking);
+
+		if (toEnableLinking) {
+
+			updateSelectionJob.schedule(NavigatorPlugin.LINK_HELPER_DELAY);
+
+			commonViewer.addPostSelectionChangedListener(this);
+			commonNavigator.getSite().getPage().addPartListener(partListener);
+		} else {
+			commonViewer.removePostSelectionChangedListener(this);
+			commonNavigator.getSite().getPage()
+					.removePartListener(partListener);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropAdapterDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropAdapterDescriptor.java
new file mode 100755
index 0000000..98d8a58
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropAdapterDescriptor.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.dnd;
+
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+
+/**
+ * @since 3.2
+ * 
+ */
+public final class CommonDropAdapterDescriptor implements
+		INavigatorContentExtPtConstants {
+
+	private final IConfigurationElement element;
+
+	private final INavigatorContentDescriptor contentDescriptor;
+
+	private Expression dropExpr;
+
+	/* package */CommonDropAdapterDescriptor(
+			IConfigurationElement aConfigElement,
+			INavigatorContentDescriptor aContentDescriptor) {
+		element = aConfigElement;
+		contentDescriptor = aContentDescriptor;
+		init();
+	}
+
+	private void init() {
+		IConfigurationElement[] children = element.getChildren(TAG_POSSIBLE_DROP_TARGETS);
+		if (children.length == 1) {
+			dropExpr = new CustomAndExpression(children[0]);
+		}
+	}
+
+	/**
+	 * 
+	 * @param anElement
+	 *            The element from the set of elements being dragged.
+	 * @return True if the element matches the drag expression from the
+	 *         extension.
+	 */
+	public boolean isDragElementSupported(Object anElement) { 
+		return contentDescriptor.isPossibleChild(anElement); 
+	}
+
+	/**
+	 * 
+	 * @param aSelection
+	 *            The set of elements being dragged.
+	 * @return True if the element matches the drag expression from the
+	 *         extension.
+	 */
+	public boolean areDragElementsSupported(IStructuredSelection aSelection) {
+		if (aSelection.isEmpty()) {
+			return false;
+		}
+		return contentDescriptor.arePossibleChildren(aSelection);
+	}
+
+	/**
+	 * 
+	 * @param anElement
+	 *            The element from the set of elements benig dropped.
+	 * @return True if the element matches the drop expression from the
+	 *         extension.
+	 */
+	public boolean isDropElementSupported(Object anElement) {
+		if (dropExpr != null && anElement != null) {
+			IEvaluationContext context = NavigatorPlugin.getEvalContext(anElement);
+			return NavigatorPlugin.safeEvaluate(dropExpr, context) == EvaluationResult.TRUE;
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @return An instance of {@link CommonDropAdapterAssistant} from the
+	 *         descriptor or {@link SkeletonCommonDropAssistant}.
+	 */
+	public CommonDropAdapterAssistant createDropAssistant() {
+		final CommonDropAdapterAssistant[] retValue = new CommonDropAdapterAssistant[1];
+		SafeRunner.run(new NavigatorSafeRunnable(element) {
+			public void run() throws Exception {
+				retValue[0] = (CommonDropAdapterAssistant) element
+						.createExecutableExtension(ATT_CLASS);
+			}
+		});
+		if (retValue[0] != null)
+			return retValue[0];
+		return SkeletonCommonDropAssistant.INSTANCE;
+	}
+
+	/**
+	 * 
+	 * @return The content descriptor that contains this drop descriptor.
+	 */
+	public INavigatorContentDescriptor getContentDescriptor() {
+		return contentDescriptor;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java
new file mode 100755
index 0000000..157f564
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.dnd;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CommonDropDescriptorManager {
+
+	private static final CommonDropDescriptorManager INSTANCE = new CommonDropDescriptorManager();
+
+	private static final CommonDropAdapterDescriptor[] NO_DESCRIPTORS = new CommonDropAdapterDescriptor[0];
+
+	/**
+	 * A map of (INavigatorContentDescriptor,
+	 * CommonDropAdapterDescriptor)-pairs.
+	 */
+	private final Map dropDescriptors = new TreeMap(ExtensionSequenceNumberComparator.INSTANCE);
+
+	/**
+	 * 
+	 * @return An initialized singleton instance of the
+	 *         CommonDropDescriptorManager.
+	 */
+	public static CommonDropDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+
+	private CommonDropDescriptorManager() {
+		new CommonDropAdapterRegistry().readRegistry();
+	}
+
+	/**
+	 * 
+	 * @param aDropTarget
+	 *            The drop target of the operation
+	 * @param aContentService
+	 *            The associated content service to filter results by.
+	 * @return An array of drop descriptors that can handle the given drop
+	 *         target and are <i>visible</i> and <i>active</i> for the given
+	 *         service and <i>enabled</i> for the given drop target..
+	 */
+	public CommonDropAdapterDescriptor[] findCommonDropAdapterAssistants(Object aDropTarget, INavigatorContentService aContentService) {
+
+		Set foundDescriptors = new LinkedHashSet();
+		for (Iterator iter = dropDescriptors.keySet().iterator(); iter
+				.hasNext();) {
+			INavigatorContentDescriptor contentDescriptor = (INavigatorContentDescriptor) iter
+					.next();
+			if (aContentService.isVisible(contentDescriptor.getId())
+					&& aContentService.isActive(contentDescriptor.getId())) {
+				List dropDescriptors = getDropDescriptors(contentDescriptor);
+				for (Iterator iterator = dropDescriptors.iterator(); iterator
+						.hasNext();) {
+					CommonDropAdapterDescriptor dropDescriptor = (CommonDropAdapterDescriptor) iterator
+							.next();
+					if (dropDescriptor.isDropElementSupported(aDropTarget)) {
+						foundDescriptors.add(dropDescriptor);
+					}
+				}
+			}
+		}
+
+		if (foundDescriptors.isEmpty()) {
+			return NO_DESCRIPTORS;
+		}
+		return (CommonDropAdapterDescriptor[]) foundDescriptors
+				.toArray(new CommonDropAdapterDescriptor[foundDescriptors
+						.size()]);
+	}
+
+	private List getDropDescriptors(
+			INavigatorContentDescriptor aContentDescriptor) {
+		List descriptors = (List) dropDescriptors.get(aContentDescriptor);
+		if (descriptors != null) {
+			return descriptors;
+		}
+		synchronized (dropDescriptors) {
+			descriptors = (List) dropDescriptors.get(aContentDescriptor);
+			if (descriptors == null) {
+				dropDescriptors.put(aContentDescriptor,
+						(descriptors = new ArrayList()));
+			}
+
+		}
+		return descriptors;
+	}
+
+	/**
+	 * @param aContentDescriptor
+	 *            A non-null content descriptor.
+	 * @param aDropDescriptor
+	 *            A non-null drop descriptor.
+	 */
+	private void addCommonDropAdapter(
+			INavigatorContentDescriptor aContentDescriptor,
+			CommonDropAdapterDescriptor aDropDescriptor) { 
+		getDropDescriptors(aContentDescriptor).add(aDropDescriptor);
+	}
+
+	private class CommonDropAdapterRegistry extends
+			NavigatorContentRegistryReader implements
+			INavigatorContentExtPtConstants {
+
+		private CommonDropAdapterRegistry() {
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.internal.navigator.extensions.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
+		 */
+		protected boolean readElement(IConfigurationElement element) {
+
+			if (TAG_NAVIGATOR_CONTENT.equals(element.getName())) {
+
+				String id = element.getAttribute(ATT_ID);
+				if (id != null) {
+					INavigatorContentDescriptor contentDescriptor = CONTENT_DESCRIPTOR_MANAGER
+							.getContentDescriptor(id);
+					if (contentDescriptor != null) {
+
+						IConfigurationElement[] commonDropAdapters = element
+								.getChildren(TAG_COMMON_DROP_ADAPTER);
+
+						for (int i = 0; i < commonDropAdapters.length; i++) {
+							addCommonDropAdapter(contentDescriptor,
+									new CommonDropAdapterDescriptor(commonDropAdapters[i], contentDescriptor));
+						} 
+					}
+				}
+
+			}
+			return super.readElement(element);
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorContentServiceTransfer.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorContentServiceTransfer.java
new file mode 100755
index 0000000..6b59985
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorContentServiceTransfer.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.dnd;
+
+import java.lang.ref.WeakReference;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * Caches instances of {@link INavigatorContentService} to facilitate the
+ * handling of drop operations in other viewers.
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorContentServiceTransfer {
+	
+	private static final NavigatorContentServiceTransfer instance = new NavigatorContentServiceTransfer(); 
+	
+	/**
+	 * 
+	 * @return The singleton instance of the transfer service.
+	 */
+	public static NavigatorContentServiceTransfer getInstance() {
+		return instance;
+	}
+
+	private final Set registeredContentServices = new HashSet();
+	
+	/**
+	 *  
+	 * @param aContentService The Content Service to register.
+	 */
+	public synchronized void registerContentService(INavigatorContentService aContentService) { 
+		if(findService(aContentService.getViewerId()) == null) {
+			registeredContentServices.add(new WeakReference(aContentService));
+		}
+	}
+	
+	/**
+	 *  
+	 * @param aContentService The Content Service to unregister.
+	 */
+	public synchronized void unregisterContentService(INavigatorContentService aContentService) { 
+  
+		for (Iterator iter = registeredContentServices.iterator(); iter.hasNext();) {
+			WeakReference ref = (WeakReference) iter.next();
+			if(ref.get() == null) {
+				iter.remove();
+			} else { 
+				if(ref.get() == aContentService) {
+					iter.remove(); 
+					return;
+				}
+			}
+		} 
+	}
+	
+	/**
+	 * 
+	 * @param aViewerId A viewer id that should have previously been registered with the service.
+	 * @return The registered content service for the given viewer id.
+	 */
+	public synchronized INavigatorContentService findService(String aViewerId) {
+		if(aViewerId == null || aViewerId.length() == 0) {
+			return null;
+		}
+		INavigatorContentService contentService;
+		for (Iterator iter = registeredContentServices.iterator(); iter.hasNext();) {
+			WeakReference ref = (WeakReference) iter.next();
+			if(ref.get() == null) {
+				iter.remove();
+			} else {
+				contentService = (INavigatorContentService)ref.get();
+				if(aViewerId.equals(contentService.getViewerId())) {
+					return contentService;
+				} 
+			}
+		}
+		return null;
+	} 
+	
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorDnDService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorDnDService.java
new file mode 100755
index 0000000..b139885
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorDnDService.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.dnd;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.internal.navigator.extensions.CommonDragAssistantDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorViewerDescriptor;
+import org.eclipse.ui.navigator.CommonDragAdapterAssistant;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorDnDService;
+
+/**
+ * 
+ * Provides instances of {@link CommonDragAdapterAssistant} and
+ * {@link CommonDropAdapterAssistant} for the associated
+ * {@link INavigatorContentService}.
+ * 
+ * <p>
+ * Clients may not extend, instantiate or directly reference this class.
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorDnDService implements INavigatorDnDService {
+
+	private static final CommonDropAdapterAssistant[] NO_ASSISTANTS = new CommonDropAdapterAssistant[0];
+
+	private INavigatorContentService contentService;
+
+	private CommonDragAdapterAssistant[] dragAssistants;
+	
+	private CommonDropAdapter dropAdapter;
+
+	private final Map dropAssistants = new HashMap();
+
+	/**
+	 * 
+	 * @param aContentService
+	 *            The associated content service
+	 */
+	public NavigatorDnDService(INavigatorContentService aContentService) {
+		contentService = aContentService;
+	}
+
+	/**
+	 * @param da
+	 * 
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public void setDropAdaptor(CommonDropAdapter da) {
+		dropAdapter = da;
+	}
+	
+	public synchronized CommonDragAdapterAssistant[] getCommonDragAssistants() {
+
+		if (dragAssistants == null) 
+			initializeDragAssistants(); 
+		return dragAssistants;
+	}
+ 
+	private void initializeDragAssistants() {
+		int i = 0;
+		Set dragDescriptors = ((NavigatorViewerDescriptor) contentService
+				.getViewerDescriptor()).getDragAssistants();
+		dragAssistants = new CommonDragAdapterAssistant[dragDescriptors
+				.size()];
+		for (Iterator iter = dragDescriptors.iterator(); iter.hasNext();) {
+			CommonDragAssistantDescriptor descriptor = (CommonDragAssistantDescriptor) iter
+					.next();
+			dragAssistants[i++] = descriptor.createDragAssistant();
+		}
+	}
+	
+
+	public synchronized void bindDragAssistant(CommonDragAdapterAssistant anAssistant) {
+		if(dragAssistants == null) 
+			initializeDragAssistants(); 
+		CommonDragAdapterAssistant[] newDragAssistants = new CommonDragAdapterAssistant[dragAssistants.length + 1];
+		System.arraycopy(dragAssistants, 0, newDragAssistants, 0, dragAssistants.length);
+		newDragAssistants[dragAssistants.length] = anAssistant;
+		dragAssistants = newDragAssistants;		
+	}
+
+	public CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
+			Object aDropTarget, TransferData aTransferType) {
+ 
+		// TODO Make sure descriptors are sorted by priority 
+		CommonDropAdapterDescriptor[] descriptors = CommonDropDescriptorManager
+				.getInstance().findCommonDropAdapterAssistants(aDropTarget,
+						contentService);
+
+		if (descriptors.length == 0) {
+			return NO_ASSISTANTS;
+		}
+
+		if (LocalSelectionTransfer.getTransfer().isSupportedType(aTransferType)  
+						&& LocalSelectionTransfer.getTransfer().getSelection() instanceof IStructuredSelection) {
+			return getAssistantsBySelection(descriptors, (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection());
+		} 
+		return getAssistantsByTransferData(descriptors, aTransferType);
+	}
+	
+
+	public CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
+			Object aDropTarget, IStructuredSelection theDragSelection) {
+ 
+		// TODO Make sure descriptors are sorted by priority 
+		CommonDropAdapterDescriptor[] descriptors = CommonDropDescriptorManager
+				.getInstance().findCommonDropAdapterAssistants(aDropTarget,
+						contentService);
+
+		if (descriptors.length == 0) {
+			return NO_ASSISTANTS;
+		}
+
+		return getAssistantsBySelection(descriptors, theDragSelection);  
+	}
+
+	private CommonDropAdapterAssistant[] getAssistantsByTransferData(
+			CommonDropAdapterDescriptor[] descriptors,
+			TransferData aTransferType) {
+
+		Set assistants = new LinkedHashSet();
+		for (int i = 0; i < descriptors.length; i++) {
+			CommonDropAdapterAssistant asst = getAssistant(descriptors[i]);
+			if (asst.isSupportedType(aTransferType)) {
+				assistants.add(asst);
+			}
+		}
+		return sortAssistants((CommonDropAdapterAssistant[]) assistants
+				.toArray(new CommonDropAdapterAssistant[assistants.size()]));
+
+	}
+
+	private CommonDropAdapterAssistant[] getAssistantsBySelection(
+			CommonDropAdapterDescriptor[] descriptors, IStructuredSelection aSelection) {
+
+		Set assistants = new LinkedHashSet(); 
+			
+		for (int i = 0; i < descriptors.length; i++) {
+			if(descriptors[i].areDragElementsSupported(aSelection)) {
+				assistants.add(getAssistant(descriptors[i]));
+			}
+		}  
+
+		return sortAssistants((CommonDropAdapterAssistant[]) assistants
+				.toArray(new CommonDropAdapterAssistant[assistants.size()]));
+	}
+
+	private CommonDropAdapterAssistant[] sortAssistants(CommonDropAdapterAssistant[] array) {
+		Arrays.sort(array, new Comparator() {
+			public int compare(Object arg0, Object arg1) {
+				CommonDropAdapterAssistant a = (CommonDropAdapterAssistant) arg0;
+				CommonDropAdapterAssistant b = (CommonDropAdapterAssistant) arg1;
+				// This is to ensure that the navigator resources drop assistant will
+				// always be first on the list of drop assistant, if a conflict ever 
+				// occurs.
+				String id = "org.eclipse.ui.navigator.resources."; //$NON-NLS-1$
+				if (a.getClass().getName().startsWith(id))
+					return -1;
+				if (b.getClass().getName().startsWith(id))
+					return 1;
+				return a.getClass().getName().compareTo(b.getClass().getName());
+			}
+		});
+		return array;
+	}
+	private CommonDropAdapterAssistant getAssistant(
+			CommonDropAdapterDescriptor descriptor) {
+		CommonDropAdapterAssistant asst = (CommonDropAdapterAssistant) dropAssistants
+				.get(descriptor);
+		if (asst != null) {
+			return asst;
+		}
+		synchronized (dropAssistants) {
+			asst = (CommonDropAdapterAssistant) dropAssistants.get(descriptor);
+			if (asst == null) {
+				dropAssistants.put(descriptor, (asst = descriptor
+						.createDropAssistant()));
+				asst.init(contentService);
+				asst.setCommonDropAdapter(dropAdapter);
+			}
+		}
+		return asst;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorPluginDropAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorPluginDropAction.java
new file mode 100755
index 0000000..96b8d5e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/NavigatorPluginDropAction.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.dnd;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.part.IDropActionDelegate;
+import org.eclipse.ui.part.PluginTransferData;
+
+/**
+ * 
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorPluginDropAction implements IDropActionDelegate {
+
+	private static final String CN_PLUGIN_ACTION_ID = "org.eclipse.ui.navigator.PluginDropAction"; //$NON-NLS-1$
+
+	/**
+	 * A default no-args constructor is required by the
+	 * <b>org.eclipse.ui.dropAdapters</b> extension point
+	 */
+	public NavigatorPluginDropAction() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.part.IDropActionDelegate#run(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public boolean run(Object sourceData, Object target) {
+
+		if (Policy.DEBUG_DND) {
+			System.out.println("NavigatorPluginDropAction.run (begin)"); //$NON-NLS-1$
+		}
+
+		String sourceViewerId = new String((byte[]) sourceData);
+
+		IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer
+				.getTransfer().getSelection();
+
+		INavigatorContentService contentService = NavigatorContentServiceTransfer
+				.getInstance().findService(sourceViewerId);
+
+		if (contentService == null) {
+			return false;
+		}
+		try {
+			CommonDropAdapterAssistant[] assistants = contentService
+					.getDnDService().findCommonDropAdapterAssistants(target,
+							selection); 
+
+			IStatus valid = null;
+			for (int i = 0; i < assistants.length; i++) {
+				valid = assistants[i].validatePluginTransferDrop(selection, target);
+				if (valid != null && valid.isOK()) {
+					valid = assistants[i].handlePluginTransferDrop(selection, target);
+					return valid != null && valid.isOK();
+				}
+			}
+		} finally {
+			NavigatorContentServiceTransfer.getInstance()
+					.unregisterContentService(contentService);
+		}
+
+		if (Policy.DEBUG_DND) {
+			System.out.println("NavigatorPluginDropAction.run (exit)"); //$NON-NLS-1$
+		}
+
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param aContentService
+	 *            The associated content service that is the source of the drag
+	 * @return A PluginTransferData properly configured to call the Common
+	 *         Navigator's PluginDropAction.
+	 */
+	public static PluginTransferData createTransferData(
+			INavigatorContentService aContentService) {
+		NavigatorContentServiceTransfer.getInstance().registerContentService(
+				aContentService);
+		return new PluginTransferData(CN_PLUGIN_ACTION_ID, aContentService
+				.getViewerId().getBytes());
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/SkeletonCommonDropAssistant.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/SkeletonCommonDropAssistant.java
new file mode 100755
index 0000000..5bf92d1
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/SkeletonCommonDropAssistant.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.dnd;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+
+/**
+ * A Skeleton implementation of {@link CommonDropAdapterAssistant}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class SkeletonCommonDropAssistant extends CommonDropAdapterAssistant {
+
+	/**
+	 * The singleton instance.
+	 */
+	public static final SkeletonCommonDropAssistant INSTANCE = new SkeletonCommonDropAssistant();
+
+	private SkeletonCommonDropAssistant() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter,
+	 *      org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)
+	 */
+	public IStatus handleDrop(CommonDropAdapter aDropAdapter,
+			DropTargetEvent aDropTargetEvent, Object aTarget) {
+		return Status.CANCEL_STATUS;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#validateDrop(java.lang.Object,
+	 *      int, org.eclipse.swt.dnd.TransferData)
+	 */
+	public IStatus validateDrop(Object target, int operation,
+			TransferData transferType) {
+		return Status.CANCEL_STATUS;
+	}
+
+	// /*
+	// * (non-Javadoc)
+	// *
+	// * @see
+	// org.eclipse.ui.navigator.CommonDropAdapterAssistant#findSupportedTransferData(org.eclipse.swt.dnd.TransferData[])
+	// */
+	// public TransferData findSupportedTransferData(
+	// TransferData[] theAvailableTransferData) {
+	//
+	// return null;
+	// }
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/Binding.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/Binding.java
new file mode 100755
index 0000000..ec34b6f
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/Binding.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.Policy;
+
+class Binding {
+
+	private final Set rootPatterns = new HashSet();
+
+	private final Set includePatterns = new HashSet();
+
+	private final Set excludePatterns = new HashSet();
+
+	private final String TAG_EXTENSION;
+
+	private final Map knownIds = new HashMap();
+	private final Map knownRootIds = new HashMap();
+
+	protected Binding(String tagExtension) {
+		TAG_EXTENSION = tagExtension;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorViewerDescriptor#isVisibleExtension(java.lang.String)
+	 */
+	boolean isVisibleExtension(String anExtensionId) {
+		
+
+		// Have we seen this pattern before?
+		if (knownIds.containsKey(anExtensionId)) {
+			// we have, don't recompute
+			return ((Boolean) knownIds.get(anExtensionId)).booleanValue();
+		}
+		
+		for (Iterator itr = includePatterns.iterator(); itr.hasNext();) {
+			Pattern pattern = (Pattern) itr.next();
+			if (pattern.matcher(anExtensionId).matches()) {
+				// keep track of the result for next time
+				knownIds.put(anExtensionId, Boolean.TRUE);
+				if (Policy.DEBUG_RESOLUTION) {
+					System.out.println("Viewer Binding: " + TAG_EXTENSION +//$NON-NLS-1$
+							" to: " + anExtensionId); //$NON-NLS-1$
+				}
+				return true;
+			}
+		}
+
+		for (Iterator itr = excludePatterns.iterator(); itr.hasNext();) {
+			Pattern pattern = (Pattern) itr.next();
+			if (pattern.matcher(anExtensionId).matches()) {
+				knownIds.put(anExtensionId, Boolean.FALSE);
+				if (Policy.DEBUG_RESOLUTION) {
+					System.out.println("Viewer Binding: EXCLUDED: " + TAG_EXTENSION +//$NON-NLS-1$
+							" to: " + anExtensionId); //$NON-NLS-1$
+				}
+				return false;
+			}
+		}
+
+		if (Policy.DEBUG_RESOLUTION) {
+			System.out.println("Viewer Binding: NOT FOUND: " + TAG_EXTENSION +//$NON-NLS-1$
+					" to: " + anExtensionId); //$NON-NLS-1$
+		}
+		knownIds.put(anExtensionId, Boolean.FALSE);
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorViewerDescriptor#isRootExtension(java.lang.String)
+	 */
+	boolean isRootExtension(String anExtensionId) {
+		if (rootPatterns.size() == 0) {
+			return false;
+		} 
+		// Have we seen this pattern before?
+		if (knownRootIds.containsKey(anExtensionId)) {
+			// we have, don't recompute
+			return ((Boolean) knownRootIds.get(anExtensionId)).booleanValue();
+		}
+		Pattern pattern = null;
+		for (Iterator itr = rootPatterns.iterator(); itr.hasNext();) {
+			pattern = (Pattern) itr.next();
+			if (pattern.matcher(anExtensionId).matches()) {
+				knownRootIds.put(anExtensionId, Boolean.TRUE);
+				return true;
+			}
+		}
+		knownRootIds.put(anExtensionId, Boolean.FALSE);
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorViewerDescriptor#hasOverriddenRootExtensions()
+	 */
+	boolean hasOverriddenRootExtensions() {
+		return rootPatterns.size() > 0;
+	}
+
+	void consumeIncludes(IConfigurationElement element, boolean toRespectRoots) {
+
+		Assert.isTrue(NavigatorViewerDescriptor.TAG_INCLUDES.equals(element
+				.getName()));
+		IConfigurationElement[] contentExtensionPatterns = element
+				.getChildren(TAG_EXTENSION);
+		String isRootString = null;
+		boolean isRoot = false;
+		String patternString = null;
+		Pattern compiledPattern = null;
+		for (int i = 0; i < contentExtensionPatterns.length; i++) {
+			if (toRespectRoots) {
+				isRootString = contentExtensionPatterns[i]
+						.getAttribute(NavigatorViewerDescriptor.ATT_IS_ROOT);
+				isRoot = (isRootString != null) ? Boolean.valueOf(
+						isRootString.trim()).booleanValue() : false;
+			}
+
+			patternString = contentExtensionPatterns[i]
+					.getAttribute(NavigatorViewerDescriptor.ATT_PATTERN);
+			if (patternString == null) {
+				NavigatorPlugin
+						.logError(
+								0,
+								NLS
+										.bind(
+												CommonNavigatorMessages.Attribute_Missing_Warning,
+												new Object[] {
+														NavigatorViewerDescriptor.ATT_PATTERN,
+														element
+																.getDeclaringExtension()
+																.getUniqueIdentifier(),
+														element
+																.getDeclaringExtension()
+																.getNamespaceIdentifier() }),
+								null);
+			} else {
+				compiledPattern = Pattern.compile(patternString);
+				includePatterns.add(compiledPattern);
+				knownIds.clear();// Cache is now invlaid
+				if (toRespectRoots && isRoot) {
+					rootPatterns.add(compiledPattern);
+				}
+			}
+		}
+
+	}
+
+	void consumeExcludes(IConfigurationElement element) {
+		Assert.isTrue(NavigatorViewerDescriptor.TAG_EXCLUDES.equals(element
+				.getName()));
+		IConfigurationElement[] contentExtensionPatterns = element
+				.getChildren(TAG_EXTENSION);
+		String patternString = null;
+		Pattern compiledPattern = null;
+		for (int i = 0; i < contentExtensionPatterns.length; i++) {
+
+			patternString = contentExtensionPatterns[i]
+					.getAttribute(NavigatorViewerDescriptor.ATT_PATTERN);
+			if (patternString == null) {
+				NavigatorPlugin
+						.logError(
+								0,
+								NLS
+										.bind(
+												CommonNavigatorMessages.Attribute_Missing_Warning,
+												new Object[] {
+														NavigatorViewerDescriptor.ATT_PATTERN,
+														element
+																.getDeclaringExtension()
+																.getUniqueIdentifier(),
+														element
+																.getDeclaringExtension()
+																.getNamespaceIdentifier() }),
+								null);
+			} else {
+				compiledPattern = Pattern.compile(patternString);
+				excludePatterns.add(compiledPattern);
+				knownIds.clear();// Clear the cache
+			}
+		}
+
+	}
+	
+	void addBinding(Binding otherBinding) {
+		includePatterns.addAll(otherBinding.includePatterns);
+		excludePatterns.addAll(otherBinding.excludePatterns);
+		rootPatterns.addAll(otherBinding.rootPatterns);
+	}
+	
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonActionExtensionSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonActionExtensionSite.java
new file mode 100755
index 0000000..fe3cb23
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonActionExtensionSite.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerSite;
+
+/**
+ * 
+ * Provides access to information required for the initialization of
+ * CommonActionProviders.
+ * 
+ * <p>
+ * See the documentation of the <b>org.eclipse.ui.navigator.navigatorContent</b>
+ * extension point and {@link CommonActionProvider} for more information on
+ * declaring {@link CommonActionProvider}s.
+ * </p>
+ * 
+ * 
+ * @since 3.2
+ */
+public final class CommonActionExtensionSite extends CommonExtensionSite
+		implements ICommonActionExtensionSite {
+
+	private String extensionId;
+
+	private String pluginId;
+	
+	private ICommonViewerSite commonViewerSite;
+
+	private StructuredViewer structuredViewer;
+
+	/**
+	 * Create a config element for the initialization of Common Action
+	 * Providers.
+	 * 
+	 * @param anExtensionId
+	 *            The unique identifier of the associated content extension or
+	 *            the top-level action provider. <b>May NOT be null.</b>
+	 * @param aPluginId
+	 *            The id of the plugin that contributes this CommonActionProvider
+	 * @param aCommonViewerSite
+	 *            The common viewer site may be used to access information about
+	 *            the part for which the instantiated CommonActionProvider will
+	 *            be used. <b>May NOT be null.</b>
+	 * @param aContentService
+	 *            The associated content service to allow coordination with
+	 *            content extensions via the IExtensionStateModel. Clients may
+	 *            access the content providers and label providers as necessary
+	 *            also to render labels or images in their UI. <b>May NOT be
+	 *            null.</b>
+	 * @param aStructuredViewer
+	 *            The viewer control that will use the instantiated Common
+	 *            Action Provider. <b>May NOT be null.</b>
+	 */
+	public CommonActionExtensionSite(String anExtensionId,
+			String aPluginId,
+			ICommonViewerSite aCommonViewerSite,
+			NavigatorContentService aContentService,
+			StructuredViewer aStructuredViewer) {
+		super(aContentService, anExtensionId); 
+
+		Assert.isNotNull(aCommonViewerSite);
+		Assert.isNotNull(aStructuredViewer);
+		extensionId = anExtensionId;
+		pluginId = aPluginId;
+		commonViewerSite = aCommonViewerSite;
+		structuredViewer = aStructuredViewer;
+
+	}
+
+	/**
+	 * 
+	 * @return The unique identifier of the associated content extension or the
+	 *         top-level Common Action Provider.
+	 */
+	public String getExtensionId() {
+		return extensionId;
+	}
+
+	/**
+	 * 
+	 * @return The plugin id of associated Common Action Provider
+	 */
+	public String getPluginId() {
+		return pluginId;
+	}
+
+	/**
+	 * 
+	 * @return The associated structured viewer for the instantiated Common
+	 *         Action Provider.
+	 */
+	public StructuredViewer getStructuredViewer() {
+		return structuredViewer;
+	}
+
+	/**
+	 * 
+	 * @return The ICommonViewerSite from the CommonViewer.
+	 */
+	public ICommonViewerSite getViewSite() {
+		return commonViewerSite;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonContentExtensionSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonContentExtensionSite.java
new file mode 100755
index 0000000..691eec1
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonContentExtensionSite.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CommonContentExtensionSite extends CommonExtensionSite implements
+		ICommonContentExtensionSite {
+
+	private NavigatorContentExtension extension;
+
+	private IMemento memento;
+
+	private NavigatorContentService contentService;
+
+	/**
+	 * Create a config element for the initialization of Content Extensions.
+	 * 
+	 * @param anExtensionId
+	 *            The unique identifier of the associated content extension or
+	 *            the top-level action provider. <b>May NOT be null.</b>
+	 * @param aContentService
+	 *            The associated content service to allow coordination with
+	 *            content extensions via the IExtensionStateModel. Clients may
+	 *            access the content providers and label providers as necessary
+	 *            also to render labels or images in their UI. <b>May NOT be
+	 *            null.</b>
+	 * @param aMemento
+	 *            The memento associated with the parent viewer.
+	 */
+	public CommonContentExtensionSite(String anExtensionId,
+			NavigatorContentService aContentService, IMemento aMemento) {
+		super(aContentService, anExtensionId);
+
+		NavigatorContentDescriptor contentDescriptor = NavigatorContentDescriptorManager
+				.getInstance().getContentDescriptor(anExtensionId);
+
+		extension = aContentService.getExtension(contentDescriptor);
+		memento = aMemento;
+		contentService = aContentService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonContentExtensionSite#getMemento()
+	 */
+	public IMemento getMemento() {
+		return memento;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonContentExtensionSite#getExtension()
+	 */
+	public INavigatorContentExtension getExtension() {
+		return extension;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ICommonContentExtensionSite#getService()
+	 */
+	public INavigatorContentService getService() { 
+		return contentService;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonDragAssistantDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonDragAssistantDescriptor.java
new file mode 100755
index 0000000..e660022
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonDragAssistantDescriptor.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.navigator.CommonDragAdapterAssistant;
+
+/**
+ * 
+ * Drag assistants allow clients to provide new TransferTypes to a particular
+ * viewer.
+ * 
+ * @since 3.2
+ * 
+ */
+public final class CommonDragAssistantDescriptor implements IViewerExtPtConstants {
+
+	private IConfigurationElement element;
+
+	
+	/* package */ CommonDragAssistantDescriptor(IConfigurationElement aConfigElement) {
+		element = aConfigElement;
+	}
+
+	/**
+	 * Create an instance of the {@link CommonDragAdapterAssistant} defined by
+	 * this descriptor.
+	 * 
+	 * @return an instance of the {@link CommonDragAdapterAssistant} or
+	 *         {@link SkeletonCommonDragAssistant} if a problem occurs with the
+	 *         instantiation.
+	 */
+	public CommonDragAdapterAssistant createDragAssistant() {
+
+		final CommonDragAdapterAssistant[] da = new CommonDragAdapterAssistant[1];
+
+		SafeRunner.run(new NavigatorSafeRunnable(element) {
+			public void run() throws Exception {
+				da[0] = (CommonDragAdapterAssistant) element.createExecutableExtension(ATT_CLASS);
+			}
+		});
+		if (da[0] != null)
+			return da[0];
+		return SkeletonCommonDragAssistant.INSTANCE;
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonExtensionSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonExtensionSite.java
new file mode 100755
index 0000000..215f851
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/CommonExtensionSite.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * 
+ * Provides a common base class for {@link ICommonContentExtensionSite} and
+ * {@link ICommonActionExtensionSite}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonExtensionSite {
+
+	private final INavigatorContentService contentService;
+
+	private IExtensionStateModel extensionStateModel;
+
+	protected CommonExtensionSite(INavigatorContentService aContentService,
+			String anExtensionId) {
+
+		Assert.isNotNull(aContentService);
+
+		contentService = aContentService;
+		if (anExtensionId != null) {
+			extensionStateModel = aContentService.findStateModel(anExtensionId);
+		}
+	}
+
+	/**
+	 * 
+	 * @return The content service used to create this extension site
+	 */
+	public final INavigatorContentService getContentService() {
+		return contentService;
+	}
+
+	/**
+	 * By default, the extension state model returned is for the associated
+	 * content extension (if this is NOT a top-level action provider).
+	 * Otherwise, clients may use
+	 * {@link INavigatorContentService#findStateModel(String)} to locate the
+	 * state model of another content extension.
+	 * 
+	 * @return The extension state model of the associated extension.
+	 * @see IExtensionStateModel
+	 */
+	public final IExtensionStateModel getExtensionStateModel() {
+		return extensionStateModel;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/EvalutationReference.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/EvalutationReference.java
new file mode 100755
index 0000000..8fe16e3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/EvalutationReference.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.lang.ref.SoftReference;
+
+/**
+ * @since 3.3
+ * 
+ */
+public class EvalutationReference extends SoftReference {
+
+	private final int hashCode;
+
+	private final Class type;
+
+	/**
+	 * @param referent
+	 *            The object to be referenced
+	 */
+	public EvalutationReference(Object referent) {
+		super(referent);
+		hashCode = referent.hashCode();
+		type = referent.getClass();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		return hashCode;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj == null)
+			return false;
+		else if (obj instanceof EvalutationReference) {
+			if (!type.equals(((EvalutationReference) obj).type))
+				return false;
+			return hashCode == obj.hashCode();
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		Object referent = get();
+		if(referent == null)
+			return "Evalutation[type="+ type +"]";  //$NON-NLS-1$//$NON-NLS-2$
+		return "Evalutation[referent="+ referent +"]"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java
new file mode 100755
index 0000000..1efe40e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.Comparator;
+
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class ExtensionSequenceNumberComparator implements Comparator {
+
+	/**
+	 * The initialized singleton instance.
+	 */
+	public static final ExtensionSequenceNumberComparator INSTANCE = new ExtensionSequenceNumberComparator(true);
+
+	/**
+	 * The initialized singleton instance.
+	 */
+	public static final ExtensionSequenceNumberComparator DESCENDING = new ExtensionSequenceNumberComparator(false);
+	
+	private final int sortAscending;
+	
+	/**
+	 * Creates an instance that sorts according to the given boolean flag.
+	 * 
+	 * @param toSortAscending
+	 *            <code>true</code> for ascending sort order or
+	 *            <code>false</code> for descending sort order.
+	 */
+	public ExtensionSequenceNumberComparator(boolean toSortAscending) {
+		sortAscending = toSortAscending ? 1 : -1; 
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+	 */
+	public int compare(Object o1, Object o2) {
+
+		INavigatorContentDescriptor lvalue = null;
+		INavigatorContentDescriptor rvalue = null;
+
+		if (o1 instanceof INavigatorContentDescriptor) {
+			lvalue = (INavigatorContentDescriptor) o1;
+		} else if (o1 instanceof NavigatorContentExtension) {
+			lvalue = ((NavigatorContentExtension) o1).getDescriptor();
+		}
+
+		if (o2 instanceof INavigatorContentDescriptor) {
+			rvalue = (INavigatorContentDescriptor) o2;
+		} else if (o2 instanceof INavigatorContentExtension) {
+			rvalue = ((NavigatorContentExtension) o2).getDescriptor();
+		}
+
+		if (lvalue == null || rvalue == null) {
+			return  -1 * sortAscending;
+		}
+
+		int c = lvalue.getSequenceNumber() - rvalue.getSequenceNumber();
+		if (c != 0) {
+			return c * sortAscending;
+		}
+		return 0;
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionStateModel.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionStateModel.java
new file mode 100755
index 0000000..cc475f5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionStateModel.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+/**
+ * 
+ * 
+ * @since 3.2
+ * @see IExtensionStateModel
+ */
+public class ExtensionStateModel extends EventManager implements
+		IExtensionStateModel {
+
+	private final String id;
+
+	private final String viewerId;
+
+	private final Map values = new HashMap();
+
+	/**
+	 * Create an extension state model for the given extension (anId) associated
+	 * with the given viewer (aViewerId).
+	 * 
+	 * @param anId
+	 *            The id of the extension this state model is used for.
+	 * @param aViewerId
+	 *            The id of the viewer this state model is associated with.
+	 */
+	public ExtensionStateModel(String anId, String aViewerId) {
+		id = anId;
+		viewerId = aViewerId;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public String getViewerId() {
+		return viewerId;
+	}
+
+	public String getStringProperty(String aPropertyName) {
+		return (String) values.get(aPropertyName);
+	}
+
+	public boolean getBooleanProperty(String aPropertyName) {
+
+		Boolean b = (Boolean) values.get(aPropertyName);
+		return b != null ? b.booleanValue() : false;
+	}
+
+	public int getIntProperty(String aPropertyName) {
+		Integer i = (Integer) values.get(aPropertyName);
+		return i != null ? i.intValue() : -1;
+	}
+
+	public void setStringProperty(String aPropertyName, String aPropertyValue) {
+		String oldValue = (String) values.get(aPropertyName);
+		String newValue = aPropertyValue;
+		if (hasPropertyChanged(oldValue, newValue)) {
+			values.put(aPropertyName, newValue);
+			firePropertyChangeEvent(new PropertyChangeEvent(this,
+					aPropertyName, oldValue, newValue));
+		}
+	}
+
+	public void setBooleanProperty(String aPropertyName, boolean aPropertyValue) {
+		Boolean oldValue = (Boolean) values.get(aPropertyName);
+		Boolean newValue = aPropertyValue ? Boolean.TRUE : Boolean.FALSE;
+		if (hasPropertyChanged(oldValue, newValue)) {
+
+			values.put(aPropertyName, aPropertyValue ? Boolean.TRUE
+					: Boolean.FALSE);
+			firePropertyChangeEvent(new PropertyChangeEvent(this,
+					aPropertyName, oldValue, newValue));
+		}
+	}
+
+	public void setIntProperty(String aPropertyName, int aPropertyValue) {
+		Integer oldValue = (Integer) values.get(aPropertyName);
+		Integer newValue = new Integer(aPropertyValue);
+		if (hasPropertyChanged(oldValue, newValue)) {
+			values.put(aPropertyName, newValue);
+			firePropertyChangeEvent(new PropertyChangeEvent(this,
+					aPropertyName, oldValue, newValue));
+		}
+	}
+
+	public void addPropertyChangeListener(IPropertyChangeListener aListener) {
+		addListenerObject(aListener);
+	}
+
+	public void removePropertyChangeListener(IPropertyChangeListener aListener) {
+		removeListenerObject(aListener);
+	}
+
+	public Object getProperty(String aPropertyName) {
+		return values.get(aPropertyName);
+	}
+
+	public void setProperty(String aPropertyName, Object aPropertyValue) {
+
+		Object oldValue = values.get(aPropertyName);
+		Object newValue = aPropertyValue;
+		if (hasPropertyChanged(oldValue, newValue)) {
+			values.put(aPropertyName, newValue);
+			firePropertyChangeEvent(new PropertyChangeEvent(this,
+					aPropertyName, oldValue, newValue));
+		}
+	}
+ 
+	private boolean hasPropertyChanged(Object oldValue, Object newValue) {
+		return oldValue == null || !oldValue.equals(newValue);
+	}
+
+	protected void firePropertyChangeEvent(PropertyChangeEvent anEvent) {
+		Object[] listeners = getListeners();
+		for (int i = 0; i < listeners.length; ++i) {
+			((IPropertyChangeListener) listeners[i]).propertyChange(anEvent);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ILinkHelperExtPtConstants.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ILinkHelperExtPtConstants.java
new file mode 100755
index 0000000..b852f30
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ILinkHelperExtPtConstants.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+/**
+ * @since 3.2
+ *
+ */
+public interface ILinkHelperExtPtConstants {
+
+
+	/** */
+	String LINK_HELPER = "linkHelper"; //$NON-NLS-1$
+
+	/** */
+	String ATT_ID = "id"; //$NON-NLS-1$
+
+	/** */
+	String ATT_CLASS = "class"; //$NON-NLS-1$
+
+	/** */
+	String ATT_NAVIGATOR_CONTENT_EXTENSION_ID = "navigatorContentExtensionId"; //$NON-NLS-1$
+
+	/** */
+	String EDITOR_INPUT_ENABLEMENT = "editorInputEnablement"; //$NON-NLS-1$
+
+	/** */
+	String SELECTION_ENABLEMENT = "selectionEnablement"; //$NON-NLS-1$
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorContentExtPtConstants.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorContentExtPtConstants.java
new file mode 100755
index 0000000..1b6b818
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorContentExtPtConstants.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+/**
+ * 
+ * Constants for Extension Point managers and descriptors.
+ */
+public interface INavigatorContentExtPtConstants {
+
+	/** */
+	String TAG_ACTION_PROVIDER = "actionProvider"; //$NON-NLS-1$
+
+	/** */
+	String TAG_NAVIGATOR_CONTENT = "navigatorContent"; //$NON-NLS-1$
+
+	/** */
+	String TAG_COMMON_WIZARD = "commonWizard"; //$NON-NLS-1$
+
+	/** */
+	String TAG_ENABLEMENT = "enablement"; //$NON-NLS-1$
+
+	/** */
+	String TAG_TRIGGER_POINTS = "triggerPoints"; //$NON-NLS-1$
+
+	/** */
+	String TAG_POSSIBLE_CHILDREN = "possibleChildren"; //$NON-NLS-1$
+
+	/** */
+	String TAG_DUPLICATE_CONTENT_FILTER = "duplicateContentFilter"; //$NON-NLS-1$	
+
+	/** */
+	String TAG_COMMON_FILTER = "commonFilter"; //$NON-NLS-1$
+
+	/** */
+	String TAG_COMMON_SORTER = "commonSorter"; //$NON-NLS-1$
+	
+	/** */
+	String TAG_COMMON_DROP_ADAPTER = "dropAssistant"; //$NON-NLS-1$	 
+	
+	/** */
+	String TAG_POSSIBLE_DROP_TARGETS = "possibleDropTargets"; //$NON-NLS-1$	 
+	
+	/** */
+	String TAG_OVERRIDE = "override"; //$NON-NLS-1$	
+
+	/** */
+	String TAG_INITIAL_ACTIVATION = "initialActivation"; //$NON-NLS-1$	
+
+	/** */
+	String TAG_FILTER_EXPRESSION = "filterExpression"; //$NON-NLS-1$
+
+	/** */
+	String TAG_PARENT_EXPRESSION = "parentExpression"; //$NON-NLS-1$ 
+
+	/** */
+	String ATT_ID = "id"; //$NON-NLS-1$
+
+	/** */
+	String ATT_NAME = "name"; //$NON-NLS-1$	 
+
+	/** */
+	String ATT_DESCRIPTION = "description"; //$NON-NLS-1$	  
+
+	/** */
+	String ATT_CLASS = "class"; //$NON-NLS-1$ 
+
+	/** */
+	String ATT_PRIORITY = "priority"; //$NON-NLS-1$
+
+	/** */
+	String ATT_APPEARS_BEFORE = "appearsBefore"; //$NON-NLS-1$	
+	
+	/** */
+	String ATT_ICON = "icon"; //$NON-NLS-1$
+
+	/** */
+	String ATT_WIZARD_ID = "wizardId"; //$NON-NLS-1$
+
+	/** */
+	String ATT_TYPE = "type"; //$NON-NLS-1$		
+
+	/** */
+	String ATT_ACTIVE_BY_DEFAULT = "activeByDefault"; //$NON-NLS-1$
+
+	/** */
+	String ATT_VISIBLE_IN_UI = "visibleInUI"; //$NON-NLS-1$
+
+	/** */
+	String ATT_SORT_ONLY = "sortOnly"; //$NON-NLS-1$
+
+	/** */
+	String ATT_PROVIDES_SAVEABLES = "providesSaveables"; //$NON-NLS-1$
+	
+	/** */
+	String ATT_CONTENT_PROVIDER = "contentProvider"; //$NON-NLS-1$
+
+	/** */
+	String ATT_LABEL_PROVIDER = "labelProvider"; //$NON-NLS-1$
+
+	/** */
+	String ATT_VIEWER_FILTER = "viewerFilter"; //$NON-NLS-1$
+
+	/** */
+	String ATT_ACTION_PROVIDER = "actionProvider"; //$NON-NLS-1$  
+
+	/** */
+	String ATT_DEPENDS_ON = "dependsOn"; //$NON-NLS-1$	
+	
+	/** */
+	String ATT_OVERRIDES = "overrides"; //$NON-NLS-1$	
+	
+	/** */
+	String ATT_POLICY = "policy"; //$NON-NLS-1$
+	
+	/** */
+	String ATT_SUPPRESSED_EXT_ID = "suppressedExtensionId"; //$NON-NLS-1$  
+	
+	/** */
+	String ATT_MENU_GROUP_ID = "menuGroupId"; //$NON-NLS-1$
+	
+	/** */
+	String ATT_ASSOCIATED_EXTENSION_ID = "associatedExtensionId"; //$NON-NLS-1$
+
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorSiteEditor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorSiteEditor.java
new file mode 100755
index 0000000..89a7658
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/INavigatorSiteEditor.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.ui.internal.navigator.TextActionHandler;
+
+
+/**
+ * An INavigatorSiteEditor is used to edit (i.e., rename) elements in a NavigatorViewer.
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ * <p>
+ * This interface is experimental and is subject to change.
+ * </p>
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
+ * progress. There is a guarantee neither that this API will work nor that it will remain the same.
+ * Please do not use this API without consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public interface INavigatorSiteEditor {
+	/**
+	 * Starts the editing. An editor box will be overlaid on the selected element in the Navigator
+	 * tree.
+	 * 
+	 * @param runnable
+	 *            Runnable to execute when editing ends successfully
+	 */
+	public void edit(Runnable runnable);
+
+	/**
+	 * Returns the new text. Returns <code>null</code> if editing was cancelled. Editing is
+	 * cancelled when the user pressed the Escape key.
+	 * 
+	 * @return the new text or <code>null</code> if editing was cancelled
+	 */
+	public String getText();
+
+	/**
+	 * Set the text handler that handles cut, copy, paste, delete and select all operations within
+	 * the editor box.
+	 * 
+	 * @param actionHandler
+	 *            the text action handler
+	 */
+	public void setTextActionHandler(TextActionHandler actionHandler);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/IViewerExtPtConstants.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/IViewerExtPtConstants.java
new file mode 100755
index 0000000..916dadc
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/IViewerExtPtConstants.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+/**
+ * @since 3.2
+ *
+ */
+public interface IViewerExtPtConstants {
+
+	/** */
+	String TAG_SAVEABLES_PROVIDER_FACTORY = "saveablesProviderFactory"; //$NON-NLS-1$
+
+	/** */
+	String TAG_VIEWER = "viewer"; //$NON-NLS-1$
+	
+	/** */
+	String ATT_INHERIT_BINDINGS_FROM_VIEWER = "inheritBindingsFromViewer"; //$NON-NLS-1$
+
+	/** */
+	String ATT_HELP_CONTEXT = "helpContext"; //$NON-NLS-1$
+
+	/** */
+	String TAG_VIEWER_CONTENT_BINDING = "viewerContentBinding"; //$NON-NLS-1$
+
+	/** */
+	String TAG_VIEWER_ACTION_BINDING = "viewerActionBinding"; //$NON-NLS-1$
+
+	/** */
+	String TAG_POPUP_MENU = "popupMenu"; //$NON-NLS-1$ 
+
+	/** */
+	String TAG_OPTIONS = "options"; //$NON-NLS-1$ 
+
+	/** */
+	String TAG_PROPERTY = "property"; //$NON-NLS-1$
+	
+	/** */
+	String TAG_DRAG_ASSISTANT = "dragAssistant"; //$NON-NLS-1$
+
+	/** */
+	String ATT_ID = "id"; //$NON-NLS-1$
+
+	/** */
+	String ATT_ALLOWS_PLATFORM_CONTRIBUTIONS = "allowsPlatformContributions"; //$NON-NLS-1$
+
+	/** */
+	String TAG_INSERTION_POINT = "insertionPoint"; //$NON-NLS-1$
+
+	/** */
+	String ATT_NAME = "name"; //$NON-NLS-1$
+
+	/** */
+	String ATT_SEPARATOR = "separator"; //$NON-NLS-1$
+
+	/** */
+	String ATT_VIEWER_ID = "viewerId"; //$NON-NLS-1$
+
+	/** */
+	String ATT_POPUP_MENU_ID = "popupMenuId"; //$NON-NLS-1$
+
+	/** */
+	String ATT_VALUE = "value"; //$NON-NLS-1$
+	
+	/** */
+	String ATT_CLASS = "class"; //$NON-NLS-1$
+	
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperDescriptor.java
new file mode 100755
index 0000000..94c84d0
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperDescriptor.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.navigator.ILinkHelper;
+
+/**
+ * Provides a wrapper around
+ * <b>org.eclipse.ui.navigator.navigatorContent/linkHelper</b> extensions.
+ * 
+ * @since 3.2
+ * 
+ */
+public class LinkHelperDescriptor implements ILinkHelperExtPtConstants {
+
+	private final IConfigurationElement configElement;
+
+	private String id;
+
+	private Expression editorInputEnablement;
+
+	/* The following field may be null */
+	private Expression selectionEnablement;
+
+	private boolean hasLinkHelperFailedCreation;
+
+	/* package */LinkHelperDescriptor(IConfigurationElement aConfigElement) {
+		Assert.isNotNull(aConfigElement,
+				"LinkHelperRegistry.Descriptor objects cannot be null."); //$NON-NLS-1$
+		Assert
+				.isLegal(LINK_HELPER.equals(aConfigElement.getName()),
+						"LinkHelperRegistry.Descriptor objects must have the name \"linkHelper\"."); //$NON-NLS-1$
+		configElement = aConfigElement;
+		init();
+	}
+
+	void init() {
+		id = configElement.getAttribute(ATT_ID);
+		IConfigurationElement[] expressions = this.configElement
+				.getChildren(EDITOR_INPUT_ENABLEMENT);
+		Assert
+				.isLegal(
+						expressions.length == 1,
+						"The linkHelper extension point requires exactly one editorInputEnablement child."); //$NON-NLS-1$
+
+		editorInputEnablement = new CustomAndExpression(expressions[0]);
+
+		expressions = configElement.getChildren(SELECTION_ENABLEMENT);
+		if (expressions.length > 0) {
+			/* The following attribute is optional */
+			// navigatorContentExtensionId = expressions[0]
+			// .getAttribute(ATT_NAVIGATOR_CONTENT_EXTENSION_ID);
+			if (expressions[0].getChildren() != null
+					&& expressions[0].getChildren().length > 0) {
+
+				selectionEnablement = new CustomAndExpression(expressions[0]);
+
+			}
+		}
+	}
+
+	/**
+	 * @return Returns the id.
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * Create a link helper instance from this descriptors class attribute.
+	 * 
+	 * @return An instance of the helper that is defined by the extension, or a
+	 *         Skeleton Link Helper.
+	 */
+	public ILinkHelper createLinkHelper() {
+		if (hasLinkHelperFailedCreation)
+			return SkeletonLinkHelper.INSTANCE;
+		final ILinkHelper[] helper = new ILinkHelper[1];
+		SafeRunner.run(new NavigatorSafeRunnable(configElement) {
+			public void run() throws Exception {
+				helper[0] = (ILinkHelper) configElement.createExecutableExtension(ATT_CLASS);
+			}
+		});
+		if (helper[0] != null)
+			return helper[0];
+		hasLinkHelperFailedCreation = true;
+		return SkeletonLinkHelper.INSTANCE;
+	}
+
+	/**
+	 * 
+	 * @param anInput
+	 *            The editor input from the editor that was activated.
+	 * @return True if this linkHelper descriptor can produce a selection from
+	 *         the editor input.
+	 */
+	public boolean isEnabledFor(IEditorInput anInput) {
+		if (editorInputEnablement == null || anInput == null) {
+			return false;
+		}
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anInput);
+		return NavigatorPlugin.safeEvaluate(editorInputEnablement, context) == EvaluationResult.TRUE;
+	}
+
+	/**
+	 * @param anObject
+	 *            The selection from the CommonViewer
+	 * @return True if this dscriptor can determine a valid editor to activate
+	 *         from the selection.
+	 */
+	public boolean isEnabledFor(Object anObject) {
+		if (selectionEnablement == null) {
+			return false;
+		}
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anObject);
+		return NavigatorPlugin.safeEvaluate(selectionEnablement, context) == EvaluationResult.TRUE;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperManager.java
new file mode 100755
index 0000000..d503f8d
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/LinkHelperManager.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class LinkHelperManager {
+
+	private static final LinkHelperManager instance = new LinkHelperManager();
+
+	private static final LinkHelperDescriptor[] NO_DESCRIPTORS = new LinkHelperDescriptor[0];
+
+	private List descriptors;
+
+	/**
+	 * @return the singleton instance.
+	 */
+	public static LinkHelperManager getInstance() {
+		return instance;
+	}
+
+	private LinkHelperManager() {
+		new LinkHelperRegistry().readRegistry();
+	}
+
+	/**
+	 * Return the link helper descriptors for a given selection and content
+	 * service.
+	 * 
+	 * @param anObject
+	 *            An object from the viewer.
+	 * @param aContentService
+	 *            The content service to use for visibility filtering. Link
+	 *            Helpers are filtered by contentExtension elements in
+	 *            viewerContentBindings.
+	 * @return An array of <i>visible</i> and <i>enabled</i> Link Helpers or
+	 *         an empty array.
+	 */
+	public LinkHelperDescriptor[] getLinkHelpersFor(
+			Object anObject,
+			INavigatorContentService aContentService) {
+
+		List helpersList = new ArrayList();
+		LinkHelperDescriptor descriptor = null;
+		for (Iterator itr = getDescriptors().iterator(); itr.hasNext();) {
+			descriptor = (LinkHelperDescriptor) itr.next();
+			if (aContentService.isVisible(descriptor.getId())
+					&& descriptor.isEnabledFor(anObject)) {
+				helpersList.add(descriptor);
+			}
+		}
+		if (helpersList.size() == 0) {
+			return NO_DESCRIPTORS;
+		}
+		return (LinkHelperDescriptor[]) helpersList
+				.toArray(new LinkHelperDescriptor[helpersList.size()]);
+
+	}
+
+	/**
+	 * Return the link helper descriptors for a given selection and content
+	 * service.
+	 * 
+	 * @param anInput
+	 *            The input of the active viewer.
+	 * @param aContentService
+	 *            The content service to use for visibility filtering. Link
+	 *            Helpers are filtered by contentExtension elements in
+	 *            viewerContentBindings.
+	 * @return An array of <i>visible</i> and <i>enabled</i> Link Helpers or
+	 *         an empty array.
+	 */
+	public LinkHelperDescriptor[] getLinkHelpersFor(IEditorInput anInput,
+			INavigatorContentService aContentService) {
+
+		List helpersList = new ArrayList();
+		LinkHelperDescriptor descriptor = null;
+		for (Iterator itr = getDescriptors().iterator(); itr.hasNext();) {
+			descriptor = (LinkHelperDescriptor) itr.next();
+			if (aContentService.isVisible(descriptor.getId())
+					&& descriptor.isEnabledFor(anInput)) {
+				helpersList.add(descriptor);
+			}
+		}
+		if (helpersList.size() == 0) {
+			return NO_DESCRIPTORS;
+		}
+		return (LinkHelperDescriptor[]) helpersList
+				.toArray(new LinkHelperDescriptor[helpersList.size()]);
+
+	}
+
+	protected List getDescriptors() {
+		if (descriptors == null) {
+			descriptors = new ArrayList();
+		}
+		return descriptors;
+	}
+
+	private class LinkHelperRegistry extends RegistryReader implements
+			ILinkHelperExtPtConstants {
+
+		private LinkHelperRegistry() {
+			super(NavigatorPlugin.PLUGIN_ID, LINK_HELPER);
+		}
+
+		public boolean readElement(final IConfigurationElement element) {
+			if (LINK_HELPER.equals(element.getName())) {
+				final boolean retValue[] = new boolean[1];
+				SafeRunner.run(new NavigatorSafeRunnable(element) {
+					public void run() throws Exception {
+						getDescriptors().add(new LinkHelperDescriptor(element));
+						retValue[0] = true;
+					}
+				});
+				return retValue[0];
+			}
+			return false;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java
new file mode 100755
index 0000000..ec112f3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java
@@ -0,0 +1,566 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.osgi.util.NLS;
+
+import org.eclipse.core.expressions.ElementHandler;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.OverridePolicy;
+import org.eclipse.ui.navigator.Priority;
+
+/**
+ * Encapsulates the <code>org.eclipse.ui.navigator.navigatorContent</code>
+ * extension point.
+ * 
+ * @since 3.2
+ */
+public final class NavigatorContentDescriptor implements
+		INavigatorContentDescriptor, INavigatorContentExtPtConstants {
+
+	private static final int HASH_CODE_NOT_COMPUTED = -1;
+	private String id;
+
+	private String name;
+
+	private IConfigurationElement configElement;
+
+	private int priority = Priority.NORMAL_PRIORITY_VALUE;
+
+	/**
+	 * This is calculated based on the priority and appearsBeforeId when all of the descriptors
+	 * are first loaded. This is what's used to sort on after that.
+	 */
+	private int sequenceNumber;
+	
+	private String appearsBeforeId;
+
+	private Expression enablement;
+
+	private Expression possibleChildren;
+
+	private Expression initialActivation;
+	
+	private String icon;
+
+	private boolean activeByDefault;
+
+	private IPluginContribution contribution;
+
+	private boolean sortOnly;
+	
+	private Set overridingExtensions;
+	private List overridingExtensionsList; // FIXME: will replace 'overridingExtensions' in 3.6
+
+	private OverridePolicy overridePolicy;
+
+	private String suppressedExtensionId;
+
+	private INavigatorContentDescriptor overriddenDescriptor;
+
+	private int hashCode = HASH_CODE_NOT_COMPUTED;
+
+	private boolean providesSaveables;
+
+	/**
+	 * Creates a new content descriptor from a configuration element.
+	 * 
+	 * @param configElement
+	 *            configuration element to create a descriptor from
+	 * 
+	 * @throws WorkbenchException
+	 *             if the configuration element could not be parsed. Reasons
+	 *             include:
+	 *             <ul>
+	 *             <li>A required attribute is missing.</li>
+	 *             <li>More elements are define than is allowed.</li>
+	 *             </ul>
+	 */
+	/* package */ NavigatorContentDescriptor(IConfigurationElement configElement)
+			throws WorkbenchException {
+		super();
+		this.configElement = configElement;
+		init();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorContentDescriptor#getId()
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorContentDescriptor#getName()
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorContentDescriptor#getPriority()
+	 */
+	public int getPriority() {
+		return priority;
+	}
+
+	/**
+	 * @return the sequence number
+	 */
+	public int getSequenceNumber() {
+		return sequenceNumber;
+	}
+
+	void setSequenceNumber(int num) {
+		sequenceNumber = num;
+	}
+	
+	/**
+	 * 
+	 * @return The value specified by the <i>appearsBefore</i> attribute of the
+	 *         &lt;navigatorContent/&gt; element.
+	 */
+	public String getAppearsBeforeId() {
+		return appearsBeforeId;
+	}
+
+	public boolean isSortOnly() {
+		return sortOnly;
+	}
+	
+	/**
+	 * Parses the configuration element.
+	 * 
+	 * @throws WorkbenchException
+	 *             if the configuration element could not be parsed. Reasons
+	 *             include:
+	 *             <ul>
+	 *             <li>A required attribute is missing.</li>
+	 *             <li>More elements are define than is allowed.</li>
+	 *             </ul>
+	 */
+	private void init() throws WorkbenchException {
+		id = configElement.getAttribute(ATT_ID);
+		name = configElement.getAttribute(ATT_NAME);
+		String priorityString = configElement.getAttribute(ATT_PRIORITY);
+		icon = configElement.getAttribute(ATT_ICON);
+
+		String activeByDefaultString = configElement
+				.getAttribute(ATT_ACTIVE_BY_DEFAULT);
+		activeByDefault = (activeByDefaultString != null && activeByDefaultString
+				.length() > 0) ? Boolean.valueOf(activeByDefaultString)
+				.booleanValue() : true;
+
+		String providesSaveablesString = configElement
+			.getAttribute(ATT_PROVIDES_SAVEABLES);
+		providesSaveables = (providesSaveablesString != null && providesSaveablesString
+				.length() > 0) ? Boolean.valueOf(providesSaveablesString)
+						.booleanValue() : false;
+		appearsBeforeId = configElement.getAttribute(ATT_APPEARS_BEFORE);
+
+		if (priorityString != null) {
+			try {
+				Priority p = Priority.get(priorityString);
+				priority = p != null ? p.getValue()
+						: Priority.NORMAL_PRIORITY_VALUE;
+			} catch (NumberFormatException exception) {
+				priority = Priority.NORMAL_PRIORITY_VALUE;
+			}
+		}
+		
+		// We start with this because the sort ExtensionPriorityComparator works 
+		// from the sequenceNumber
+		sequenceNumber = priority;
+
+		String sortOnlyString = configElement.getAttribute(ATT_SORT_ONLY);
+		sortOnly = (sortOnlyString != null && sortOnlyString.length() > 0) ? Boolean.valueOf(
+				sortOnlyString).booleanValue() : false;
+		
+		if (id == null) {
+			throw new WorkbenchException(NLS.bind(
+					CommonNavigatorMessages.Attribute_Missing_Warning,
+					new Object[] {
+							ATT_ID,
+							id,
+							configElement.getDeclaringExtension()
+									.getNamespaceIdentifier() }));
+		}
+
+		contribution = new IPluginContribution() {
+
+			public String getLocalId() {
+				return getId();
+			}
+
+			public String getPluginId() {
+				return configElement.getDeclaringExtension().getNamespaceIdentifier();
+			}
+
+		};
+
+		IConfigurationElement[] children;
+		
+		children = configElement.getChildren(TAG_INITIAL_ACTIVATION);
+		if (children.length > 0) {
+			if (children.length == 1) {
+				initialActivation = new CustomAndExpression(children[0]);
+			} else {
+				throw new WorkbenchException(NLS.bind(
+						CommonNavigatorMessages.Attribute_Missing_Warning, new Object[] {
+								TAG_INITIAL_ACTIVATION, id,
+								configElement.getDeclaringExtension().getNamespaceIdentifier() }));
+			}
+		}
+
+		if (sortOnly)
+			return;
+
+		children = configElement.getChildren(TAG_ENABLEMENT);
+		if (children.length == 0) {
+
+			children = configElement.getChildren(TAG_TRIGGER_POINTS);
+			if (children.length == 1) {
+				enablement = new CustomAndExpression(children[0]);
+			} else {
+				throw new WorkbenchException(NLS.bind(
+						CommonNavigatorMessages.Attribute_Missing_Warning,
+						new Object[] {
+								TAG_TRIGGER_POINTS,
+								id,
+								configElement.getDeclaringExtension()
+										.getNamespaceIdentifier() }));
+			}
+
+			children = configElement.getChildren(TAG_POSSIBLE_CHILDREN);
+			if (children.length == 1) {
+				possibleChildren = new CustomAndExpression(children[0]);
+			} else if(children.length > 1){
+				throw new WorkbenchException(NLS.bind(
+						CommonNavigatorMessages.Attribute_Missing_Warning,
+						new Object[] {
+								TAG_POSSIBLE_CHILDREN,
+								id,
+								configElement.getDeclaringExtension()
+										.getNamespaceIdentifier() }));
+			}
+		} else if (children.length == 1) {
+			try {
+				enablement = ElementHandler.getDefault().create(
+						ExpressionConverter.getDefault(), children[0]);
+			} catch (CoreException e) {
+				NavigatorPlugin.log(IStatus.ERROR, 0, e.getMessage(), e);
+			}
+		} else if (children.length > 1) {
+			throw new WorkbenchException(NLS.bind(
+					CommonNavigatorMessages.Attribute_Missing_Warning,
+					new Object[] {
+							TAG_ENABLEMENT,
+							id,
+							configElement.getDeclaringExtension()
+									.getNamespaceIdentifier() }));
+		}
+
+		children = configElement.getChildren(TAG_OVERRIDE);
+		if (children.length == 0) {
+			overridePolicy = OverridePolicy.get(OverridePolicy.InvokeAlwaysRegardlessOfSuppressedExt_LITERAL);
+		} else if (children.length == 1) {
+			suppressedExtensionId = children[0]
+					.getAttribute(ATT_SUPPRESSED_EXT_ID);
+			overridePolicy = OverridePolicy.get(children[0]
+					.getAttribute(ATT_POLICY));
+		} else if (children.length > 1) {
+			throw new WorkbenchException(NLS.bind(
+					CommonNavigatorMessages.Too_many_elements_Warning,
+					new Object[] {
+							TAG_OVERRIDE,
+							id,configElement.getDeclaringExtension()
+							.getNamespaceIdentifier() }));
+		}
+
+	}
+
+	/**
+	 * @return Returns the icon.
+	 */
+	public String getIcon() {
+		return icon;
+	}
+
+	/**
+	 * @return Returns the suppressedExtensionId or null if none specified.
+	 */
+	public String getSuppressedExtensionId() {
+		return suppressedExtensionId;
+	}
+
+	/**
+	 * @return Returns the overridePolicy or null if this extension does not
+	 *         override another extension.
+	 */
+	public OverridePolicy getOverridePolicy() {
+		return overridePolicy;
+	}
+
+	/**
+	 * @return Returns the contribution.
+	 */
+	public IPluginContribution getContribution() {
+		return contribution;
+	}
+
+	/**
+	 * @return the configuration element
+	 */
+	public IConfigurationElement getConfigElement() {
+		return configElement;
+	}
+	
+	/**
+	 * The content provider could be an instance of
+	 * {@link ICommonContentProvider}, but only {@link ITreeContentProvider} is
+	 * required.
+	 * 
+	 * 
+	 * @return An instance of the Content provider defined for this extension.
+	 * @throws CoreException
+	 *             if an instance of the executable extension could not be
+	 *             created for any reason
+	 * 
+	 */
+	public ITreeContentProvider createContentProvider() throws CoreException {
+		if (Policy.DEBUG_EXTENSION_SETUP)
+			System.out.println("createContentProvider: " + this); //$NON-NLS-1$
+		return (ITreeContentProvider) configElement
+				.createExecutableExtension(ATT_CONTENT_PROVIDER);
+	}
+
+	/**
+	 * 
+	 * The content provider could be an instance of {@link ICommonLabelProvider},
+	 * but only {@link ILabelProvider} is required.
+	 * 
+	 * @return An instance of the Label provider defined for this extension
+	 * @throws CoreException
+	 *             if an instance of the executable extension could not be
+	 *             created for any reason
+	 */
+	public ILabelProvider createLabelProvider() throws CoreException {
+		if (Policy.DEBUG_EXTENSION_SETUP)
+			System.out.println("createLabelProvider: " + this); //$NON-NLS-1$
+		return (ILabelProvider) configElement
+				.createExecutableExtension(ATT_LABEL_PROVIDER);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorContentDescriptor#isActiveByDefault()
+	 */
+	public boolean isActiveByDefault() {
+		if (activeByDefault)
+			return true;
+		if (initialActivation == null)
+			return false;
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(new Object());
+		return NavigatorPlugin.safeEvaluate(initialActivation, context) == EvaluationResult.TRUE;
+	}
+
+	/**
+	 * Determine if this content extension would be able to provide children for
+	 * the given element.
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension is enabled for the element.
+	 */
+	public boolean isTriggerPoint(Object anElement) {
+
+		if (enablement == null || anElement == null) {
+			return false;
+		}
+
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anElement);
+		return NavigatorPlugin.safeEvaluate(enablement, context) == EvaluationResult.TRUE;
+	}
+
+	/**
+	 * Determine if this content extension could provide the given element as a
+	 * child.
+	 * 
+	 * <p>
+	 * This method is used to determine what the parent of an element could be
+	 * for Link with Editor support.
+	 * </p>
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension might provide an object of this
+	 *         type as a child.
+	 */
+	public boolean isPossibleChild(Object anElement) {
+
+		if ((enablement == null && possibleChildren == null)
+				|| anElement == null) {
+			return false;
+		} else if(anElement instanceof IStructuredSelection) {
+			return arePossibleChildren((IStructuredSelection) anElement);
+		}
+
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anElement);
+		if (possibleChildren != null) {
+			return NavigatorPlugin.safeEvaluate(possibleChildren, context) == EvaluationResult.TRUE;
+		} else if (enablement != null) {
+			return NavigatorPlugin.safeEvaluate(enablement, context) == EvaluationResult.TRUE;
+		}
+		return false;
+	}
+	
+	/**
+	 * A convenience method to check all elements in a selection.
+	 * 
+	 * @param aSelection A non-null selection
+	 * @return True if and only if every element in the selection is a possible child.
+	 */
+	public boolean arePossibleChildren(IStructuredSelection aSelection) {
+		if(aSelection.isEmpty()) {
+			return false;
+		}
+		for (Iterator iter = aSelection.iterator(); iter.hasNext();) {
+			Object element = iter.next();
+			if(!isPossibleChild(element)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * 
+	 * Does not force the creation of the set of overriding extensions.
+	 * 
+	 * @return True if this extension has overriding extensions.
+	 */
+	public boolean hasOverridingExtensions() {
+		return overridingExtensions != null && overridingExtensions.size() > 0;
+	}
+
+	/**
+	 * @return The set of overriding extensions (of type
+	 *         {@link INavigatorContentDescriptor}
+	 */
+	public Set getOverriddingExtensions() {
+		if (overridingExtensions == null) {
+			overridingExtensions = new TreeSet(ExtensionSequenceNumberComparator.DESCENDING);
+		}
+		return overridingExtensions;
+	}
+
+	/**
+	 *  Returns a list iterator over the overriding extensions.
+	 * 
+	 * @param fromStart
+	 *            <code>true</code> if list iterator starts at the beginning and
+	 *            <code>false</code> if it starts at the end of the list
+	 * @return a list iterator over the overriding extensions which are ordered
+	 *         by ExtensionPriorityComparator.DESCENDING
+	 */
+	public ListIterator getOverridingExtensionsListIterator(boolean fromStart) {
+		if (overridingExtensions == null)
+			return Collections.EMPTY_LIST.listIterator();
+
+		if (overridingExtensionsList == null)
+			overridingExtensionsList = new ArrayList(overridingExtensions);
+
+		return overridingExtensionsList.listIterator(fromStart ? 0 : overridingExtensionsList.size());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "Content[" + id  + "(" + sequenceNumber + ") " + ", \"" + name + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (hashCode == HASH_CODE_NOT_COMPUTED) {
+			String hashCodeString = configElement.getNamespaceIdentifier() + getId();
+			hashCode = hashCodeString.hashCode();
+			if (hashCode == HASH_CODE_NOT_COMPUTED)
+				hashCode++;
+		}
+		return hashCode;
+	}
+
+	/**
+	 * @return The descriptor of the <code>suppressedExtensionId</code> if
+	 *         non-null.
+	 */
+	public INavigatorContentDescriptor getOverriddenDescriptor() {
+		return overriddenDescriptor;
+	}
+
+	/**
+	 * @param theOverriddenDescriptor
+	 *            The overriddenDescriptor to set.
+	 */
+	/* package */void setOverriddenDescriptor(
+			INavigatorContentDescriptor theOverriddenDescriptor) {
+		overriddenDescriptor = theOverriddenDescriptor;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.INavigatorContentDescriptor#hasSaveablesProvider()
+	 */
+	public boolean hasSaveablesProvider() {
+		return providesSaveables;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java
new file mode 100755
index 0000000..c226021
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java
@@ -0,0 +1,528 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.lang.ref.SoftReference;
+import java.util.Arrays;
+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 java.util.TreeSet;
+import java.util.WeakHashMap;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.internal.navigator.VisibilityAssistant;
+import org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.OverridePolicy;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * @since 3.2
+ */
+public class NavigatorContentDescriptorManager {
+
+	private static final NavigatorContentDescriptorManager INSTANCE = new NavigatorContentDescriptorManager();
+
+	private final Map firstClassDescriptorsMap = new HashMap();
+
+	private final Map allDescriptors = new HashMap();
+
+	private class EvaluationCache implements VisibilityListener {
+
+		private final Map evaluations/* <Object, NavigatorContentDescriptor[]> */= new HashMap();
+		private final Map evaluationsWithOverrides/*<Object, NavigatorContentDescriptor[]>*/ = new HashMap();
+
+		EvaluationCache(VisibilityAssistant anAssistant) {
+			anAssistant.addListener(this);
+		}
+
+		protected final NavigatorContentDescriptor[] getDescriptors(Object anElement) {
+			return getDescriptors(anElement, true);
+		}
+
+		protected final void setDescriptors(Object anElement, NavigatorContentDescriptor[] theDescriptors) {
+			setDescriptors(anElement, theDescriptors, true);
+		}
+
+		protected final NavigatorContentDescriptor[] getDescriptors(Object anElement, boolean toComputeOverrides) {
+
+			if (anElement == null)
+				return null;
+
+			NavigatorContentDescriptor[] cachedDescriptors = null;
+			if (toComputeOverrides) {
+				SoftReference cache = (SoftReference) evaluations.get(anElement);
+				if (cache != null && (cachedDescriptors = (NavigatorContentDescriptor[]) cache.get()) == null)
+					evaluations.remove(anElement);
+				return cachedDescriptors;
+			}
+			SoftReference cache = (SoftReference) evaluationsWithOverrides.get(anElement);
+			if (cache != null && (cachedDescriptors = (NavigatorContentDescriptor[]) cache.get()) == null)
+				evaluationsWithOverrides.remove(anElement);
+			return cachedDescriptors;
+
+		}
+
+		protected final void setDescriptors(Object anElement, NavigatorContentDescriptor[] theDescriptors, boolean toComputeOverrides) {
+			if (anElement != null) {
+				if (toComputeOverrides)
+					evaluations.put(new EvalutationReference(anElement), new SoftReference(theDescriptors));
+				else
+					evaluationsWithOverrides.put(new EvalutationReference(anElement), new SoftReference(theDescriptors));
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener#onVisibilityOrActivationChange()
+		 */
+		public void onVisibilityOrActivationChange() {
+			evaluations.clear();
+			evaluationsWithOverrides.clear();
+		}
+	}
+
+	/* Map of (VisibilityAssistant, EvaluationCache)-pairs */
+	private final Map cachedTriggerPointEvaluations = new WeakHashMap();
+
+	/* Map of (VisibilityAssistant, EvaluationCache)-pairs */
+	private final Map cachedPossibleChildrenEvaluations = new WeakHashMap();
+
+	private ImageRegistry imageRegistry;
+
+	private final Set overridingDescriptors = new HashSet();
+
+	private final Set saveablesProviderDescriptors = new HashSet();
+
+	private final Set sortOnlyDescriptors = new HashSet();
+
+	private final Set firstClassDescriptorsSet = new HashSet();
+
+	/**
+	 * @return the singleton instance of the manager
+	 */
+	public static NavigatorContentDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+
+	private NavigatorContentDescriptorManager() {
+		new NavigatorContentDescriptorRegistry().readRegistry();
+	}
+
+	/**
+	 * 
+	 * @return Returns all content descriptor(s).
+	 */
+	public NavigatorContentDescriptor[] getAllContentDescriptors() {
+		NavigatorContentDescriptor[] finalDescriptors = new NavigatorContentDescriptor[allDescriptors
+				.size()];
+		finalDescriptors = (NavigatorContentDescriptor[]) allDescriptors.values().toArray(finalDescriptors);
+		Arrays.sort(finalDescriptors, ExtensionSequenceNumberComparator.INSTANCE);
+		return finalDescriptors;
+	}
+
+	/**
+	 * 
+	 * @return Returns all content descriptors that provide saveables.
+	 */
+	public NavigatorContentDescriptor[] getContentDescriptorsWithSaveables() {
+		NavigatorContentDescriptor[] finalDescriptors = new NavigatorContentDescriptor[saveablesProviderDescriptors
+				.size()];
+		saveablesProviderDescriptors.toArray(finalDescriptors);
+		Arrays.sort(finalDescriptors, ExtensionSequenceNumberComparator.INSTANCE);
+		return finalDescriptors;
+	}
+
+	/**
+	 * 
+	 * @return Returns all content descriptors that are sort only
+	 */
+	public NavigatorContentDescriptor[] getSortOnlyContentDescriptors() {
+		NavigatorContentDescriptor[] finalDescriptors = new NavigatorContentDescriptor[sortOnlyDescriptors
+				.size()];
+		sortOnlyDescriptors.toArray(finalDescriptors);
+		Arrays.sort(finalDescriptors, ExtensionSequenceNumberComparator.INSTANCE);
+		return finalDescriptors;
+	}
+
+
+	/**
+	 * 
+	 * Returns all content descriptor(s) which enable for the given element.
+	 * 
+	 * @param anElement
+	 *            the element to return the best content descriptor for
+	 * 
+	 * @param aVisibilityAssistant
+	 *            The relevant viewer assistant; used to filter out unbound
+	 *            content descriptors.
+	 * @param considerOverrides 
+	 * @return the best content descriptor for the given element.
+	 */
+	public Set findDescriptorsForTriggerPoint(Object anElement,
+			VisibilityAssistant aVisibilityAssistant, boolean considerOverrides) {
+		return findDescriptors(anElement, cachedTriggerPointEvaluations, aVisibilityAssistant, considerOverrides, !POSSIBLE_CHILD);
+	}
+
+
+	/**
+	 * 
+	 * Returns all content descriptor(s) which enable for the given element.
+	 * 
+	 * @param anElement
+	 *            the element to return the best content descriptor for
+	 * 
+	 * @param aVisibilityAssistant
+	 *            The relevant viewer assistant; used to filter out unbound
+	 *            content descriptors.
+	 * @param toComputeOverrides
+	 * @return the best content descriptor for the given element.
+	 */
+	public Set findDescriptorsForPossibleChild(Object anElement,
+			VisibilityAssistant aVisibilityAssistant, boolean toComputeOverrides) {
+		return findDescriptors(anElement, cachedPossibleChildrenEvaluations, aVisibilityAssistant, toComputeOverrides, POSSIBLE_CHILD);
+	}
+
+	private static final boolean POSSIBLE_CHILD = true;
+	
+
+	private Set findDescriptors(Object anElement,
+			Map cachedEvaluations, VisibilityAssistant aVisibilityAssistant, boolean considerOverrides, boolean possibleChild) {
+		EvaluationCache cache = getEvaluationCache(
+				cachedEvaluations, aVisibilityAssistant);
+
+		Set descriptors = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE);
+		NavigatorContentDescriptor[] cachedDescriptors = null;
+		if ((cachedDescriptors = cache.getDescriptors(anElement)) != null) {
+			descriptors.addAll(Arrays.asList(cachedDescriptors));
+		}
+
+		if (considerOverrides) {
+			addDescriptorsConsideringOverrides(anElement, firstClassDescriptorsSet, aVisibilityAssistant, descriptors, possibleChild);
+			if (Policy.DEBUG_RESOLUTION) {
+				System.out.println("Find descriptors for: " + Policy.getObjectString(anElement) + //$NON-NLS-1$
+						": " + descriptors); //$NON-NLS-1$
+			}
+		} else {
+
+			/* Find other ContentProviders which enable for this object */
+			for (Iterator contentDescriptorsItr = firstClassDescriptorsSet.iterator(); contentDescriptorsItr.hasNext();) {
+				NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor) contentDescriptorsItr.next();
+
+				if (aVisibilityAssistant.isActive(descriptor) && aVisibilityAssistant.isVisible(descriptor)
+						&& (possibleChild ? descriptor.isPossibleChild(anElement) : descriptor.isTriggerPoint(anElement))) {
+					descriptors.add(descriptor);
+				}
+			}
+		}
+		cache.setDescriptors(anElement, (NavigatorContentDescriptor[]) descriptors.toArray(new NavigatorContentDescriptor[descriptors.size()]));
+
+		return descriptors;
+	}
+
+	private EvaluationCache getEvaluationCache(Map anEvaluationMap,
+			VisibilityAssistant aVisibilityAssistant) {
+		EvaluationCache c = (EvaluationCache) anEvaluationMap
+				.get(aVisibilityAssistant);
+		if (c == null) {
+			anEvaluationMap.put(aVisibilityAssistant, c = new EvaluationCache(
+					aVisibilityAssistant));
+		}
+		return c;
+
+	}
+
+	private boolean addDescriptorsConsideringOverrides(Object anElement,
+			Set theChildDescriptors, VisibilityAssistant aVisibilityAssistant,
+			Set theFoundDescriptors, boolean possibleChild) {
+		int initialSize = theFoundDescriptors.size();
+
+		NavigatorContentDescriptor descriptor;
+		/* Find other ContentProviders which enable for this object */
+		for (Iterator contentDescriptorsItr = theChildDescriptors.iterator(); contentDescriptorsItr
+				.hasNext();) {
+			descriptor = (NavigatorContentDescriptor) contentDescriptorsItr
+					.next();
+
+			boolean isApplicable = aVisibilityAssistant.isActive(descriptor)
+					&& aVisibilityAssistant.isVisible(descriptor)
+					&& (possibleChild ? descriptor.isPossibleChild(anElement) : descriptor.isTriggerPoint(anElement));
+
+			if (descriptor.hasOverridingExtensions()) {
+
+				boolean isOverridden;
+
+				Set overridingDescriptors = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE);
+				isOverridden = addDescriptorsConsideringOverrides(anElement, descriptor.getOverriddingExtensions(),
+						aVisibilityAssistant, overridingDescriptors, possibleChild);
+
+				if (!isOverridden && isApplicable) {
+					theFoundDescriptors.add(descriptor);
+				} else if (isOverridden) {
+					theFoundDescriptors.addAll(overridingDescriptors);
+				}
+
+			} else if (isApplicable) {
+				theFoundDescriptors.add(descriptor);
+			}
+
+		}
+		return initialSize < theFoundDescriptors.size();
+
+	}
+
+	/**
+	 * Returns the navigator content descriptor with the given id.
+	 * 
+	 * @param id
+	 *            The id of the content descriptor that should be returned
+	 * @return The content descriptor of the given id
+	 */
+	public NavigatorContentDescriptor getContentDescriptor(String id) {
+		return (NavigatorContentDescriptor) allDescriptors.get(id);
+	}
+
+	/**
+	 * 
+	 * @param descriptorId
+	 *            The unique id of a particular descriptor
+	 * @return The name (value of the 'name' attribute) of the given descriptor
+	 */
+	public String getText(String descriptorId) {
+		INavigatorContentDescriptor descriptor = getContentDescriptor(descriptorId);
+		if (descriptor != null) {
+			return descriptor.getName();
+		}
+		return descriptorId;
+	}
+
+	/**
+	 * 
+	 * @param descriptorId
+	 *            The unique id of a particular descriptor
+	 * @return The image (corresponding to the value of the 'icon' attribute) of
+	 *         the given descriptor
+	 */
+	public Image getImage(String descriptorId) {
+		return retrieveAndStoreImage(descriptorId);
+	}
+
+	protected Image retrieveAndStoreImage(String descriptorId) {
+		NavigatorContentDescriptor contentDescriptor = getContentDescriptor(descriptorId);
+
+		Image image = null;
+		if (contentDescriptor != null) {
+			String icon = contentDescriptor.getIcon();
+			if (icon != null) {
+				image = getImageRegistry().get(icon);
+				if (image == null || image.isDisposed()) {
+					ImageDescriptor imageDescriptor = AbstractUIPlugin
+							.imageDescriptorFromPlugin(contentDescriptor
+							.getContribution().getPluginId(), icon);
+					if (imageDescriptor != null) {
+						image = imageDescriptor.createImage();
+						if (image != null) {
+							getImageRegistry().put(icon, image);
+						}
+					}
+				}
+			}
+		}
+		return image;
+	}
+
+	/**
+	 * @param desc
+	 */
+	private void addNavigatorContentDescriptor(NavigatorContentDescriptor desc) {
+		if (desc == null) {
+			return;
+		}
+		synchronized (firstClassDescriptorsMap) {
+			if (firstClassDescriptorsMap.containsKey(desc.getId())) {
+				NavigatorPlugin
+						.logError(
+								0,
+								"An extension already exists with id \"" + desc.getId() + "\".", null); //$NON-NLS-1$ //$NON-NLS-2$
+			} else {
+				if (desc.getSuppressedExtensionId() == null) {
+					firstClassDescriptorsMap.put(desc.getId(), desc);
+					firstClassDescriptorsSet.add(desc);
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println("First class descriptor: " + desc); //$NON-NLS-1$
+					}
+				} else {
+					overridingDescriptors.add(desc);
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println("Overriding descriptor: " + desc); //$NON-NLS-1$
+					}
+				}
+				allDescriptors.put(desc.getId(), desc);
+				if (desc.hasSaveablesProvider()) {
+					saveablesProviderDescriptors.add(desc);
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println("Saveables provider descriptor: " + desc); //$NON-NLS-1$
+					}
+				}
+				if (desc.isSortOnly()) {
+					sortOnlyDescriptors.add(desc);
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println("SortOnly descriptor: " + desc); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * 
+	 */
+	private void computeOverrides() {
+		if (overridingDescriptors.size() > 0) {
+			NavigatorContentDescriptor descriptor;
+			NavigatorContentDescriptor overriddenDescriptor;
+			for (Iterator overridingIterator = overridingDescriptors.iterator(); overridingIterator
+					.hasNext();) {
+				descriptor = (NavigatorContentDescriptor) overridingIterator
+						.next();
+				overriddenDescriptor = (NavigatorContentDescriptor) allDescriptors
+						.get(descriptor.getSuppressedExtensionId());
+				if (overriddenDescriptor != null) {
+
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println(descriptor + " overrides: " + overriddenDescriptor); //$NON-NLS-1$
+					}
+					/*
+					 * add the descriptor as an overriding extension for its
+					 * suppressed extension
+					 */
+					overriddenDescriptor.getOverriddingExtensions().add(
+							descriptor);
+					descriptor.setOverriddenDescriptor(overriddenDescriptor);
+					/*
+					 * the always policy implies this is also a top-level
+					 * extension
+					 */
+					if (descriptor.getOverridePolicy() == OverridePolicy.InvokeAlwaysRegardlessOfSuppressedExt) {
+						if (Policy.DEBUG_EXTENSION_SETUP) {
+							System.out.println(descriptor + " is first class"); //$NON-NLS-1$
+						}
+						firstClassDescriptorsMap.put(descriptor.getId(),
+								descriptor);
+						firstClassDescriptorsSet.add(descriptor);
+					}
+
+				} else {
+					String message = 
+							"Invalid suppressedExtensionId \"" //$NON-NLS-1$
+									+ descriptor.getSuppressedExtensionId()
+									+ "\" specified from \"" //$NON-NLS-1$
+									+ descriptor.getId() + "\" in \"" + descriptor.getContribution() //$NON-NLS-1$
+											.getPluginId()
+									+ "\". No extension with matching id found."; //$NON-NLS-1$
+					if (Policy.DEBUG_EXTENSION_SETUP) {
+						System.out.println("Error: " + message); //$NON-NLS-1$
+					}
+					NavigatorPlugin.logError(0, message, null);
+				}
+			}
+		}
+	}
+	
+	private int findId(List list, String id) {
+		for (int i = 0, len = list.size(); i < len; i++) {
+			NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i);
+			if (desc.getId().equals(id))
+				return i;
+		}
+		throw new RuntimeException("Can't find id: " + id); //$NON-NLS-1$
+	}
+	
+	private void computeSequenceNumbers() {
+		NavigatorContentDescriptor[] descs = getAllContentDescriptors();
+
+		LinkedList list = new LinkedList();
+		for (int i = 0; i < descs.length; i++) {
+			list.add(descs[i]);
+		}
+		
+		boolean changed = true;
+		while (changed) {
+			changed = false;
+			for (int i = 0, len = list.size(); i < len; i++) {
+				NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i);
+				if (desc.getAppearsBeforeId() != null) {
+					int beforeInd = findId(list, desc.getAppearsBeforeId());
+					if (beforeInd < i) {
+						list.add(beforeInd, desc);
+						list.remove(i + 1);
+						changed = true;
+					}
+				}
+			}
+		}
+		
+		for (int i = 0, len = list.size(); i < len; i++) {
+			NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i);
+			desc.setSequenceNumber(i);
+			if (Policy.DEBUG_EXTENSION_SETUP) {
+				System.out.println("Descriptors by sequence: " + desc); //$NON-NLS-1$
+			}
+		}
+	}
+
+	private ImageRegistry getImageRegistry() {
+		if (imageRegistry == null) {
+			imageRegistry = new ImageRegistry();
+		}
+		return imageRegistry;
+	}
+
+	private class NavigatorContentDescriptorRegistry extends
+			NavigatorContentRegistryReader {
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.internal.navigator.extensions.RegistryReader#readRegistry()
+		 */
+		public void readRegistry() {
+			super.readRegistry();
+			computeSequenceNumbers();
+			computeOverrides();
+		}
+
+		protected boolean readElement(final IConfigurationElement anElement) {
+			if (TAG_NAVIGATOR_CONTENT.equals(anElement.getName())) {
+				SafeRunner.run(new NavigatorSafeRunnable(anElement) {
+					public void run() throws Exception {
+						addNavigatorContentDescriptor(new NavigatorContentDescriptor(anElement));
+					}
+				});
+			}
+			return super.readElement(anElement);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentExtension.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentExtension.java
new file mode 100755
index 0000000..71efdea
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentExtension.java
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.SafeRunner;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.IMementoAware;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+
+/**
+ * 
+ * @since 3.2
+ */
+public class NavigatorContentExtension implements IMementoAware,
+		INavigatorContentExtension {
+
+	private static final NavigatorContentExtension[] NO_EXTENSIONS = new NavigatorContentExtension[0];
+
+	private NavigatorContentService contentService;
+
+	private NavigatorContentDescriptor descriptor;
+
+	private SafeDelegateTreeContentProvider contentProvider;
+
+	private ICommonLabelProvider labelProvider;
+
+	private boolean labelProviderInitializationFailed = false;
+
+	private boolean contentProviderInitializationFailed = false;
+
+	private boolean isDisposed = false;
+
+	private IMemento appliedMemento;
+
+	private StructuredViewerManager viewerManager;
+
+	/**
+	 * Create an object to manage the instantiated elements from the extension.
+	 * 
+	 * @param aDescriptor
+	 *            The descriptor that knows how to create elements and knows the
+	 *            id of the extension
+	 * @param aContentService
+	 *            The content service that will manage this extension
+	 * @param aViewerManager
+	 *            The viewer manager that knows how to initialize the content
+	 *            provider created by this extension.
+	 */
+	public NavigatorContentExtension(NavigatorContentDescriptor aDescriptor,
+			NavigatorContentService aContentService,
+			StructuredViewerManager aViewerManager) {
+		super();
+		Assert.isNotNull(aDescriptor);
+
+		descriptor = aDescriptor;
+		contentService = aContentService;
+		viewerManager = aViewerManager;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #getId()
+	 */
+	public String getId() {
+		return descriptor.getId();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #getDescriptor()
+	 */
+	public INavigatorContentDescriptor getDescriptor() {
+		return descriptor;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.navigator.INavigatorContentExtension#getContentProvider()
+	 */
+	public ITreeContentProvider getContentProvider() {
+		return internalGetContentProvider().getDelegateContentProvider();
+	}
+
+	/**
+	 * 
+	 * @return The internal content provider that is wrapped by this extension.
+	 */
+	public SafeDelegateTreeContentProvider internalGetContentProvider() {
+		if (contentProvider != null || contentProviderInitializationFailed) {
+			return contentProvider;
+		}
+		synchronized (this) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					if (contentProvider == null) {
+						ITreeContentProvider treeContentProvider = descriptor
+								.createContentProvider();
+						if (treeContentProvider != null) {
+							contentProvider = new SafeDelegateTreeContentProvider(
+									treeContentProvider);
+							contentProvider.init(new CommonContentExtensionSite(getId(),
+									contentService, appliedMemento));
+							viewerManager.initialize(contentProvider);
+						} else {
+							contentProvider = new SafeDelegateTreeContentProvider(
+									SkeletonTreeContentProvider.INSTANCE);
+						}
+					}
+				}
+
+				public void handleException(Throwable e) {
+					super.handleException(e);
+					contentProviderInitializationFailed = true;
+				}
+			});
+
+			if (contentProviderInitializationFailed) {
+				contentProvider = new SafeDelegateTreeContentProvider(
+						SkeletonTreeContentProvider.INSTANCE);
+			}
+		}
+		return contentProvider;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #getLabelProvider()
+	 */
+	public ICommonLabelProvider getLabelProvider() {
+		if (labelProvider != null || labelProviderInitializationFailed) {
+			return labelProvider;
+		}
+		synchronized (this) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					if (labelProvider == null) {
+						ILabelProvider tempLabelProvider = descriptor.createLabelProvider();
+
+						if (tempLabelProvider instanceof ICommonLabelProvider) {
+							labelProvider = (ICommonLabelProvider) tempLabelProvider;
+							labelProvider.init(new CommonContentExtensionSite(getId(),
+									contentService, appliedMemento));
+						} else {
+							labelProvider = new SafeDelegateCommonLabelProvider(tempLabelProvider);
+						}
+
+						labelProvider.addListener((ILabelProviderListener) contentService
+								.createCommonLabelProvider());
+					}
+				}
+
+				public void handleException(Throwable e) {
+					super.handleException(e);
+					labelProviderInitializationFailed = true;
+				}
+			});
+			if (labelProviderInitializationFailed) {
+				labelProvider = SkeletonLabelProvider.INSTANCE;
+			}
+		}
+		return labelProvider;
+	}
+
+	/**
+	 * Dispose of any resources acquired during the lifecycle of the extension.
+	 * 
+	 */
+	public void dispose() {
+		try {
+			synchronized (this) {
+
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						if (contentProvider != null) {
+							contentProvider.dispose();
+						}
+
+					}
+				});
+
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						if (labelProvider != null) {
+							labelProvider
+									.removeListener((ILabelProviderListener) contentService
+											.createCommonLabelProvider());
+							labelProvider.dispose();
+						}
+					}
+				});
+
+			}
+		} finally {
+			isDisposed = true;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		return null;
+	}
+
+	/**
+	 * @return Returns the contentProviderInitializationFailed.
+	 */
+	public boolean hasContentProviderInitializationFailed() {
+		return contentProviderInitializationFailed;
+	}
+
+	/**
+	 * @return Returns the labelProviderInitializationFailed.
+	 */
+	public boolean hasLabelProviderInitializationFailed() {
+		return labelProviderInitializationFailed;
+	}
+
+	/**
+	 * 
+	 * @return True if the loading of the content provider has failed.
+	 */
+	public boolean hasLoadingFailed() {
+		return contentProviderInitializationFailed;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #isLoaded()
+	 */
+	public boolean isLoaded() {
+		return contentProvider != null;
+	}
+
+	public void restoreState(IMemento aMemento) {
+		synchronized (this) {
+			appliedMemento = aMemento;
+			applyMemento(contentProvider);
+			applyMemento(labelProvider);
+
+		}
+	}
+
+	public void saveState(IMemento aMemento) {
+		synchronized (this) {
+			if (contentProvider != null
+					&& contentProvider instanceof IMementoAware)
+				((IMementoAware) contentProvider).saveState(aMemento);
+			if (labelProvider != null && labelProvider instanceof IMementoAware)
+				((IMementoAware) labelProvider).saveState(aMemento);
+
+		}
+	}
+
+	private void applyMemento(IMementoAware target) {
+		if (target != null) {
+			target.restoreState(appliedMemento);
+		}
+
+	}
+
+	protected final void complainDisposedIfNecessary() {
+		if (isDisposed) {
+			throw new IllegalStateException("INavigatorContentExtension " //$NON-NLS-1$
+					+ descriptor.getId() + " is disposed!"); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtension
+	 * #getStateModel()
+	 */
+	public IExtensionStateModel getStateModel() {
+		return contentService.getExtensionStateService()
+				.getExtensionStateModel(getDescriptor());
+	}
+
+	/**
+	 * @param anElement
+	 *            The element for the query.
+	 * @return Returns the overridingExtensions.
+	 */
+	public NavigatorContentExtension[] getOverridingExtensionsForTriggerPoint(
+			Object anElement) {
+		return getOverridingExtensions(anElement, TRIGGER_POINT);
+	}
+
+	/**
+	 * 
+	 * @param anElement
+	 *            The element for the query.
+	 * @return Returns the overridingExtensions.
+	 */
+	public NavigatorContentExtension[] getOverridingExtensionsForPossibleChild(
+			Object anElement) {
+		return getOverridingExtensions(anElement, !TRIGGER_POINT);
+	}
+
+	/**
+	 * 
+	 * @return Returns the overridingExtensions.
+	 */
+	public NavigatorContentExtension[] getOverridingExtensions() {
+		return getOverridingExtensions(null, !TRIGGER_POINT);
+	}
+
+	private static final boolean TRIGGER_POINT = true;
+	
+	/**
+	 * @param anElement
+	 *            The element for the query.
+	 * @return Returns the overridingExtensions.
+	 */
+	private NavigatorContentExtension[] getOverridingExtensions(Object anElement,
+			boolean triggerPoint) {
+		if (!descriptor.hasOverridingExtensions()) {
+			return NO_EXTENSIONS;
+		}
+
+		NavigatorContentDescriptor overridingDescriptor;
+		Set overridingExtensions = new LinkedHashSet();
+		for (Iterator contentDescriptorsItr = descriptor.getOverriddingExtensions().iterator(); contentDescriptorsItr
+				.hasNext();) {
+			overridingDescriptor = (NavigatorContentDescriptor) contentDescriptorsItr.next();
+
+			if (contentService.isActive(overridingDescriptor.getId())
+					&& contentService.isVisible(overridingDescriptor.getId())
+					&& (anElement == null || (triggerPoint ? overridingDescriptor
+							.isTriggerPoint(anElement) : overridingDescriptor
+							.isPossibleChild(anElement)))) {
+				overridingExtensions.add(contentService.getExtension(overridingDescriptor));
+			}
+		}
+		if (overridingExtensions.size() == 0) {
+			return NO_EXTENSIONS;
+		}
+		if (Policy.DEBUG_EXTENSION_SETUP) {
+			System.out
+					.println(this
+							+ " overriding: " + //$NON-NLS-1$
+							(triggerPoint ? "(trigger pt: " : "(poss child: ") + anElement + "): " + overridingExtensions); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+		}
+		return (NavigatorContentExtension[]) overridingExtensions
+				.toArray(new NavigatorContentExtension[overridingExtensions.size()]);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return descriptor.toString() + " Instance"; //$NON-NLS-1$
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentRegistryReader.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentRegistryReader.java
new file mode 100755
index 0000000..7f18122
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentRegistryReader.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+
+/**
+ * Provides a common superclass for all consumers of the
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension point.
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorContentRegistryReader extends RegistryReader implements
+		INavigatorContentExtPtConstants {
+
+	protected final NavigatorContentDescriptorManager CONTENT_DESCRIPTOR_MANAGER = NavigatorContentDescriptorManager
+			.getInstance();
+
+	protected NavigatorContentRegistryReader() {
+		super(NavigatorPlugin.PLUGIN_ID, TAG_NAVIGATOR_CONTENT);
+	}
+
+	protected boolean readElement(IConfigurationElement element) {
+		String elementName = element.getName();
+
+		/* These are all of the valid root tags that exist */
+		return TAG_ACTION_PROVIDER.equals(elementName)
+				|| TAG_NAVIGATOR_CONTENT.equals(elementName)
+				|| TAG_COMMON_WIZARD.equals(elementName)
+				|| TAG_COMMON_FILTER.equals(elementName);
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptor.java
new file mode 100755
index 0000000..3a833a9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptor.java
@@ -0,0 +1,380 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+import org.eclipse.ui.navigator.MenuInsertionPoint;
+import org.eclipse.ui.navigator.NavigatorActionService;
+
+/**
+ * Encapsulates the <code>org.eclipse.ui.navigator.viewer</code> extension.
+ * <p>
+ * 
+ * @since 3.2
+ */
+public final class NavigatorViewerDescriptor implements
+		INavigatorViewerDescriptor {
+	
+
+	/**
+	 * {@value} (boolean): True indicates the ITreeContentProvider.hasChildren() 
+	 * should force plugins to load if necessary <b>false</b>).
+	 */
+	public static final String PROP_ENFORCE_HAS_CHILDREN = "org.eclipse.ui.navigator.enforceHasChildren"; //$NON-NLS-1$
+
+	static final String TAG_INCLUDES = "includes"; //$NON-NLS-1$
+
+	static final String TAG_EXCLUDES = "excludes"; //$NON-NLS-1$
+
+	static final String ATT_IS_ROOT = "isRoot"; //$NON-NLS-1$
+
+	static final String ATT_PATTERN = "pattern"; //$NON-NLS-1$
+
+	private static final String TAG_CONTENT_EXTENSION = "contentExtension"; //$NON-NLS-1$
+
+	private static final String TAG_ACTION_EXTENSION = "actionExtension"; //$NON-NLS-1$ 
+
+	private final String viewerId;
+
+	private String popupMenuId = null;
+
+	private Binding actionBinding = new Binding(TAG_ACTION_EXTENSION);
+
+	private Binding contentBinding = new Binding(TAG_CONTENT_EXTENSION);
+
+	private MenuInsertionPoint[] customInsertionPoints = null;
+
+	private boolean allowsPlatformContributions = true;
+
+	private String inheritBindingsFromViewer;
+	
+	private String helpContext;
+	
+	private final Properties properties = new Properties();
+
+	private Set dragAssistants; 
+
+	/**
+	 * Creates a new content descriptor from a configuration element.
+	 * 
+	 * @param aViewerId
+	 *            The identifier for this descriptor.
+	 */
+	/* package */NavigatorViewerDescriptor(String aViewerId) {
+		super();
+		this.viewerId = aViewerId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorViewerDescriptor#getViewerId()
+	 */
+	public String getViewerId() {
+		return viewerId;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.navigator.extensions.INavigatorViewerDescriptor#getPopupMenuId()
+	 */
+	public String getPopupMenuId() {
+		return popupMenuId != null ? popupMenuId : viewerId;
+	}
+
+	/**
+	 * Consume an action binding for this viewer.
+	 * 
+	 * @param element
+	 *            The IConfigurationElement containing a viewerActionBinding
+	 *            element.
+	 */
+	public void consumeActionBinding(IConfigurationElement element) {
+		consumeBinding(element, false);
+	}
+
+	/**
+	 * Consume a content binding for this viewer.
+	 * 
+	 * @param element
+	 *            The IConfigurationElement containing a viewerContentBinding
+	 *            element.
+	 */
+	public void consumeContentBinding(IConfigurationElement element) {
+		consumeBinding(element, true);
+	}
+
+	public boolean isRootExtension(String aContentExtensionId) {
+		return contentBinding.isRootExtension(aContentExtensionId);
+	}
+
+	public boolean allowsPlatformContributionsToContextMenu() {
+		return allowsPlatformContributions;
+	}
+
+	public boolean isVisibleContentExtension(String aContentExtensionId) {
+		return contentBinding.isVisibleExtension(aContentExtensionId);
+	}
+
+	public boolean isVisibleActionExtension(String anActionExtensionId) {
+		return actionBinding.isVisibleExtension(anActionExtensionId);
+	}
+
+	public boolean hasOverriddenRootExtensions() {
+		return contentBinding.hasOverriddenRootExtensions();
+	}
+
+	public MenuInsertionPoint[] getCustomInsertionPoints() {
+		return customInsertionPoints;
+	}
+
+	/**
+	 * 
+	 * @param newCustomInsertionPoints
+	 *            The set of custom insertion points, if any. A null list
+	 *            indicates the default set (as defined by
+	 *            {@link NavigatorActionService}) should be used. An empty list
+	 *            indicates there are no declarative insertion points.
+	 */
+	public void setCustomInsertionPoints(
+			MenuInsertionPoint[] newCustomInsertionPoints) {
+		if (customInsertionPoints != null) {
+			NavigatorPlugin
+					.logError(
+							0,
+							"Attempt to override custom insertion points denied. Verify there are no colliding org.eclipse.ui.navigator.viewer extension points.", null); //$NON-NLS-1$
+			return; // do not let them override the insertion points.
+		}
+		customInsertionPoints = newCustomInsertionPoints;
+	}
+
+	/**
+	 * 
+	 * @param toAllowPlatformContributions
+	 *            A value of 'true' enables object/viewer contributions. 'false'
+	 *            will only allow programmatic contributions from
+	 *            {@link CommonActionProvider}s.
+	 */
+	public void setAllowsPlatformContributions(
+			boolean toAllowPlatformContributions) {
+		allowsPlatformContributions = toAllowPlatformContributions;
+	}
+
+	/**
+	 * @return the viewer from which this viewer inherits its bindings
+	 */
+	public String getInheritBindingsFromViewer() {
+		return inheritBindingsFromViewer;
+	}
+	
+	/**
+	 * @param inherit
+	 */
+	public void setInheritBindingsFromViewer(String inherit) {
+		inheritBindingsFromViewer = inherit;
+	}
+	
+	/**
+	 * @return the help context associated with this viewer
+	 */
+	public String getHelpContext() {
+		return helpContext;
+	}
+
+	/**
+	 * @param context
+	 *            the help context associated with this viewer
+	 */
+	public void setHelpContext(String context) {
+		helpContext = context;
+	}
+	
+	/**
+	 * @param binding
+	 */
+	public void setContentBinding(Binding binding) {
+		contentBinding = binding;
+	}
+	
+	/**
+	 * @return the content Binding
+	 */
+	public Binding getContentBinding() {
+		return contentBinding;
+	}
+	
+	/**
+	 * @param binding
+	 */
+	public void setActionBinding(Binding binding) {
+		actionBinding = binding;
+	}
+	
+	/**
+	 * @return the action Binding
+	 */
+	public Binding getActionBinding() {
+		return actionBinding;
+	}
+	
+	/**
+	 * @param assistants
+	 */
+	public void setDragAssistants(Set assistants) {
+		dragAssistants = assistants;
+	}
+	
+
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorViewerDescriptor#getStringConfigProperty(java.lang.String)
+	 */
+	public String getStringConfigProperty(String aPropertyName) {
+		return properties.getProperty(aPropertyName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorViewerDescriptor#getBooleanConfigProperty(java.lang.String)
+	 */
+	public boolean getBooleanConfigProperty(String aPropertyName) {
+		String propValue = properties.getProperty(aPropertyName);
+		if (propValue == null) {
+			return false;
+		}
+		return Boolean.valueOf(propValue).booleanValue();
+	}
+	 
+
+	/* package */ void setProperty(String aPropertyName, String aPropertyValue) {
+		properties.setProperty(aPropertyName, aPropertyValue);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "ViewerDescriptor[" + viewerId + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * Update the popupMenuId. If a value is already set, then a warning message
+	 * will be logged.
+	 * 
+	 * @param newPopupMenuId
+	 *            The new popup menu id.
+	 */
+	/* package */ void setPopupMenuId(String newPopupMenuId) {
+
+		if (newPopupMenuId != null) {
+			if (popupMenuId != null) {
+				NavigatorPlugin
+						.log(
+								IStatus.WARNING,
+								0,
+								NLS
+										.bind(
+												CommonNavigatorMessages.NavigatorViewerDescriptor_Popup_Menu_Overridden,
+												new Object[] { getViewerId(),
+														popupMenuId,
+														newPopupMenuId }), null);
+			}
+			popupMenuId = newPopupMenuId;
+		}
+	}
+
+	/**
+	 * @param descriptor
+	 *            A non-null descriptor to add
+	 */
+	/* package */ void addDragAssistant(CommonDragAssistantDescriptor descriptor) {
+		getDragAssistants().add(descriptor);
+
+	}
+
+	/**
+	 * 
+	 * @return The set of {@link CommonDragAssistantDescriptor}s for this
+	 *         viewer.
+	 */
+	public Set getDragAssistants() {
+		if (dragAssistants == null) {
+			dragAssistants = new HashSet();
+		}
+		return dragAssistants;
+	}
+
+	private void consumeBinding(IConfigurationElement element, boolean isContent) {
+		IConfigurationElement[] includesElement = element
+				.getChildren(TAG_INCLUDES);
+
+		if (includesElement.length == 1) {
+			if (isContent) {
+				contentBinding.consumeIncludes(includesElement[0], true);
+			} else {
+				actionBinding.consumeIncludes(includesElement[0], false);
+			}
+		} else if (includesElement.length >= 1) {
+			NavigatorPlugin.logError(0, NLS.bind(
+					CommonNavigatorMessages.Too_many_elements_Warning,
+					new Object[] {
+							TAG_INCLUDES,
+							element.getDeclaringExtension()
+									.getUniqueIdentifier(),
+							element.getDeclaringExtension().getNamespaceIdentifier() }),
+					null);
+		}
+
+		IConfigurationElement[] excludesElement = element
+				.getChildren(TAG_EXCLUDES);
+
+		if (excludesElement.length == 1) {
+
+			if (isContent) {
+				contentBinding.consumeExcludes(excludesElement[0]);
+			} else {
+				actionBinding.consumeExcludes(excludesElement[0]);
+			}
+		} else if (excludesElement.length >= 1) {
+			NavigatorPlugin.logError(0, NLS.bind(
+					CommonNavigatorMessages.Too_many_elements_Warning,
+					new Object[] {
+							TAG_EXCLUDES,
+							element.getDeclaringExtension()
+									.getUniqueIdentifier(),
+							element.getDeclaringExtension().getNamespaceIdentifier() }),
+					null);
+		}
+	}
+	
+	void updateFromParent(NavigatorViewerDescriptor parent) {
+		getActionBinding().addBinding(parent.getActionBinding());
+		getContentBinding().addBinding(parent.getContentBinding());
+		getDragAssistants().addAll(parent.getDragAssistants());
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptorManager.java
new file mode 100755
index 0000000..722e950
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorViewerDescriptorManager.java
@@ -0,0 +1,211 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.navigator.MenuInsertionPoint;
+
+/**
+ * @since 3.2
+ */
+public class NavigatorViewerDescriptorManager {
+
+	private static final NavigatorViewerDescriptorManager INSTANCE = new NavigatorViewerDescriptorManager();
+
+	private final Map viewerDescriptors = new HashMap();
+	
+	/**
+	 * @return The intialized singleton instance of the viewer descriptor
+	 *         registry.
+	 */
+	public static NavigatorViewerDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+
+	protected NavigatorViewerDescriptorManager() {
+		new NavigatorViewerDescriptorRegistry().readRegistry();
+		
+		Iterator it = viewerDescriptors.values().iterator();
+		while (it.hasNext()) {
+			NavigatorViewerDescriptor desc = (NavigatorViewerDescriptor) it.next();
+			NavigatorViewerDescriptor parentDesc = (NavigatorViewerDescriptor) viewerDescriptors.get(desc.getInheritBindingsFromViewer());
+			if (parentDesc != null) {
+				desc.updateFromParent(parentDesc);
+			}
+		}
+	}
+
+	/**
+	 * 
+	 * @param aViewerId
+	 *            The viewer id for the viewer configuration
+	 * @return The viewer descriptor for the given viewer id.
+	 */
+	public NavigatorViewerDescriptor getNavigatorViewerDescriptor(
+			String aViewerId) {
+
+		NavigatorViewerDescriptor viewerDescriptor = (NavigatorViewerDescriptor) viewerDescriptors
+				.get(aViewerId);
+		if (viewerDescriptor != null) {
+			return viewerDescriptor;
+		}
+
+		synchronized (viewerDescriptors) {
+			viewerDescriptor = (NavigatorViewerDescriptor) viewerDescriptors
+					.get(aViewerId);
+			if (viewerDescriptor == null) {
+				viewerDescriptor = new NavigatorViewerDescriptor(aViewerId);
+				viewerDescriptors.put(viewerDescriptor.getViewerId(),
+						viewerDescriptor);
+			}
+		}
+		return viewerDescriptor;
+
+	}
+
+	private class NavigatorViewerDescriptorRegistry extends RegistryReader
+			implements IViewerExtPtConstants {
+
+		protected NavigatorViewerDescriptorRegistry() {
+			super(NavigatorPlugin.PLUGIN_ID, TAG_VIEWER);
+		}
+
+		protected boolean readElement(IConfigurationElement element) {
+			if (TAG_VIEWER.equals(element.getName())) {
+				String viewerId = element.getAttribute(ATT_VIEWER_ID);
+				NavigatorViewerDescriptor descriptor = getNavigatorViewerDescriptor(viewerId);
+
+				String inherit = element.getAttribute(ATT_INHERIT_BINDINGS_FROM_VIEWER);
+				if (inherit != null)
+					descriptor.setInheritBindingsFromViewer(inherit);
+				
+				String helpContext = element.getAttribute(ATT_HELP_CONTEXT);
+				if (helpContext != null)
+					descriptor.setHelpContext(helpContext);
+				
+				String attPopupMenuId = element.getAttribute(ATT_POPUP_MENU_ID);
+				IConfigurationElement[] tagPopupMenu = element
+						.getChildren(TAG_POPUP_MENU);
+				if (tagPopupMenu.length == 0 && attPopupMenuId != null) {
+					descriptor.setPopupMenuId(attPopupMenuId);
+				} else {
+					if (attPopupMenuId != null) {
+						NavigatorPlugin
+								.logError(
+										0,
+										"A popupMenuId attribute and popupMenu element may NOT be concurrently specified. (see " + element.getNamespaceIdentifier() + ")", null); //$NON-NLS-1$ //$NON-NLS-2$
+					} else if (tagPopupMenu.length > 1) {
+						NavigatorPlugin
+								.logError(
+										0,
+										"Only one \"popupMenu\" child of \"viewer\" may be specified. (see " + element.getNamespaceIdentifier() + ")", null); //$NON-NLS-1$ //$NON-NLS-2$
+					} else if(tagPopupMenu.length == 1) { // valid case
+
+						String popupMenuId = tagPopupMenu[0]
+								.getAttribute(ATT_ID);
+						String allowsPlatformContributions = tagPopupMenu[0]
+								.getAttribute(ATT_ALLOWS_PLATFORM_CONTRIBUTIONS);
+
+						if (popupMenuId != null) {
+							descriptor.setPopupMenuId(popupMenuId);
+						}
+
+						if (allowsPlatformContributions != null) {
+							descriptor.setAllowsPlatformContributions(Boolean
+									.valueOf(allowsPlatformContributions)
+									.booleanValue());
+						}
+
+						IConfigurationElement[] insertionPointElements = tagPopupMenu[0]
+								.getChildren(TAG_INSERTION_POINT);
+						MenuInsertionPoint[] insertionPoints = new MenuInsertionPoint[insertionPointElements.length];
+						String name;
+						String stringAttSeparator;
+
+						boolean isSeparator;
+						for (int indx = 0; indx < insertionPointElements.length; indx++) {
+							name = insertionPointElements[indx]
+									.getAttribute(ATT_NAME);
+							stringAttSeparator = insertionPointElements[indx]
+									.getAttribute(ATT_SEPARATOR);
+							isSeparator = stringAttSeparator != null ? Boolean
+									.valueOf(stringAttSeparator).booleanValue()
+									: false;
+							insertionPoints[indx] = new MenuInsertionPoint(name,
+									isSeparator);
+						}
+						descriptor.setCustomInsertionPoints(insertionPoints);
+					}
+				}
+
+				IConfigurationElement[] options = element
+						.getChildren(TAG_OPTIONS);
+				if (options.length == 1) {
+					IConfigurationElement[] properties = options[0]
+							.getChildren(TAG_PROPERTY);
+					String name;
+					String value;
+					for (int i = 0; i < properties.length; i++) {
+						name = properties[i].getAttribute(ATT_NAME);
+						if (name != null) {
+							value = properties[i].getAttribute(ATT_VALUE);
+							descriptor.setProperty(name, value);
+						}
+					}
+				} else if (options.length > 1) {
+					NavigatorPlugin
+							.logError(
+									0,
+									"Only one \"options\" child of \"viewer\" may be specified. (see " + element.getNamespaceIdentifier() + ")", null); //$NON-NLS-1$ //$NON-NLS-2$
+
+				}
+				return true;
+			}
+			if (TAG_VIEWER_CONTENT_BINDING.equals(element.getName())) {
+				String viewerId = element.getAttribute(ATT_VIEWER_ID);
+				NavigatorViewerDescriptor descriptor = getNavigatorViewerDescriptor(viewerId);
+				descriptor.consumeContentBinding(element);
+				return true;
+			}
+			if (TAG_VIEWER_ACTION_BINDING.equals(element.getName())) {
+				String viewerId = element.getAttribute(ATT_VIEWER_ID);
+				NavigatorViewerDescriptor descriptor = getNavigatorViewerDescriptor(viewerId);
+				descriptor.consumeActionBinding(element);
+				return true;
+			} if (TAG_DRAG_ASSISTANT.equals(element.getName())) {
+				String viewerId = element.getAttribute(ATT_VIEWER_ID);
+				NavigatorViewerDescriptor descriptor = getNavigatorViewerDescriptor(viewerId);
+				descriptor.addDragAssistant(new CommonDragAssistantDescriptor(element));
+				return true;
+			}
+			return false;
+		}
+		
+		public void readRegistry() {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IExtensionPoint point = registry.getExtensionPoint(NavigatorPlugin.PLUGIN_ID, TAG_VIEWER);
+			if (point == null) {
+				return;
+			}
+
+			super.readRegistry();
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/RegistryReader.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/RegistryReader.java
new file mode 100755
index 0000000..ab2e9ef
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/RegistryReader.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+
+/**
+ * Template implementation of a registry reader that creates objects representing registry contents.
+ * Typically, an extension contains one element, but this reader handles multiple elements per
+ * extension.
+ * 
+ * To start reading the extensions from the registry for an extension point, call the method
+ * <code>readRegistry</code>.
+ * 
+ * To read children of an IConfigurationElement, call the method <code>readElementChildren</code>
+ * from your implementation of the method <code>readElement</code>, as it will not be done by
+ * default.
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
+ * progress. There is a guarantee neither that this API will work nor that it will remain the same.
+ * Please do not use this API without consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public abstract class RegistryReader {
+
+	protected static final String TAG_DESCRIPTION = "description"; //$NON-NLS-1$
+
+	private boolean isInitialized;
+	private final String extensionPointId;
+	private final String pluginId;
+	private final IExtensionRegistry registry;
+
+	/**
+	 * The constructor.
+	 */
+	protected RegistryReader(String aPluginId, String anExtensionPoint) {
+		this.registry = Platform.getExtensionRegistry();
+		this.pluginId = aPluginId;
+		this.extensionPointId = anExtensionPoint;
+	}
+
+	/**
+	 * This method extracts description as a subelement of the given element.
+	 * 
+	 * @return description string if defined, or empty string if not.
+	 */
+	protected String getDescription(IConfigurationElement config) {
+		IConfigurationElement[] children = config.getChildren(TAG_DESCRIPTION);
+		if (children.length >= 1) {
+			return children[0].getValue();
+		}
+		return "";//$NON-NLS-1$
+	}
+
+	/**
+	 * Logs the error in the workbench log using the provided text and the information in the
+	 * configuration element.
+	 */
+	protected static void logError(IConfigurationElement element, String text) {
+		IExtension extension = element.getDeclaringExtension();
+		StringBuffer buf = new StringBuffer();
+		buf.append("Plugin " + extension.getNamespaceIdentifier() + ", extension " + extension.getExtensionPointUniqueIdentifier());//$NON-NLS-2$//$NON-NLS-1$
+		buf.append("\n" + text);//$NON-NLS-1$
+		NavigatorPlugin.logError(0, buf.toString(), null);
+	}
+
+	/**
+	 * Logs a very common registry error when a required attribute is missing.
+	 */
+	protected static void logMissingAttribute(IConfigurationElement element, String attributeName) {
+		logError(element, "Required attribute '" + attributeName + "' not defined");//$NON-NLS-2$//$NON-NLS-1$
+	}
+
+	/**
+	 * Logs a very common registry error when a required child is missing.
+	 */
+	protected static void logMissingElement(IConfigurationElement element, String elementName) {
+		logError(element, "Required sub element '" + elementName + "' not defined");//$NON-NLS-2$//$NON-NLS-1$
+	}
+
+	/**
+	 * Logs a registry error when the configuration element is unknown.
+	 */
+	protected static void logUnknownElement(IConfigurationElement element) {
+		logError(element, "Unknown extension tag found: " + element.getName());//$NON-NLS-1$
+	}
+
+	/**
+	 * Apply a reproducable order to the list of extensions provided, such that the order will not
+	 * change as extensions are added or removed.
+	 */
+	protected IExtension[] orderExtensions(IExtension[] extensions) {
+		// By default, the order is based on plugin id sorted
+		// in ascending order. The order for a plugin providing
+		// more than one extension for an extension point is
+		// dependent in the order listed in the XML file.
+		IExtension[] sortedExtension = new IExtension[extensions.length];
+		System.arraycopy(extensions, 0, sortedExtension, 0, extensions.length);
+		Comparator comparer = new Comparator() {
+			public int compare(Object arg0, Object arg1) {
+				String s1 = ((IExtension) arg0).getNamespaceIdentifier();
+				String s2 = ((IExtension) arg1).getNamespaceIdentifier();
+				return s1.compareToIgnoreCase(s2);
+			}
+		};
+		Collections.sort(Arrays.asList(sortedExtension), comparer);
+		return sortedExtension;
+	}
+
+	/**
+	 * Implement this method to read element's attributes. If children should also be read, then
+	 * implementor is responsible for calling <code>readElementChildren</code>. Implementor is
+	 * also responsible for logging missing attributes.
+	 * 
+	 * @return true if element was recognized, false if not.
+	 */
+	protected abstract boolean readElement(IConfigurationElement element);
+
+	/**
+	 * Read the element's children. This is called by the subclass' readElement method when it wants
+	 * to read the children of the element.
+	 */
+	protected void readElementChildren(IConfigurationElement element) {
+		readElements(element.getChildren());
+	}
+
+	/**
+	 * Read each element one at a time by calling the subclass implementation of
+	 * <code>readElement</code>.
+	 * 
+	 * Logs an error if the element was not recognized.
+	 */
+	protected void readElements(IConfigurationElement[] elements) {
+		for (int i = 0; i < elements.length; i++) {
+			if (!readElement(elements[i])) {
+				logUnknownElement(elements[i]);
+			}
+		}
+	}
+
+	/**
+	 * Read one extension by looping through its configuration elements.
+	 */
+	protected void readExtension(IExtension extension) {
+		readElements(extension.getConfigurationElements());
+	}
+
+	/**
+	 * Start the registry reading process using the supplied plugin ID and extension point.
+	 */
+	public void readRegistry() {
+		if (isInitialized) {
+			return;
+		}
+		synchronized (this) {
+			if (!isInitialized) {
+				IExtensionPoint point = registry.getExtensionPoint(pluginId, extensionPointId);
+				if (point == null) {
+					return;
+				}
+				IExtension[] extensions = point.getExtensions();
+				extensions = orderExtensions(extensions);
+				for (int i = 0; i < extensions.length; i++) {
+					readExtension(extensions[i]);
+				}
+				isInitialized = true;
+			}
+
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateCommonLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateCommonLabelProvider.java
new file mode 100755
index 0000000..800794f
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateCommonLabelProvider.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ * 	   Anton Leherbauer, Wind River - bug 146788
+ *     rob.stryker@jboss.com - bug 243824 [CommonNavigator] lacks table / tree-table support
+ * 
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IFontProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreePathLabelProvider;
+// RAP [bmichalik]
+//import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.ViewerLabel;
+// RAP [bmichalik]
+//import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IDescriptionProvider;
+
+/**
+ * @since 3.2
+ */
+// RAP [bmichalik]: removal of unsupported plug-in implementation
+//public class SafeDelegateCommonLabelProvider implements ICommonLabelProvider, IColorProvider, IFontProvider, ITreePathLabelProvider, ITableLabelProvider, IStyledLabelProvider {
+public class SafeDelegateCommonLabelProvider implements ICommonLabelProvider, IColorProvider, IFontProvider, ITreePathLabelProvider, ITableLabelProvider {
+
+	private final ILabelProvider delegateLabelProvider;
+
+	/**
+	 * @param aLabelProvider
+	 *            A non-null label provider.
+	 * 
+	 */
+	public SafeDelegateCommonLabelProvider(ILabelProvider aLabelProvider) {
+		super();
+		delegateLabelProvider = aLabelProvider;
+	}
+
+	/**
+	 * <p>
+	 * No-op.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonLabelProvider#init(ICommonContentExtensionSite)
+	 */
+	public void init(ICommonContentExtensionSite aConfig) {
+	}
+
+	/**
+	 * <p>
+	 * If the delegate label provider implements <code>IDescriptionProvider</code>,
+	 * it is used to retrieve the status bar message. 
+	 * </p>
+	 * <p>
+	 * Returns <b>null </b> otherwise, forcing the CommonNavigator to provide the default
+	 * message.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.navigator.ICommonLabelProvider#getDescription(java.lang.Object)
+	 */
+	public String getDescription(Object element) {
+		/* The following few lines were contributed as part of a patch. */
+		if (delegateLabelProvider instanceof IDescriptionProvider) {
+			IDescriptionProvider provider = (IDescriptionProvider) delegateLabelProvider;
+			return provider.getDescription(element);
+		}
+		return null;
+	}
+
+	/**
+	 * @param listener
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		delegateLabelProvider.addListener(listener);
+	}
+
+	/**
+	 * 
+	 */
+	public void dispose() {
+		delegateLabelProvider.dispose();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		return delegateLabelProvider.equals(obj);
+	}
+
+	public Image getImage(Object element) {
+		return delegateLabelProvider.getImage(element);
+	}
+
+	public String getText(Object element) {
+		return delegateLabelProvider.getText(element);
+	}
+
+// RAP [bmichalik]: removal of unsupported plug-in implementation
+//	/* (non-Javadoc)
+//	 * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
+//	 */
+//	public StyledString getStyledText(Object element) {
+//		if (delegateLabelProvider instanceof IStyledLabelProvider) {
+//			return ((IStyledLabelProvider)delegateLabelProvider).getStyledText(element);
+//		}
+//		String text= getText(element);
+//		if (text == null)
+//			text= ""; //$NON-NLS-1$
+//		return new StyledString(text);
+//	}	
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+	 */
+	public Image getColumnImage(Object element, int columnIndex) {
+		if (delegateLabelProvider instanceof ITableLabelProvider) {
+			return ((ITableLabelProvider)delegateLabelProvider).getColumnImage(element, columnIndex);
+		}
+		return getImage(element);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+	 */
+	public String getColumnText(Object element, int columnIndex) {
+		if (delegateLabelProvider instanceof ITableLabelProvider) {
+			return ((ITableLabelProvider)delegateLabelProvider).getColumnText(element, columnIndex);
+		}
+		return getText(element);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		return delegateLabelProvider.hashCode();
+	}
+
+	public boolean isLabelProperty(Object element, String property) {
+		return delegateLabelProvider.isLabelProperty(element, property);
+	}
+
+	/**
+	 * @param listener
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		delegateLabelProvider.removeListener(listener);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return delegateLabelProvider.toString();
+	}
+
+	public void restoreState(IMemento aMemento) {
+
+	}
+
+	public void saveState(IMemento aMemento) {
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreePathLabelProvider#updateLabel(org.eclipse.jface.viewers.ViewerLabel, org.eclipse.jface.viewers.TreePath)
+	 */
+	public void updateLabel(ViewerLabel label, TreePath elementPath) {
+		if (delegateLabelProvider instanceof ITreePathLabelProvider) {
+			ITreePathLabelProvider tplp = (ITreePathLabelProvider) delegateLabelProvider;
+			String text = label.getText() != null ? label.getText() : ""; //$NON-NLS-1$
+			Image image = label.getImage();
+			tplp.updateLabel(label, elementPath);
+			if(label.getText() == null)
+				label.setText(text);
+			if(label.getImage() == null && image != null)
+				label.setImage(image);
+		} else {
+			Image image = getImage(elementPath.getLastSegment());
+			if(image != null)
+				label.setImage(image);
+			String text = getText(elementPath.getLastSegment());
+			if(text != null)
+				label.setText(text);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+	 */
+	public Color getForeground(Object element) {
+		if(delegateLabelProvider instanceof IColorProvider) {
+			return ((IColorProvider)delegateLabelProvider).getForeground(element);
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+	 */
+	public Color getBackground(Object element) {
+		if(delegateLabelProvider instanceof IColorProvider) {
+			return ((IColorProvider)delegateLabelProvider).getBackground(element);
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
+	 */
+	public Font getFont(Object element) {
+		if(delegateLabelProvider instanceof IFontProvider) {
+			return ((IFontProvider)delegateLabelProvider).getFont(element);
+		}
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateTreeContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateTreeContentProvider.java
new file mode 100755
index 0000000..411be95
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SafeDelegateTreeContentProvider.java
@@ -0,0 +1,322 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.ArrayList;
+import java.util.Set;
+
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreePathContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+import org.eclipse.ui.navigator.IMementoAware;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider2;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
+
+/**
+ * @since 3.2
+ */
+public class SafeDelegateTreeContentProvider implements
+		IPipelinedTreeContentProvider2, ITreePathContentProvider {
+
+	private static final TreePath[] NO_PATHS = new TreePath[0];
+
+	private final ITreeContentProvider contentProvider;
+
+	private StructuredViewer viewer;
+
+	SafeDelegateTreeContentProvider(ITreeContentProvider aContentProvider) {
+		super();
+		contentProvider = aContentProvider;
+	}
+	
+	/**
+	 * @return true if the underlying content provider implements IPipelinedTreeContentProvider
+	 */
+	public boolean isPipelined() {
+		return contentProvider instanceof IPipelinedTreeContentProvider;
+	}
+
+	/**
+	 * @return true if the underlying content provider implements IPipelinedTreeContentProviderHasChildren
+	 */
+	public boolean isPipelinedHasChildren() {
+		return contentProvider instanceof IPipelinedTreeContentProvider2;
+	}
+
+	/**
+	 * @return true if the underlying content provider implements ITreePathContentProvider
+	 */
+	public boolean isTreePath() {
+		return contentProvider instanceof ITreePathContentProvider;
+	}
+
+	/**
+	 * 
+	 */
+	public void dispose() {
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				contentProvider.dispose(); 
+			}
+		});
+		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object anObject) {
+		return contentProvider.equals(anObject);
+	}
+
+	public Object[] getChildren(Object aParentElement) {
+		if (aParentElement instanceof TreePath) {
+			TreePath tp = (TreePath) aParentElement;
+			return getChildren(tp);
+		}
+		Object[] children = contentProvider.getChildren(aParentElement);
+		return children;
+	}
+
+	public Object[] getElements(Object anInputElement) {
+		Object[] elements = contentProvider.getElements(anInputElement);
+		return elements;
+	}
+
+	public Object getParent(Object anElement) {
+		return contentProvider.getParent(anElement);
+	}
+
+	public boolean hasChildren(Object anElement) {
+		return contentProvider.hasChildren(anElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		return contentProvider.hashCode();
+	}
+
+	public void inputChanged(final Viewer aViewer, final Object anOldInput, final Object aNewInput) {
+		viewer = (StructuredViewer) aViewer;
+		
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				contentProvider.inputChanged(aViewer, anOldInput, aNewInput);
+			}
+		});
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return contentProvider.toString();
+	}
+
+	/**
+	 * 
+	 * @return The real content provider.
+	 */
+	public ITreeContentProvider getDelegateContentProvider() {
+		return contentProvider;
+	}
+
+	public void restoreState(IMemento aMemento) {
+		if (contentProvider != null && contentProvider instanceof IMementoAware) {
+			((IMementoAware) contentProvider).restoreState(aMemento);
+		}
+
+	}
+
+	public void saveState(IMemento aMemento) {
+		if (contentProvider != null && contentProvider instanceof IMementoAware) {
+			((IMementoAware) contentProvider).saveState(aMemento);
+		}
+
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+		if (contentProvider instanceof ICommonContentProvider) {
+			((ICommonContentProvider) contentProvider).init(aConfig);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedChildren(java.lang.Object,
+	 *      java.util.Set)
+	 */
+	public void getPipelinedChildren(Object aParent, Set theCurrentChildren) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			((IPipelinedTreeContentProvider) contentProvider)
+					.getPipelinedChildren(aParent, theCurrentChildren);
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedElements(java.lang.Object,
+	 *      java.util.Set)
+	 */
+	public void getPipelinedElements(Object anInput, Set theCurrentElements) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			((IPipelinedTreeContentProvider) contentProvider)
+					.getPipelinedElements(anInput, theCurrentElements);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedParent(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			return ((IPipelinedTreeContentProvider) contentProvider)
+					.getPipelinedParent(anObject, aSuggestedParent);
+		}
+		return anObject;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptAdd(org.eclipse.ui.navigator.PipelinedShapeModification)
+	 */
+	public PipelinedShapeModification interceptAdd(
+			PipelinedShapeModification anAddModification) { 
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			return ((IPipelinedTreeContentProvider) contentProvider)
+					.interceptAdd(anAddModification);
+		}
+		return anAddModification;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRemove(org.eclipse.ui.navigator.PipelinedShapeModification)
+	 */
+	public PipelinedShapeModification interceptRemove(
+			PipelinedShapeModification aRemoveModification) { 
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			return ((IPipelinedTreeContentProvider) contentProvider)
+					.interceptRemove(aRemoveModification);
+		}
+		return aRemoveModification;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptRefresh(org.eclipse.ui.navigator.PipelinedViewerUpdate)
+	 */
+	public boolean interceptRefresh(
+			PipelinedViewerUpdate aRefreshSynchronization) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			return ((IPipelinedTreeContentProvider) contentProvider)
+					.interceptRefresh(aRefreshSynchronization);
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#interceptUpdate(org.eclipse.ui.navigator.PipelinedViewerUpdate)
+	 */
+	public boolean interceptUpdate(
+			PipelinedViewerUpdate anUpdateSynchronization) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider) {
+			return ((IPipelinedTreeContentProvider) contentProvider)
+					.interceptUpdate(anUpdateSynchronization);
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreePathContentProvider#getChildren(org.eclipse.jface.viewers.TreePath)
+	 */
+	public Object[] getChildren(TreePath parentPath) {
+		if (contentProvider instanceof ITreePathContentProvider) {
+			ITreePathContentProvider tpcp = (ITreePathContentProvider) contentProvider;
+			Object[] children = tpcp.getChildren(parentPath);
+			return children;
+		}
+		return getChildren(parentPath.getLastSegment());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreePathContentProvider#hasChildren(org.eclipse.jface.viewers.TreePath)
+	 */
+	public boolean hasChildren(TreePath path) {
+		if (contentProvider instanceof ITreePathContentProvider) {
+			ITreePathContentProvider tpcp = (ITreePathContentProvider) contentProvider;
+			return tpcp.hasChildren(path);
+		}
+		return hasChildren(path.getLastSegment());
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.ITreePathContentProvider#getParents(java.lang.Object)
+	 */
+	public TreePath[] getParents(Object element) {
+		if (contentProvider instanceof ITreePathContentProvider) {
+			ITreePathContentProvider tpcp = (ITreePathContentProvider) contentProvider;
+			return tpcp.getParents(element);
+		}
+		ArrayList segments = new ArrayList();
+		Object parent = element;
+		do {
+			parent = contentProvider.getParent(parent);
+			if (parent != null && parent != viewer.getInput())
+				segments.add(0, parent);
+		} while (parent != null && parent != viewer.getInput());
+		if (!segments.isEmpty()) {
+			// Loop backwards over the array to create the path.			
+			return new TreePath[] { new TreePath(segments.toArray()) };
+		}
+		return NO_PATHS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.IPipelinedTreeContentProviderHasChildren#hasPipelinedChildren(java.lang.Object, boolean)
+	 */
+	public boolean hasPipelinedChildren(Object anInput, boolean currentHasChildren) {
+		if (contentProvider instanceof IPipelinedTreeContentProvider2) {
+			return ((IPipelinedTreeContentProvider2) contentProvider)
+					.hasPipelinedChildren(anInput, currentHasChildren);
+		}
+		return currentHasChildren;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonActionProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonActionProvider.java
new file mode 100755
index 0000000..4502cdf
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonActionProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/**
+ * 
+ * A skeleton action provider is used as a shortcut to avoid a bunch of null
+ * checks. Instead, if a client fails to provide a valid Action Provider or
+ * there is some problem instantiating the class, a skeleton (no-op singleton)
+ * is used in its place. 
+ * 
+ * @since 3.2
+ */
+public final  class SkeletonActionProvider extends CommonActionProvider {
+
+	/**
+	 * A skeleton action provider is used as a shortcut to avoid a bunch of null
+	 * checks. Instead, if a client fails to provide a valid Action Provider or
+	 * there is some problem instantiating the class, a skeleton (no-op
+	 * singleton) is used in its place.
+	 */
+	public static final CommonActionProvider INSTANCE = new SkeletonActionProvider();
+ 
+	private SkeletonActionProvider() {
+		super();
+	}
+
+	public void init(ICommonActionExtensionSite aConfig) {
+
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonCommonDragAssistant.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonCommonDragAssistant.java
new file mode 100755
index 0000000..b72c670
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonCommonDragAssistant.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.ui.navigator.CommonDragAdapterAssistant;
+
+/**
+ * A Skeleton implementation of {@link CommonDragAdapterAssistant}.
+ * 
+ * @since 3.2
+ * 
+ */
+public final class SkeletonCommonDragAssistant extends
+		CommonDragAdapterAssistant {
+
+	/**
+	 * The singleton instance.
+	 */
+	public static final SkeletonCommonDragAssistant INSTANCE = new SkeletonCommonDragAssistant();
+
+	private static final Transfer[] NO_TRANSFER_TYPES = new Transfer[0];
+
+	private SkeletonCommonDragAssistant() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.CommonDragAdapterAssistant#getSupportedTransferTypes()
+	 */
+	public Transfer[] getSupportedTransferTypes() {
+		return NO_TRANSFER_TYPES;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.CommonDragAdapterAssistant#setDragData(org.eclipse.swt.dnd.DragSourceEvent,
+	 *      org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public boolean setDragData(DragSourceEvent anEvent,
+			IStructuredSelection aSelection) {
+		return false;
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLabelProvider.java
new file mode 100755
index 0000000..ea1f467
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLabelProvider.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+
+/** 
+ * 
+ * @since 3.2
+ */
+public final class SkeletonLabelProvider implements ICommonLabelProvider {
+
+	/**
+	 * The initialized singleton instance.
+	 */
+	public static final SkeletonLabelProvider INSTANCE = new SkeletonLabelProvider();
+
+	/**
+	 *  
+	 */
+	private SkeletonLabelProvider() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+	 *      java.lang.String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+
+	}
+
+ 
+	public void init(ICommonContentExtensionSite aConfig) {
+
+	}
+
+ 
+	public String getDescription(Object anElement) {
+		return null;
+	}
+
+	public void restoreState(IMemento aMemento) { 
+		
+	}
+
+	public void saveState(IMemento aMemento) { 
+		
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLinkHelper.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLinkHelper.java
new file mode 100755
index 0000000..5594ac3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonLinkHelper.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.navigator.ILinkHelper;
+
+/**
+ * @since 3.2
+ *
+ */
+public class SkeletonLinkHelper implements ILinkHelper {
+
+	/**
+	 * The singleton instance.
+	 */
+	public static final ILinkHelper INSTANCE = new SkeletonLinkHelper();
+	
+	private SkeletonLinkHelper() {
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ILinkHelper#findSelection(org.eclipse.ui.IEditorInput)
+	 */
+	public IStructuredSelection findSelection(IEditorInput anInput) {
+		return StructuredSelection.EMPTY;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.ILinkHelper#activateEditor(org.eclipse.ui.IWorkbenchPage, org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) {
+		// no-op
+		
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonTreeContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonTreeContentProvider.java
new file mode 100755
index 0000000..5e80ca5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/SkeletonTreeContentProvider.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+/**
+ * @since 3.2
+ */
+public final class SkeletonTreeContentProvider implements ICommonContentProvider {
+
+	/**
+	 * The initialized singleton instance.
+	 */
+	public static final SkeletonTreeContentProvider INSTANCE = new SkeletonTreeContentProvider();
+
+	private static final Object[] NO_CHILDREN = new Object[0];
+
+	private SkeletonTreeContentProvider() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+
+		return NO_CHILDREN;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+
+		return NO_CHILDREN;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
+
+	public void restoreState(IMemento aMemento) {
+
+	}
+
+	public void saveState(IMemento aMemento) {
+
+	}
+
+	public void init(ICommonContentExtensionSite aConfig) {
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/StructuredViewerManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/StructuredViewerManager.java
new file mode 100755
index 0000000..a86d323
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/StructuredViewerManager.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.extensions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.StructuredViewerInternals;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.Policy;
+
+/**
+ * <p>
+ * Provides a consistent mechanism to interact with StructuredViewers over time.
+ * The Common Navigator framework attempts to defer the loading of extensions,
+ * which also means deferring the loading of Content Providers. To follow the
+ * contracts already in place by
+ * {@link org.eclipse.jface.viewers.ITreeContentProvider}, the Viewer, Old
+ * Input, and New Input parameters for
+ * {@link org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)}
+ * are cached for content providers that have not been loaded yet.
+ * </p>
+ * <p>
+ * <b>WARNING: </b> The following class is not inherently thread-safe.
+ * Appropriate measures should be taken to ensure that
+ * {@link #inputChanged(Object, Object)}and
+ * {@link #inputChanged(Viewer, Object, Object)}are not called concurrently
+ * with {@link #initialize(IStructuredContentProvider)}.
+ * 
+ * 
+ * 
+ * @since 3.2
+ */
+public class StructuredViewerManager {
+
+	private StructuredViewer viewer;
+
+	private Object cachedOldInput;
+
+	private Object cachedNewInput;
+
+	/*
+	 * This map is used to associate elements in the viewer with their
+	 * associated NavigatorContentDescriptor. To avoid things getting out of
+	 * hand, it associates only the items that are actually present in the tree.
+	 * We need this association to make sure that we can always get the source
+	 * (NavigatorContentDescriptor) of a given element for the case of providing
+	 * the label which must use the same navigator content extension that
+	 * provided the element.
+	 */
+	// Map<element, NavigatorContentDescriptor>
+	private Map viewerDataMap;
+	
+	static class StructuredViewerAccess extends StructuredViewerInternals {
+		static class Listener implements StructuredViewerInternals.AssociateListener {
+			private final NavigatorContentService contentService;
+			private final Map viewerDataMap;
+			public Listener(NavigatorContentService contentService, Map viewerDataMap) {
+				this.contentService = contentService;
+				this.viewerDataMap = viewerDataMap;
+			}
+			public void associate(Object element, Item item) {
+				NavigatorContentDescriptor desc = contentService.getContribution(element);
+				contentService.forgetContribution(element);
+				synchronized (viewerDataMap) {
+					if (viewerDataMap.containsKey(element)) {
+						if (Policy.DEBUG_VIEWER_MAP)
+							System.out.println("associate: SKIPPED " + element + " item: " + item + " desc: " + desc + " FOUND"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						return;
+					}
+					viewerDataMap.put(element, desc);
+					if (Policy.DEBUG_VIEWER_MAP)
+						System.out.println("associate: " + element + " item: " + item + " desc: " + desc); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				}
+			}
+			public void disassociate(Item item) {
+				synchronized (viewerDataMap) {
+					if (Policy.DEBUG_VIEWER_MAP)
+						System.out.println("disassociate:  item: " + item + " object: " + item.getData()); //$NON-NLS-1$ //$NON-NLS-2$
+					viewerDataMap.remove(item.getData());
+				}
+			}
+
+			public void filteredOut(Object element) {
+				contentService.forgetContribution(element);
+				synchronized (viewerDataMap) {
+					if (Policy.DEBUG_VIEWER_MAP)
+						System.out.println("filteredOut: object: " + element); //$NON-NLS-1$
+					viewerDataMap.remove(element);
+				}
+			}
+		}
+		protected static void hookAssociateListener(StructuredViewer v, Map viewerDataMap, NavigatorContentService contentService) {
+			StructuredViewerInternals.setAssociateListener(v, new Listener(contentService, viewerDataMap));
+		}
+	}
+	
+	/**
+	 * @param element
+	 * @return the object
+	 */
+	public Object getData(Object element) {
+		synchronized (viewerDataMap) {
+			return viewerDataMap.get(element);
+		}
+	}
+
+	/**
+	 * Used when NCEs associated with the viewer are changed.
+	 */
+	public void resetViewerData() {
+		synchronized (viewerDataMap) {
+			if (Policy.DEBUG_VIEWER_MAP)
+				System.out.println("viewer map RESET"); //$NON-NLS-1$
+			viewerDataMap.clear();
+		}
+	}
+
+	/**
+	 * 
+	 * @param aViewer
+	 * @param contentService 
+	 */
+	public StructuredViewerManager(StructuredViewer aViewer, NavigatorContentService contentService) {
+		super();
+		viewer = aViewer;
+		viewerDataMap = new HashMap();
+		StructuredViewerAccess.hookAssociateListener(viewer, viewerDataMap, contentService);
+	}
+
+	/**
+	 * 
+	 * @return The real viewer.
+	 */
+	public Viewer getViewer() {
+		return viewer;
+	}
+
+	/**
+	 * 
+	 * @param anOldInput
+	 * @param aNewInput
+	 */
+	public void inputChanged(Object anOldInput, Object aNewInput) {
+		cachedOldInput = anOldInput;
+		cachedNewInput = aNewInput;
+	}
+
+	/**
+	 * 
+	 * @param aViewer
+	 * @param anOldInput
+	 * @param aNewInput
+	 */
+	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
+		viewer = (StructuredViewer) aViewer;
+		cachedOldInput = anOldInput;
+		cachedNewInput = aNewInput;
+	}
+
+	/**
+	 * 
+	 * @param aContentProvider
+	 * @return True if all is well.
+	 */
+	public boolean initialize(final IStructuredContentProvider aContentProvider) {
+		final boolean[] result = new boolean[1];
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				if (aContentProvider != null) {
+					aContentProvider.inputChanged(viewer, cachedOldInput, cachedNewInput);
+				}
+				result[0] = true;
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * 
+	 */
+	public void safeRefresh() {
+
+		final Viewer localViewer = viewer;
+
+		if (localViewer == null || localViewer.getControl().isDisposed())
+			return;
+		Display display = localViewer.getControl().getDisplay();
+		if (display.isDisposed())
+			return;
+		display.syncExec(new Runnable() {
+			public void run() {
+				if (localViewer.getControl().isDisposed())
+					return;
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						localViewer.getControl().setRedraw(false);
+						localViewer.refresh();
+					}
+				});
+				localViewer.getControl().setRedraw(true);
+			}
+		});
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterContentProvider.java
new file mode 100755
index 0000000..22ee935
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterContentProvider.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.internal.navigator.NavigatorFilterService;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * 
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
+ * progress. There is a guarantee neither that this API will work nor that it will remain the same.
+ * Please do not use this API without consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2 
+ *
+ */
+public class CommonFilterContentProvider implements IStructuredContentProvider {
+
+	private INavigatorContentService contentService;
+	private Object[] NO_ELEMENTS = new Object[0];
+ 
+ 
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		if (newInput instanceof INavigatorContentService) {
+			contentService = (INavigatorContentService) newInput;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		if(contentService != null) {
+			NavigatorFilterService filterService = (NavigatorFilterService) contentService.getFilterService();
+			return filterService.getVisibleFilterDescriptorsForUI();
+		}
+		return NO_ELEMENTS ;
+		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptor.java
new file mode 100755
index 0000000..89e6ec9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptor.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+
+/**
+ * 
+ * Describes a <b>commonFilter</b> element under a
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension.
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonFilterDescriptor implements ICommonFilterDescriptor,
+		INavigatorContentExtPtConstants {
+
+	private IConfigurationElement element;
+
+	private Expression filterExpression;
+
+	private String id;
+	
+	protected CommonFilterDescriptor(IConfigurationElement anElement) {
+
+		element = anElement;
+		init();
+	}
+
+	private void init() {
+		id = element.getAttribute(ATT_ID);
+		if (id == null) {
+			id = ""; //$NON-NLS-1$
+		}
+		IConfigurationElement[] children = element
+				.getChildren(TAG_FILTER_EXPRESSION);
+		if (children.length == 1) {
+			filterExpression = new CustomAndExpression(children[0]);
+		}
+	}
+
+	/**
+	 * 
+	 * @return An identifier used to determine whether the filter is visible.
+	 *         May not be unique.
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * 
+	 * @return A translated name to identify the filter
+	 */
+	public String getName() {
+		return element.getAttribute(ATT_NAME);
+	}
+
+	/**
+	 * 
+	 * @return A translated description to explain to the user what the defined
+	 *         filter will hide from the view.
+	 */
+	public String getDescription() {
+		return element.getAttribute(ATT_DESCRIPTION);
+	}
+
+	/**
+	 * 
+	 * @return Indicates the filter should be in an "Active" state by default.
+	 */
+	public boolean isActiveByDefault() {
+		return Boolean.valueOf(element.getAttribute(ATT_ACTIVE_BY_DEFAULT))
+				.booleanValue();
+	}
+
+	/**
+	 * 
+	 * @return Indicates the filter should be shown in the UI.
+	 */
+	public boolean isVisibleInUi() {
+		String attr = element.getAttribute(ATT_VISIBLE_IN_UI);
+		if (attr == null)
+			return true;
+		return Boolean.valueOf(attr).booleanValue();
+	}
+
+	/**
+	 * 
+	 * @return An instance of the ViewerFilter defined by the extension. Callers
+	 *         of this method are responsible for managing the instantiated
+	 *         filter.
+	 */
+	public ViewerFilter createFilter() {
+		final ViewerFilter[] filter = new ViewerFilter[1];
+
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				if (filterExpression != null) {
+					if (element.getAttribute(ATT_CLASS) != null) {
+						NavigatorPlugin
+								.log(
+										IStatus.WARNING,
+										0,
+										"A \"commonFilter\" was specified in " + //$NON-NLS-1$
+												element.getDeclaringExtension()
+														.getNamespaceIdentifier()
+												+ " which specifies a \"class\" attribute and an Core Expression.\n" + //$NON-NLS-1$
+												"Only the Core Expression will be respected.", //$NON-NLS-1$
+										null);
+					}
+
+					filter[0] = new CoreExpressionFilter(filterExpression);
+					return;
+				}
+				filter[0] = (ViewerFilter) element.createExecutableExtension(ATT_CLASS);
+			}
+		});
+
+		if (filter[0] != null)
+			return filter[0];
+		return SkeletonViewerFilter.INSTANCE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "CommonFilterDescriptor[" + getName() + " (" + getId() + ")]"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptorManager.java
new file mode 100755
index 0000000..5352c90
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterDescriptorManager.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CommonFilterDescriptorManager {
+
+	private static final CommonFilterDescriptorManager INSTANCE = new CommonFilterDescriptorManager();
+
+	private static final CommonFilterDescriptor[] NO_FILTER_DESCRIPTORS = new CommonFilterDescriptor[0];
+
+	// K(ID) V(CommonFilterDescriptor)
+	private final Map filters = new HashMap();
+
+	/**
+	 * 
+	 * @return An initialized singleton instance of the
+	 *         CommonFilterDescriptorManager.
+	 */
+	public static CommonFilterDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+
+	private CommonFilterDescriptorManager() {
+		new CommonFilterDescriptorRegistry().readRegistry();
+	}
+
+	/**
+	 * 
+	 */
+	public static final boolean FOR_UI = true;
+	
+	/**
+	 * 
+	 * @param contentService
+	 *            A content service to filter the visible filters.
+	 * @return The set of filters that are 'visible' to the given viewer
+	 *         descriptor.
+	 */
+	public CommonFilterDescriptor[] findVisibleFilters(INavigatorContentService contentService) {
+		return findVisibleFilters(contentService, !FOR_UI);
+	}
+
+	/**
+	 * 
+	 * @param contentService
+	 *            A content service to filter the visible filters.
+	 * @param forUI true if only filters visible to the UI are desired
+	 * @return The set of filters that are 'visible' to the given viewer
+	 *         descriptor.
+	 */
+	public CommonFilterDescriptor[] findVisibleFilters(INavigatorContentService contentService, boolean forUI) {
+
+		List visibleFilters = new ArrayList();
+		CommonFilterDescriptor descriptor;
+		for (Iterator filtersItr = filters.entrySet().iterator(); filtersItr.hasNext();) {
+			descriptor = (CommonFilterDescriptor) ((Map.Entry)filtersItr.next()).getValue();
+			if (forUI && !descriptor.isVisibleInUi())
+				continue;
+			if (contentService.isVisible(descriptor.getId())) {
+				visibleFilters.add(descriptor);
+			}
+		}
+		if (visibleFilters.size() == 0) {
+			return NO_FILTER_DESCRIPTORS;
+		}
+		return (CommonFilterDescriptor[]) visibleFilters
+				.toArray(new CommonFilterDescriptor[visibleFilters.size()]);
+	}
+
+	/**
+	 * @param id
+	 * @return the CommonFilterDescriptor, if found
+	 */
+	public CommonFilterDescriptor getFilterById(String id) {
+		return (CommonFilterDescriptor) filters.get(id);
+	}
+	
+	/**
+	 * @param aDescriptor
+	 *            A non-null descriptor
+	 */
+	private void addCommonFilter(CommonFilterDescriptor aDescriptor) {
+		filters.put(aDescriptor.getId(), aDescriptor);
+	}
+
+	private class CommonFilterDescriptorRegistry extends
+			NavigatorContentRegistryReader {
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
+		 */
+		protected boolean readElement(IConfigurationElement element) {
+			if (TAG_COMMON_FILTER.equals(element.getName())) {
+				addCommonFilter(new CommonFilterDescriptor(element));
+				return true;
+			}
+			return super.readElement(element);
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterLabelProvider.java
new file mode 100755
index 0000000..2c726b4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterLabelProvider.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+/**
+ * 
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
+ * progress. There is a guarantee neither that this API will work nor that it will remain the same.
+ * Please do not use this API without consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2 
+ *
+ */
+public class CommonFilterLabelProvider implements ITableLabelProvider, ILabelProvider {
+
+	private static final NavigatorContentDescriptorManager CONTENT_DESCRIPTOR_REGISTRY = NavigatorContentDescriptorManager.getInstance();
+
+	 
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		if (element instanceof NavigatorContentDescriptor) {
+			return CONTENT_DESCRIPTOR_REGISTRY.getImage(((INavigatorContentDescriptor) element).getId());
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof NavigatorContentDescriptor) {
+			return ((INavigatorContentDescriptor) element).getName();
+		} else if (element instanceof ICommonFilterDescriptor) {
+			return ((ICommonFilterDescriptor) element).getName();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+	 *      java.lang.String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+	 */
+	public Image getColumnImage(Object element, int columnIndex) {
+		switch (columnIndex) {
+			case 0 :
+				return getImage(element);
+
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+	 */
+	public String getColumnText(Object element, int columnIndex) {
+		switch (columnIndex) {
+			case 0 :
+				return getText(element);
+			case 1 : {
+				if (element instanceof ICommonFilterDescriptor) {
+					String d = ((ICommonFilterDescriptor) element).getDescription();
+					return d == null ? "" : d; //$NON-NLS-1$
+				}
+			}
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterSelectionDialog.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterSelectionDialog.java
new file mode 100755
index 0000000..cd34564
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFilterSelectionDialog.java
@@ -0,0 +1,271 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Feb 9, 2004
+ *  
+ */
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.resource.ColorRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+
+/**
+ * 
+ * @since 3.2
+ * 
+ */
+public class CommonFilterSelectionDialog extends TrayDialog {
+   
+	private static final String FILTER_ICON = "icons/full/elcl16/filter_ps.gif"; //$NON-NLS-1$
+	private static final String CONTENT_ICON = "icons/full/elcl16/content.gif"; //$NON-NLS-1$
+
+	private static final int TAB_WIDTH_IN_DLUS = 300;
+
+	private static final int TAB_HEIGHT_IN_DLUS = 150;
+
+	private final CommonViewer commonViewer;
+
+	private final INavigatorContentService contentService;
+
+	private CTabFolder customizationsTabFolder;
+
+	private CommonFiltersTab commonFiltersTab;
+
+	private ContentExtensionsTab contentExtensionsTab;
+
+	private Label descriptionText;
+
+	private ISelectionChangedListener updateDescriptionSelectionListener; 
+
+	private String helpContext;
+	
+	/**
+	 * Public only for tests.
+	 * 
+	 * @param aCommonViewer
+	 */
+	public CommonFilterSelectionDialog(CommonViewer aCommonViewer) {
+		super(aCommonViewer.getControl().getShell());
+		setShellStyle(SWT.RESIZE | getShellStyle());
+
+		commonViewer = aCommonViewer;
+		contentService = commonViewer.getNavigatorContentService();
+
+		INavigatorViewerDescriptor viewerDescriptor = contentService.getViewerDescriptor();
+		helpContext = viewerDescriptor
+				.getStringConfigProperty(INavigatorViewerDescriptor.PROP_CUSTOMIZE_VIEW_DIALOG_HELP_CONTEXT);
+
+		if (helpContext != null) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(
+					aCommonViewer.getControl().getShell(), helpContext);
+		}
+	}
+
+	public boolean isHelpAvailable() {
+		return helpContext != null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+		 
+		getShell()
+				.setText(
+						CommonNavigatorMessages.CommonFilterSelectionDialog_Available_customization_);
+		 
+		
+		Composite superComposite = (Composite) super.createDialogArea(parent);
+		 
+		createCustomizationsTabFolder(superComposite); 
+		
+		commonFiltersTab = new CommonFiltersTab(customizationsTabFolder,
+				contentService);
+		createTabItem(
+				customizationsTabFolder,
+				CommonNavigatorMessages.CommonFilterSelectionDialog_Available_Filters,
+				commonFiltersTab, FILTER_ICON);
+		
+
+		boolean hideExtensionsTab = contentService.getViewerDescriptor()
+				.getBooleanConfigProperty(
+						INavigatorViewerDescriptor.PROP_HIDE_AVAILABLE_EXT_TAB);
+
+		if (!hideExtensionsTab) { 
+			contentExtensionsTab = new ContentExtensionsTab(
+					customizationsTabFolder, contentService);
+
+			createTabItem(
+					customizationsTabFolder,
+					CommonNavigatorMessages.CommonFilterSelectionDialog_Available_Content,
+					contentExtensionsTab, CONTENT_ICON);
+			
+		}
+
+		createDescriptionText(superComposite);
+
+		if (commonFiltersTab != null) {
+			commonFiltersTab.addSelectionChangedListener(getSelectionListener());
+		}
+
+		if (contentExtensionsTab != null) {
+			contentExtensionsTab
+					.addSelectionChangedListener(getSelectionListener());
+		}
+	
+		commonFiltersTab.setInitialFocus();
+		
+		return customizationsTabFolder;
+	}
+
+	private void createCustomizationsTabFolder(Composite superComposite) {
+		customizationsTabFolder = new CTabFolder (superComposite, SWT.RESIZE | SWT.BORDER);
+ 
+		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+		gd.widthHint = convertHorizontalDLUsToPixels(TAB_WIDTH_IN_DLUS);
+		gd.heightHint = convertVerticalDLUsToPixels(TAB_HEIGHT_IN_DLUS);
+		
+		customizationsTabFolder.setLayout(new GridLayout());
+		customizationsTabFolder.setLayoutData(gd);
+
+		customizationsTabFolder.setFont(superComposite.getFont()); 
+
+		customizationsTabFolder.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				if (descriptionText != null) {
+					descriptionText.setText(""); //$NON-NLS-1$
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+
+			}
+
+		});
+	  
+		customize();
+
+	}
+
+	private void customize() {
+		ColorRegistry reg = JFaceResources.getColorRegistry();
+		Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
+		  c2 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_END"); //$NON-NLS-1$
+		customizationsTabFolder.setSelectionBackground(new Color[] {c1, c2},	new int[] {100}, true);
+		customizationsTabFolder.setSelectionForeground(reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR")); //$NON-NLS-1$
+//		RAP [bmichalik]
+//		customizationsTabFolder.setSimple(true);
+	}
+
+	private CTabItem createTabItem(CTabFolder aTabFolder, String label,
+			Composite composite, String imageKey) {
+		CTabItem extensionsTabItem = new CTabItem(aTabFolder, SWT.BORDER);
+		extensionsTabItem.setText(label);
+ 		extensionsTabItem.setControl(composite); 
+ 		extensionsTabItem.setImage(NavigatorPlugin.getDefault().getImage(imageKey));
+ 		return extensionsTabItem;
+	}
+
+	private void createDescriptionText(Composite composite) {
+
+		descriptionText = new Label(composite, SWT.WRAP);
+		descriptionText.setFont(composite.getFont());
+		descriptionText.setBackground(composite.getBackground());
+		GridData descriptionTextGridData = new GridData(GridData.FILL, GridData.BEGINNING, true, false);
+		descriptionTextGridData.heightHint = convertHeightInCharsToPixels(3);
+		descriptionText.setLayoutData(descriptionTextGridData);
+	}
+
+	private ISelectionChangedListener getSelectionListener() {
+		if (updateDescriptionSelectionListener == null) {
+			updateDescriptionSelectionListener = new FilterDialogSelectionListener(
+					descriptionText);
+		}
+		return updateDescriptionSelectionListener;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+
+		if (contentExtensionsTab != null) {
+			List checkedExtensions = new ArrayList();
+			TableItem[] tableItems = contentExtensionsTab.getTable().getItems();
+			INavigatorContentDescriptor descriptor;
+			for (int i = 0; i < tableItems.length; i++) {
+				descriptor = (INavigatorContentDescriptor) tableItems[i]
+						.getData();
+
+				if (tableItems[i].getChecked()) {
+					checkedExtensions.add(descriptor.getId());
+				}
+			}
+			String[] contentExtensionIdsToActivate = (String[]) checkedExtensions
+					.toArray(new String[checkedExtensions.size()]);
+			UpdateActiveExtensionsOperation updateExtensions = new UpdateActiveExtensionsOperation(
+					commonViewer, contentExtensionIdsToActivate);
+			updateExtensions.execute(null, null);
+		}
+
+		if (commonFiltersTab != null) {
+			Set checkedFilters = commonFiltersTab.getCheckedItems();
+			
+			String[] filterIdsToActivate = new String[checkedFilters.size()];
+			int indx = 0;
+			for (Iterator iterator = checkedFilters.iterator(); iterator
+					.hasNext();) {
+				ICommonFilterDescriptor descriptor = (ICommonFilterDescriptor) iterator
+						.next();
+
+				filterIdsToActivate[indx++] = descriptor.getId();
+
+			} 
+			UpdateActiveFiltersOperation updateFilters = new UpdateActiveFiltersOperation(
+					commonViewer, filterIdsToActivate);
+			updateFilters.execute(null, null);
+		}
+
+		super.okPressed();
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFiltersTab.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFiltersTab.java
new file mode 100755
index 0000000..4bf60a0
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CommonFiltersTab.java
@@ -0,0 +1,306 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+// RAP [bmichalik]: accessibility
+//import org.eclipse.swt.accessibility.AccessibleAdapter;
+//import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.StringMatcher;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorFilterService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CommonFiltersTab extends CustomizationTab { 
+ 
+	private static final String ALL = "*"; //$NON-NLS-1$
+
+	private String initialFilterTextValue = CommonNavigatorMessages.CommonFilterSelectionDialog_enter_name_of_filte_;
+
+	private Text filterText;
+
+	private ILabelProvider filterLabelProvider = new CommonFilterLabelProvider();
+
+	private CommonFilterContentProvider filterContentProvider = new CommonFilterContentProvider();
+
+	private TablePatternFilter patternFilter = new TablePatternFilter();
+
+	protected CommonFiltersTab(Composite parent,
+			INavigatorContentService aContentService) {
+		super(parent, aContentService);
+		createControl();
+	} 
+	  
+	private void createControl() {  
+
+		createInstructionsLabel(CommonNavigatorMessages.CommonFilterSelectionDialog_Select_the_filters_to_apply);
+		
+		createPatternFilterText(this);
+		
+		createTable(); 
+
+		getTableViewer().setContentProvider(filterContentProvider);
+		getTableViewer().setLabelProvider(filterLabelProvider);
+		getTableViewer().setSorter(new CommonFilterSorter());
+		getTableViewer().setInput(getContentService());
+		
+		getTableViewer().addFilter(patternFilter);
+		
+		updateFiltersCheckState();
+
+	}
+
+	private void createPatternFilterText(Composite composite) {
+		filterText = new Text(composite, SWT.SINGLE | SWT.BORDER);
+		GridData filterTextGridData = new GridData(GridData.FILL_HORIZONTAL); 
+		filterText.setLayoutData(filterTextGridData);
+		filterText.setText(initialFilterTextValue);
+		filterText.setFont(composite.getFont());
+
+// RAP [bmichalik]: accessability
+//		filterText.getAccessible().addAccessibleListener(
+//				new AccessibleAdapter() {
+//					/*
+//					 * (non-Javadoc)
+//					 * 
+//					 * @see org.eclipse.swt.accessibility.AccessibleListener#getName(org.eclipse.swt.accessibility.AccessibleEvent)
+//					 */
+//					public void getName(AccessibleEvent e) {
+//						String filterTextString = filterText.getText();
+//						if (filterTextString.length() == 0) {
+//							e.result = initialFilterTextValue;
+//						} else {
+//							e.result = filterTextString;
+//						}
+//					}
+//				});
+
+		filterText.addFocusListener(new FocusAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt.events.FocusEvent)
+			 */
+			public void focusGained(FocusEvent e) {
+				if (initialFilterTextValue.equals(filterText.getText().trim())) {
+					filterText.selectAll();
+				}
+			}
+		});
+
+		filterText.addMouseListener(new MouseAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)
+			 */
+			public void mouseUp(MouseEvent e) {
+				super.mouseUp(e);
+				if (initialFilterTextValue.equals(filterText.getText().trim())) {
+					filterText.selectAll();
+				}
+			}
+		});
+
+		filterText.addKeyListener(new KeyAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
+			 */
+			public void keyPressed(KeyEvent e) {
+				// on a CR we want to transfer focus to the list
+				boolean hasItems = getTable().getItemCount() > 0;
+				if (hasItems && e.keyCode == SWT.ARROW_DOWN) {
+					getTable().setFocus();
+				} else if (e.character == SWT.CR) {
+					return;
+				}
+			}
+		});
+
+		// enter key set focus to tree
+		filterText.addTraverseListener(new TraverseListener() {
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_RETURN) {
+					e.doit = false;
+					if (getTableViewer().getTable().getItemCount() == 0) {
+						Display.getCurrent().beep();
+					} else {
+						// if the initial filter text hasn't changed, do not try
+						// to match
+						boolean hasFocus = getTable().setFocus();
+						boolean textChanged = !initialFilterTextValue
+								.equals(filterText.getText().trim());
+						if (hasFocus && textChanged
+								&& filterText.getText().trim().length() > 0) {
+							TableItem item = getFirstHighlightedItem(getTable()
+									.getItems());
+							if (item != null) {
+								getTable().setSelection(
+										new TableItem[] { item });
+								ISelection sel = getTableViewer()
+										.getSelection();
+								getTableViewer().setSelection(sel, true);
+							}
+						}
+					}
+				}
+			}
+
+			private TableItem getFirstHighlightedItem(TableItem[] items) {
+				for (int i = 0; i < items.length; i++) {
+					if (patternFilter.match(items[i].getText())) {
+						return items[i];
+					}
+				}
+				return null;
+			}
+		});
+
+		filterText.addModifyListener(new ModifyListener() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+			 */
+			public void modifyText(ModifyEvent e) {
+				textChanged();
+			}
+		});
+	}
+
+	void setInitialFocus() {
+		filterText.forceFocus();
+	}
+	
+	private void textChanged() {
+		patternFilter.setPattern(filterText.getText());
+		getTableViewer().refresh();
+		
+		Set checkedItems = getCheckedItems();
+		for (Iterator iterator = checkedItems.iterator(); iterator.hasNext();) {  
+			getTableViewer().setChecked(iterator.next(), true);
+		}
+	} 
+
+	private void updateFiltersCheckState() {
+		Object[] children = filterContentProvider
+				.getElements(getContentService());
+		ICommonFilterDescriptor filterDescriptor;
+		INavigatorFilterService filterService = getContentService()
+				.getFilterService();
+		for (int i = 0; i < children.length; i++) {
+			filterDescriptor = (ICommonFilterDescriptor) children[i];
+			if(filterService.isActive(filterDescriptor.getId())) {
+				getTableViewer().setChecked(children[i], true);
+				getCheckedItems().add(children[i]);
+			} else {
+				getTableViewer().setChecked(children[i], false);
+			}
+		}
+	}
+
+	private class TablePatternFilter extends ViewerFilter {
+
+		private StringMatcher matcher = null;
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public boolean select(Viewer viewer, Object parentElement,
+				Object element) {
+			return match(filterLabelProvider.getText(element));
+		}
+
+		protected void setPattern(String newPattern) {
+			if (newPattern == null || newPattern.trim().length() == 0) {
+				matcher = new StringMatcher(ALL, true, false);  
+			} else {
+				String patternString = ALL + newPattern + ALL; 
+				matcher = new StringMatcher(patternString, true, false);
+			}
+
+		} 
+
+		/**
+		 * Answers whether the given String matches the pattern.
+		 * 
+		 * @param input
+		 *            the String to test
+		 * 
+		 * @return whether the string matches the pattern
+		 */
+		protected boolean match(String input) {
+			if (input == null) {
+				return false;
+			}
+			return matcher == null || matcher.match(input);
+		}
+	}
+ 
+	private class CommonFilterSorter extends ViewerSorter {
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ViewerSorter#sort(org.eclipse.jface.viewers.Viewer, java.lang.Object[])
+		 */
+		public void sort(Viewer viewer, Object[] elements) {
+			Arrays.sort(elements, new Comparator() {
+				/* (non-Javadoc)
+				 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+				 */
+				public int compare(Object o1, Object o2) { 
+					ICommonFilterDescriptor lvalue = (ICommonFilterDescriptor) o1;
+					ICommonFilterDescriptor rvalue = (ICommonFilterDescriptor) o2;
+					
+					return lvalue.getName().compareTo(rvalue.getName());
+				}
+			});
+		
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentDescriptorContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentDescriptorContentProvider.java
new file mode 100755
index 0000000..c63855a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentDescriptorContentProvider.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+class ContentDescriptorContentProvider implements ITreeContentProvider {
+
+	private static final Object[] NO_CHILDREN = new Object[0];
+
+	private INavigatorContentService contentService;
+
+	private CheckboxTableViewer talbleViewer;
+
+	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
+
+		if (aNewInput != null) {
+
+			if (aNewInput instanceof INavigatorContentService) {
+				contentService = (INavigatorContentService) aNewInput;
+			}
+
+			if (aViewer instanceof CheckboxTableViewer) {
+				talbleViewer = (CheckboxTableViewer) aViewer;
+			}
+
+			updateCheckState();
+		} else {
+			contentService = null;
+			talbleViewer = null;
+		}
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object aParentElement) {
+		return NO_CHILDREN;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object anElement) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object anElement) {
+		return getChildren(anElement).length != 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object anInputElement) {
+		return contentService != null ? contentService.getVisibleExtensions()
+				: NO_CHILDREN;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+
+	}
+
+	private void updateCheckState() {
+		if (talbleViewer == null || contentService == null) {
+			return;
+		}
+
+		INavigatorContentDescriptor descriptor;
+		boolean enabled;
+
+		TableItem[] descriptorTableItems = talbleViewer.getTable().getItems();
+		for (int i = 0; i < descriptorTableItems.length; i++) {
+			if (descriptorTableItems[i].getData() instanceof INavigatorContentDescriptor) {
+				descriptor = (INavigatorContentDescriptor) descriptorTableItems[i]
+						.getData();
+				enabled = contentService.getActivationService()
+						.isNavigatorExtensionActive(descriptor.getId());
+				talbleViewer.setChecked(descriptor, enabled);
+			}
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentExtensionsTab.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentExtensionsTab.java
new file mode 100755
index 0000000..65ad163
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ContentExtensionsTab.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class ContentExtensionsTab extends CustomizationTab {
+
+	protected ContentExtensionsTab(Composite parent,
+			INavigatorContentService aContentService) {
+		super(parent, aContentService);
+		createControl();
+
+	}
+
+	private void createControl() { 
+				
+		createInstructionsLabel(CommonNavigatorMessages.CommonFilterSelectionDialog_Select_the_available_extensions);
+		
+		createTable();
+
+		getTableViewer().setContentProvider(new ContentDescriptorContentProvider());
+		getTableViewer().setLabelProvider(new CommonFilterLabelProvider());
+		getTableViewer().setInput(getContentService());
+
+		updateCheckedState();
+
+	}
+
+
+	private void updateCheckedState() {
+		INavigatorContentDescriptor[] visibleExtensions = getContentService()
+				.getVisibleExtensions();
+		for (int i = 0; i < visibleExtensions.length; i++) {
+			if (getContentService().isActive(visibleExtensions[i].getId())) {
+				getTableViewer().setChecked(visibleExtensions[i], true);
+			}
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CoreExpressionFilter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CoreExpressionFilter.java
new file mode 100755
index 0000000..703cb05
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CoreExpressionFilter.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CoreExpressionFilter extends ViewerFilter {
+
+	private Expression filterExpression;
+
+	/**
+	 * Creates a filter which hides all elements that match the given
+	 * expression.
+	 * 
+	 * @param aFilterExpression
+	 *            An expression to hide elements in the viewer.
+	 */
+	public CoreExpressionFilter(Expression aFilterExpression) {
+		filterExpression = aFilterExpression;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(element);
+		return NavigatorPlugin.safeEvaluate(filterExpression, context) != EvaluationResult.TRUE;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CustomizationTab.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CustomizationTab.java
new file mode 100755
index 0000000..85da6c6
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/CustomizationTab.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CustomizationTab extends Composite { 
+ 
+ 
+	private final INavigatorContentService contentService;
+
+	private CheckboxTableViewer tableViewer;
+	private final Set checkedItems = new HashSet();
+
+	private ICheckStateListener checkListener = new ICheckStateListener() {
+
+		public void checkStateChanged(CheckStateChangedEvent event) {
+			if(event.getChecked())
+				checkedItems.add(event.getElement());
+			else
+				checkedItems.remove(event.getElement());
+		}
+		
+	};
+ 
+	protected CustomizationTab(Composite parent,
+			INavigatorContentService aContentService) {
+		super(parent, SWT.RESIZE);
+ 
+		contentService = aContentService;
+		setFont(getParent().getFont()); 
+		setLayout(new GridLayout()); 
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); 
+		setData(data);
+ 
+	}
+
+	protected Table getTable() {
+		return tableViewer.getTable();
+	}
+
+	protected void addSelectionChangedListener(
+			ISelectionChangedListener selectionListener) {
+		if (tableViewer != null) {
+			tableViewer
+					.addSelectionChangedListener(selectionListener);
+		}
+	}
+
+	protected void createTable() {
+		  
+		tableViewer = CheckboxTableViewer.newCheckList(this,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);		
+		tableViewer.addCheckStateListener(checkListener);		
+		
+		tableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));		
+		tableViewer.getControl().setFont(getFont());
+
+	} 
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	public void dispose() { 
+		tableViewer.removeCheckStateListener(checkListener);
+		super.dispose();
+		
+	}
+
+	protected void createInstructionsLabel(String labelText) {
+		 
+		Label extensionsInstructionLabel = new Label(this, SWT.BOLD | SWT.WRAP);
+
+		GridData gridData = new GridData(GridData.FILL_HORIZONTAL
+				| GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL
+				| GridData.VERTICAL_ALIGN_FILL); 
+
+		extensionsInstructionLabel.setLayoutData(gridData);
+		extensionsInstructionLabel.setFont(getFont());
+		extensionsInstructionLabel.setText(labelText);
+	}
+	 
+
+	protected final INavigatorContentService getContentService() {
+		return contentService;
+	}
+
+	protected final CheckboxTableViewer getTableViewer() {
+		return tableViewer;
+	}
+
+	protected Set getCheckedItems() {
+		return checkedItems;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterActionGroup.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterActionGroup.java
new file mode 100755
index 0000000..c575cc6
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterActionGroup.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorViewerDescriptor;
+
+/**
+ * Creates the last 5 filters that were touched as view menu options.
+ * 
+ * @since 3.2
+ * 
+ */
+public class FilterActionGroup extends ActionGroup {	
+
+	private static final String FILTER_ACTION_GROUP = "filterActionGroup"; //$NON-NLS-1$
+	
+	private static final String FILTER_ACTION_GROUP_FILTERS_START = FILTER_ACTION_GROUP+"Filters-start"; //$NON-NLS-1$
+
+	private static final String FILTER_ACTION_GROUP_FILTERS_END = FILTER_ACTION_GROUP+"Filters-end"; //$NON-NLS-1$	
+	
+	private SelectFiltersAction selectFiltersAction;
+	private CommonViewer commonViewer;
+	private INavigatorViewerDescriptor viewerDescriptor;
+	
+	private final Set filterShortcutActions = new LinkedHashSet();
+	
+
+	/**
+	 * @param aCommonViewer The viewer this action group is associated with
+	 */
+	public FilterActionGroup(CommonViewer aCommonViewer) {
+		Assert.isNotNull(aCommonViewer);
+		commonViewer = aCommonViewer;
+		viewerDescriptor = commonViewer.getNavigatorContentService().getViewerDescriptor();
+		makeActions();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	public void fillActionBars(IActionBars actionBars) {
+		IMenuManager menu = actionBars.getMenuManager();
+		menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS,
+				new Separator(FILTER_ACTION_GROUP));
+		if (selectFiltersAction != null) { 
+			menu.appendToGroup(FILTER_ACTION_GROUP,
+					selectFiltersAction);
+			
+			menu.appendToGroup(FILTER_ACTION_GROUP,
+					new GroupMarker(FILTER_ACTION_GROUP_FILTERS_START));
+			
+			menu.appendToGroup(FILTER_ACTION_GROUP_FILTERS_START,
+					new Separator(FILTER_ACTION_GROUP_FILTERS_END));
+			
+			
+			for (Iterator iter = filterShortcutActions.iterator(); iter.hasNext();) {
+				IAction action = (IAction) iter.next();
+				menu.appendToGroup(FILTER_ACTION_GROUP_FILTERS_START, action);				
+			}			
+			
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager menu) { 
+		super.fillContextMenu(menu);
+	}
+
+	/**
+	 * 
+	 */
+	private void makeActions() {
+		boolean hideAvailableCustomizationsDialog = viewerDescriptor
+				.getBooleanConfigProperty(INavigatorViewerDescriptor.PROP_HIDE_AVAILABLE_CUSTOMIZATIONS_DIALOG);
+		if (!hideAvailableCustomizationsDialog) {
+			selectFiltersAction = new SelectFiltersAction(commonViewer, this);
+			ImageDescriptor selectFiltersIcon = NavigatorPlugin.getImageDescriptor("icons/full/elcl16/filter_ps.gif"); //$NON-NLS-1$ 
+			selectFiltersAction.setImageDescriptor(selectFiltersIcon);
+			selectFiltersAction.setHoverImageDescriptor(selectFiltersIcon);
+		}
+	}
+	
+	protected void updateFilterShortcuts() {
+		
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterDialogSelectionListener.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterDialogSelectionListener.java
new file mode 100755
index 0000000..8797644
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/FilterDialogSelectionListener.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class FilterDialogSelectionListener implements ISelectionChangedListener {
+	
+	
+	private Label descriptionText;
+
+	protected FilterDialogSelectionListener(Label aDescriptionText) {
+		descriptionText = aDescriptionText;
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+
+		IStructuredSelection structuredSelection = (IStructuredSelection) event
+				.getSelection();
+		Object element = structuredSelection.getFirstElement();
+		if (element instanceof INavigatorContentDescriptor) {
+			INavigatorContentDescriptor ncd = (INavigatorContentDescriptor) element;
+			String desc = NLS
+					.bind(
+							CommonNavigatorMessages.CommonFilterSelectionDialog_Hides_all_content_associated,
+							new Object[] { ncd.getName() });
+			descriptionText.setText(desc);
+		} else if (element instanceof ICommonFilterDescriptor) {
+			ICommonFilterDescriptor cfd = (ICommonFilterDescriptor) element;
+			String description = 	cfd.getDescription();
+			if(description != null)
+				descriptionText.setText(description);
+			else 
+				descriptionText.setText(NLS.bind(CommonNavigatorMessages.FilterDialogSelectionListener_Enable_the_0_filter_, cfd.getName()));
+		}
+
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SelectFiltersAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SelectFiltersAction.java
new file mode 100755
index 0000000..695b245
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SelectFiltersAction.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Feb 9, 2004
+ *
+ */
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * 
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
+ * progress. There is a guarantee neither that this API will work nor that it will remain the same.
+ * Please do not use this API without consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public class SelectFiltersAction extends Action {
+
+	private final CommonViewer commonViewer;
+	private FilterActionGroup filterGroup; 
+
+	/**
+	 * Create an action to drive the Filter selection dialog
+	 * for a particular instance of the CommonViewer.
+	 * @param aCommonViewer
+	 * @param aFilterGroup 
+	 */
+	public SelectFiltersAction(CommonViewer aCommonViewer, FilterActionGroup aFilterGroup) {
+		super(CommonNavigatorMessages.SelectFiltersActionDelegate_0); 
+		setToolTipText(CommonNavigatorMessages.SelectFiltersActionDelegate_1); 
+		commonViewer = aCommonViewer; 
+		filterGroup = aFilterGroup;
+	}
+
+	public void run() {
+		CommonFilterSelectionDialog filterSelectionDialog = new CommonFilterSelectionDialog(commonViewer);
+		filterSelectionDialog.open();
+		filterGroup.updateFilterShortcuts();
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SkeletonViewerFilter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SkeletonViewerFilter.java
new file mode 100755
index 0000000..51cd63b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/SkeletonViewerFilter.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * 
+ * A no-op viewer filter used to prevent null return values from
+ * {@link CommonFilterDescriptor#createFilter()}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class SkeletonViewerFilter extends ViewerFilter {
+
+	/**
+	 * The singleton instance.
+	 */
+	public static final SkeletonViewerFilter INSTANCE = new SkeletonViewerFilter();
+
+	private SkeletonViewerFilter() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+
+		return true;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ToggleFilterAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ToggleFilterAction.java
new file mode 100755
index 0000000..a24baf0
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/ToggleFilterAction.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.ui.internal.navigator.NavigatorFilterService;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class ToggleFilterAction extends Action {
+
+	private ICommonFilterDescriptor descriptor;
+
+	private NavigatorFilterService filterService;
+
+	private CommonViewer commonViewer;
+
+	protected ToggleFilterAction(CommonViewer aCommonViewer,
+			NavigatorFilterService aFilterService,
+			ICommonFilterDescriptor aFilterDescriptor) {
+		Assert.isNotNull(aCommonViewer);
+		Assert.isNotNull(aFilterService);
+		Assert.isNotNull(aFilterDescriptor);
+
+		commonViewer = aCommonViewer;
+		filterService = aFilterService;
+		descriptor = aFilterDescriptor;
+
+		setChecked(filterService.isActive(descriptor.getId()));
+		setText(descriptor.getName());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+
+		boolean toMakeActive = !isChecked();
+
+		filterService.setActive(descriptor.getId(), toMakeActive);
+		filterService.persistFilterActivationState();
+
+		ViewerFilter viewerFilter = filterService.getViewerFilter(descriptor);
+		if (toMakeActive) {
+			commonViewer.addFilter(viewerFilter);
+		} else {
+			commonViewer.removeFilter(viewerFilter);
+		}
+
+		// the action providers may no longer be enabled, so we
+		// reset the selection.
+		commonViewer.setSelection(StructuredSelection.EMPTY);
+
+		setChecked(toMakeActive);
+
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveExtensionsOperation.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveExtensionsOperation.java
new file mode 100755
index 0000000..ec9f3bc
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveExtensionsOperation.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import java.util.Arrays;
+
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * Ensures that a given set of content extensions is <i>active</i> and a second
+ * non-intersecting set of content extensions are not <i>active</i>.
+ * 
+ * <p>
+ * This operation is smart enough not to force any change if each id in each set
+ * is already in its desired state (<i>active</i> or <i>inactive</i>).
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public class UpdateActiveExtensionsOperation extends AbstractOperation {
+
+	private String[] contentExtensionsToActivate;
+
+	private final CommonViewer commonViewer;
+
+	private final INavigatorContentService contentService;
+
+	/**
+	 * Create an operation to activate extensions and refresh the viewer.
+	 * 
+	 * p> To use only one part of this operation (either "activate" or
+	 * "deactivate", but not both), then supply <b>null</b> for the array state
+	 * you are not concerned with.
+	 * </p>
+	 * 
+	 * @param aCommonViewer
+	 *            The CommonViewer instance to update
+	 * @param theExtensionsToActivate
+	 *            An array of ids that correspond to the extensions that should
+	 *            be in the <i>active</i> state after this operation executes.
+	 */
+	public UpdateActiveExtensionsOperation(CommonViewer aCommonViewer,
+			String[] theExtensionsToActivate) {
+		super(
+				CommonNavigatorMessages.UpdateFiltersOperation_Update_CommonViewer_Filter_);
+		commonViewer = aCommonViewer;
+		contentService = commonViewer.getNavigatorContentService();
+		contentExtensionsToActivate = theExtensionsToActivate;
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) {
+
+		boolean updateExtensionActivation = false;
+
+		// we sort the array in order to use Array.binarySearch();
+		Arrays.sort(contentExtensionsToActivate);
+		
+		IStructuredSelection ssel = null;
+	
+		try {
+			commonViewer.getControl().setRedraw(false);
+			
+			ISelection selection = commonViewer.getSelection();
+			if(selection instanceof IStructuredSelection)
+				ssel = (IStructuredSelection) selection;
+
+			INavigatorContentDescriptor[] visibleContentDescriptors = contentService
+					.getVisibleExtensions();
+
+			int indexofContentExtensionIdToBeActivated;
+			/* is there a delta? */
+			for (int i = 0; i < visibleContentDescriptors.length
+					&& !updateExtensionActivation; i++) {
+				indexofContentExtensionIdToBeActivated = Arrays.binarySearch(
+						contentExtensionsToActivate,
+						visibleContentDescriptors[i].getId());
+				/*
+				 * Either we have a filter that should be active that isn't XOR
+				 * a filter that shouldn't be active that is currently
+				 */
+				if (indexofContentExtensionIdToBeActivated >= 0
+						^ contentService.isActive(visibleContentDescriptors[i]
+								.getId())) {
+					updateExtensionActivation = true;
+				}
+			}
+
+			/* If so, update */
+			if (updateExtensionActivation) {
+				 
+				contentService.getActivationService().activateExtensions(
+						contentExtensionsToActivate, true);
+				contentService.getActivationService()
+						.persistExtensionActivations();
+				
+
+				Object[] expandedElements = commonViewer.getExpandedElements();
+
+				contentService.update();
+
+				commonViewer.refresh();
+				
+				Object[] originalObjects = ssel.toArray(); 
+				
+				commonViewer.setExpandedElements(expandedElements);
+
+				IStructuredSelection newSelection = new StructuredSelection(originalObjects);
+				commonViewer.setSelection(newSelection, true); 				
+			}
+
+		} finally {
+			commonViewer.getControl().setRedraw(true);
+		} 
+
+		return Status.OK_STATUS;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) {
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveFiltersOperation.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveFiltersOperation.java
new file mode 100755
index 0000000..fa8ad57
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/filters/UpdateActiveFiltersOperation.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.filters;
+
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * Ensures that a given set of filters is <i>active</i> and the complement of
+ * that set of filters are not <i>active</i>.
+ * 
+ * <p>
+ * This operation is smart enough not to force any change if each id in each set
+ * is already in its desired state (<i>active</i> or <i>inactive</i>).
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public class UpdateActiveFiltersOperation extends AbstractOperation {
+
+	private String[] filterIdsToActivate; 
+
+	private final CommonViewer commonViewer;
+
+	private final INavigatorContentService contentService;
+
+	/**
+	 * Create an operation to activate extensions and refresh the viewer.
+	 * 
+	 * 
+	 * @param aCommonViewer
+	 *            The CommonViewer instance to update
+	 * @param theActiveFilterIds
+	 *            An array of ids that correspond to the filters that should be
+	 *            in the <i>active</i> state after this operation executes. The
+	 *            complement of this set will likewise be in the <i>inactive</i>
+	 *            state after this operation executes.
+	 */
+	public UpdateActiveFiltersOperation(CommonViewer aCommonViewer,
+			String[] theActiveFilterIds) {
+		super(
+				CommonNavigatorMessages.UpdateFiltersOperation_Update_CommonViewer_Filter_);
+		Assert.isNotNull(theActiveFilterIds);
+		
+		commonViewer = aCommonViewer;
+		contentService = commonViewer.getNavigatorContentService();
+		filterIdsToActivate = theActiveFilterIds;
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) {
+		contentService.getFilterService().activateFilterIdsAndUpdateViewer(filterIdsToActivate);
+		return Status.OK_STATUS;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.core.runtime.IAdaptable)
+	 */
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) {
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/BackAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/BackAction.java
new file mode 100755
index 0000000..c1085ba
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/BackAction.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Generic "Back" action which goes back one frame,
+ * @since 3.4
+ */
+public class BackAction extends FrameAction {
+
+	private static final String ID = "org.eclipse.ui.framelist.back"; //$NON-NLS-1$
+	
+    /**
+     * Constructs a new action for the specified frame list.
+     * 
+     * @param frameList the frame list
+     */
+    public BackAction(FrameList frameList) {
+        super(frameList);
+        setId(ID);
+        setText(FrameListMessages.Back_text);
+        ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
+        setImageDescriptor(images
+                .getImageDescriptor(ISharedImages.IMG_TOOL_BACK));
+        setDisabledImageDescriptor(images
+                .getImageDescriptor(ISharedImages.IMG_TOOL_BACK_DISABLED));
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+				IFrameListHelpContextIds.BACK_ACTION);
+        update();
+    }
+
+    private Frame getPreviousFrame() {
+        FrameList list = getFrameList();
+        return list.getFrame(list.getCurrentIndex() - 1);
+    }
+
+    private String getToolTipText(Frame previousFrame) {
+        if (previousFrame != null) {
+            String text = previousFrame.getToolTipText();
+            if (text != null && text.length() > 0) {
+                return NLS.bind(FrameListMessages.Back_toolTipOneArg, text);
+            }
+        }
+        return FrameListMessages.Back_toolTip;
+    }
+
+    /**
+     * Calls <code>back()</code> on the frame list.
+     */
+    public void run() {
+        getFrameList().back();
+    }
+
+    /**
+     * Updates this action's enabled state and tool tip text.
+     * This action is enabled only when there is a previous frame in the frame list.
+     * The tool tip text is "Back to " plus the tool tip text for the previous frame.
+     */
+    public void update() {
+        super.update();
+        Frame previousFrame = getPreviousFrame();
+        setEnabled(previousFrame != null);
+        setToolTipText(getToolTipText(previousFrame));
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/ForwardAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/ForwardAction.java
new file mode 100755
index 0000000..7fe27a8
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/ForwardAction.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Generic "Forward" action which goes forward one frame.
+ * @since 3.4
+ */
+public class ForwardAction extends FrameAction {
+
+	private static final String ID = "org.eclipse.ui.framelist.forward"; //$NON-NLS-1$
+
+	/**
+     * Constructs a new action for the specified frame list.
+     * 
+     * @param frameList the frame list
+     */
+    public ForwardAction(FrameList frameList) {
+        super(frameList);
+        setId(ID);
+        setText(FrameListMessages.Forward_text);
+        ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
+        setImageDescriptor(images
+                .getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD));
+        setDisabledImageDescriptor(images
+                .getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD_DISABLED));
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+				IFrameListHelpContextIds.FORWARD_ACTION);
+        update();
+    }
+
+    private Frame getNextFrame() {
+        FrameList list = getFrameList();
+        return list.getFrame(list.getCurrentIndex() + 1);
+    }
+
+    private String getToolTipText(Frame nextFrame) {
+        if (nextFrame != null) {
+            String text = nextFrame.getToolTipText();
+            if (text != null && text.length() > 0) {
+                return NLS.bind(FrameListMessages.Forward_toolTipOneArg, text);
+            }
+        }
+        return FrameListMessages.Forward_toolTip;
+    }
+
+    /**
+     * Calls <code>forward()</code> on the frame list.
+     */
+    public void run() {
+        getFrameList().forward();
+    }
+
+    /**
+     * Updates this action's enabled state and tool tip text.
+     * This action is enabled only when there is a next frame in the frame list.
+     * The tool tip text is "Forward to " plus the tool tip text for the next
+     * frame.
+     */
+    public void update() {
+        super.update();
+        Frame nextFrame = getNextFrame();
+        setEnabled(nextFrame != null);
+        setToolTipText(getToolTipText(nextFrame));
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/Frame.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/Frame.java
new file mode 100755
index 0000000..ecc00c8
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/Frame.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+/**
+ * Generic frame, which captures the state for one frame in the frame list.
+ * Clients may subclass this frame to add their own state.
+ * @since 3.4
+ */
+public class Frame {
+
+    private int index = -1;
+
+    private FrameList parent;
+
+    private String name = ""; //$NON-NLS-1$
+
+    private String toolTipText;
+
+    /**
+     * Constructs a new frame. <p>
+     * 
+     * This implementation does nothing.
+     */
+    public Frame() {
+    }
+
+    /**
+     * Returns the index of the frame in the frame list.
+     * Only valid once the frame has been added to the frame list.
+     * 
+     * @return the index of the frame in the frame list.
+     */
+    public int getIndex() {
+        return index;
+    }
+
+    /**
+     * Returns the displayable name for the frame.
+     *
+     * @return the displayable name for the frame.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Returns the frame list.
+     * 
+     * @return the frame list
+     */
+    public FrameList getParent() {
+        return parent;
+    }
+
+    /**
+     * Returns the tool tip text to show for the frame.
+     * This can form part of the tool tip for actions like the back and forward
+     * actions.
+     * 
+     * @return the tool tip text to show for the frame
+     */
+    public String getToolTipText() {
+        return toolTipText;
+    }
+
+    /**
+     * Sets the index of the frame in the frame list.
+     * Should only be called by the frame list.
+     * 
+     * @param index the index of the frame in the frame list
+     */
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    /**
+     * Sets the displayable name for the frame.
+     * 
+     * @param name the displayable name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Sets the frame list.
+     * 
+     * @param parent the frame list
+     */
+    public void setParent(FrameList parent) {
+        this.parent = parent;
+    }
+
+    /**
+     * Sets the tool tip text to show for the frame.
+     * This can form part of the tool tip for actions like the back and forward
+     * actions.
+     * 
+     * @param toolTipText the tool tip text to show for the frame.
+     */
+    public void setToolTipText(String toolTipText) {
+        this.toolTipText = toolTipText;
+    }
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameAction.java
new file mode 100755
index 0000000..3a4821b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameAction.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+/**
+ * Abstract superclass for actions dealing with frames or a frame list.
+ * This listens for changes to the frame list and updates itself
+ * accordingly.
+ * @since 3.4
+ */
+public abstract class FrameAction extends Action {
+    private FrameList frameList;
+	
+    private IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
+        public void propertyChange(PropertyChangeEvent event) {
+            FrameAction.this.handlePropertyChange(event);
+        }
+    };
+
+    /**
+     * Constructs a new action for the specified frame list.
+     * and adds a property change listener on it.
+     * 
+     * @param frameList the frame list
+     */
+    protected FrameAction(FrameList frameList) {
+        this.frameList = frameList;
+        frameList.addPropertyChangeListener(propertyChangeListener);
+    }
+
+    /**
+     * Disposes this frame action.
+     * This implementation removes the property change listener from the frame list.
+     */
+    public void dispose() {
+        frameList.removePropertyChangeListener(propertyChangeListener);
+    }
+
+    /**
+     * Returns the frame list.
+     * @return a FrameList
+     */
+    public FrameList getFrameList() {
+        return frameList;
+    }
+
+    /**
+     * Handles a property change event from the frame list.
+     * This implementation calls <code>update()</code>.
+     * @param event 
+     */
+    protected void handlePropertyChange(PropertyChangeEvent event) {
+        update();
+    }
+
+    /**
+     * Updates this action.  This implementation does nothing.
+     * Most implementations will override this method.
+     */
+    public void update() {
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameList.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameList.java
new file mode 100755
index 0000000..e8b5bd4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameList.java
@@ -0,0 +1,243 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+/**
+ * Supports a web-browser style of navigation by maintaining a list
+ * of frames.  Each frame holds a snapshot of a view at some point 
+ * in time.
+ * <p>
+ * The frame list obtains a snapshot of the current frame from a frame source
+ * on creation, and whenever switching to a different frame.
+ * </p>
+ * <p>
+ * A property change notification is sent whenever the current page changes.
+ * </p>
+ * @since 3.4
+ */
+public class FrameList extends EventManager {
+
+    /** Property name constant for the current frame. */
+    public static final String P_CURRENT_FRAME = "currentFrame"; //$NON-NLS-1$
+
+    /** Property name constant for the reset. */
+    public static final String P_RESET = "reset"; //$NON-NLS-1$
+
+    private IFrameSource source;
+
+    private List frames;
+
+    private int current;
+
+    /**
+     * Creates a new frame list with the given source.
+     *
+     * @param source the frame source
+     */
+    public FrameList(IFrameSource source) {
+        this.source = source;
+        init();
+    }
+
+    /**
+     * Adds a property change listener.
+     * Has no effect if an identical listener is already registered.
+     *
+     * @param listener a property change listener
+     */
+    public void addPropertyChangeListener(IPropertyChangeListener listener) {
+    	addListenerObject(listener);
+    }
+
+    /**
+     * Moves the frame pointer back by one.
+     * Has no effect if there is no frame before the current one.
+     * Fires a <code>P_CURRENT_FRAME</code> property change event.
+     */
+    public void back() {
+        if (current > 0) {
+            setCurrent(current - 1);
+        }
+    }
+
+    /**
+     * Notifies any property change listeners that a property has changed.
+     * Only listeners registered at the time this method is called are notified.
+     *
+     * @param event the property change event
+     *
+     * @see IPropertyChangeListener#propertyChange
+     */
+    protected void firePropertyChange(PropertyChangeEvent event) {
+        Object[] listeners = getListeners();
+        for (int i = 0; i < listeners.length; ++i) {
+            ((IPropertyChangeListener) listeners[i]).propertyChange(event);
+        }
+    }
+
+    /**
+     * Moves the frame pointer forward by one.
+     * Has no effect if there is no frame after the current one.
+     * Fires a <code>P_CURRENT_FRAME</code> property change event.
+     */
+    public void forward() {
+        if (current < frames.size() - 1) {
+            setCurrent(current + 1);
+        }
+    }
+
+    /**
+     * Returns the current frame.
+     * Returns <code>null</code> if there is no current frame.
+     *
+     * @return the current frame, or <code>null</code>
+     */
+    public Frame getCurrentFrame() {
+        return getFrame(current);
+    }
+
+    /**
+     * Returns the index of the current frame.
+     *
+     * @return the index of the current frame
+     */
+    public int getCurrentIndex() {
+        return current;
+    }
+
+    /**
+     * Returns the frame at the given index, or <code>null</code>
+     * if the index is &le; 0 or &ge; <code>size()</code>.
+     *
+     * @param index the index of the requested frame
+     * @return the frame at the given index or <code>null</code>
+     */
+    public Frame getFrame(int index) {
+        if (index < 0 || index >= frames.size()) {
+			return null;
+		}
+        return (Frame) frames.get(index);
+    }
+
+    /**
+     * Returns the frame source.
+     * @return an IFrameSource
+     */
+    public IFrameSource getSource() {
+        return source;
+    }
+
+    /**
+     * Adds the given frame after the current frame,
+     * and advances the pointer to the new frame.
+     * Before doing so, updates the current frame, and removes any frames following the current frame.
+     * Fires a <code>P_CURRENT_FRAME</code> property change event.
+     *
+     * @param frame the frame to add
+     */
+    public void gotoFrame(Frame frame) {
+        for (int i = frames.size(); --i > current;) {
+            frames.remove(i);
+        }
+        frame.setParent(this);
+        int index = frames.size();
+        frame.setIndex(index);
+        frames.add(frame);
+        setCurrent(index);
+    }
+
+    private void init() {
+        Frame frame = source.getFrame(IFrameSource.CURRENT_FRAME, 0);
+        frame.setParent(this);
+        frame.setIndex(0);
+        frames = new ArrayList();
+        frames.add(frame);
+        current = 0;
+    }
+    /**
+     * Removes a property change listener.
+     * Has no effect if an identical listener is not registered.
+     *
+     * @param listener a property change listener
+     */
+    public void removePropertyChangeListener(IPropertyChangeListener listener) {
+        removeListenerObject(listener);
+    }
+
+    /**
+     * Reset this frame list to its initial state.
+     */
+    public void reset() {
+    	init();
+        firePropertyChange(new PropertyChangeEvent(this, P_RESET,
+                null, getFrame(current)));
+    }
+    
+    /**
+     * Sets the current frame to the one with the given index.
+     * Updates the old current frame, and fires a <code>P_CURRENT_FRAME</code> property change event
+     * if the current frame changes.
+     *
+     * @param newCurrent the index of the frame
+     */
+    void setCurrent(int newCurrent) {
+        Assert.isTrue(newCurrent >= 0 && newCurrent < frames.size());
+        int oldCurrent = this.current;
+        if (oldCurrent != newCurrent) {
+            updateCurrentFrame();
+            this.current = newCurrent;
+            firePropertyChange(new PropertyChangeEvent(this, P_CURRENT_FRAME,
+                    getFrame(oldCurrent), getFrame(newCurrent)));
+        }
+    }
+
+    /**
+     * Sets the current frame to the frame with the given index.
+     * Fires a <code>P_CURRENT_FRAME</code> property change event
+     * if the current frame changes.
+     * @param index 
+     */
+    public void setCurrentIndex(int index) {
+        if (index != -1 && index != current) {
+			setCurrent(index);
+		}
+    }
+
+    /**
+     * Returns the number of frames in the frame list.
+     * @return the number of frames.  
+     */
+    public int size() {
+        return frames.size();
+    }
+
+    /**
+     * Replaces the current frame in this list with the current frame 
+     * from the frame source.  No event is fired.
+     */
+    public void updateCurrentFrame() {
+        Assert.isTrue(current >= 0);
+        Frame frame = source.getFrame(IFrameSource.CURRENT_FRAME,
+                IFrameSource.FULL_CONTEXT);
+        frame.setParent(this);
+        frame.setIndex(current);
+        frames.set(current, frame);
+    }
+    
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameListMessages.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameListMessages.java
new file mode 100755
index 0000000..56f1d45
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameListMessages.java
@@ -0,0 +1,39 @@
+/**********************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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: 
+ * IBM - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.osgi.util.NLS;
+
+class FrameListMessages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.ui.internal.navigator.framelist.messages";//$NON-NLS-1$
+
+	// ==============================================================================
+	// FrameList
+	// ==============================================================================
+	public static String Back_text;
+	public static String Back_toolTip;
+	public static String Back_toolTipOneArg;
+
+	public static String Forward_text;
+	public static String Forward_toolTip;
+	public static String Forward_toolTipOneArg;
+
+	public static String GoInto_text;
+	public static String GoInto_toolTip;
+
+	public static String Up_text;
+	public static String Up_toolTip;
+	public static String Up_toolTipOneArg;
+
+	static {
+		// load message values from bundle file
+		NLS.initializeMessages(BUNDLE_NAME, FrameListMessages.class);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/GoIntoAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/GoIntoAction.java
new file mode 100755
index 0000000..30100ef
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/GoIntoAction.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Generic "Go Into" action which goes to the frame for the current selection. 
+ * @since 3.4
+ */
+public class GoIntoAction extends FrameAction {
+
+	private static final String ID = "org.eclipse.ui.framelist.goInto"; //$NON-NLS-1$
+
+	/**
+     * Constructs a new action for the specified frame list.
+     * 
+     * @param frameList the frame list
+     */
+    public GoIntoAction(FrameList frameList) {
+        super(frameList);
+        setId(ID);
+        setText(FrameListMessages.GoInto_text);
+        setToolTipText(FrameListMessages.GoInto_toolTip);
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+				IFrameListHelpContextIds.GO_INTO_ACTION);
+        update();
+    }
+
+    private Frame getSelectionFrame(int flags) {
+        return getFrameList().getSource().getFrame(
+                IFrameSource.SELECTION_FRAME, flags);
+    }
+
+    /**
+     * Calls <code>gotoFrame</code> on the frame list with a frame
+     * representing the currently selected container.
+     */
+    public void run() {
+        Frame selectionFrame = getSelectionFrame(IFrameSource.FULL_CONTEXT);
+        if (selectionFrame != null) {
+            getFrameList().gotoFrame(selectionFrame);
+        }
+    }
+
+    /**
+     * Updates this action's enabled state.
+     * This action is enabled only when there is a frame for the current selection.
+     */
+    public void update() {
+        super.update();
+        Frame selectionFrame = getSelectionFrame(0);
+        setEnabled(selectionFrame != null);
+    }
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameListHelpContextIds.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameListHelpContextIds.java
new file mode 100755
index 0000000..6511ba9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameListHelpContextIds.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Help context ids for the frame list.
+ * <p>
+ * This interface contains constants only; it is not intended to be implemented
+ * or extended.
+ * </p>
+ * 
+ */
+/*package*/interface IFrameListHelpContextIds {
+    public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
+
+    // Actions
+    public static final String BACK_ACTION = PREFIX + "back_action_context"; //$NON-NLS-1$
+
+    public static final String FORWARD_ACTION = PREFIX
+            + "forward_action_context"; //$NON-NLS-1$
+
+    public static final String GO_INTO_ACTION = PREFIX
+            + "go_into_action_context"; //$NON-NLS-1$
+
+    public static final String UP_ACTION = PREFIX + "up_action_context"; //$NON-NLS-1$
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameSource.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameSource.java
new file mode 100755
index 0000000..5c43f32
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameSource.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+/**
+ * A frame source is the source of frames which appear in a frame list.
+ * The frame list asks for the current frame whenever it switches
+ * to another frame, so that the context can be restored when the
+ * frame becomes current again.
+ *
+ * @see FrameList
+ * @since 3.4
+ */
+public interface IFrameSource {
+
+    /**
+     * Frame constant indicating the current frame.
+     */
+    public static final int CURRENT_FRAME = 0x0001;
+
+    /**
+     * Frame constant indicating the frame for the selection.
+     */
+    public static final int SELECTION_FRAME = 0x0002;
+
+    /**
+     * Frame constant indicating the parent frame.
+     */
+    public static final int PARENT_FRAME = 0x0003;
+
+    /**
+     * Flag constant indicating that the full context should be captured.
+     */
+    public static final int FULL_CONTEXT = 0x0001;
+
+    /**
+     * Returns a new frame describing the state of the source.
+     * If the <code>FULL_CONTEXT</code> flag is specified, then the full
+     * context of the source should be captured by the frame.
+     * Otherwise, only the visible aspects of the frame, such as the name and tool tip text,
+     * will be used.
+     *
+     * @param whichFrame one of the frame constants defined in this interface
+     * @param flags a bit-wise OR of the flag constants defined in this interface
+     * @return a new frame describing the current state of the source
+     */
+    public Frame getFrame(int whichFrame, int flags);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/README b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/README
new file mode 100755
index 0000000..06099ab
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/README
@@ -0,0 +1,10 @@
+This is copied from the org.eclipse.ui.views.framelist package in the org.eclipse.ui.ide plugin.
+
+This was necessary because the CNF cannot depend on the ide plugin.
+
+This is nearly identical to the IDE version, the following are differences:
+
+1) Fixed compile warnings
+2) Each action gets an Id which allows it to be removed by Id.
+
+15 Jan 09 FRU
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeFrame.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeFrame.java
new file mode 100755
index 0000000..ca19c78
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeFrame.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IElementFactory;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Frame for tree viewers.  This capture the viewer's input element, selection,
+ * and expanded elements.
+ * @since 3.4
+ */
+public class TreeFrame extends Frame {
+    private static final String TAG_SELECTION = "selection"; //$NON-NLS-1$
+
+    private static final String TAG_EXPANDED = "expanded"; //$NON-NLS-1$
+
+    private static final String TAG_ELEMENT = "element"; //$NON-NLS-1$
+
+    private static final String TAG_FRAME_INPUT = "frameInput"; //$NON-NLS-1$
+
+    private static final String TAG_FACTORY_ID = "factoryID"; //$NON-NLS-1$
+
+    private AbstractTreeViewer viewer;
+
+    private Object input;
+
+    private ISelection selection;
+
+    private Object[] expandedElements;
+
+    /**
+     * Constructs a frame for the specified tree viewer.
+     * The frame's input, name and tool tip text are not set.
+     * 
+     * @param viewer the tree viewer
+     */
+    public TreeFrame(AbstractTreeViewer viewer) {
+        this.viewer = viewer;
+    }
+
+    /**
+     * Constructs a frame for the specified tree viewer.
+     * The frame's input element is set to the specified input element.
+     * The frame's name and tool tip text are set to the text for the input 
+     * element, as provided by the viewer's label provider.
+     * 
+     * @param viewer the tree viewer
+     * @param input the input element
+     */
+    public TreeFrame(AbstractTreeViewer viewer, Object input) {
+        this(viewer);
+        setInput(input);
+        ILabelProvider provider = (ILabelProvider) viewer.getLabelProvider();
+        String name = provider.getText(input);
+        if(name == null) {
+			name = "";//$NON-NLS-1$
+		}
+        setName(name);
+        setToolTipText(name);
+    }
+
+    /**
+     * Returns the expanded elements.
+     * 
+     * @return the expanded elements
+     */
+    public Object[] getExpandedElements() {
+        return expandedElements;
+    }
+
+    /**
+     * Returns the input element.
+     * 
+     * @return the input element
+     */
+    public Object getInput() {
+        return input;
+    }
+
+    /**
+     * Returns the selection.
+     * 
+     * @return the selection
+     */
+    public ISelection getSelection() {
+        return selection;
+    }
+
+    /**
+     * Returns the tree viewer.
+     * 
+     * @return the tree viewer
+     */
+    public AbstractTreeViewer getViewer() {
+        return viewer;
+    }
+
+    /**
+     * Restore IPersistableElements from the specified memento.
+     * 
+     * @param memento memento to restore elements from
+     * @return list of restored elements. May be empty.
+     */
+    private List restoreElements(IMemento memento) {
+        IMemento[] elementMem = memento.getChildren(TAG_ELEMENT);
+        List elements = new ArrayList(elementMem.length);
+
+        for (int i = 0; i < elementMem.length; i++) {
+            String factoryID = elementMem[i].getString(TAG_FACTORY_ID);
+            if (factoryID != null) {
+                IElementFactory factory = PlatformUI.getWorkbench()
+                        .getElementFactory(factoryID);
+                if (factory != null) {
+					elements.add(factory.createElement(elementMem[i]));
+				}
+            }
+        }
+        return elements;
+    }
+
+    /**
+     * Restore the frame from the specified memento.
+     * 
+     * @param memento memento to restore frame from
+     */
+    public void restoreState(IMemento memento) {
+        IMemento childMem = memento.getChild(TAG_FRAME_INPUT);
+
+        if (childMem == null) {
+			return;
+		}
+
+        String factoryID = childMem.getString(TAG_FACTORY_ID);
+        IAdaptable frameInput = null;
+        if (factoryID != null) {
+            IElementFactory factory = PlatformUI.getWorkbench()
+                    .getElementFactory(factoryID);
+            if (factory != null) {
+				frameInput = factory.createElement(childMem);
+			}
+        }
+        if (frameInput != null) {
+            input = frameInput;
+        }
+        IMemento expandedMem = memento.getChild(TAG_EXPANDED);
+        if (expandedMem != null) {
+            List elements = restoreElements(expandedMem);
+            expandedElements = elements.toArray(new Object[elements.size()]);
+        } else {
+            expandedElements = new Object[0];
+        }
+        IMemento selectionMem = memento.getChild(TAG_SELECTION);
+        if (selectionMem != null) {
+            List elements = restoreElements(selectionMem);
+            selection = new StructuredSelection(elements);
+        } else {
+            selection = StructuredSelection.EMPTY;
+        }
+    }
+
+    /**
+     * Save the specified elements to the given memento.
+     * The elements have to be adaptable to IPersistableElement.
+     * 
+     * @param elements elements to persist
+     * @param memento memento to persist elements in
+     */
+    private void saveElements(Object[] elements, IMemento memento) {
+        for (int i = 0; i < elements.length; i++) {
+            if (elements[i] instanceof IAdaptable) {
+                IPersistableElement persistable = (IPersistableElement) ((IAdaptable) elements[i])
+                        .getAdapter(IPersistableElement.class);
+                if (persistable != null) {
+                    IMemento elementMem = memento.createChild(TAG_ELEMENT);
+                    elementMem.putString(TAG_FACTORY_ID, persistable
+                            .getFactoryId());
+                    persistable.saveState(elementMem);
+                }
+            }
+        }
+    }
+
+    /**
+     * Save the frame state in the given memento.
+     * 
+     * @param memento memento to persist the frame state in.
+     */
+    public void saveState(IMemento memento) {
+        if (!(input instanceof IAdaptable)) {
+			return;
+		}
+
+        IPersistableElement persistable = (IPersistableElement) ((IAdaptable) input)
+                .getAdapter(IPersistableElement.class);
+        if (persistable != null) {
+            IMemento frameMemento = memento.createChild(TAG_FRAME_INPUT);
+
+            frameMemento.putString(TAG_FACTORY_ID, persistable.getFactoryId());
+            persistable.saveState(frameMemento);
+
+            if (expandedElements.length > 0) {
+                IMemento expandedMem = memento.createChild(TAG_EXPANDED);
+                saveElements(expandedElements, expandedMem);
+            }
+            // always IStructuredSelection since we only deal with tree viewers
+            if (selection instanceof IStructuredSelection) {
+                Object[] elements = ((IStructuredSelection) selection)
+                        .toArray();
+                if (elements.length > 0) {
+                    IMemento selectionMem = memento.createChild(TAG_SELECTION);
+                    saveElements(elements, selectionMem);
+                }
+            }
+        }
+    }
+
+    /**
+     * Sets the input element.
+     * 
+     * @param input the input element
+     */
+    public void setInput(Object input) {
+        this.input = input;
+    }
+
+    /**
+     * Sets the expanded elements.
+     * 
+     * @param expandedElements the expanded elements
+     */
+    public void setExpandedElements(Object[] expandedElements) {
+        this.expandedElements = expandedElements;
+    }
+
+    /**
+     * Sets the selection.
+     * 
+     * @param selection the selection
+     */
+    public void setSelection(ISelection selection) {
+        this.selection = selection;
+    }
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeViewerFrameSource.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeViewerFrameSource.java
new file mode 100755
index 0000000..376b303
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeViewerFrameSource.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/** 
+ * Frame source for tree viewers, which uses <code>TreeFrame</code> to capture
+ * the state of the tree viewer.
+ * 
+ * @see TreeFrame
+ * @since 3.4
+ */
+public class TreeViewerFrameSource implements IFrameSource {
+
+    private AbstractTreeViewer viewer;
+
+    /**
+     * Constructs a new tree viewer frame source for the specified tree viewer.
+     * 
+     * @param viewer the tree viewer
+     */
+    public TreeViewerFrameSource(AbstractTreeViewer viewer) {
+        this.viewer = viewer;
+    }
+
+    /**
+     * Connects this source as a listener on the frame list,
+     * so that when the current frame changes, the viewer is updated.
+     * @param frameList 
+     */
+    public void connectTo(FrameList frameList) {
+        frameList.addPropertyChangeListener(new IPropertyChangeListener() {
+            public void propertyChange(PropertyChangeEvent event) {
+                TreeViewerFrameSource.this.handlePropertyChange(event);
+            }
+        });
+    }
+
+    /**
+     * Returns a new tree frame capturing the specified input element.
+     * 
+     * @param input the input element
+     * @return the tree frame
+     */
+    protected TreeFrame createFrame(Object input) {
+        return new TreeFrame(viewer, input);
+    }
+
+    /**
+     * Updates the viewer in response to the current frame changing.
+     * 
+     * @param frame the new value for the current frame
+     */
+    protected void frameChanged(TreeFrame frame) {
+        viewer.getControl().setRedraw(false);
+        viewer.setInput(frame.getInput());
+        if (frame.getExpandedElements() != null)
+        	viewer.setExpandedElements(frame.getExpandedElements());
+        viewer.setSelection(frame.getSelection(), true);
+        viewer.getControl().setRedraw(true);
+    }
+
+    /**
+     * Returns the current frame.
+     * 
+     * @param flags a bit-wise OR of the frame source flag constants
+     * @return the current frame
+     */
+    protected Frame getCurrentFrame(int flags) {
+        Object input = viewer.getInput();
+        TreeFrame frame = createFrame(input);
+        if ((flags & IFrameSource.FULL_CONTEXT) != 0) {
+            frame.setSelection(viewer.getSelection());
+            frame.setExpandedElements(viewer.getExpandedElements());
+        }
+        return frame;
+    }
+
+    /* (non-Javadoc)
+     * Method declared on IFrameSource.
+     */
+    public Frame getFrame(int whichFrame, int flags) {
+        switch (whichFrame) {
+        case IFrameSource.CURRENT_FRAME:
+            return getCurrentFrame(flags);
+        case IFrameSource.PARENT_FRAME:
+            return getParentFrame(flags);
+        case IFrameSource.SELECTION_FRAME:
+            return getSelectionFrame(flags);
+        default:
+            return null;
+        }
+    }
+
+    /**
+     * Returns the parent frame, or <code>null</code> if there is no parent frame.
+     * 
+     * @param flags a bit-wise OR of the frame source flag constants
+     * @return the parent frame, or <code>null</code>
+     */
+    protected Frame getParentFrame(int flags) {
+        Object input = viewer.getInput();
+        ITreeContentProvider provider = (ITreeContentProvider) viewer
+                .getContentProvider();
+        Object parent = provider.getParent(input);
+        if (parent == null) 
+            return null;
+		TreeFrame frame = createFrame(parent);
+		if ((flags & IFrameSource.FULL_CONTEXT) != 0) {
+			frame.setSelection(viewer.getSelection());
+			// include current input in expanded set
+			Object[] expanded = viewer.getExpandedElements();
+			Object[] newExpanded = new Object[expanded.length + 1];
+			System.arraycopy(expanded, 0, newExpanded, 0, expanded.length);
+			newExpanded[newExpanded.length - 1] = input;
+			frame.setExpandedElements(newExpanded);
+		}
+		return frame;
+    }
+
+    /**
+     * Returns the frame for the selection, or <code>null</code> if there is no
+     * frame for the selection.
+     * 
+     * @param flags a bit-wise OR of the frame source flag constants
+     * @return the selection frame, or <code>null</code>
+     */
+    protected Frame getSelectionFrame(int flags) {
+        IStructuredSelection sel = (IStructuredSelection) viewer.getSelection();
+        if (sel.size() == 1) {
+            Object o = sel.getFirstElement();
+            if (viewer.isExpandable(o)) {
+                TreeFrame frame = createFrame(o);
+                if ((flags & IFrameSource.FULL_CONTEXT) != 0) {
+                    frame.setSelection(viewer.getSelection());
+                    frame.setExpandedElements(viewer.getExpandedElements());
+                }
+                return frame;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the tree viewer.
+     * 
+     * @return the tree viewer
+     */
+    public AbstractTreeViewer getViewer() {
+        return viewer;
+    }
+
+    /**
+     * Handles a property change event from the frame list.
+     * Calls <code>frameChanged</code> when the current frame changes.
+     */
+    protected void handlePropertyChange(PropertyChangeEvent event) {
+        if (FrameList.P_CURRENT_FRAME.equals(event.getProperty())) {
+            frameChanged((TreeFrame) event.getNewValue());
+        }
+    }
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/UpAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/UpAction.java
new file mode 100755
index 0000000..277743d
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/UpAction.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.framelist;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Generic "Up" action which goes to the parent frame for the current frame.
+ * @since 3.4
+ */
+public class UpAction extends FrameAction {
+
+	private static final String ID = "org.eclipse.ui.framelist.up"; //$NON-NLS-1$
+
+	/**
+     * Constructs a new action for the specified frame list.
+     * 
+     * @param frameList the frame list
+     */
+    public UpAction(FrameList frameList) {
+        super(frameList);
+        setId(ID);
+        setText(FrameListMessages.Up_text);
+        ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
+        setImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_UP));
+        setDisabledImageDescriptor(images
+                .getImageDescriptor(ISharedImages.IMG_TOOL_UP_DISABLED));
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
+				IFrameListHelpContextIds.UP_ACTION);
+        update();
+    }
+
+    Frame getParentFrame(int flags) {
+        return getFrameList().getSource().getFrame(IFrameSource.PARENT_FRAME,
+                flags);
+    }
+
+    String getToolTipText(Frame parentFrame) {
+        if (parentFrame != null) {
+            String text = parentFrame.getToolTipText();
+            if (text != null && text.length() > 0) {
+                return NLS.bind(FrameListMessages.Up_toolTipOneArg, text);
+            }
+        }
+        return FrameListMessages.Up_toolTip;
+
+    }
+
+    /**
+     * Calls <code>gotoFrame</code> on the frame list with a frame
+     * representing the parent of the current input.
+     */
+    public void run() {
+        Frame parentFrame = getParentFrame(IFrameSource.FULL_CONTEXT);
+        if (parentFrame != null) {
+            getFrameList().gotoFrame(parentFrame);
+        }
+    }
+
+    /**
+     * Updates this action's enabled state and tool tip text.
+     * This action is enabled only when there is a parent frame for the current
+     * frame in the frame list.
+     * The tool tip text is "Up to " plus the tool tip text for the parent
+     * frame.
+     */
+    public void update() {
+        super.update();
+        Frame parentFrame = getParentFrame(0);
+        setEnabled(parentFrame != null);
+        setToolTipText(getToolTipText(parentFrame));
+    }
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/messages.properties b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/messages.properties
new file mode 100755
index 0000000..23dfb91
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/messages.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# Copyright (c) 2000, 2009 IBM Corporation 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+# package: org.eclipse.ui.internal.navigator.framelist
+
+
+# ==============================================================================
+# FrameList
+# ==============================================================================
+Back_text = &Back
+Back_toolTip = Back
+Back_toolTipOneArg = Back to {0}
+
+Forward_text = &Forward
+Forward_toolTip = Forward
+Forward_toolTipOneArg = Forward to {0}
+
+GoInto_text = Go &Into
+GoInto_toolTip = Go Into
+
+Up_text = &Up One Level
+Up_toolTip = Up
+Up_toolTipOneArg = Up to {0}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/package.html b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/package.html
new file mode 100755
index 0000000..91c8565
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/package.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="IBM">
+   <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+   <title>Package-level Javadoc</title>
+</head>
+<body>
+<p>Provides support for a web-browser style of navigation within a view by maintaining a list
+of frames.  Each frame holds a snapshot of a view at some point in time.
+Includes support for use with a tree viewer.</p>
+<p>
+<br>&nbsp;</p>
+</body>
+</html>
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/messages.properties b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/messages.properties
new file mode 100755
index 0000000..fcf5eed
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/messages.properties
@@ -0,0 +1,47 @@
+###############################################################################
+# Copyright (c) 2005, 2010 IBM Corporation 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+#String externalization, key=value
+#Thu Feb 02 14:22:56 EST 2006
+CommonFilterSelectionDialog_Available_customization_=Available Customizations
+CommonSorterDescriptorManager_A_navigatorContent_extension_does_n_=A navigatorContent extension does not exist with id\: {0} in plugin {1}
+
+Delete=Delete
+Exception_Invoking_Extension=An exception occurred invoking extension\: {0} for object {1}
+NewProjectWizard_errorTitle=New Project Problems
+Link_With_Editor_Job_=Linking viewer selection with current editor   
+Navigator_statusLineMultiSelect={0} items selected
+SelectFiltersActionDelegate_1=Select and deselect filters to apply to the content in the tree
+CommonFilterSelectionDialog_Select_the_available_extensions=Select the available extensions to show (unchecked extensions will not display content)\:
+SelectFiltersActionDelegate_0=&Customize View...
+CollapseAllActionDelegate_0=Collapse All 
+Too_many_elements_Warning=Too many elements of type\: {0} in extension "{1}" defined in bundle "{2}".
+NewProjectAction_text=P&roject...
+CommonFilterSelectionDialog_Available_Content=Content
+CommonFilterSelectionDialog_Hides_all_content_associated=Provides content from the "{0}" extension.
+Attribute_Missing_Warning=Missing attribute\: {0} in extension "{1}" defined in bundle "{2}".
+Open_action_label=Open
+TextAction_selectAll=Select All
+Paste=Paste 
+CommonFilterSelectionDialog_Available_Filters=Filters
+StructuredViewerManager_0=Refresh Common Viewer Tree
+LinkEditorActionDelegate_1=Link with Editor
+LinkEditorActionDelegate_0=&Link with Editor
+Copy=Copy 
+Cut=Cut
+NavigatorViewerDescriptor_Popup_Menu_Overridden=Warning\: popupMenuId of "{0}" was overridden\: old value \= "{1}", new value \= "{2}".
+CommonFilterSelectionDialog_Select_the_filters_to_apply=Select the filters to apply (matching items will be hidden)\:
+UpdateFiltersOperation_Update_CommonViewer_Filter_=Update CommonViewer Filters
+CommonFilterSelectionDialog_enter_name_of_filte_=enter name of filter
+CommonSorterDescriptorManager_A_navigatorContent_extesnion_in_0_=A navigatorContent extesnion in {0} is missing an id.
+FilterDialogSelectionListener_Enable_the_0_filter_=Enable the {0} filter.
+NavigatorContentServiceLabelProvider_Error_no_label_provider_for_0_=Error: no label provider for {0}
+CommonViewerSorter_NoContentExtensionForObject=Cannot find navigator content extension (using triggerPoints) for object "{0}" parent path: "{1}".  Check that you have an expression for this object in a navigatorContent triggerPoints or enablement.
+NavigatorContentService_problemSavingPreferences=Problem saving preferences.
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptor.java
new file mode 100755
index 0000000..29e02f2
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptor.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.sorters;
+
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.ui.internal.navigator.CustomAndExpression;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+
+/**
+ * 
+ * Describes a <b>commonSorter</b> element under a
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension.
+ * 
+ * @since 3.2
+ */
+public class CommonSorterDescriptor implements INavigatorContentExtPtConstants {
+
+	private IConfigurationElement element;
+
+	private Expression parentExpression;
+
+	private String id;
+
+	protected CommonSorterDescriptor(IConfigurationElement anElement) { 
+		element = anElement;
+		init();
+	}
+
+	private void init() {
+		id = element.getAttribute(ATT_ID);
+		if (id == null) {
+			id = ""; //$NON-NLS-1$
+		}
+		IConfigurationElement[] children = element
+				.getChildren(TAG_PARENT_EXPRESSION);
+		if (children.length == 1) {
+			parentExpression = new CustomAndExpression(children[0]);
+		}
+	}
+
+	/**
+	 * 
+	 * @return An identifier used to determine whether the sorter is visible.
+	 *         May not be unique.
+	 */
+	public String getId() {
+		return id;
+	}
+ 
+	/**
+	 * 
+	 * @param aParent
+	 *            An element from the viewer
+	 * @return True if and only if this CommonSorter can sort the children of
+	 *         the given parent.
+	 */
+	public boolean isEnabledForParent(Object aParent) {
+		if(aParent == null) {
+			return false;
+		}
+
+		if (parentExpression != null) {
+			IEvaluationContext context = NavigatorPlugin.getEvalContext(aParent);
+			return NavigatorPlugin.safeEvaluate(parentExpression, context) == EvaluationResult.TRUE;
+		}
+		return true;
+	}
+
+	/**
+	 * 
+	 * @return An instance of the ViewerSorter defined by the extension. Callers
+	 *         of this method are responsible for managing the instantiated
+	 *         filter.
+	 */
+	public ViewerSorter createSorter() {
+		final ViewerSorter[] sorter = new ViewerSorter[1];
+
+		SafeRunner.run(new NavigatorSafeRunnable(element) {
+			public void run() throws Exception {
+				sorter[0] = (ViewerSorter) element.createExecutableExtension(ATT_CLASS);
+			}
+		});
+		if (sorter[0] != null)
+			return sorter[0];
+		return SkeletonViewerSorter.INSTANCE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "CommonSorterDescriptor[" + getId() + "]"; //$NON-NLS-1$//$NON-NLS-2$
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptorManager.java
new file mode 100755
index 0000000..ab6d13a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptorManager.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.sorters;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+
+/**
+ * @since 3.2
+ * 
+ */
+public class CommonSorterDescriptorManager {
+
+	private static final CommonSorterDescriptorManager INSTANCE = new CommonSorterDescriptorManager();
+
+	private static final CommonSorterDescriptor[] NO_SORTER_DESCRIPTORS = new CommonSorterDescriptor[0];
+
+	private final Map sortersMap = new HashMap();
+	
+	/**
+	 * 
+	 * @return An initialized singleton instance of the
+	 *         CommonSorterDescriptorManager.
+	 */
+	public static CommonSorterDescriptorManager getInstance() {
+		return INSTANCE;
+	}
+
+	private CommonSorterDescriptorManager() {
+		new CommonSorterDescriptorRegistry().readRegistry();
+	}
+
+	/**
+	 * 
+	 * @param contentService
+	 *            A content service to filter the visible filters.
+	 * @param aParent
+	 *            The parent used to search for a sorter.
+	 * @return The set of filters that are 'visible' to the given viewer
+	 *         descriptor.
+	 */
+	public CommonSorterDescriptor[] findApplicableSorters(
+			NavigatorContentService contentService, Object aParent) {
+
+		INavigatorContentDescriptor sourceOfContribution = contentService
+				.getSourceOfContribution(aParent);
+		return findApplicableSorters(contentService, sourceOfContribution, aParent);
+	}
+
+	/**
+	 * 
+	 * @param aContentService
+	 *            A content service to filter the visible filters.
+	 * @param theSource
+	 *            The source of each *value.
+	 * @param aParent
+	 *            The parent used to search for a sorter.
+	 * @return The set of filters that are 'visible' to the given viewer
+	 *         descriptor.
+	 */
+	public CommonSorterDescriptor[] findApplicableSorters(
+			NavigatorContentService aContentService,
+			INavigatorContentDescriptor theSource, Object aParent) {
+
+		List applicableSorters = new ArrayList();
+
+		CommonSorterDescriptor descriptor;
+		Set sorters = getCommonSorters(theSource);
+		for (Iterator sortersItr = sorters.iterator(); sortersItr.hasNext();) {
+			descriptor = (CommonSorterDescriptor) sortersItr.next();
+			if (descriptor.isEnabledForParent(aParent)) {
+				applicableSorters.add(descriptor);
+			}
+		}
+		if (applicableSorters.size() == 0) {
+			return NO_SORTER_DESCRIPTORS;
+		}
+		return (CommonSorterDescriptor[]) applicableSorters
+				.toArray(new CommonSorterDescriptor[applicableSorters.size()]);
+	}
+	
+
+	/**
+	 * 
+	 * @param theSource
+	 *            The source of each *value. 
+	 * @return The set of filters that are 'visible' to the given viewer
+	 *         descriptor.
+	 */
+	public CommonSorterDescriptor[] findApplicableSorters(INavigatorContentDescriptor theSource) {
+  
+		Set sorters = getCommonSorters(theSource); 
+		if (sorters.size() == 0) {
+			return NO_SORTER_DESCRIPTORS;
+		}
+		return (CommonSorterDescriptor[]) sorters
+				.toArray(new CommonSorterDescriptor[sorters.size()]);
+	}
+
+	private class CommonSorterDescriptorRegistry extends
+			NavigatorContentRegistryReader {
+
+		private CommonSorterDescriptorRegistry() {
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
+		 */
+		protected boolean readElement(IConfigurationElement element) {
+
+			if (TAG_NAVIGATOR_CONTENT.equals(element.getName())) {
+				String id = element.getAttribute(ATT_ID);
+				if (id != null) {
+					NavigatorContentDescriptor contentDescriptor = CONTENT_DESCRIPTOR_MANAGER
+							.getContentDescriptor(id);
+					if (contentDescriptor != null) {
+						IConfigurationElement[] children = element
+								.getChildren(TAG_COMMON_SORTER);
+
+						if (children.length > 0) {
+							Set localSorters = getCommonSorters(contentDescriptor);
+							for (int i = 0; i < children.length; i++) {
+								localSorters.add(new CommonSorterDescriptor(
+										children[i]));
+							}
+							return true;
+						}
+					} else {
+						NavigatorPlugin
+								.logError(
+										0,
+										NLS
+												.bind(
+														CommonNavigatorMessages.CommonSorterDescriptorManager_A_navigatorContent_extension_does_n_,
+														new Object[] {
+																id,
+																element
+																		.getDeclaringExtension()
+																		.getNamespaceIdentifier() }),
+										null);
+					}
+				} else {
+					NavigatorPlugin
+							.logError(
+									0,
+									NLS
+											.bind(
+													CommonNavigatorMessages.CommonSorterDescriptorManager_A_navigatorContent_extesnion_in_0_,
+													element.getNamespaceIdentifier()),
+									null);
+				}
+			}
+			return super.readElement(element);
+		}
+
+	}
+
+	private Set getCommonSorters(INavigatorContentDescriptor contentDescriptor) {
+		Set descriptors = null;
+		synchronized (sortersMap) {
+			descriptors = (Set) sortersMap.get(contentDescriptor);
+			if (descriptors == null) {
+				sortersMap.put(contentDescriptor, descriptors = new HashSet());
+			}
+		}
+		return descriptors;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/NavigatorSorterService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/NavigatorSorterService.java
new file mode 100755
index 0000000..ef00ed3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/NavigatorSorterService.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.sorters;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager;
+import org.eclipse.ui.navigator.INavigatorContentDescriptor;
+import org.eclipse.ui.navigator.INavigatorSorterService;
+
+/**
+ * 
+ * Provides a default implementation of {@link INavigatorSorterService}.
+ * 
+ * @since 3.2
+ * 
+ */
+public class NavigatorSorterService implements INavigatorSorterService, VisibilityListener  {
+
+	private final NavigatorContentService contentService;
+
+	/* A map of (CommonSorterDescriptor, ViewerSorter)-pairs */
+	private final Map sorters = new HashMap();
+
+	private INavigatorContentDescriptor[] sortOnlyDescriptors;
+
+	/**
+	 * Create a sorter service attached to the given content service.
+	 * 
+	 * @param aContentService
+	 *            The content service used by the viewer that will use this
+	 *            sorter service.
+	 */
+	public NavigatorSorterService(NavigatorContentService aContentService) {
+		contentService = aContentService;
+		computeSortOnlyDescriptors();
+	}
+
+	private synchronized void computeSortOnlyDescriptors() {
+		INavigatorContentDescriptor[] allDescriptors;
+		allDescriptors = NavigatorContentDescriptorManager.getInstance().getSortOnlyContentDescriptors();
+		
+		List sortOnlyList = new ArrayList();
+		for (int i = 0; i < allDescriptors.length; i++) {
+			if (contentService.isActive(allDescriptors[i].getId())) {
+				sortOnlyList.add(allDescriptors[i]);
+			}
+		}
+		
+		sortOnlyDescriptors = (INavigatorContentDescriptor[]) sortOnlyList.toArray(new INavigatorContentDescriptor[]{});
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorSorterService#findSorterForParent(java.lang.Object)
+	 */
+	public ViewerSorter findSorterForParent(Object aParent) {
+
+		CommonSorterDescriptor[] descriptors = CommonSorterDescriptorManager
+				.getInstance().findApplicableSorters(contentService, aParent);
+		if (descriptors.length > 0) {
+			return getSorter(descriptors[0]);
+		}
+		return SkeletonViewerSorter.INSTANCE;
+	}
+
+	private ViewerSorter getSorter(CommonSorterDescriptor descriptor) {
+		ViewerSorter sorter = null;
+		synchronized (sorters) {
+			sorter = (ViewerSorter) sorters.get(descriptor);
+			if (sorter == null) {
+				sorters.put(descriptor, sorter = descriptor.createSorter());
+			}
+		}
+		return sorter;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.navigator.INavigatorSorterService#findSorterForParent(org.eclipse.ui.navigator.INavigatorContentDescriptor,
+	 *      java.lang.Object, java.lang.Object, java.lang.Object)
+	 */
+	public synchronized ViewerSorter findSorter(INavigatorContentDescriptor source, 
+			Object parent, Object lvalue, Object rvalue) { 
+		
+		CommonSorterDescriptorManager dm = CommonSorterDescriptorManager 
+				.getInstance();
+		CommonSorterDescriptor[] descriptors;
+		
+		INavigatorContentDescriptor lookupDesc;
+		for (int i = 0; i < sortOnlyDescriptors.length; i++) {
+			lookupDesc = sortOnlyDescriptors[i];
+			if (source!= null && source.getSequenceNumber() < lookupDesc.getSequenceNumber()) {
+				lookupDesc = source;
+				source = null;
+				i--;
+			}
+			descriptors = dm. findApplicableSorters(contentService, lookupDesc, parent);
+			if (descriptors.length > 0) {
+				return getSorter(descriptors[0]);
+			}
+		}
+		
+		if (source != null) {
+			descriptors = dm. findApplicableSorters(contentService, source, parent);
+			if (descriptors.length > 0) {
+				return getSorter(descriptors[0]);
+			}
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.navigator.INavigatorSorterService#findAvailableSorters(org.eclipse.ui.navigator.INavigatorContentDescriptor)
+	 */
+	public Map findAvailableSorters(INavigatorContentDescriptor theSource) {
+		
+		CommonSorterDescriptor[] descriptors = CommonSorterDescriptorManager.getInstance().findApplicableSorters(theSource);
+		Map sorters = new HashMap();
+
+		int count = 0;
+		for (int i = 0; i < descriptors.length; i++) {
+			if(descriptors[i].getId() != null && descriptors[i].getId().length() > 0)
+				sorters.put(descriptors[i].getId(), getSorter(descriptors[i]));
+			else 
+				sorters.put(theSource.getId()+".sorter."+ (++count), getSorter(descriptors[i])); //$NON-NLS-1$
+		}
+		return sorters;
+	} 
+
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener#onVisibilityOrActivationChange()
+	 */
+	public void onVisibilityOrActivationChange() {
+		computeSortOnlyDescriptors();
+	}
+	
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/SkeletonViewerSorter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/SkeletonViewerSorter.java
new file mode 100755
index 0000000..4082ab7
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/SkeletonViewerSorter.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.sorters;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * @since 3.2
+ *
+ */
+public class SkeletonViewerSorter extends ViewerSorter {
+
+	/** The singleton instance. */
+	public static final ViewerSorter INSTANCE = new SkeletonViewerSorter();
+	
+	private SkeletonViewerSorter() {}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptor.java
new file mode 100755
index 0000000..9eb0f3a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptor.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.navigator.wizards;
+
+import java.util.Iterator;
+
+import org.eclipse.core.expressions.ElementHandler;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants;
+
+/**
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is a guarantee neither that this API will
+ * work nor that it will remain the same. Please do not use this API without
+ * consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public class CommonWizardDescriptor implements INavigatorContentExtPtConstants, IPluginContribution {
+	
+	/** The default menu group id for commonWizards without a menuGroupId attribute. */
+	public static final String DEFAULT_MENU_GROUP_ID = "all-uncategorized"; //$NON-NLS-1$
+
+	private String id;
+	
+	private String wizardId;
+	
+	private String menuGroupId; 
+
+	private String type;
+
+	private Expression enablement;
+
+	private IConfigurationElement configElement;
+
+	/**
+	 * @param aConfigElement The configuration element from the extension point. 
+	 * @throws WorkbenchException
+	 *             if the configuration element could not be parsed. Reasons
+	 *             include:
+	 *             <ul>
+	 *             <li>A required attribute is missing.</li>
+	 *             <li>More elements are define than is allowed.</li>
+	 *             </ul>
+	 */
+	public CommonWizardDescriptor(IConfigurationElement aConfigElement)
+			throws WorkbenchException {
+		super();
+		configElement = aConfigElement;
+		init();
+	} 
+
+	/**
+	 * @param aConfigElement The configuration element from the extension point.
+	 * @param anId the identifier for visibility purposes.
+	 *  
+	 * @throws WorkbenchException
+	 *             if the configuration element could not be parsed. Reasons
+	 *             include:
+	 *             <ul>
+	 *             <li>A required attribute is missing.</li>
+	 *             <li>More elements are define than is allowed.</li>
+	 *             </ul>
+	 */
+	public CommonWizardDescriptor(IConfigurationElement aConfigElement, String anId)
+			throws WorkbenchException {
+		super();
+		configElement = aConfigElement;
+		id = anId;
+		init();
+		
+	}
+
+	/**
+	 * Determine if this content extension is enabled for the given selection.
+	 * The content extension is enabled for the selection if and only if it is
+	 * enabled for each element in the selection.
+	 * 
+	 * @param aStructuredSelection
+	 *            The selection from the viewer
+	 * @return True if and only if the extension is enabled for each element in
+	 *         the selection.
+	 */
+	public boolean isEnabledFor(IStructuredSelection aStructuredSelection) {
+		if (enablement == null) {
+			return false;
+		}
+
+		IEvaluationContext context = null;
+		IEvaluationContext parentContext = NavigatorPlugin.getApplicationContext();
+
+		Iterator elements = aStructuredSelection.iterator();
+		while (elements.hasNext()) {
+			context = new EvaluationContext(parentContext, elements.next());
+			context.setAllowPluginActivation(true);
+			if (NavigatorPlugin.safeEvaluate(enablement, context) == EvaluationResult.FALSE) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Determine if this content extension is enabled for the given element.
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension is enabled for the element.
+	 */
+	public boolean isEnabledFor(Object anElement) {
+		if (enablement == null) {
+			return false;
+		}
+
+		IEvaluationContext context = NavigatorPlugin.getEvalContext(anElement);
+		return (NavigatorPlugin.safeEvaluate(enablement, context) == EvaluationResult.TRUE);
+	}
+
+	void init() throws WorkbenchException { 
+		wizardId = configElement.getAttribute(ATT_WIZARD_ID);
+		type = configElement.getAttribute(ATT_TYPE);
+		
+		menuGroupId = configElement.getAttribute(ATT_MENU_GROUP_ID);
+		if(menuGroupId == null) {
+			menuGroupId = DEFAULT_MENU_GROUP_ID;
+		}
+		
+		/* 
+		 * The id defaults to the id of the enclosing navigatorContent extension, if any
+		 * If not enclosed, this can be null initially, so it will default to the 
+		 * value of the associatedExtensionId
+		 *  
+		 * Code elsewhere anticipates that this attribute may be null, so there is 
+		 * no need to set it to a default non-null value. Indeed, this will cause
+		 * incorrect behavior. 
+		 * */
+		if(id == null) {
+			id = configElement.getAttribute(ATT_ASSOCIATED_EXTENSION_ID);
+		}
+
+		if (wizardId == null || wizardId.length() == 0) {
+			throw new WorkbenchException("Missing attribute: " + //$NON-NLS-1$
+					ATT_WIZARD_ID + " in common wizard extension: " + //$NON-NLS-1$
+					configElement.getDeclaringExtension().getNamespaceIdentifier());
+		}
+
+		if (type == null || type.length() == 0) {
+			throw new WorkbenchException("Missing attribute: " + //$NON-NLS-1$
+					ATT_TYPE + " in common wizard extension: " + //$NON-NLS-1$
+					configElement.getDeclaringExtension().getNamespaceIdentifier());
+		}
+
+		IConfigurationElement[] children = configElement
+				.getChildren(TAG_ENABLEMENT);
+		if (children.length == 1) {
+			try {
+				enablement = ElementHandler.getDefault().create(
+						ExpressionConverter.getDefault(), children[0]);
+			} catch (CoreException e) {
+				NavigatorPlugin.log(IStatus.ERROR, 0, e.getMessage(), e);
+			}
+		} else if (children.length > 1) {
+			throw new WorkbenchException("More than one element: " + //$NON-NLS-1$
+					TAG_ENABLEMENT + " in common wizard extension: " + //$NON-NLS-1$
+					configElement.getDeclaringExtension().getUniqueIdentifier());
+		} 
+	}
+
+	/**
+	 * 
+	 * @return Returns the common wizard wizardId
+	 */
+	public String getWizardId() {
+		return wizardId;
+	}
+
+	/**
+	 * @return Returns the type.
+	 */
+	public String getType() {
+		return type;
+	}
+	
+	/**
+	 * @return the declaring namespace.
+	 */
+	public String getNamespace() {
+		return configElement.getDeclaringExtension().getNamespaceIdentifier(); 
+	}
+	
+	/**
+	 * 
+	 * @return The identifier of the wizard descriptor for visiblity purposes (or null) if none.
+	 */
+	public String getId() {
+		return id;
+	}
+	
+
+	/**
+	 * 
+	 * @return A developer-defined logical group that this wizard menu option and 
+	 * 	others like it should be rendered in a localized manner.
+	 */
+	public String getMenuGroupId() {
+		return menuGroupId;
+	}
+
+	
+	public String toString() {
+		return "CommonWizardDescriptor["+getId()+", wizardId="+getWizardId()+"]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IPluginContribution#getLocalId()
+	 */
+	public String getLocalId() {
+		return getWizardId();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IPluginContribution#getPluginId()
+	 */
+	public String getPluginId() {
+        return (configElement != null) ? configElement.getNamespaceIdentifier() : null;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptorManager.java
new file mode 100755
index 0000000..def27cc
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/CommonWizardDescriptorManager.java
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.wizards;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+/**
+ * @since 3.2
+ */
+public class CommonWizardDescriptorManager {
+
+	private static final CommonWizardDescriptorManager INSTANCE = new CommonWizardDescriptorManager();
+
+	private static boolean isInitialized = false;
+
+	private static final String[] NO_DESCRIPTOR_IDS = new String[0];
+
+	private static final CommonWizardDescriptor[] NO_DESCRIPTORS = new CommonWizardDescriptor[0];
+	
+	/**
+	 * Find wizards of type 'new'.
+	 */
+	public static final String WIZARD_TYPE_NEW = "new"; //$NON-NLS-1$
+
+	private Map commonWizardDescriptors = new HashMap();
+
+	/**
+	 * @return the singleton instance of the registry
+	 */
+	public static CommonWizardDescriptorManager getInstance() {
+		if (isInitialized) {
+			return INSTANCE;
+		}
+		synchronized (INSTANCE) {
+			if (!isInitialized) {
+				INSTANCE.init();
+				isInitialized = true;
+			}
+		}
+		return INSTANCE;
+	}
+
+	private void init() {
+		new CommonWizardRegistry().readRegistry();
+	}
+
+	private void addCommonWizardDescriptor(CommonWizardDescriptor aDesc) {
+		if (aDesc == null) {
+			return;
+		} else if(aDesc.getWizardId() == null) {
+			NavigatorPlugin.logError(0, "A null wizardId was supplied for a commonWizard in " + aDesc.getNamespace(), null); //$NON-NLS-1$
+		}
+		synchronized (commonWizardDescriptors) {
+			Set descriptors = (Set) commonWizardDescriptors.get(aDesc
+					.getType());
+			if (descriptors == null) { 
+				commonWizardDescriptors.put(aDesc.getType(), descriptors = new HashSet());
+			}
+			if (!descriptors.contains(aDesc)) {
+				descriptors.add(aDesc);
+			}
+		}
+	}
+
+	/**
+	 * 
+	 * Returns all wizard id(s) which enable for the given element.
+	 * 
+	 * @param anElement
+	 *            the element to return the best content descriptor for
+	 * @param aType
+	 *            The type of wizards to locate (e.g. 'new', 'import', or
+	 *            'export' etc).
+	 * @param aContentService 
+	 * 			 The content service to use when deciding visibility.   
+	 * @return The set of commonWizard ids for the given element
+	 */
+	public String[] getEnabledCommonWizardDescriptorIds(Object anElement,
+			String aType, INavigatorContentService aContentService) {
+
+		Set commonDescriptors = (Set) commonWizardDescriptors.get(aType);
+		if (commonDescriptors == null) {
+			return NO_DESCRIPTOR_IDS;
+		}
+		/* Find other Common Wizard providers which enable for this object */
+		List descriptorIds = new ArrayList();
+		for (Iterator commonWizardDescriptorsItr = commonDescriptors.iterator(); commonWizardDescriptorsItr
+				.hasNext();) {
+			CommonWizardDescriptor descriptor = (CommonWizardDescriptor) commonWizardDescriptorsItr
+					.next();
+
+			if (isVisible(aContentService, descriptor)
+					&& descriptor.isEnabledFor(anElement)) {
+				descriptorIds.add(descriptor.getWizardId());
+			}
+		}
+		String[] wizardIds = new String[descriptorIds.size()];
+		return (String[]) descriptorIds.toArray(wizardIds); 
+	}
+	
+
+	/**
+	 * 
+	 * Returns all wizard descriptor(s) which enable for the given element.
+	 * 
+	 * @param anElement
+	 *            the element to return the best content descriptor for
+	 * @param aType
+	 *            The type of wizards to locate (e.g. 'new', 'import', or
+	 *            'export' etc).
+	 * @param aContentService 
+	 * 			 The content service to use when deciding visibility.   
+	 * @return The set of commonWizard descriptors for the element
+	 */
+	public CommonWizardDescriptor[] getEnabledCommonWizardDescriptors(Object anElement,
+			String aType, INavigatorContentService aContentService) {
+
+		Set commonDescriptors = (Set) commonWizardDescriptors.get(aType);
+		if (commonDescriptors == null) {
+			return NO_DESCRIPTORS;
+		}
+		/* Find other Common Wizard providers which enable for this object */
+		List descriptors = new ArrayList();
+		for (Iterator commonWizardDescriptorsItr = commonDescriptors.iterator(); commonWizardDescriptorsItr
+				.hasNext();) {
+			CommonWizardDescriptor descriptor = (CommonWizardDescriptor) commonWizardDescriptorsItr
+					.next();
+
+			if (isVisible(aContentService, descriptor)
+					&& descriptor.isEnabledFor(anElement)) {
+				descriptors.add(descriptor);
+			}
+		}
+		CommonWizardDescriptor[] enabledDescriptors = new CommonWizardDescriptor[descriptors.size()];
+		return (CommonWizardDescriptor[]) descriptors.toArray(enabledDescriptors);  
+	}
+
+	/**
+	 * @param aContentService
+	 * @param descriptor
+	 * @return True if the descriptor is visible to the given content service.
+	 */
+	private boolean isVisible(INavigatorContentService aContentService, CommonWizardDescriptor descriptor) {
+		return !WorkbenchActivityHelper.filterItem(descriptor) && 
+					(aContentService == null || 
+							(descriptor.getId() == null || 
+									( aContentService.isVisible(descriptor.getId()) && 
+											aContentService.isActive(descriptor.getId())
+									)
+							)
+					);
+	}
+  
+	private class CommonWizardRegistry extends NavigatorContentRegistryReader {
+
+		protected boolean readElement(final IConfigurationElement anElement) {
+			final boolean[] retValue = new boolean[1];
+
+			if (TAG_COMMON_WIZARD.equals(anElement.getName())) {
+				SafeRunner.run(new NavigatorSafeRunnable(anElement) {
+					public void run() throws Exception {
+						addCommonWizardDescriptor(new CommonWizardDescriptor(anElement));
+						retValue[0] = true;
+					}
+				});
+				return retValue[0];
+			}
+			if (TAG_NAVIGATOR_CONTENT.equals(anElement.getName())) {
+				IConfigurationElement[] commonWizards = anElement.getChildren(TAG_COMMON_WIZARD);
+				final String contentExtensionId = anElement.getAttribute(ATT_ID);
+				// In case there are none
+				retValue[0] = true;
+				for (int i = 0; i < commonWizards.length; i++) {
+					final IConfigurationElement element = commonWizards[i];
+					// Assume it did not work
+					retValue[0] = false;
+					SafeRunner.run(new NavigatorSafeRunnable(element) {
+						public void run() throws Exception {
+							addCommonWizardDescriptor(new CommonWizardDescriptor(element,
+									contentExtensionId));
+							retValue[0] = true;
+						}
+					});
+					if (!retValue[0])
+						break;
+				}
+				return retValue[0];
+			}
+			return super.readElement(anElement);
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/WizardShortcutAction.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/WizardShortcutAction.java
new file mode 100755
index 0000000..cf37e10
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/internal/navigator/wizards/WizardShortcutAction.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * meken@users.sourceforge.net - bug 204837 commonWizard with no pages displays empty dialog
+ *******************************************************************************/
+package org.eclipse.ui.internal.navigator.wizards;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWizard;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+
+/**
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is a guarantee neither that this API will
+ * work nor that it will remain the same. Please do not use this API without
+ * consulting with the Platform/UI team.
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public class WizardShortcutAction extends Action implements IPluginContribution {
+	private IWizardDescriptor descriptor;
+
+	private IWorkbenchWindow window;
+
+	/**
+	 * 
+	 * @param aWindow
+	 *            The window to use for the shell and selection service.
+	 * @param aDescriptor
+	 *            The descriptor with information for triggering the desired
+	 *            wizard.
+	 */
+	public WizardShortcutAction(IWorkbenchWindow aWindow,
+			IWizardDescriptor aDescriptor) {
+		super(aDescriptor.getLabel());
+		descriptor = aDescriptor;
+		setToolTipText(descriptor.getDescription());
+		setImageDescriptor(descriptor.getImageDescriptor());
+		setId(ActionFactory.NEW.getId());
+		this.window = aWindow;
+	}
+
+	/**
+	 * This action has been invoked by the user 
+	 */
+	public void run() {
+		// create instance of target wizard
+
+		IWorkbenchWizard wizard;
+		try {
+			wizard = descriptor.createWizard();
+		} catch (CoreException e) {
+			ErrorDialog.openError(window.getShell(),
+					CommonNavigatorMessages.NewProjectWizard_errorTitle,
+					CommonNavigatorMessages.NewProjectAction_text, e
+							.getStatus());
+			return;
+		}
+
+		ISelection selection = window.getSelectionService().getSelection();
+
+		if (selection instanceof IStructuredSelection) {
+			wizard
+					.init(window.getWorkbench(),
+							(IStructuredSelection) selection);
+		} else {
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+		}
+		
+		if(descriptor.canFinishEarly() && !descriptor.hasPages()) {
+			wizard.performFinish();
+		} else {
+			Shell parent = window.getShell();
+			WizardDialog dialog = new WizardDialog(parent, wizard);
+			dialog.create();
+			// WorkbenchHelp.setHelp(dialog.getShell(),
+			// IWorkbenchHelpContextIds.NEW_WIZARD_SHORTCUT);
+			dialog.open();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.activities.support.IPluginContribution#getLocalId()
+	 */
+	public String getLocalId() {
+		return descriptor.getId();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.activities.support.IPluginContribution#getPluginId()
+	 */
+	public String getPluginId() {
+		return descriptor.getId();
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonActionProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonActionProvider.java
new file mode 100755
index 0000000..6374c22
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonActionProvider.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
+import org.eclipse.ui.internal.navigator.extensions.CommonActionExtensionSite;
+
+/**
+ * <p>
+ * Provides actions from extensions for menu and
+ * {@link org.eclipse.ui.IActionBars} contributions.
+ * </p>
+ * <p>
+ * This abstract class should be extended by clients of the
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension point for
+ * top-level and nested <b>actionProvider</b> elements.
+ * </p>
+ * <p>
+ * {@link CommonActionProvider}s may be declared as top-level elements in the
+ * extension point (e.g. an <b>actionProvider</b> element at the root of the
+ * extension point). Alternatively, <b>actionProvider</b> elements may be
+ * nested under a <b>navigatorContent</b> element, in which case they are
+ * considered to be "associated" with that content extension. For more
+ * information, see the <b>org.eclipse.ui.navigator.navigatorContent</b>
+ * extension point.
+ * </p>
+ * <p>
+ * Each action provider will have the opportunity to contribute to the context
+ * menu when a user right clicks and also contribute to the {@link IActionBars}
+ * each time the selection changes. Clients should re-configure the
+ * {@link IActionBars} each time that {@link #fillActionBars(IActionBars)} is
+ * called (which is once per selection changes). {@link #updateActionBars()}
+ * will never be called from the {@link NavigatorActionService}. This behavior
+ * is required since each selection could determine a different set of
+ * retargetable actions. For instance, the "Delete" operation for a custom model
+ * element is likely to be different than for a resource.
+ * </p>
+ * <p>
+ * Therefore, each extension will have an opportunity to contribute to the
+ * IActionBars based on the <b>possibleChildren</b> expression of the enclosing
+ * <b>navigatorContent</b> extension or the <b>enablement</b> expression of
+ * the <b>actionProvider</b> (for both top-level <b>actionProvider</b>s and
+ * nested <b>actionProvider</b>s which only support a subset of the enclosing
+ * content extensions <b>possibleChildren</b> expression).
+ * <p>
+ * Clients may extend this class.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public abstract class CommonActionProvider extends ActionGroup implements
+		IMementoAware {
+
+	private CommonActionExtensionSite actionSite;
+
+	/**
+	 * <p>
+	 * Initialize the current ICommonActionProvider with the supplied
+	 * information.
+	 * </p>
+	 * <p>
+	 * init() is guaranteed to be called before any other method of the
+	 * ActionGroup super class.
+	 * 
+	 * @param aSite
+	 *            The configuration information for the instantiated Common
+	 *            Action Provider.
+	 */
+	public void init(ICommonActionExtensionSite aSite) {
+		actionSite = (CommonActionExtensionSite) aSite;
+	}
+
+	/**
+	 * Filters the specified action through the {@link WorkbenchActivityHelper}.
+	 * 
+	 * This is used to determine if the {@link IAction} should be included based
+	 * on the currently enabled activities.
+	 * 
+	 * @return true, if the action is to be filtered (suppressed)
+	 * 
+	 * @since 3.4
+	 */
+	protected boolean filterAction(final IAction action) {
+		if (actionSite == null) {
+			String message = "init() method was not called on CommonActionProvider: " + this + " make sure your init() method calls the superclass"; //$NON-NLS-1$ //$NON-NLS-2$
+			throw new IllegalStateException(message);
+		}
+		
+		IPluginContribution piCont = new IPluginContribution() {
+			public String getLocalId() {
+				return action.getId();
+			}
+
+			public String getPluginId() {
+				return actionSite.getPluginId();
+			}
+		};
+
+		return WorkbenchActivityHelper.filterItem(piCont);
+	}
+	
+	
+	/**
+	 * <p>
+	 * Restore the previous state of any actions using the flags in aMemento.
+	 * This method allows the state of any actions that persist from session to
+	 * session to be restored.
+	 * </p>
+	 * 
+	 * <p>
+	 * The default behavior is to do nothing.
+	 * </p>
+	 * 
+	 * @param aMemento
+	 *            A memento that was given to the view part to restore its
+	 *            state.
+	 */
+	public void restoreState(IMemento aMemento) {
+	}
+
+	/**
+	 * <p>
+	 * Save flags in aMemento to remember the state of any actions that persist
+	 * from session to session.
+	 * </p>
+	 * <p>
+	 * Extensions should qualify any keys stored in the memento with their
+	 * plugin id
+	 * </p>
+	 * 
+	 * <p>
+	 * The default behavior is to do nothing.
+	 * </p>
+	 * 
+	 * @param aMemento
+	 *            A memento that was given to the view part to save its state.
+	 */
+	public void saveState(IMemento aMemento) {
+	}
+
+	/**
+	 * 
+	 * @return The cached reference to the action site. Will only be non-null if
+	 *         the subclass calls super.init() first.
+	 */
+	protected final ICommonActionExtensionSite getActionSite() {
+		return actionSite;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapter.java
new file mode 100755
index 0000000..bcea090
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapter.java
@@ -0,0 +1,284 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.internal.navigator.dnd.NavigatorPluginDropAction;
+import org.eclipse.ui.part.PluginTransfer;
+
+/**
+ * 
+ * Provides an implementation of {@link DragSourceAdapter} which uses the
+ * extensions provided by the associated {@link INavigatorContentService}.
+ * 
+ * <p>
+ * Clients should not need to create an instance of this class unless they are
+ * creating their own custom viewer. Otherwise, {@link CommonViewer} configures
+ * its drag adapter automatically.
+ * </p> 
+ * 
+ * @see INavigatorDnDService
+ * @see CommonDragAdapterAssistant
+ * @see CommonDropAdapter
+ * @see CommonDropAdapterAssistant
+ * @see CommonViewer
+ * @since 3.2
+ * 
+ */
+public final class CommonDragAdapter extends DragSourceAdapter {
+
+	private final INavigatorContentService contentService;
+
+	private final ISelectionProvider provider;
+
+	private CommonDragAdapterAssistant setDataAssistant;
+	
+	private List assistantsToUse;
+	
+	/**
+	 * Create a DragAdapter that drives the configuration of the drag data.
+	 * 
+	 * @param aContentService
+	 *            The content service this Drag Adapter is associated with
+	 * @param aProvider
+	 *            The provider that can give the current selection from the
+	 *            appropriate viewer.
+	 */
+	public CommonDragAdapter(INavigatorContentService aContentService,
+			ISelectionProvider aProvider) {
+		super();
+		contentService = aContentService;
+		provider = aProvider;
+		assistantsToUse = new ArrayList();
+	}
+
+	/**
+	 * 
+	 * @return An array of supported Drag Transfer types. The list contains [
+	 *         {@link LocalSelectionTransfer#getTransfer()},
+	 *         {@link PluginTransfer#getInstance()}] in addition to any
+	 *         supported types contributed by the
+	 *         {@link CommonDragAdapterAssistant assistants}.
+	 * @see CommonDragAdapterAssistant
+	 * @see LocalSelectionTransfer
+	 * @see PluginTransfer
+	 */
+	public Transfer[] getSupportedDragTransfers() {
+		CommonDragAdapterAssistant[] assistants = contentService
+				.getDnDService().getCommonDragAssistants();
+
+		Set supportedTypes = new LinkedHashSet();
+		supportedTypes.add(PluginTransfer.getInstance());
+		supportedTypes.add(LocalSelectionTransfer.getTransfer());
+		Transfer[] transferTypes = null;
+		for (int i = 0; i < assistants.length; i++) {
+			transferTypes = assistants[i].getSupportedTransferTypes();
+			for (int j = 0; j < transferTypes.length; j++) {
+				if (transferTypes[j] != null) {
+					supportedTypes.add(transferTypes[j]);
+				}
+			}
+		}
+		
+		Transfer[] transfers = (Transfer[]) supportedTypes
+				.toArray(new Transfer[supportedTypes.size()]);
+		return transfers;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
+	 */
+	public void dragStart(final DragSourceEvent event) {
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDragAdapter.dragStart (begin): " + event); //$NON-NLS-1$
+		}
+		SafeRunner.run(new NavigatorSafeRunnable() {
+			public void run() throws Exception {
+				DragSource dragSource = (DragSource) event.widget;
+				if (Policy.DEBUG_DND) {
+					System.out.println("CommonDragAdapter.dragStart source: " + dragSource); //$NON-NLS-1$
+				}
+				Control control = dragSource.getControl();
+				if (control == control.getDisplay().getFocusControl()) {
+					ISelection selection = provider.getSelection();
+					assistantsToUse.clear();
+
+					if (!selection.isEmpty()) {
+						LocalSelectionTransfer.getTransfer().setSelection(selection);
+
+						boolean doIt = false;
+						INavigatorDnDService dndService = contentService.getDnDService();
+						CommonDragAdapterAssistant[] assistants = dndService
+								.getCommonDragAssistants();
+						if (assistants.length == 0)
+							doIt = true;
+						for (int i = 0; i < assistants.length; i++) {
+							if (Policy.DEBUG_DND) {
+								System.out
+										.println("CommonDragAdapter.dragStart assistant: " + assistants[i]); //$NON-NLS-1$
+							}
+							event.doit = true;
+							assistants[i].dragStart(event, (IStructuredSelection) selection);
+							doIt |= event.doit;
+							if (event.doit) {
+								if (Policy.DEBUG_DND) {
+									System.out
+											.println("CommonDragAdapter.dragStart assistant - event.doit == true"); //$NON-NLS-1$
+								}
+								assistantsToUse.add(assistants[i]);
+							}
+						}
+
+						event.doit = doIt;
+					} else {
+						event.doit = false;
+					}
+				} else {
+					event.doit = false;
+				}
+			}
+		});
+
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDragAdapter.dragStart (end): doit=" + event.doit); //$NON-NLS-1$
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
+	 */
+	public void dragSetData(final DragSourceEvent event) {
+
+		final ISelection selection = LocalSelectionTransfer.getTransfer()
+				.getSelection();
+
+		if (Policy.DEBUG_DND) {
+			System.out
+					.println("CommonDragAdapter.dragSetData: event" + event + " selection=" + selection); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+
+		if (LocalSelectionTransfer.getTransfer()
+				.isSupportedType(event.dataType)) {
+			event.data = selection;
+
+			if (Policy.DEBUG_DND) {
+				System.out
+						.println("CommonDragAdapter.dragSetData set LocalSelectionTransfer: " + event.data); //$NON-NLS-1$
+			}
+		} else if (PluginTransfer.getInstance().isSupportedType(event.dataType)) {
+			event.data = NavigatorPluginDropAction
+					.createTransferData(contentService);
+			if (Policy.DEBUG_DND) {
+				System.out
+						.println("CommonDragAdapter.dragSetData set PluginTransfer: " + event.data); //$NON-NLS-1$
+			}
+		} else if (selection instanceof IStructuredSelection) {
+			if (Policy.DEBUG_DND) {
+				System.out
+						.println("CommonDragAdapter.dragSetData looking for assistants"); //$NON-NLS-1$
+			}
+
+			for (int i = 0, len = assistantsToUse.size(); i < len; i++) {
+				final CommonDragAdapterAssistant assistant = (CommonDragAdapterAssistant) assistantsToUse.get(i); 
+				if (Policy.DEBUG_DND) {
+					System.out
+							.println("CommonDragAdapter.dragSetData assistant: " + assistant); //$NON-NLS-1$
+				}
+
+				Transfer[] supportedTransferTypes = assistant
+						.getSupportedTransferTypes();
+				final boolean[] getOut = new boolean[1];
+				for (int j = 0; j < supportedTransferTypes.length; j++) {
+					if (supportedTransferTypes[j].isSupportedType(event.dataType)) {
+						SafeRunner.run(new NavigatorSafeRunnable() {
+							public void run() throws Exception {
+								if (Policy.DEBUG_DND) {
+									System.out
+											.println("CommonDragAdapter.dragSetData supported xfer type"); //$NON-NLS-1$
+								}
+								if (assistant.setDragData(event, (IStructuredSelection) selection)) {
+									if (Policy.DEBUG_DND) {
+										System.out
+												.println("CommonDragAdapter.dragSetData set data " + event.data); //$NON-NLS-1$
+									}
+									setDataAssistant = assistant;
+									getOut[0] = true;
+								}
+							}
+						});
+						if (getOut[0])
+							return;
+					}
+				}
+			}
+
+			if (Policy.DEBUG_DND) {
+				System.out
+						.println("CommonDragAdapter.dragSetData FAILED no assistant handled it"); //$NON-NLS-1$
+			}
+			event.doit = false;
+
+		} else {
+			if (Policy.DEBUG_DND) {
+				System.out
+						.println("CommonDragAdapter.dragSetData FAILED can't identify transfer type"); //$NON-NLS-1$
+			}
+			event.doit = false;
+		}
+	}
+	 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.dnd.DragSourceAdapter#dragFinished(org.eclipse.swt.dnd.DragSourceEvent)
+	 */
+	public void dragFinished(DragSourceEvent event) {
+
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDragAdapter.dragFinished(): " + event); //$NON-NLS-1$
+		}
+
+		ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
+
+		if (event.doit && selection instanceof IStructuredSelection && setDataAssistant != null)
+			setDataAssistant.dragFinished(event, (IStructuredSelection) selection);
+			
+		setDataAssistant = null;
+
+		LocalSelectionTransfer.getTransfer().setSelection(null);
+
+		// TODO Handle clean up if drop target was outside of workbench
+		// if (event.doit != false) {
+		//			
+		// }
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapterAssistant.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapterAssistant.java
new file mode 100755
index 0000000..595de25
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDragAdapterAssistant.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.part.PluginTransfer;
+
+/**
+ * Assist the {@link CommonDragAdapter} by providing new TransferTypes and the
+ * logic to handle setting up the transfer data. Clients must extend this class
+ * as part of the <b>org.eclipse.ui.navigator.viewer/dragAssistant</b>
+ * extension. By default, the Common Navigator supports
+ * {@link LocalSelectionTransfer} and {@link PluginTransfer}.
+ * 
+ * <p>
+ * Clients may extend this class.
+ * </p>
+ * 
+ * @see INavigatorDnDService
+ * @see CommonDragAdapter
+ * @see CommonDropAdapter
+ * @see CommonDropAdapterAssistant
+ * @see CommonViewer
+ * @see <a
+ *      href="http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html">Drag
+ *      and Drop: Adding Drag and Drop to an SWT Application</a>
+ * @see <a
+ *      href="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html">Drag
+ *      and Drop in the Eclipse UI (Custom Transfer Types)</a>
+ * 
+ * @since 3.2
+ * 
+ */
+public abstract class CommonDragAdapterAssistant {
+
+	private INavigatorContentService contentService;
+
+	/**
+	 * Extra TransferTypes allow the Navigator to generate different kinds of
+	 * payloads for DND clients. By default, the {@link CommonDragAdapter}
+	 * supports {@link LocalSelectionTransfer} and {@link PluginTransfer}.
+	 * 
+	 * <p>
+	 * CommonDragAdapterAssistants can extend the available TransferTypes that a
+	 * Common Navigator Viewer can generate. Clients should return the set of
+	 * Transfer Types they support. When a drop event occurs, the available drag
+	 * assistants will be searched for a <i>enabled</i> assistants for the
+	 * {@link DragSourceEvent}. Only if the drop event occurs will
+	 * {@link #setDragData(DragSourceEvent, IStructuredSelection)} be called. If
+	 * the drop event is cancelled,
+	 * {@link #setDragData(DragSourceEvent, IStructuredSelection)} will not be
+	 * called.
+	 * </p>
+	 * 
+	 * @return The added transfer types. (e.g. FileTransfer.getInstance()).
+	 */
+	public abstract Transfer[] getSupportedTransferTypes();
+
+	/**
+	 * Set the value of the {@link org.eclipse.swt.widgets.Event#data} field using the given selection.
+	 * Clients will only have an opportunity to set the drag data if they have
+	 * returned a matching Transfer Type from
+	 * {@link #getSupportedTransferTypes()} for the
+	 * {@link DragSourceEvent#dataType}.
+	 * <p>
+	 * Clients will only have an opportunity to set the data when the drop event
+	 * occurs. If the drop operation is cancelled, then this method will not be
+	 * called.
+	 * </p>
+	 * 
+	 * @param anEvent
+	 *            The event object should have its {@link Event#data} field set
+	 *            to a value that matches a supported {@link TransferData} type.
+	 * @param aSelection
+	 *            The current selection from the viewer.
+	 * @return True if the data could be set; false otherwise.
+	 */
+	public abstract boolean setDragData(DragSourceEvent anEvent,
+			IStructuredSelection aSelection);
+
+	/**
+	 * 
+	 * Allows the drag assistant indicate it wants to participate in the drag operation.
+	 * This is called at {@link DragSourceListener#dragStart(DragSourceEvent)} 
+	 * time.
+	 * 
+	 * @param anEvent
+	 *            The event object should return doit = true if it wants to participate
+	 *            in the drag and set doit = false if it does not want to further 
+	 *            participate.
+	 * @param aSelection
+	 *            The current selection from the viewer.
+	 * 
+	 * @since 3.4
+	 */
+	public void dragStart(DragSourceEvent anEvent,
+			IStructuredSelection aSelection) {
+		// May be subclassed
+	}
+	
+	/**
+	 * 
+	 * Allows the drag assistant to do any necessary cleanup after the drop operation
+	 * is done. This is called at {@link DragSourceListener#dragFinished(DragSourceEvent)} 
+	 * time.  This is called on the same assistant that was called for the set data.
+	 * 
+	 * @param anEvent
+	 *            The event object should have its {@link Event#data} field set
+	 *            to a value that matches a supported {@link TransferData} type.
+	 * @param aSelection
+	 *            The current selection from the viewer.
+	 * 
+	 * @since 3.4
+	 */
+	public void dragFinished(DragSourceEvent anEvent,
+			IStructuredSelection aSelection) {
+		// May be subclassed
+	}
+	
+	/**
+	 * Accept and remember the content service this assistant is associated
+	 * with.
+	 * 
+	 * @param aContentService
+	 */
+	public final void setContentService(INavigatorContentService aContentService) {
+		contentService = aContentService;
+	}
+
+	/**
+	 * 
+	 * @return The associated content service.
+	 */
+	public INavigatorContentService getContentService() {
+		return contentService;
+	}
+
+	/**
+	 * 
+	 * @return The shell for the viewer this assistant is associated with or the
+	 *         shell of the active workbench window.
+	 */
+	public final Shell getShell() {
+		if (contentService != null) {
+			((NavigatorContentService) contentService).getShell();
+		}
+		return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapter.java
new file mode 100755
index 0000000..e9f1d9a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapter.java
@@ -0,0 +1,337 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * ken.ryall@nokia.com - 157506 drop from external sources does not work on Linux/Mac
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.Policy;
+import org.eclipse.ui.internal.navigator.dnd.NavigatorPluginDropAction;
+import org.eclipse.ui.part.PluginDropAdapter;
+import org.eclipse.ui.part.PluginTransfer;
+
+/**
+ * Provides an implementation of {@link PluginDropAdapter} which uses the
+ * extensions provided by the associated {@link INavigatorContentService}.
+ * 
+ * <p>
+ * Clients should not need to create an instance of this class unless they are
+ * creating their own custom viewer. Otherwise, {@link CommonViewer} configures
+ * its drop adapter automatically.
+ * </p>
+ *  
+ * 
+ * @see INavigatorDnDService
+ * @see CommonDragAdapter
+ * @see CommonDragAdapterAssistant
+ * @see CommonDropAdapterAssistant
+ * @see CommonViewer
+ * @since 3.2
+ */
+public final class CommonDropAdapter extends PluginDropAdapter {
+
+	private static final Transfer[] SUPPORTED_DROP_TRANSFERS = new Transfer[] {
+			LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance(),
+			PluginTransfer.getInstance() };
+
+	private final INavigatorContentService contentService;
+
+	private final INavigatorDnDService dndService;
+	
+	/**
+	 * Create a DropAdapter that handles a drop based on the given content
+	 * service and selection provider.
+	 * 
+	 * @param aContentService
+	 *            The content service this Drop Adapter is associated with
+	 * @param aStructuredViewer
+	 *            The viewer this DropAdapter is associated with.
+	 */
+	public CommonDropAdapter(INavigatorContentService aContentService,
+			StructuredViewer aStructuredViewer) {
+		super(aStructuredViewer);
+		contentService = aContentService;
+		dndService = contentService.getDnDService();
+		setFeedbackEnabled(false);
+	}
+
+	/**
+	 * 
+	 * @return An array of Transfers allowed by the CommonDropAdapter. Includes
+	 *         {@link LocalSelectionTransfer#getTransfer()},
+	 *         {@link FileTransfer#getInstance()},
+	 *         {@link PluginTransfer#getInstance()}.
+	 * @see LocalSelectionTransfer
+	 * @see FileTransfer
+	 * @see PluginTransfer
+	 */
+	public Transfer[] getSupportedDropTransfers() {
+		return SUPPORTED_DROP_TRANSFERS;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragEnter(org.eclipse.swt.dnd.DropTargetEvent)
+	 */
+	public void dragEnter(DropTargetEvent event) {
+
+		if (event.detail == DND.DROP_NONE)
+			return;
+		
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDropAdapter.dragEnter: " + event); //$NON-NLS-1$
+		}
+		for (int i = 0; i < event.dataTypes.length; i++) {
+			if (LocalSelectionTransfer.getTransfer().isSupportedType(
+					event.dataTypes[i])) {
+				event.currentDataType = event.dataTypes[i]; 
+				if (Policy.DEBUG_DND) {
+					System.out.println("CommonDropAdapter.dragEnter: local selection: " + event.currentDataType); //$NON-NLS-1$
+				}
+				super.dragEnter(event);
+				return;
+			}
+		}
+
+		for (int i = 0; i < event.dataTypes.length; i++) {
+			if (FileTransfer.getInstance().isSupportedType(event.dataTypes[i])) {
+				event.currentDataType = event.dataTypes[i];
+				event.detail = DND.DROP_COPY; 
+				if (Policy.DEBUG_DND) {
+					System.out.println("CommonDropAdapter.dragEnter: file: " + event.currentDataType); //$NON-NLS-1$
+				}
+				super.dragEnter(event);
+				return;
+			}
+		}
+
+		for (int i = 0; i < event.dataTypes.length; i++) {
+			if (PluginTransfer.getInstance()
+					.isSupportedType(event.dataTypes[i])) {
+				event.currentDataType = event.dataTypes[i]; 
+				if (Policy.DEBUG_DND) {
+					System.out.println("CommonDropAdapter.dragEnter: plugin: " + event.currentDataType); //$NON-NLS-1$
+				}
+				super.dragEnter(event);
+				return;
+			}
+		}
+
+		event.detail = DND.DROP_NONE; 
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.dnd.DropTargetAdapter#dragLeave(org.eclipse.swt.dnd.DropTargetEvent)
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		super.dragLeave(event);
+		if (LocalSelectionTransfer.getTransfer().isSupportedType(
+				event.currentDataType)) {
+			event.data = NavigatorPluginDropAction
+					.createTransferData(contentService);
+		}
+	}
+
+	public boolean performDrop(Object data) {
+		final DropTargetEvent event = getCurrentEvent();
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDropAdapter.drop (begin): " + event); //$NON-NLS-1$
+		}
+		final Object target = getCurrentTarget() != null ? 
+				getCurrentTarget() : getViewer().getInput();
+
+		// Must validate the drop here because on some platforms (Linux, Mac) the event 
+		// is not populated with the correct currentDataType until the drop actually
+		// happens, and validateDrop sets the currentTransfer based on that.  The 
+		// call to validateDrop in dragAccept is too early.
+		validateDrop(target, getCurrentOperation(), event.currentDataType);
+		if (PluginTransfer.getInstance().isSupportedType(event.currentDataType)) {
+			super.drop(event);
+			return true;
+		}
+		
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDropAdapter.drop target: " + target + " op: " + getCurrentOperation()); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		final CommonDropAdapterAssistant[] assistants = dndService.findCommonDropAdapterAssistants(target,
+				getCurrentTransfer());
+
+		final boolean[] retValue = new boolean[1];
+		for (int i = 0; i < assistants.length; i++) {
+			final CommonDropAdapterAssistant localAssistant = assistants[i];
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					localAssistant.setCurrentEvent(event);
+					IStatus valid = localAssistant.validateDrop(target, getCurrentOperation(),
+							getCurrentTransfer());
+					if (valid != null && valid.isOK()) {
+						if (Policy.DEBUG_DND) {
+							System.out
+									.println("CommonDropAdapter.drop assistant selected: " + localAssistant + " op: " + event.detail); //$NON-NLS-1$ //$NON-NLS-2$
+						}
+						localAssistant.handleDrop(CommonDropAdapter.this, event, target);
+						retValue[0] = true;
+					}
+				}
+			});
+			if (retValue[0])
+				return true;
+		}
+
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object,
+	 *      int, org.eclipse.swt.dnd.TransferData)
+	 */
+	public boolean validateDrop(final Object aDropTarget, final int theDropOperation,
+			final TransferData theTransferData) {
+
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDropAdapter.validateDrop (begin) operation: " + theDropOperation + " target: " + aDropTarget /*+ " transferType: " + theTransferData.type*/); //$NON-NLS-1$ //$NON-NLS-2$
+			//new Exception().printStackTrace(System.out);
+		}
+
+		boolean result = false;
+		final IStatus[] valid = new IStatus[1];
+
+		if (super.validateDrop(aDropTarget, theDropOperation, theTransferData)) {
+			result = true;
+			if (Policy.DEBUG_DND) {
+				System.out.println("CommonDropAdapter.validateDrop valid for plugin transfer"); //$NON-NLS-1$
+			}
+		} else {
+			final Object target = aDropTarget != null ? aDropTarget : getViewer().getInput();
+			if (Policy.DEBUG_DND) {
+				System.out.println("CommonDropAdapter.validateDrop target: " + target); //$NON-NLS-1$
+				System.out.println("CommonDropAdapter.validateDrop local selection: " + //$NON-NLS-1$
+						LocalSelectionTransfer.getTransfer().getSelection());
+			}
+			CommonDropAdapterAssistant[] assistants = dndService.findCommonDropAdapterAssistants(
+					target, theTransferData);
+			for (int i = 0; i < assistants.length; i++) {
+				if (Policy.DEBUG_DND) {
+					System.out
+							.println("CommonDropAdapter.validateDrop checking assistant: \"" + assistants[i]); //$NON-NLS-1$
+				}
+				final CommonDropAdapterAssistant assistantLocal = assistants[i];
+
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						assistantLocal.setCurrentEvent(getCurrentEvent());
+						valid[0] = assistantLocal.validateDrop(target, theDropOperation,
+								theTransferData);
+					}
+				});
+				if (valid[0] != null && valid[0].isOK()) {
+					result = true;
+					if (Policy.DEBUG_DND) {
+						System.out.println("CommonDropAdapter.validateDrop VALID"); //$NON-NLS-1$
+					}
+					break;
+				}
+				if (Policy.DEBUG_DND) {
+					System.out
+							.println("CommonDropAdapter.validateDrop NOT valid: " + (valid[0] != null ? (valid[0].getSeverity() + ": " + valid[0].getMessage()) : "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
+				}
+			}
+		}
+
+		if (Policy.DEBUG_DND) {
+			System.out
+					.println("CommonDropAdapter.validateDrop (returning " + (valid[0] != null ? valid[0].getSeverity() + ": " + valid[0].getMessage() : "" + result) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		}
+
+		setScrollExpandEnabled(true);
+		return result;
+
+	}
+
+	/*
+	 * The visibility of the following methods is raised for downstream clients
+	 * (assistants).
+	 */
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#getBounds(org.eclipse.swt.widgets.Item)
+	 */
+	public Rectangle getBounds(Item item) {
+		return super.getBounds(item);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#getCurrentLocation()
+	 */
+	public int getCurrentLocation() {
+		return super.getCurrentLocation();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#getCurrentOperation()
+	 */
+	public int getCurrentOperation() {
+		return super.getCurrentOperation();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#overrideOperation(int)
+	 * @since 3.4
+	 */
+	public void overrideOperation(int operation) {
+		if (Policy.DEBUG_DND) {
+			System.out.println("CommonDropAdapter.overrideOperation: " + operation); //$NON-NLS-1$
+		}
+		super.overrideOperation(operation);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#getCurrentTarget()
+	 */
+	public Object getCurrentTarget() {
+		return super.getCurrentTarget();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.part.PluginDropAdapter#getCurrentTransfer()
+	 */
+	public TransferData getCurrentTransfer() {
+		return super.getCurrentTransfer();
+	}
+	
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapterAssistant.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapterAssistant.java
new file mode 100755
index 0000000..70c166b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonDropAdapterAssistant.java
@@ -0,0 +1,290 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+
+/**
+ * <p>
+ * Used by the
+ * <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent/commonDropAdapter</b>
+ * extension point to carry out pluggable drop operations.
+ * </p>
+ * <p>
+ * Each {@link CommonDropAdapterAssistant} is contained by single content
+ * extension. The opportunity for each assistant to handle the drop operation is
+ * determined by the <b>possibleChildren</b> expression of the
+ * <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b> extension;
+ * whenever every element in the drag set matches the <b>possibleChildren</b>
+ * expression of an extension, it is eligible to handle the drop operation. This
+ * initial set is further culled using the <b>possibleDropTargets</b>
+ * expression of the <b>commonDropAdapter</b> using the current drop target.
+ * </p>
+ * <p>
+ * If drag operations originate outside of Eclipse, then the set of eligible
+ * drop adapters is determined based on the drop target (using the
+ * <b>possibleDropTargets</b> expression). Each assistant can then indicate 
+ * whether {@link #isSupportedType(TransferData) the incoming type is supported}.
+ * <p>
+ * Whenever a match is found, the assistant will be given an opportunity to
+ * first {@link #validateDrop(Object, int, TransferData)}, and then if the
+ * assistant returns true, the assist must
+ * {@link #handleDrop(CommonDropAdapter, DropTargetEvent, Object)}. If
+ * multiple assistants match the drop target, then the potential assistants are
+ * ordered based on priority and their override relationships and given an
+ * opportunity to validate the drop operation in turn. The first one to validate
+ * will have the opportunty to carry out the drop.
+ * </p>
+ * 
+ * <p>
+ * Clients may handle DND operations that begin and end in the current viewer by
+ * overriding the following methods:
+ * <ul>
+ * <li>{@link #validateDrop(Object, int, TransferData)}: Indicate whether this
+ * assistant can handle a drop onto the current viewer.</li>
+ * <li>{@link #handleDrop(CommonDropAdapter, DropTargetEvent, Object)}: Handle
+ * the drop operation onto the current viewer.</li>
+ * </ul>
+ * </p>
+ * <p>
+ * If a user originates a drag operation to another viewer that cannot handle
+ * one of the available drag transfer types, drop assistants may handle the drop
+ * operation for the target viewer. Clients must override :
+ * <ul>
+ * <li>{@link #validatePluginTransferDrop(IStructuredSelection, Object)}:
+ * Indicate whether this assistant can handle the drop onto another viewer.
+ * <li>{@link #handlePluginTransferDrop(IStructuredSelection, Object)}: Handle
+ * the drop operation onto the other viewer.</li>
+ * </ul>
+ * </p> 
+ * <p>
+ * Clients may subclass this.
+ * </p>
+ * 
+ * @see INavigatorDnDService
+ * @see INavigatorDnDService#findCommonDropAdapterAssistants(Object,
+ *      TransferData)
+ * @since 3.2
+ * 
+ */
+public abstract class CommonDropAdapterAssistant {
+
+	private INavigatorContentService contentService;
+
+	private DropTargetEvent _currentEvent;
+
+	private CommonDropAdapter _dropAdapter;
+	
+	/**
+	 * Perform any necessary initialization using the
+	 * {@link INavigatorContentService}.
+	 * 
+	 * 
+	 * @param aContentService
+	 *            The instance of {@link INavigatorContentService} that the
+	 *            current CommonDropAdapterAssistant will be associated with
+	 */
+	public final void init(INavigatorContentService aContentService) {
+		contentService = aContentService;
+		doInit();
+	}
+
+	
+	/**
+	 * Override to perform any one-time initialization.
+	 */
+	protected void doInit() {
+
+	}
+
+	/**
+	 * Validates dropping on the given object. This method is called whenever
+	 * some aspect of the drop operation changes.
+	 * <p>
+	 * Subclasses must implement this method to define which drops make sense.
+	 * If clients return true, then they will be allowed to handle the drop in
+	 * {@link #handleDrop(CommonDropAdapter, DropTargetEvent, Object) }.
+	 * </p>
+	 * 
+	 * @param target
+	 *            the object that the mouse is currently hovering over, or
+	 *            <code>null</code> if the mouse is hovering over empty space
+	 * @param operation
+	 *            the current drag operation (copy, move, etc.)
+	 * @param transferType
+	 *            the current transfer type
+	 * @return A status indicating whether the drop is valid.
+	 */
+	public abstract IStatus validateDrop(Object target, int operation,
+			TransferData transferType);
+
+	/**
+	 * Carry out the DND operation.
+	 * 
+	 * <p>
+	 * Note: Contrary to the SWT {@link DropTargetListener} specification, you
+	 * <i>must</i> make sure that the aDropTargetEvent.detail is not set to
+	 * DND.DROP_MOVE unless actual work is required in the
+	 * {@link DragSourceListener#dragFinished(org.eclipse.swt.dnd.DragSourceEvent)}
+	 * to complete the operation (for example removing the moved file). In
+	 * particular for the LocalSelectionTransfer case, DND.DROP_MOVE cannot be
+	 * used as it will cause incorrect behavior in some existing drag handlers.
+	 * 
+	 * In case of move operations where no action is required on the source side
+	 * (e.g. LocalSelectionTransfer) you must set aDropTargetEvent.detail to
+	 * DND.DROP_NONE to signal this to the drag source. Even though the SWT
+	 * specification says this is canceling the drop, it is not really doing so,
+	 * it is only preventing the DND.DROP_MOVE from being passed through to the
+	 * dragFinished() method.
+	 * 
+	 * @param aDropAdapter
+	 *            The Drop Adapter contains information that has already been
+	 *            parsed from the drop event.
+	 * @param aDropTargetEvent
+	 *            The drop target event.
+	 * @param aTarget
+	 *            The object being dragged onto
+	 * @return A status indicating whether the drop completed OK.
+	 */
+	public abstract IStatus handleDrop(CommonDropAdapter aDropAdapter,
+			DropTargetEvent aDropTargetEvent, Object aTarget);
+
+	/**
+	 * Clients may extend the supported transfer types beyond the default
+	 * {@link LocalSelectionTransfer#getTransfer()} and
+	 * {@link org.eclipse.ui.part.PluginTransfer#getInstance()} transfer types. When a transfer type
+	 * other than one of these is encountered, the DND Service will query the
+	 * <b>visible</b> and <b>active</b> descriptors that are <b>enabled</b>
+	 * for the drop target of the current operation.
+	 * 
+	 * @param aTransferType
+	 *            The transfer data from the drop operation
+	 * @return True if the given TransferData can be understood by this
+	 *         assistant.
+	 */
+	public boolean isSupportedType(TransferData aTransferType) {
+		return LocalSelectionTransfer.getTransfer().isSupportedType(
+				aTransferType);
+	}
+
+	/**
+	 * 
+	 * Return true if the client can handle the drop onto the target viewer of
+	 * the drop operation.
+	 * <p>
+	 * The default behavior of this method is to return <b>Status.CANCEL_STATUS</b>.
+	 * </p>
+	 * 
+	 * @param aDragSelection
+	 *            The selection dragged from the viewer.
+	 * @param aDropTarget
+	 *            The target of the drop operation.
+	 * 
+	 * @return OK if the plugin transfer can be handled by this assistant.
+	 */
+	public IStatus validatePluginTransferDrop(
+			IStructuredSelection aDragSelection, Object aDropTarget) {
+		return Status.CANCEL_STATUS;
+	}
+
+	/**
+	 * Handle the drop operation for the target viewer.
+	 * <p>
+	 * The default behavior of this method is to return <b>Status.CANCEL_STATUS</b>.
+	 * </p>
+	 * 
+	 * @param aDragSelection
+	 *            The selection dragged from the viewer.
+	 * @param aDropTarget
+	 *            The target of the drop operation.
+	 * 
+	 * @return OK if the drop operation succeeded.
+	 */
+	public IStatus handlePluginTransferDrop(
+			IStructuredSelection aDragSelection, Object aDropTarget) {
+		return Status.CANCEL_STATUS;
+	}
+
+	/**
+	 * 
+	 * @return The associated content service.
+	 */
+	protected INavigatorContentService getContentService() {
+		return contentService;
+	}
+
+	/**
+	 * 
+	 * @return A shell for the viewer currently used by the
+	 *         {@link INavigatorContentService}.
+	 */
+	protected final Shell getShell() {
+		return ((NavigatorContentService) contentService).getShell();
+	}
+
+	/**
+	 * Sets the current {@link DropTargetEvent}.
+	 * 
+	 * This is used to make the event available to the client methods of this class.
+	 * 
+	 * @param event
+	 *            the new event.
+	 * 
+	 * @since 3.4
+	 */
+	void setCurrentEvent(DropTargetEvent event) {
+		_currentEvent = event;
+	}
+
+	/**
+	 * Returns the current {@link DropTargetEvent}.
+	 * 
+	 * @return event the current DropTargetEvent.
+	 * 
+	 * @since 3.4
+	 */
+	public DropTargetEvent getCurrentEvent() {
+		return _currentEvent;
+	}
+	
+    /**
+     * Sets the {@link CommonDropAdapter}.
+     * @param dropAdapter 
+     *
+     * @noreference
+     * @nooverride This method is not intended to be re-implemented or extended by clients.
+     */
+	public void setCommonDropAdapter(CommonDropAdapter dropAdapter) {
+		_dropAdapter = dropAdapter;
+	}
+	
+    /**
+     * Returns the {@link CommonDropAdapter}.
+     *
+     * @return the CommonDropAdapter.
+     * 
+     * @since 3.4
+     *
+     */
+    protected CommonDropAdapter getCommonDropAdapter() {
+        return _dropAdapter;
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigator.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigator.java
new file mode 100755
index 0000000..dc57c9c
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigator.java
@@ -0,0 +1,764 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *     anton.leherbauer@windriver.com - bug 220599 make CommonNavigator a ShowInSource
+ *     rob.stryker@jboss.com - bug 250198 Slight changes for easier subclassing
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.PerformanceStats;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+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.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISaveablesLifecycleListener;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.Saveable;
+import org.eclipse.ui.SaveablesLifecycleEvent;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.internal.navigator.CommonNavigatorActionGroup;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.part.ISetSelectionTarget;
+import org.eclipse.ui.part.IShowInSource;
+import org.eclipse.ui.part.IShowInTarget;
+import org.eclipse.ui.part.ShowInContext;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * <p>
+ * This class provides the IViewPart for the Common Navigator framework in the
+ * Eclipse workbench. This class also serves as the backbone for navigational
+ * viewers. The following types are used by this class to render the Common
+ * Navigator:
+ * <ul>
+ * <li>
+ * <p>
+ * {@link org.eclipse.ui.navigator.CommonViewer}: The viewer that renders the
+ * extensible tree. Creates and manages the lifecycle of the Navigator Content
+ * Service (described below).
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * {@link org.eclipse.ui.navigator.NavigatorActionService}: Manages instances of
+ * {@link org.eclipse.ui.navigator.CommonActionProvider}s provided by individual
+ * extensions and content extensions.
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * {@link org.eclipse.ui.navigator.INavigatorContentService}: Manages instances
+ * of Navigator Content Extensions. Instances are created as needed, and
+ * disposed of upon the disposal of the Navigator Content Service.
+ * </p>
+ * </li>
+ * </ul>
+ * 
+ * <p>
+ * Clients that wish to define their own custom extensible navigator view using
+ * CommonNavigator need to specify an instance of the
+ * <b>org.eclipse.ui.views</b> extension point:
+ * 
+ * <pre>
+ * 
+ *          &lt;extension
+ *          		point=&quot;org.eclipse.ui.views&quot;&gt;
+ *          	&lt;view
+ *          		name=&quot;My Custom View&quot;
+ *          		icon=&quot;relative/path/to/icon.gif&quot;
+ *          		category=&quot;org.acme.mycategory&quot;
+ *          		class=&quot;org.eclipse.ui.navigator.CommonNavigator&quot;
+ *          		id=&quot;org.acme.MyCustomNavigatorID&quot;&gt;
+ *          	&lt;/view&gt;
+ *          &lt;/extension&gt;
+ * 
+ * </pre>
+ * 
+ * </p>
+ * 
+ * <p>
+ * CommonNavigator gets its initial input (during initialization) from the
+ * Workbench by calling getSite().getPage().getInput(). This is done in
+ * {@link #getInitialInput()}. Clients may create a subclass of CommonNavigator
+ * to provide their own means of getting the initial input. Or they may access
+ * the {@link CommonViewer} and set its input directly after startup.
+ * </p>
+ * 
+ * <p>
+ * In the IDE scenario, the default page input is IWorkspaceRoot, in the RCP
+ * scenario it is null and can be configured in the WorkbenchAdvisor.
+ * </p>
+ * 
+ * <p>
+ * Clients that wish to extend the view menu provided via the
+ * <b>org.eclipse.ui.popupMenu</b>s extension may specify the the
+ * <i>popupMenuId</i> specified by <b>org.eclipse.ui.navigator.viewer</b> (or a
+ * nested <b>popupMenu</b> element) of their target viewer as their target menu
+ * id.
+ * </p>
+ * 
+ * <p>
+ * This class may be instantiated or subclassed
+ * </p>
+ * 
+ * @since 3.2
+ */
+public class CommonNavigator extends ViewPart implements ISetSelectionTarget, ISaveablePart, ISaveablesSource, IShowInTarget {
+ 
+	private static final String PERF_CREATE_PART_CONTROL= "org.eclipse.ui.navigator/perf/explorer/createPartControl"; //$NON-NLS-1$
+
+	
+	private static final Class INAVIGATOR_CONTENT_SERVICE = INavigatorContentService.class;
+	private static final Class COMMON_VIEWER_CLASS = CommonViewer.class;
+	private static final Class ISHOW_IN_SOURCE_CLASS = IShowInSource.class;
+	private static final Class ISHOW_IN_TARGET_CLASS = IShowInTarget.class;
+	
+	private static final String HELP_CONTEXT =  NavigatorPlugin.PLUGIN_ID + ".common_navigator"; //$NON-NLS-1$
+
+	/**
+	 * <p>
+	 * Used to track changes to the {@link #isLinkingEnabled}&nbsp;property.
+	 * </p>
+	 * 
+	 * Make sure this does not conflict with anything in IWorkbenchPartConstants.
+	 * 
+	 */
+	public static final int IS_LINKING_ENABLED_PROPERTY = 0x10000;
+
+	private CommonViewer commonViewer;
+
+	private CommonNavigatorManager commonManager;
+
+	private ActionGroup commonActionGroup;
+
+	/**
+	 * To allow {@link #createCommonViewer(Composite)} to be subclassed
+	 * 
+	 * @since 3.4
+	 */
+	protected IMemento memento;
+
+	private boolean isLinkingEnabled = false;
+
+	private String LINKING_ENABLED = "CommonNavigator.LINKING_ENABLED"; //$NON-NLS-1$ 
+
+	private LinkHelperService linkService;
+
+	/**
+	 * 
+	 */
+	public CommonNavigator() {
+		super();
+	}
+
+	/**
+	 * <p>
+	 * Create the CommonViewer part control and setup the default providers as
+	 * necessary.
+	 * </p>
+	 * 
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPartControl(Composite aParent) {
+
+		final PerformanceStats stats= PerformanceStats.getStats(PERF_CREATE_PART_CONTROL, this);
+		stats.startRun();
+
+		commonViewer = createCommonViewer(aParent);	
+		commonViewer.setCommonNavigator(this);
+		
+		try {
+			commonViewer.getControl().setRedraw(false);
+			
+	        INavigatorFilterService filterService = commonViewer
+					.getNavigatorContentService().getFilterService();
+			ViewerFilter[] visibleFilters = filterService.getVisibleFilters(true);
+			for (int i = 0; i < visibleFilters.length; i++) {
+				commonViewer.addFilter(visibleFilters[i]);
+			}
+	
+			commonViewer.setSorter(new CommonViewerSorter());
+	
+			/*
+			 * make sure input is set after sorters and filters to avoid unnecessary
+			 * refreshes
+			 */
+			commonViewer.setInput(getInitialInput()); 
+	
+			getSite().setSelectionProvider(commonViewer);
+	
+			setPartName(getConfigurationElement().getAttribute("name")); //$NON-NLS-1$
+		} finally { 
+			commonViewer.getControl().setRedraw(true);
+		}
+
+        commonViewer.createFrameList();
+
+        /*
+		 * Create the CommonNavigatorManager last because information about the
+		 * state of the CommonNavigator is required for the initialization of
+		 * the CommonNavigatorManager
+		 */
+		commonManager = createCommonManager();
+		if (memento != null) {			
+			commonViewer.getNavigatorContentService().restoreState(memento);
+		}
+
+		commonActionGroup = createCommonActionGroup();
+		commonActionGroup.fillActionBars(getViewSite().getActionBars());
+		
+		ISaveablesLifecycleListener saveablesLifecycleListener = new ISaveablesLifecycleListener() {
+			ISaveablesLifecycleListener siteSaveablesLifecycleListener = (ISaveablesLifecycleListener) getSite()
+					.getService(ISaveablesLifecycleListener.class);
+
+			public void handleLifecycleEvent(SaveablesLifecycleEvent event) {
+				if (event.getEventType() == SaveablesLifecycleEvent.DIRTY_CHANGED) {
+					firePropertyChange(PROP_DIRTY);
+				}
+				siteSaveablesLifecycleListener.handleLifecycleEvent(event);
+			}
+		};
+		commonViewer.getNavigatorContentService()
+				.getSaveablesService().init(this, getCommonViewer(),
+						saveablesLifecycleListener);
+		
+		commonViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(PROP_DIRTY);
+			}});
+		
+		String helpContext = commonViewer.getNavigatorContentService().getViewerDescriptor().getHelpContext();
+		if (helpContext == null)
+			helpContext = HELP_CONTEXT;
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(commonViewer.getControl(), helpContext);
+		
+		stats.endRun();
+	}
+
+	/**
+	 * <p>
+	 * Updates the title text and title tool tip. Called whenever the input of
+	 * the viewer changes.
+	 * </p>
+	 * @since 3.4
+	 */
+	public void updateTitle() {
+		Object input = commonViewer.getInput();
+		if (input == null) {
+			setTitleToolTip(""); //$NON-NLS-1$
+		} else {
+			String inputToolTip = getFrameToolTipText(input);
+			setTitleToolTip(inputToolTip);
+		}
+	}
+	
+	/**
+	 * <p>
+	 * Returns the tool tip text for the given element. Used as the tool tip
+	 * text for the current frame, and for the view title tooltip.
+	 * </p>
+	 * @param anElement 
+	 * @return the tool tip text
+	 * @since 3.4
+	 * 
+	 */
+	public String getFrameToolTipText(Object anElement) {
+		if (commonViewer == null)
+			return ""; //$NON-NLS-1$
+		return ((ILabelProvider) commonViewer.getLabelProvider())
+					.getText(anElement);
+	}
+
+	
+	/**
+	 * <p>
+	 * Note: This method is for internal use only. Clients should not call this
+	 * method.
+	 * </p>
+	 * <p>
+	 * This method will be invoked when the DisposeListener is notified of the
+	 * disposal of the Eclipse view part.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	public void dispose() {
+		if (commonManager != null) {
+			commonManager.dispose();
+		}
+		if (commonActionGroup != null) {
+			commonActionGroup.dispose();
+		}
+		super.dispose();
+	}
+
+	/**
+	 * <p>
+	 * Note: This method is for internal use only. Clients should not call this
+	 * method.
+	 * </p>
+	 * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite,
+	 *      org.eclipse.ui.IMemento)
+	 */
+	public void init(IViewSite aSite, IMemento aMemento)
+			throws PartInitException {
+		super.init(aSite, aMemento);
+		memento = aMemento;
+		if (memento != null) {
+			Integer linkingEnabledInteger = memento.getInteger(LINKING_ENABLED);
+			setLinkingEnabled(((linkingEnabledInteger != null) ? linkingEnabledInteger
+					.intValue() == 1
+					: false));
+		}
+
+	}
+
+	/**
+	 * 
+	 * <p>
+	 * Note: This method is for internal use only. Clients should not call this
+	 * method.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+	 */
+	public void saveState(IMemento aMemento) {
+		aMemento.putInteger(LINKING_ENABLED, (isLinkingEnabled) ? 1 : 0);
+		super.saveState(aMemento);
+		commonManager.saveState(aMemento);
+		commonViewer.getNavigatorContentService().saveState(aMemento);
+	}
+
+	/**
+	 * <p>
+	 * Force the workbench to focus on the Common Navigator tree.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	public void setFocus() {
+		if (commonViewer != null) {
+			commonViewer.getTree().setFocus();
+		}
+	}
+
+	/**
+	 * <p>
+	 * Set the selection to the Common Navigator tree, and expand nodes if
+	 * necessary. Use caution when invoking this method as it can cause
+	 * Navigator Content Extensions to load, thus causing plugin activation.
+	 * </p>
+	 * 
+	 * @see org.eclipse.ui.part.ISetSelectionTarget#selectReveal(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectReveal(ISelection selection) {
+		if (commonViewer != null) {
+			commonViewer.setSelection(selection, true);
+		}
+	}
+
+	/**
+	 * <p>
+	 * Linking is handled by an action which listens for
+	 * changes to the {@link CommonNavigator#IS_LINKING_ENABLED_PROPERTY}.
+	 * Custom implementations that wish to override this functionality, need to
+	 * override the action used by the default ActionGroup and listen for
+	 * changes to the above property.
+	 * 
+	 * @param toEnableLinking
+	 *            True enables linking the current selection with open editors
+	 */
+	public final void setLinkingEnabled(boolean toEnableLinking) {
+		isLinkingEnabled = toEnableLinking;
+		firePropertyChange(IS_LINKING_ENABLED_PROPERTY);
+	}
+
+	/**
+	 * @return Whether linking the current selection with open editors is
+	 *         enabled.
+	 */
+	public final boolean isLinkingEnabled() {
+		return isLinkingEnabled;
+	}
+
+	/**
+	 * <p>
+	 * Provides access to the commonViewer used by the current CommonNavigator.
+	 * The field will not be valid until after
+	 * {@link #init(IViewSite, IMemento)}&nbsp;has been called by the
+	 * Workbench.
+	 * </p>
+	 *  
+	 * @return The (already created) instance of Common Viewer.
+	 */
+	public CommonViewer getCommonViewer() {
+		return commonViewer;
+	}
+
+	/**
+	 * @return The Navigator Content Service which populates this instance of
+	 *         Common Navigator
+	 */
+	public INavigatorContentService getNavigatorContentService() {
+		return getCommonViewer().getNavigatorContentService();
+	}
+
+	/**
+	 * Returns an object which is an instance of the given class
+	 * associated with this object. Returns <code>null</code> if
+	 * no such object can be found.
+	 *
+	 * @param adapter the adapter class to look up
+	 * @return a object castable to the given class, 
+	 *    or <code>null</code> if this object does not
+	 *    have an adapter for the given class
+	 */
+	public Object getAdapter(Class adapter) {
+		if (adapter == COMMON_VIEWER_CLASS) {
+			return getCommonViewer();
+		} else if (adapter == INAVIGATOR_CONTENT_SERVICE) {
+			return getCommonViewer().getNavigatorContentService();
+		} else if (adapter == ISHOW_IN_TARGET_CLASS) {
+			return this;
+		} else if (adapter == ISHOW_IN_SOURCE_CLASS) {
+            return getShowInSource();
+        }
+		return super.getAdapter(adapter);
+	}
+
+    /**
+     * Returns the <code>IShowInSource</code> for this view.
+     */
+    private IShowInSource getShowInSource() {
+        return new IShowInSource() {
+            public ShowInContext getShowInContext() {
+                return new ShowInContext(getCommonViewer().getInput(), getCommonViewer().getSelection());
+            }
+        };
+    }
+
+	/**
+	 * @return The Navigator Content Service which populates this instance of
+	 *         Common Navigator
+	 */
+	public NavigatorActionService getNavigatorActionService() {
+		return commonManager.getNavigatorActionService();
+	}
+
+	/**
+	 * Creates and initializes an instance of {@link CommonViewer}. The ID of
+	 * the Eclipse view part will be used to create the viewer. The ID is
+	 * important as some extensions indicate they should only be used with a
+	 * particular viewer ID.
+	 * 
+	 * @param aParent
+	 *            A composite parent to contain the Common Viewer
+	 * @return An initialized instance of CommonViewer
+	 */
+	protected CommonViewer createCommonViewer(Composite aParent) {
+		CommonViewer aViewer = createCommonViewerObject(aParent);
+		initListeners(aViewer);
+		aViewer.getNavigatorContentService().restoreState(memento);
+		return aViewer;
+	}
+
+	/**
+	 * Constructs and returns an instance of {@link CommonViewer}. The ID of
+	 * the Eclipse view part will be used to create the viewer.
+	 * 
+	 * Override this method if you want a subclass of the CommonViewer
+	 * 
+	 * @param aParent
+	 *            A composite parent to contain the CommonViewer
+	 * @return An instance of CommonViewer
+	 * @since 3.4
+	 */
+	protected CommonViewer createCommonViewerObject(Composite aParent) {
+		return new CommonViewer(getViewSite().getId(), aParent,
+				SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+	}
+
+	/**
+	 * <p>
+	 * Adds the listeners to the Common Viewer.
+	 * </p>
+	 * 
+	 * @param viewer
+	 *            The viewer
+	 * @since 2.0
+	 */
+	protected void initListeners(TreeViewer viewer) {
+
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(final DoubleClickEvent event) {
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						handleDoubleClick(event);
+					}
+				});
+			}
+		});
+	}
+
+	/**
+	 * <p>
+	 * Note: This method is for internal use only. Clients should not call this
+	 * method.
+	 * </p>
+	 * 
+	 * @param anEvent
+	 *            Supplied by the DoubleClick listener.
+	 */
+	protected void handleDoubleClick(DoubleClickEvent anEvent) {
+
+		IAction openHandler = getViewSite().getActionBars().getGlobalActionHandler(ICommonActionConstants.OPEN);
+		
+		if(openHandler == null) {
+			IStructuredSelection selection = (IStructuredSelection) anEvent
+					.getSelection();
+			Object element = selection.getFirstElement();
+	
+			TreeViewer viewer = getCommonViewer();
+			if (viewer.isExpandable(element)) {
+				viewer.setExpandedState(element, !viewer.getExpandedState(element));
+			}
+		}
+	}
+
+	/**
+	 * <p>
+	 * The Common Navigator Manager handles the setup of the Common Navigator
+	 * Menu, manages updates to the ActionBars from
+	 * {@link CommonActionProvider}&nbsp; extensions as the user's selection
+	 * changes, and also updates the status bar based on the current selection.
+	 * 
+	 * @return The Common Navigator Manager class which handles menu population
+	 *         and ActionBars
+	 *         
+	 * @since 3.4        
+	 */
+	protected CommonNavigatorManager createCommonManager() {
+		return new CommonNavigatorManager(this, memento);
+	}
+
+	/**
+	 * <p>
+	 * The ActionGroup is used to populate the ActionBars of Common Navigator
+	 * View Part, and the returned implementation will have an opportunity to
+	 * fill the ActionBars of the view as soon as it is created. ({@link ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)}.
+	 * </p>
+	 * <p>
+	 * The default implementation returns an action group which will add the
+	 * following actions:
+	 * <ul>
+	 * <li>
+	 * <p>
+	 * Link with editor support. Allows the user to toggling linking the current
+	 * selection with the active editors.
+	 * </p>
+	 * <li>
+	 * <p>
+	 * Collapse all. Collapses all expanded nodes.
+	 * </p>
+	 * <li>
+	 * <p>
+	 * Select Filters. Provides access to the "Select Filters" dialog that
+	 * allows users to enable/disable filters and also the Content Extension
+	 * activations.
+	 * </p>
+	 * </ul>
+	 * 
+	 * @return The Action Group to be associated with the Common Navigator View
+	 *         Part.
+	 */
+	protected ActionGroup createCommonActionGroup() {
+		return new CommonNavigatorActionGroup(this, commonViewer, getLinkHelperService());
+	}
+
+	/**
+	 * Used to provide the initial input for the {@link CommonViewer}.  By default
+	 * getSite().getPage().getInput() is used.  Subclass this to return your desired
+	 * input.
+	 * 
+	 * @return The initial input for the viewer. Defaults to
+	 *         getSite().getPage().getInput()
+	 * @since 3.4
+	 */
+	protected Object getInitialInput() {
+		return getSite().getPage().getInput();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablesSource#getSaveables()
+	 */
+	public Saveable[] getSaveables() {
+		return getNavigatorContentService().getSaveablesService().getSaveables();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablesSource#getActiveSaveables()
+	 */
+	public Saveable[] getActiveSaveables() {
+		return getNavigatorContentService().getSaveablesService().getActiveSaveables();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void doSave(IProgressMonitor monitor) {
+		// Ignore. This method is not called because CommonNavigator implements
+		// ISaveablesSource. All saves will go through the ISaveablesSource /
+		// Saveable protocol.
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablePart#doSaveAs()
+	 */
+	public void doSaveAs() {
+		// ignore
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablePart#isDirty()
+	 */
+	public boolean isDirty() {
+		Saveable[] saveables = getSaveables();
+		for (int i = 0; i < saveables.length; i++) {
+			if(saveables[i].isDirty()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed()
+	 */
+	public boolean isSaveAsAllowed() {
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded()
+	 */
+	public boolean isSaveOnCloseNeeded() {
+		return isDirty();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.part.IShowInTarget#show(org.eclipse.ui.part.ShowInContext)
+	 */
+	public boolean show(ShowInContext context) {
+		IStructuredSelection selection = getSelection(context);
+		if (selection != null && !selection.isEmpty()) {
+			selectReveal(selection);
+			return true;
+		} 
+		return false;
+	}
+
+	private IStructuredSelection getSelection(ShowInContext context) {
+		if (context == null)
+			return StructuredSelection.EMPTY;
+		ISelection selection = context.getSelection();
+		if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection)
+			return (IStructuredSelection)selection;
+		Object input = context.getInput();
+		if (input instanceof IEditorInput) {
+			LinkHelperService lhs = getLinkHelperService();
+			return lhs.getSelectionFor((IEditorInput) input);
+		}
+		if (input != null) {
+			return new StructuredSelection(input);
+		}
+		return StructuredSelection.EMPTY;
+	}
+
+	/**
+	 * @since 3.4
+	 */
+	protected synchronized LinkHelperService getLinkHelperService() {
+		if (linkService == null)
+			linkService = new LinkHelperService((NavigatorContentService)getCommonViewer().getNavigatorContentService());
+		return linkService;
+	}
+	
+	/**
+	 * @since 3.4
+	 */
+	protected IMemento getMemento() {
+		return memento;
+	}
+
+	
+	/**
+	 * @param mode
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+	public void setRootMode(int mode) {
+		// For subclassing
+	}
+
+	/**
+	 * @return the root mode
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+	public int getRootMode() {
+		// For subclassing
+		return 0;
+	}
+
+	/**
+	 * @param label
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+	public void setWorkingSetLabel(String label) {
+		// For subclassing
+	}
+
+	/**
+	 * @return the working set label
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+	public String getWorkingSetLabel() {
+		// For subclassing
+		return null;
+	}
+	
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigatorManager.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigatorManager.java
new file mode 100755
index 0000000..1fe2f6b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigatorManager.java
@@ -0,0 +1,326 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Menu;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+//RAP [bmichalik]
+//import org.eclipse.jface.util.OpenStrategy;
+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.ui.IMemento;
+import org.eclipse.ui.IWorkbenchActionConstants;
+//RAP [bmichalik]
+//import org.eclipse.ui.OpenAndLinkWithEditorHelper;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.RetargetAction;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * <p>
+ * Manages the non-viewer responsibilities of the Common Navigator View Part,
+ * including the display and population of the context menu and the registration
+ * of extensions for opening content.
+ * </p>
+ * 
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @since 3.4
+ */
+public final class CommonNavigatorManager implements ISelectionChangedListener {
+
+	private final CommonNavigator commonNavigator;
+
+	private final INavigatorContentService contentService;
+
+	private NavigatorActionService actionService;
+
+	private final IDescriptionProvider commonDescriptionProvider;
+
+	private final IStatusLineManager statusLineManager;
+
+	private final ILabelProvider labelProvider;
+
+	private UpdateActionBarsJob updateActionBars;
+	
+	private ISelectionChangedListener statusBarListener = new ISelectionChangedListener() {
+
+		public void selectionChanged(SelectionChangedEvent anEvent) {
+			updateStatusBar(anEvent.getSelection());
+		}
+		
+	};
+	
+
+	
+	private class UpdateActionBarsJob extends UIJob {
+		public UpdateActionBarsJob(String label) {
+			super(label);
+		}
+		  
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					if(commonNavigator.getCommonViewer().getInput() != null) {
+						IStructuredSelection selection = new StructuredSelection(commonNavigator.getCommonViewer().getInput());
+						actionService.setContext(new ActionContext(selection));
+						actionService.fillActionBars(commonNavigator.getViewSite().getActionBars());
+					}
+				}
+			});
+			return Status.OK_STATUS;
+		}
+	}
+
+	/**
+	 * <p>
+	 * Adds listeners to aNavigator to listen for selection changes and respond
+	 * to mouse events.
+	 * </p>
+	 * 
+	 * @param aNavigator
+	 *            The CommonNavigator managed by this class. Requires a non-null
+	 *            value.
+	 */
+	public CommonNavigatorManager(CommonNavigator aNavigator) {
+		this(aNavigator, null);
+	}
+	
+	/**
+	 * <p>
+	 * Adds listeners to aNavigator to listen for selection changes and respond
+	 * to mouse events.
+	 * </p>
+	 * 
+	 * @param aNavigator
+	 *            The CommonNavigator managed by this class. Requires a non-null
+	 *            value.
+	 * @param aMemento a memento for restoring state, or <code>null</code>
+	 */
+	public CommonNavigatorManager(CommonNavigator aNavigator, IMemento aMemento) {
+		super();
+		commonNavigator = aNavigator;
+		contentService = commonNavigator.getNavigatorContentService();
+		statusLineManager = commonNavigator.getViewSite().getActionBars()
+				.getStatusLineManager();
+		commonDescriptionProvider = contentService
+				.createCommonDescriptionProvider();
+		labelProvider = (ILabelProvider) commonNavigator.getCommonViewer()
+				.getLabelProvider();
+	
+		init(aMemento);
+	}
+
+
+	private void init(IMemento memento) {
+		
+		updateActionBars = new UpdateActionBarsJob(commonNavigator.getTitle());
+		
+		CommonViewer commonViewer = commonNavigator.getCommonViewer();
+		commonViewer.addSelectionChangedListener(this);
+		commonViewer.addPostSelectionChangedListener(statusBarListener);
+		updateStatusBar(commonViewer.getSelection());
+
+		ICommonViewerSite commonViewerSite = CommonViewerSiteFactory
+				.createCommonViewerSite(commonNavigator.getViewSite());
+		actionService = new NavigatorActionService(commonViewerSite,
+				commonViewer, commonViewer.getNavigatorContentService());
+
+		final RetargetAction openAction = new RetargetAction(
+				ICommonActionConstants.OPEN,
+				CommonNavigatorMessages.Open_action_label);
+		commonNavigator.getViewSite().getPage().addPartListener(openAction);
+		openAction.setActionDefinitionId(ICommonActionConstants.OPEN);
+//		RAP [bmichalik]: help system
+//		new OpenAndLinkWithEditorHelper(commonNavigator.getCommonViewer()) {
+//			protected void activate(ISelection selection) {
+//				final int currentMode = OpenStrategy.getOpenMethod();
+//				try {
+//					/*
+//					 * XXX:
+//					 * Currently the only way to activate the editor because there is no API to
+//					 * get an editor input for a given object.
+//					 */
+//					OpenStrategy.setOpenMethod(OpenStrategy.DOUBLE_CLICK);
+//					actionService.setContext(new ActionContext(commonNavigator.getCommonViewer().getSelection()));
+//					actionService.fillActionBars(commonNavigator.getViewSite().getActionBars());
+//					openAction.run();
+//				} finally {
+//					OpenStrategy.setOpenMethod(currentMode);
+//				}
+//			}
+//
+//			protected void linkToEditor(ISelection selection) {
+//				// do nothing: this is handled by org.eclipse.ui.internal.navigator.actions.LinkEditorAction
+//			}
+//
+//			protected void open(ISelection selection, boolean activate) {
+//				actionService.setContext(new ActionContext(commonNavigator.getCommonViewer().getSelection()));
+//				actionService.fillActionBars(commonNavigator.getViewSite().getActionBars());
+//				openAction.run();
+//			}
+//			
+//		};
+
+		if(memento != null)
+			restoreState(memento);
+		
+		initContextMenu();
+		initViewMenu();
+
+	}
+
+	/**
+	 * <p>
+	 * Called by {@link CommonNavigator} when the View Part is disposed.
+	 * 
+	 */
+	public void dispose() {
+		commonNavigator.getCommonViewer().removeSelectionChangedListener(this);
+		commonNavigator.getCommonViewer().removeSelectionChangedListener(statusBarListener);
+		actionService.dispose();
+	}
+
+	/**
+	 * 
+	 * @param anEvent
+	 *            An event indicating the current selection of the
+	 *            {@link CommonViewer}
+	 * 
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(SelectionChangedEvent anEvent) {
+		if (anEvent.getSelection() instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) anEvent
+					.getSelection();
+			actionService.setContext(new ActionContext(structuredSelection));
+			actionService.fillActionBars(commonNavigator.getViewSite()
+					.getActionBars());
+		}
+	}
+
+	/**
+	 * @param aMemento
+	 *            Used to restore state of action extensions via the
+	 *            {@link NavigatorActionService}.
+	 */
+	public void restoreState(IMemento aMemento) {
+		actionService.restoreState(aMemento);
+		 
+	}
+
+	/**
+	 * @param aMemento
+	 *            Used to save state of action extensions via the
+	 *            {@link NavigatorActionService}.
+	 */
+	public void saveState(IMemento aMemento) {
+		actionService.saveState(aMemento);
+	}
+
+	/**
+	 * <p>
+	 * Fills aMenuManager with menu contributions from the
+	 * {@link NavigatorActionService}.
+	 * </p>
+	 * 
+	 * @param aMenuManager
+	 *            A popup menu
+	 * @see NavigatorActionService#fillContextMenu(IMenuManager)
+	 * 
+	 */
+	protected void fillContextMenu(IMenuManager aMenuManager) {
+		ISelection selection = commonNavigator.getCommonViewer().getSelection();
+		actionService.setContext(new ActionContext(selection));
+		actionService.fillContextMenu(aMenuManager);
+	}
+
+	/**
+	 * <p>
+	 * Initializes and registers the context menu.
+	 * </p>
+	 */
+	protected void initContextMenu() {
+		MenuManager menuMgr = new MenuManager(contentService
+				.getViewerDescriptor().getPopupMenuId());
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+
+			public void menuAboutToShow(IMenuManager manager) {
+				fillContextMenu(manager);
+			}
+		});
+		TreeViewer commonViewer = commonNavigator.getCommonViewer();
+		Menu menu = menuMgr.createContextMenu(commonViewer.getTree());
+
+		commonViewer.getTree().setMenu(menu);
+
+		actionService.prepareMenuForPlatformContributions(menuMgr,
+				commonViewer, false);
+
+	}
+
+	protected void initViewMenu() {
+		IMenuManager viewMenu = commonNavigator.getViewSite().getActionBars()
+				.getMenuManager();
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS
+				+ "-end"));//$NON-NLS-1$
+		
+		updateActionBars.schedule(NavigatorPlugin.ACTION_BAR_DELAY);
+		
+	}
+
+	/**
+	 * @param aSelection
+	 *            The current selection from the {@link CommonViewer}
+	 */
+	protected void updateStatusBar(ISelection aSelection) {
+
+		Image img = null;
+		if (aSelection != null && !aSelection.isEmpty()
+				&& aSelection instanceof IStructuredSelection) {
+			img = labelProvider.getImage(((IStructuredSelection) aSelection)
+					.getFirstElement());
+		}
+
+		statusLineManager.setMessage(img, commonDescriptionProvider
+				.getDescription(aSelection));
+	}
+
+	/**
+	 * 
+	 * @return The action service used by this manager
+	 */
+	public NavigatorActionService getNavigatorActionService() {
+		return actionService;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java
new file mode 100755
index 0000000..23d9e59
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java
@@ -0,0 +1,592 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * Oakland Software (Francis Upton - francisu@ieee.org) 
+ *    bug 197113 Project Explorer drag and drop selection not working properly
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.internal.navigator.CommonNavigatorFrameSource;
+import org.eclipse.ui.internal.navigator.ContributorTrackingSet;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+//import org.eclipse.ui.internal.navigator.NavigatorDecoratingLabelProvider;
+import org.eclipse.ui.internal.navigator.NavigatorPipelineService;
+import org.eclipse.ui.internal.navigator.dnd.NavigatorDnDService;
+import org.eclipse.ui.internal.navigator.framelist.FrameList;
+
+/**
+ * 
+ * Provides the Tree Viewer for the Common Navigator. Content and labels are
+ * provided by an instance of {@link INavigatorContentService}&nbsp; which uses
+ * the ID supplied in the constructor
+ * {@link CommonViewer#CommonViewer(String, Composite, int)} or through
+ * {@link NavigatorContentServiceFactory#createContentService(String, org.eclipse.jface.viewers.StructuredViewer)}.
+ * 
+ * <p>
+ * Clients may extend this class.
+ * </p>
+ * 
+ * <p>
+ * Note that as of 3.2.1 and 3.3, the common viewer caches its selection.
+ * Clients must not set the selection of the viewer's tree control directly.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public class CommonViewer extends TreeViewer {
+
+	private final NavigatorContentService contentService;
+
+	private ISelection cachedSelection;
+	
+	private FrameList frameList;
+	
+	private CommonNavigator commonNavigator;
+
+	private ICommonViewerMapper _mapper;
+	
+	/**
+	 * <p>
+	 * Constructs the Tree Viewer for the Common Navigator and the corresponding
+	 * NavigatorContentService. The NavigatorContentService will provide the
+	 * Content Provider and Label Provider -- these need not be supplied by
+	 * clients.
+	 * <p>
+	 * For the valid bits to supply in the style mask (aStyle), see
+	 * documentation provided by {@link TreeViewer}.
+	 * </p>
+	 * 
+	 * @param aViewerId
+	 *            An id tied to the extensions that is used to focus specific
+	 *            content to a particular instance of the Common Navigator
+	 * @param aParent
+	 *            A Composite parent to contain the actual SWT widget
+	 * @param aStyle
+	 *            A style mask that will be used to create the TreeViewer
+	 *            Composite.
+	 */
+	public CommonViewer(String aViewerId, Composite aParent, int aStyle) {
+		super(aParent, aStyle);
+		contentService = new NavigatorContentService(aViewerId, this);
+		init();
+	}
+
+	/**
+	 * <p>
+	 * Initializes the content provider, label provider, and drag and drop
+	 * support. Should not be called by clients -- this method is invoked when
+	 * the constructor is invoked.
+	 * </p>
+	 */
+	protected void init() {
+		setUseHashlookup(true);
+		setContentProvider(contentService.createCommonContentProvider());
+		
+		// RAP [bmichalik]: label provider
+		setLabelProvider(contentService.createCommonLabelProvider());
+//		setLabelProvider(new NavigatorDecoratingLabelProvider(contentService.createCommonLabelProvider()));
+		// RAPEND
+		
+
+		initDragAndDrop();
+	}
+
+	void setCommonNavigator(CommonNavigator navigator) {
+		commonNavigator = navigator;
+	}
+
+	/**
+	 * Sets the {@link ICommonViewerMapper} to work with this viewer.
+	 * 
+	 * @param mapper
+	 * @since 3.4
+	 */
+	public void setMapper(ICommonViewerMapper mapper) {
+		_mapper = mapper;
+	}
+	
+	/**
+	 * Gets the {@link ICommonViewerMapper} assigned to this viewer.
+	 * 
+	 * @return the mapper
+	 * @since 3.4
+	 */
+	public ICommonViewerMapper getMapper() {
+		return _mapper;
+	}
+	
+	/**
+	 * @return the CommonNavigator
+	 * @since 3.4
+	 */
+	public CommonNavigator getCommonNavigator() {
+		return commonNavigator;
+	}
+	
+	protected void removeWithoutRefresh(Object[] elements) {
+		super.remove(elements);
+	}
+
+	/**
+	 * <p>
+	 * Adds DND support to the Navigator. Uses hooks into the extensible
+	 * framework for DND.
+	 * </p>
+	 * <p>
+	 * By default, the following Transfer types are supported:
+	 * <ul>
+	 * <li>LocalSelectionTransfer.getInstance(),
+	 * <li>PluginTransfer.getInstance()
+	 * </ul>
+	 * </p>
+	 * 
+	 * @see CommonDragAdapter
+	 * @see CommonDropAdapter
+	 */
+	protected void initDragAndDrop() {
+
+		int operations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+
+		CommonDragAdapter dragAdapter = createDragAdapter();
+		addDragSupport(operations, dragAdapter.getSupportedDragTransfers(),
+				dragAdapter);
+		
+		CommonDropAdapter dropAdapter = createDropAdapter();
+		addDropSupport(operations, dropAdapter.getSupportedDropTransfers(),
+				dropAdapter);
+
+		NavigatorDnDService dnd = (NavigatorDnDService)contentService.getDnDService();
+		dnd.setDropAdaptor(dropAdapter);
+	}
+
+	
+	/**
+	 * Creates the {@link CommonDragAdapter}, this is used to provide a subclass
+	 * if desired.
+	 * 
+	 * @return the CommonDragAdapter
+	 * 
+	 * @since 3.4
+	 */
+	protected CommonDragAdapter createDragAdapter() {
+		return new CommonDragAdapter(contentService, this);
+	}
+	
+	
+	/**
+	 * Creates the {@link CommonDropAdapter}, this is used to provide a subclass
+	 * if desired.
+	 * 
+	 * @return the CommonDropAdapter
+	 * 
+	 * @since 3.4
+	 */
+	protected CommonDropAdapter createDropAdapter() {
+		return new CommonDropAdapter(contentService, this);
+	}
+	
+	
+	/*
+	 * @see ContentViewer#handleLabelProviderChanged(LabelProviderChangedEvent)
+	 */
+	protected void handleLabelProviderChanged(LabelProviderChangedEvent event) {
+
+		Object[] changed = event.getElements();
+		if (changed != null) {
+			List others = new ArrayList();
+			for (int i = 0; i < changed.length; i++) {
+				if (changed[i] == null)
+					continue;
+				
+				if (_mapper != null) {
+					if (_mapper.handlesObject(changed[i])) {
+						_mapper.objectChanged(changed[i]);
+						continue;
+					}
+				}
+				others.add(changed[i]);
+			}
+			if (others.isEmpty()) {
+				return;
+			}
+			event = new LabelProviderChangedEvent((IBaseLabelProvider) event
+					.getSource(), others.toArray());
+		}
+		super.handleLabelProviderChanged(event);
+	}
+
+	protected void handleDispose(DisposeEvent event) {
+		dispose();
+		super.handleDispose(event);
+	}
+ 
+	/**
+	 * <p>
+	 * Disposes of the NavigatorContentService, which will dispose the Content
+	 * and Label providers.
+	 * </p>
+	 */
+	public void dispose() {
+		if (contentService != null) {
+			contentService.dispose();
+		}
+		clearSelectionCache();
+	}
+
+	/**
+	 * Sets this viewer's sorter and triggers refiltering and resorting of this
+	 * viewer's element. Passing <code>null</code> turns sorting off.
+	 * 
+	 * @param sorter
+	 *            a viewer sorter, or <code>null</code> if none
+	 */
+	public void setSorter(ViewerSorter sorter) {
+		if (sorter != null && sorter instanceof CommonViewerSorter) {
+			((CommonViewerSorter) sorter).setContentService(contentService);
+		}
+
+		super.setSorter(sorter);
+	}
+
+	/**
+	 * <p>
+	 * The {@link INavigatorContentService}provides the hook into the framework
+	 * to provide content from the various extensions.
+	 * </p>
+	 * 
+	 * @return The {@link INavigatorContentService}that was created when the
+	 *         viewer was created.
+	 */
+	public INavigatorContentService getNavigatorContentService() {
+		return contentService;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#add(java.lang.Object,
+	 *      java.lang.Object[])
+	 */
+	public void add(Object parentElement, Object[] childElements) {
+		NavigatorPipelineService pipeDream = (NavigatorPipelineService) contentService
+				.getPipelineService();
+
+		PipelinedShapeModification modification = new PipelinedShapeModification(
+				parentElement, new ContributorTrackingSet(contentService,
+						childElements));
+
+		pipeDream.interceptAdd(modification);
+
+		Object parent = (parentElement == getInput()) ? getInput()
+				: modification.getParent();
+
+		super.add(parent, modification.getChildren().toArray());
+	}
+
+	/**
+	 * <p>
+	 * Removals are handled by refreshing the parents of each of the given
+	 * elements. The parents are determined via calls ot the contentProvider.
+	 * </p>
+	 * 
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#remove(java.lang.Object[])
+	 */
+	public void remove(Object[] elements) {
+		NavigatorPipelineService pipeDream = (NavigatorPipelineService) contentService
+				.getPipelineService();
+
+		PipelinedShapeModification modification = new PipelinedShapeModification(
+				null, new ContributorTrackingSet(contentService, elements));
+
+		pipeDream.interceptRemove(modification);
+
+		super.remove(modification.getChildren().toArray());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.StructuredViewer#refresh(java.lang.Object,
+	 *      boolean)
+	 */
+	public void refresh(Object element, boolean updateLabels) {
+
+		if(element != getInput()) {
+			INavigatorPipelineService pipeDream = contentService
+					.getPipelineService();
+	
+			PipelinedViewerUpdate update = new PipelinedViewerUpdate();
+			update.getRefreshTargets().add(element);
+			update.setUpdateLabels(updateLabels);
+			/* if the update is modified */
+			if (pipeDream.interceptRefresh(update)) {
+				/* intercept and apply the update */
+				boolean toUpdateLabels = update.isUpdateLabels();
+				for (Iterator iter = update.getRefreshTargets().iterator(); iter
+						.hasNext();) {
+					super.refresh(iter.next(), toUpdateLabels);
+				}
+			} else {
+				super.refresh(element, updateLabels);
+			}
+		} else {
+			super.refresh(element, updateLabels);
+		}
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers.ISelection, boolean)
+	 */
+	public void setSelection(ISelection selection, boolean reveal) { 
+
+		if(selection instanceof IStructuredSelection) {
+			IStructuredSelection sSelection = (IStructuredSelection) selection;
+			
+			INavigatorPipelineService pipeDream = contentService
+					.getPipelineService();
+
+			PipelinedViewerUpdate update = new PipelinedViewerUpdate();
+			update.getRefreshTargets().addAll(sSelection.toList());
+			update.setUpdateLabels(false);
+			/* if the update is modified */
+			if (pipeDream.interceptRefresh(update)) {
+				/* intercept and apply the update */ 
+				super.setSelection(new StructuredSelection(update.getRefreshTargets().toArray()) , reveal);
+			} else {
+				super.setSelection(selection, reveal);
+			}
+		}
+	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ContentViewer#hookControl(Control)
+     */
+    protected void hookControl(Control control) {
+    	super.hookControl(control);
+        // FIXME - This caching thing should not be here; it's brittle.
+        // The underlying problem of over-calling of getSelection() should
+        // be addressed instead (see bugs 144294 and 140032)
+        // The DragStart event will come before the SelectionEvent on
+        // some platforms (GTK).  Since DragStart can turn around and
+        // call getSelection(), we need to clear the cache.
+        control.addMouseListener(new MouseAdapter() {
+            public void mouseDown(MouseEvent e) {
+            	clearSelectionCache();
+            }
+        });
+    }
+
+
+	/**
+	 * Update an item in the tree.
+	 * 
+	 * @param item the item in the tree to update
+	 * @since 3.4
+	 * 
+	 */
+	public void doUpdateItem(Widget item) {
+		doUpdateItem(item, item.getData(), true);
+	}
+
+	/*
+	 * @see StructuredViewer#mapElement(Object, Widget)
+	 */
+	protected void mapElement(Object element, Widget item) {
+		super.mapElement(element, item);
+		if (_mapper != null && item instanceof Item) {
+			_mapper.addToMap(element, (Item) item);
+		}
+	}
+
+	/*
+	 * @see StructuredViewer#unmapElement(Object, Widget)
+	 */
+	protected void unmapElement(Object element, Widget item) {
+		if (_mapper != null && item instanceof Item) {
+			_mapper.removeFromMap(element, (Item) item);
+		}
+		super.unmapElement(element, item);
+	}
+
+	/*
+	 * @see StructuredViewer#unmapAllElements()
+	 */
+	protected void unmapAllElements() {
+		if (_mapper != null)
+			_mapper.clearMap();
+		super.unmapAllElements();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#setSelectionToWidget(java.util.List, boolean)
+	 */
+	protected void setSelectionToWidget(List v, boolean reveal) {
+		clearSelectionCache();
+		super.setSelectionToWidget(v, reveal);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#handleDoubleSelect(org.eclipse.swt.events.SelectionEvent)
+	 */
+	protected void handleDoubleSelect(SelectionEvent event) {
+		clearSelectionCache();
+		super.handleDoubleSelect(event);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.StructuredViewer#handleOpen(org.eclipse.swt.events.SelectionEvent)
+	 */
+	protected void handleOpen(SelectionEvent event) {
+		clearSelectionCache();
+		super.handleOpen(event);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.StructuredViewer#handlePostSelect(org.eclipse.swt.events.SelectionEvent)
+	 */
+	protected void handlePostSelect(SelectionEvent e) {
+		clearSelectionCache();
+		super.handlePostSelect(e);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.StructuredViewer#handleSelect(org.eclipse.swt.events.SelectionEvent)
+	 */
+	protected void handleSelect(SelectionEvent event) {
+		clearSelectionCache();
+		super.handleSelect(event);
+	}
+	
+	/**
+	 * Clears the selection cache.
+	 */
+	private void clearSelectionCache() {
+		cachedSelection = null;
+	}
+	
+	/**
+	 * Returns the current selection.
+	 * <p>
+	 * Note that as of 3.2.1 and 3.3, the common viewer caches its selection.
+	 * Clients must not set the selection of the viewer's tree control directly.
+	 * </p>
+	 * 
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#getSelection()
+	 */
+	public ISelection getSelection() {
+		if (cachedSelection == null) {
+			cachedSelection = super.getSelection();
+		}
+		return cachedSelection;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.StructuredViewer#refresh(java.lang.Object)
+	 */
+	public void refresh(Object element) {
+		refresh(element, true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.StructuredViewer#update(java.lang.Object,
+	 *      java.lang.String[])
+	 */
+	public void update(Object element, String[] properties) {
+		if(element != getInput()) {
+			INavigatorPipelineService pipeDream = contentService
+					.getPipelineService();
+	
+			PipelinedViewerUpdate update = new PipelinedViewerUpdate();
+			update.getRefreshTargets().add(element);
+			update.setUpdateLabels(true);
+			/* if the update is modified */
+			if (pipeDream.interceptUpdate(update)) {
+				/* intercept and apply the update */ 
+				for (Iterator iter = update.getRefreshTargets().iterator(); iter
+						.hasNext();) {
+					super.update(iter.next(), properties);
+				}
+			} else {
+				super.update(element, properties);
+			}
+		} else {
+			super.update(element, properties);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return contentService.toString() + " Viewer"; //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#internalRefresh(java.lang.Object,
+	 *      boolean)
+	 */
+	protected void internalRefresh(Object element, boolean updateLabels) {
+		if (element == null && getRoot() == null) {
+			return;
+		}
+		super.internalRefresh(element, updateLabels);
+	}
+
+	/**
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+    public void createFrameList() {
+        CommonNavigatorFrameSource frameSource = new CommonNavigatorFrameSource(commonNavigator);
+        frameList = new FrameList(frameSource);
+        frameSource.connectTo(frameList);
+    }
+    
+	/**
+	 * @return a FrameList
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @since 3.4
+	 */
+    public FrameList getFrameList() {
+        return frameList;
+    }
+	
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSiteFactory.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSiteFactory.java
new file mode 100755
index 0000000..27b6903
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSiteFactory.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.internal.navigator.CommonViewerSiteDelegate;
+import org.eclipse.ui.internal.navigator.CommonViewerSiteIEditorPartSiteDelegate;
+import org.eclipse.ui.internal.navigator.CommonViewerSiteIPageSiteDelegate;
+import org.eclipse.ui.internal.navigator.CommonViewerSiteIViewSiteDelegate;
+import org.eclipse.ui.part.IPageSite;
+
+/**
+ * Allows clients to create {@link ICommonViewerSite} for a variety of contexts.
+ * The {@link ICommonViewerSite} may be used by the
+ * {@link NavigatorActionService} to allow customization for any
+ * {@link CommonActionProvider} used by a particular instance of the Common
+ * Navigator.
+ *  
+ * 
+ * @since 3.2
+ */
+public final class CommonViewerSiteFactory {
+	/**
+	 * 
+	 * @param aViewSite
+	 *            The viewer site that should be delegated to to satisfy the
+	 *            contract of ICommonViewerSite.
+	 * @return An ICommonViewerSite that delegates to the given parameter.
+	 */
+	public static ICommonViewerWorkbenchSite createCommonViewerSite(
+			IViewSite aViewSite) {
+		return new CommonViewerSiteIViewSiteDelegate(aViewSite);
+	}
+
+	/**
+	 * 
+	 * @param aEditorSite
+	 *            The editor site that should be delegated to to satisfy the
+	 *            contract of ICommonViewerSite.
+	 * @return An ICommonViewerSite that delegates to the given parameter.
+	 */
+	public static ICommonViewerWorkbenchSite createCommonViewerSite(
+			IEditorSite aEditorSite) {
+		return new CommonViewerSiteIEditorPartSiteDelegate(aEditorSite);
+	}
+
+	/**
+	 * 
+	 * @param anId
+	 *            The unique identifier corresponding to the abstract viewer for
+	 *            the returned ICommonViewerSite.
+	 * 
+	 * @param aSelectionProvider
+	 *            The selection provider that will initially be returned by
+	 *            {@link ICommonViewerSite#getSelectionProvider()}
+	 * 
+	 * @param aShell
+	 *            The shell that will be returned by
+	 *            {@link ICommonViewerSite#getShell()}
+	 * @return An ICommonViewerSite that delegates to the given parameter.
+	 */
+	public static ICommonViewerSite createCommonViewerSite(String anId,
+			ISelectionProvider aSelectionProvider, Shell aShell) {
+		return new CommonViewerSiteDelegate(anId, aSelectionProvider, aShell);
+	}
+
+	/**
+	 * 
+	 * @param anId
+	 *            The unique identifier corresponding to the abstract viewer for
+	 *            the returned ICommonViewerSite.
+	 * @param aPageSite
+	 *            The page site that should be delegated to to satisfy the
+	 *            contract of ICommonViewerSite.
+	 * @return An ICommonViewerSite that delegates to the given parameter.
+	 */
+	public static ICommonViewerSite createCommonViewerSite(String anId,
+			IPageSite aPageSite) {
+		return new CommonViewerSiteIPageSiteDelegate(anId, aPageSite);
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSorter.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSorter.java
new file mode 100755
index 0000000..7c7071d
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSorter.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.Set;
+
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreePathViewerSorter;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider;
+import org.eclipse.ui.internal.navigator.NavigatorPlugin;
+import org.eclipse.ui.internal.navigator.Policy;
+
+/**
+ * 
+ * Provides an implementation of TreeViewerSorter that uses the given parent to determine the
+ * correct sort order based on the defined
+ * <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent/commonSorter</b> elements
+ * available in the set of <i>visible</i> content extensions.
+ * 
+ * <p>
+ * The CommonViewerSorter must be assigned a {@link INavigatorContentService} to drive its sorting
+ * algorithm. Without a valid content service, the sorter will return the default ordering.
+ * </p>
+ * <p>
+ * A CommonViewerSorter may not be attached to more than one CommonViewer.
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public final class CommonViewerSorter extends TreePathViewerSorter {
+	
+	private static final int LEFT_UNDERSTANDS = 1;
+	private static final int RIGHT_UNDERSTANDS = 2; 
+	private static final int BOTH_UNDERSTAND = LEFT_UNDERSTANDS | RIGHT_UNDERSTANDS; 
+
+	private NavigatorContentService contentService;
+
+	private INavigatorSorterService sorterService;
+
+	/**
+	 * Create a sorter service attached to the given content service.
+	 * 
+	 * @param aContentService
+	 *            The content service used by the viewer that will use this sorter service.
+	 * @since 3.3
+	 */
+	public void setContentService(INavigatorContentService aContentService) {
+		contentService = (NavigatorContentService) aContentService;
+		sorterService = contentService.getSorterService();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object)
+	 */
+	public int category(Object element) {
+		if (contentService == null)
+			return 0;
+
+		INavigatorContentDescriptor source = getSource(element);
+		return source != null ? source.getSequenceNumber() : Priority.NORMAL_PRIORITY_VALUE;
+	}
+
+	private void logMissingExtension(Object parent, Object object) {
+		NavigatorPlugin.logError(0, NLS.bind(CommonNavigatorMessages.CommonViewerSorter_NoContentExtensionForObject,
+				object != null ? object.toString() : "<null>", parent != null ? parent.toString() : "<null>"), null); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	public int compare(Viewer viewer, TreePath parentPath, Object e1, Object e2) {
+		if (contentService == null)
+			return -1;
+		INavigatorContentDescriptor sourceOfLvalue = getSource(e1);
+		INavigatorContentDescriptor sourceOfRvalue = getSource(e2);
+		
+		Object parent;
+		if (parentPath == null) {
+			parent = viewer.getInput();
+		} else {
+			parent = parentPath.getLastSegment();
+		}
+		
+		if (sourceOfLvalue == null) {
+			logMissingExtension(parent, e1);
+			return -1;
+		}
+		if (sourceOfRvalue == null) {
+			logMissingExtension(parent, e2);
+			return -1;
+		}
+
+		ViewerSorter sorter = null;
+
+		// shortcut if contributed by same source
+		if (sourceOfLvalue == sourceOfRvalue) {
+			sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2);
+		} else {
+
+			boolean flags[] = new boolean[4];
+			flags[0] = sourceOfLvalue.isTriggerPoint(e1);
+			flags[1] = sourceOfLvalue.isTriggerPoint(e2);
+			flags[2] = sourceOfRvalue.isTriggerPoint(e1);
+			flags[3] = sourceOfRvalue.isTriggerPoint(e2);
+
+			int whoknows = 0;
+			whoknows = whoknows | (flags[0] & flags[1] ? LEFT_UNDERSTANDS : 0);
+			whoknows = whoknows | (flags[2] & flags[3] ? RIGHT_UNDERSTANDS : 0);
+
+			switch (whoknows) {
+			case BOTH_UNDERSTAND:
+				sorter = sourceOfLvalue.getSequenceNumber() > sourceOfRvalue.getSequenceNumber() ? sorterService
+						.findSorter(sourceOfLvalue, parent, e1, e2)
+						: sorterService.findSorter(sourceOfRvalue, parent, e1, e2);
+				break;
+			case LEFT_UNDERSTANDS:
+				sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2);
+				break;
+			case RIGHT_UNDERSTANDS:
+				sorter = sorterService.findSorter(sourceOfRvalue, parent, e1, e2);
+				break;
+			}
+		}
+		
+		if (sorter != null) {
+			return sorter.compare(viewer, e1, e2);
+		}
+ 
+		int categoryDelta = category(e1) - category(e2);
+		if (categoryDelta == 0) {
+			return super.compare(viewer, e1, e2);
+		}
+		return categoryDelta;
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerComparator#isSorterProperty(java.lang.Object, java.lang.String)
+     */
+    public boolean isSorterProperty(Object element, String property) {
+    	// Have to get the parent path from the content provider
+    	NavigatorContentServiceContentProvider cp = (NavigatorContentServiceContentProvider) contentService.createCommonContentProvider();
+    	TreePath[] parentPaths = cp.getParents(element);
+    	for (int i = 0; i < parentPaths.length; i++) {
+    		if (isSorterProperty(parentPaths[i], element, property))
+    			return true;
+    	}
+    	return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.TreePathViewerSorter#isSorterProperty(org.eclipse.jface.viewers.TreePath, java.lang.Object, java.lang.String)
+     */
+    public boolean isSorterProperty(TreePath parentPath, Object element, String property) {
+		INavigatorContentDescriptor contentDesc = getSource(element);
+		if (parentPath.getSegmentCount() == 0)
+			return false;
+		ViewerSorter sorter = sorterService.findSorter(contentDesc, parentPath.getLastSegment(), element, null);
+		if (sorter != null)
+			return sorter.isSorterProperty(element, property);
+        return false;
+    }
+
+    
+	private INavigatorContentDescriptor getSource(Object o) {
+		// Fast path - just an optimization for the common case
+		INavigatorContentDescriptor ncd = contentService.getSourceOfContribution(o);
+		if (ncd != null) {
+			if (Policy.DEBUG_SORT)
+				System.out.println("sort: " + ncd + " object: " + o); //$NON-NLS-1$//$NON-NLS-2$
+			return ncd;
+		}
+
+		Set descriptors = contentService.findDescriptorsByTriggerPoint(o, NavigatorContentService.CONSIDER_OVERRIDES);
+		if (descriptors != null && descriptors.size() > 0) {
+			ncd = (INavigatorContentDescriptor) descriptors.iterator().next();
+			if (Policy.DEBUG_SORT)
+				System.out.println("sort: " + ncd + " object: " + o); //$NON-NLS-1$//$NON-NLS-2$
+			return ncd;
+		}
+		if (Policy.DEBUG_SORT)
+			System.out.println("sort: NULL object: " + o); //$NON-NLS-1$
+		return null;
+	}
+	
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionConstants.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionConstants.java
new file mode 100755
index 0000000..d7282c5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionConstants.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+/**
+ * 
+ * Defines constants for the retargetable actions available in the Common Viewer
+ * context menu.
+ * 
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * 
+ */
+public interface ICommonActionConstants {
+
+	/**
+	 * The 'open' retargetable action id.
+	 */
+	public static final String OPEN = "org.eclipse.ui.navigator.Open"; //$NON-NLS-1$
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionExtensionSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionExtensionSite.java
new file mode 100755
index 0000000..feb82fb
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonActionExtensionSite.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.StructuredViewer;
+
+/**
+ * 
+ * Provides access to information required for the initialization of
+ * CommonActionProviders.
+ * 
+ * <p>
+ * See the documentation of the <b>org.eclipse.ui.navigator.navigatorContent</b>
+ * extension point and {@link CommonActionProvider} for more information on
+ * contributing actions.
+ * </p> 
+ * 
+ * @see CommonActionProvider
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * 
+ * @since 3.2
+ */
+public interface ICommonActionExtensionSite {
+
+	/**
+	 * By default, the extension state model returned is for the associated
+	 * content extension (if this is NOT a top-level action provider).
+	 * Otherwise, clients may use
+	 * {@link INavigatorContentService#findStateModel(String)} to locate the
+	 * state model of another content extension.
+	 * 
+	 * @return The extension state model of the associated Content Extension (if
+	 *         any) or a state model specifically for this
+	 *         ICommonActionProvider.
+	 * @see IExtensionStateModel
+	 */
+	IExtensionStateModel getExtensionStateModel();
+
+	/**
+	 * 
+	 * @return The unique identifier of the associated content extension or the
+	 *         top-level Common Action Provider.
+	 */
+	String getExtensionId();
+
+	/**
+	 * 
+	 * @return The id of the associated plugin for the Common Action Provider.
+	 * @since 3.4
+	 */
+	String getPluginId();
+
+	/**
+	 * 
+	 * @return The associated content service for the instantiated Common Action
+	 *         Provider.
+	 */
+	INavigatorContentService getContentService();
+
+	/**
+	 * 
+	 * @return The associated structured viewer for the instantiated Common
+	 *         Action Provider.
+	 */
+	StructuredViewer getStructuredViewer();
+
+	/**
+	 * 
+	 * @return The ICommonViewerSite from the CommonViewer.
+	 */
+	ICommonViewerSite getViewSite();
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentExtensionSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentExtensionSite.java
new file mode 100755
index 0000000..0113952
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentExtensionSite.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.ui.IMemento;
+
+/**
+ * 
+ * Provides initialization data for a content extension. Supplied in the
+ * <code>init()</code> methods of various interfaces allowed by the framework.
+ * 
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @see ICommonLabelProvider
+ * @see ICommonContentProvider
+ * 
+ */
+public interface ICommonContentExtensionSite {
+
+	/**
+	 * The extension state model allows an extension to isolate all of the
+	 * dynamic state information that affects how it presents content or
+	 * displays actions. Clients may use this state model to drive values from
+	 * actions that will cause label or content providers to change their
+	 * behavior.
+	 * 
+	 * @return The state model associated with this logical extension.
+	 */
+	IExtensionStateModel getExtensionStateModel();
+
+	/**
+	 * Advanced extensions may expose user-customizeable properties that affect
+	 * the structure or behavior of the extension. Clients may use the given
+	 * memento to restore or persist these settings between sessions.
+	 * 
+	 * @return A memento which can be used to restore or persist settings
+	 *         between workbench sessions.
+	 */
+	IMemento getMemento(); 
+  
+	/**
+	 * 
+	 * @return The extension instance. Clients may use their extension
+	 *         instance to get access to other components defined by the logical
+	 *         extension.
+	 */
+	INavigatorContentExtension getExtension();
+	
+	/**
+	 * 
+	 * @return The content service associated with this extension site.
+	 * @since 3.3
+	 */
+	INavigatorContentService getService();
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentProvider.java
new file mode 100755
index 0000000..125f68b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonContentProvider.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/**
+ * 
+ * Allows extensions to vary their behavior based on properties in the extension
+ * model and the given memento. The state model should be initialized from
+ * values in the memento if necessary.
+ * 
+ * <p>
+ * Clients should refer to the <b>org.eclipse.ui.navigator.navigatorContent</b>
+ * extension point for more information on building a content extension.
+ * </p>
+ * 
+ * <p>
+ * Clients may implement this interface if they require the methods defined here.
+ * {@link ITreeContentProvider} is respected by the Common
+ * Navigator.
+ * </p>
+ * 
+ * @since 3.2
+ * 
+ */
+public interface ICommonContentProvider extends ITreeContentProvider,
+		IMementoAware {
+
+	/**
+	 * Initialize the content provider with the given configuration.
+	 * 
+	 * @param aConfig
+	 *            The extension site provides information that some extensions
+	 *            will find useful to configure themselves properly in a
+	 *            particular viewer.
+	 * 
+	 * @see ICommonLabelProvider
+	 */
+	void init(ICommonContentExtensionSite aConfig);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonFilterDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonFilterDescriptor.java
new file mode 100755
index 0000000..5a010b3
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonFilterDescriptor.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+/**
+ * Provides information about a <b>commonFilter</b> extension.
+ *  
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * 
+ */
+public interface ICommonFilterDescriptor {
+	
+	/**
+	 * 
+	 * @return An identifier used to determine whether the filter is visible.
+	 * 
+	 */
+	String getId();
+
+	/**
+	 * 
+	 * @return A translated name to identify the filter
+	 */
+	String getName();
+
+	/**
+	 * 
+	 * @return A translated description to explain to the user what the defined
+	 *         filter will hide from the view.
+	 */
+	String getDescription();
+
+	/**
+	 * 
+	 * @return Indicates the filter should be in an "Active" state by default.
+	 */
+	boolean isActiveByDefault();
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonLabelProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonLabelProvider.java
new file mode 100755
index 0000000..dc499ac
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonLabelProvider.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+
+/**
+ * 
+ * Allows extensions to vary their behavior based on properties in the extension
+ * model and the given memento.
+ * 
+ * <p>
+ * Clients should refer to the <b>org.eclipse.ui.navigator.navigatorContent</b>
+ * extension point for more information on building a content extension.
+ * </p>
+ * <p>
+ * Clients should not dispose of any Image Resources that might be shared by
+ * other extensions when their Label Provider is disposed. When a content extension
+ * is deactivated, both its content and label providers are disposed, but the
+ * viewer remains visible to the user. If clients dispose of Image Resources used
+ * by other extensions, then it will cause problems for those extensions and the 
+ * viewer in general. 
+ * </p>
+ * <p>
+ * Clients may implement this interface if they require the methods provided here.
+ * {@link org.eclipse.jface.viewers.ILabelProvider} is respected by the Common
+ * Navigator.
+ * </p>
+ * 
+ * @since 3.2
+ */
+public interface ICommonLabelProvider extends ILabelProvider, IMementoAware,
+		IDescriptionProvider {
+
+	/**
+	 * Initialize the label provider with the given configuration.
+	 * 
+	 * @param aConfig
+	 *            The extension site provides information that some extensions
+	 *            will find useful to configure themselves properly in a
+	 *            particular viewer.
+	 * 
+	 * @see ICommonContentProvider
+	 */
+	void init(ICommonContentExtensionSite aConfig);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonMenuConstants.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonMenuConstants.java
new file mode 100755
index 0000000..3f98370
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonMenuConstants.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Feb 5, 2004
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+package org.eclipse.ui.navigator;
+
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * Defines strings used for menu insertion points.
+ * 
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ICommonMenuConstants {
+
+	/**
+	 * Pop-up menu: name of group for the top of the menu (value
+	 * <code>"group.top"</code>).
+	 */
+	public static final String GROUP_TOP = "group.top"; //$NON-NLS-1$ 
+
+	/**
+	 * Pop-up menu: name of group for goto actions (value
+	 * <code>"group.goto"</code>).
+	 * <p>
+	 * Examples for open actions are:
+	 * <ul>
+	 * <li>Go Into</li>
+	 * <li>Go To</li>
+	 * </ul>
+	 * </p>
+	 */
+	public static final String GROUP_GOTO = "group.goto"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for show actions (value
+	 * <code>"group.show"</code>).
+	 * <p>
+	 * Examples for show actions are:
+	 * <ul>
+	 * <li>Show in Navigator</li>
+	 * <li>Show in Type Hierarchy</li>
+	 * </ul>
+	 * </p>
+	 */
+	public static final String GROUP_SHOW = "group.show"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for new actions (value
+	 * <code>"group.new"</code>).
+	 * <p>
+	 * Examples for new actions are:
+	 * <ul>
+	 * <li>Create new class</li>
+	 * <li>Create new interface</li>
+	 * </ul>
+	 * </p>
+	 */
+	public static final String GROUP_NEW = "group.new"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for open actions (value
+	 * <code>"group.open"</code>).
+	 * <p>
+	 * Examples for open actions are:
+	 * <ul>
+	 * <li>Open To</li>
+	 * <li>Open With</li>
+	 * </ul>
+	 * </p>
+	 * 
+	 * @see #GROUP_OPEN_WITH
+	 */
+	public static final String GROUP_OPEN = "group.open"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for open actions (value
+	 * <code>"group.openWith"</code>).
+	 * <p>
+	 * Examples for open actions are:
+	 * <ul>
+	 * <li>Open With</li>
+	 * </ul>
+	 * </p>
+	 */
+	public static final String GROUP_OPEN_WITH = "group.openWith"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for porting actions (value
+	 * <code>"group.port"</code>).
+	 * <p>
+	 * Examples for open actions are:
+	 * <ul>
+	 * <li>Import</li>
+	 * <li>Export</li>
+	 * </ul>
+	 * </p>
+	 */
+	public static final String GROUP_PORT = "group.port";//$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for properties actions (value
+	 * <code>"group.edit"</code>).
+	 */
+	public static final String GROUP_EDIT = "group.edit"; //$NON-NLS-1$ 
+
+	/**
+	 * Pop-up menu: name of group for build actions (value
+	 * <code>"group.build"</code>).
+	 */
+	public static final String GROUP_BUILD = "group.build"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for reorganize actions (value
+	 * <code>"group.reorganize"</code>).
+	 */
+	public static final String GROUP_REORGANIZE = IWorkbenchActionConstants.GROUP_REORGANIZE;
+
+	/**
+	 * Pop-up menu: name of group for code generation actions ( value
+	 * <code>"group.generate"</code>).
+	 */
+	public static final String GROUP_GENERATE = "group.generate"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for source actions. This is an alias for
+	 * <code>GROUP_GENERATE</code> to be more consistent with main menu bar
+	 * structure.
+	 *  
+	 */
+	public static final String GROUP_SOURCE = GROUP_GENERATE;
+
+	/**
+	 * Pop-up menu: name of group for search actions (value
+	 * <code>"group.search"</code>).
+	 */
+	public static final String GROUP_SEARCH = "group.search"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for additional actions (value
+	 * <code>"additions"</code>).
+	 */
+	public static final String GROUP_ADDITIONS = "additions"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for viewer setup actions (value
+	 * <code>"group.viewerSetup"</code>).
+	 */
+	public static final String GROUP_VIEWER_SETUP = "group.viewerSetup"; //$NON-NLS-1$
+
+	/**
+	 * Pop-up menu: name of group for properties actions (value
+	 * <code>"group.properties"</code>).
+	 */
+	public static final String GROUP_PROPERTIES = "group.properties"; //$NON-NLS-1$ 
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerMapper.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerMapper.java
new file mode 100755
index 0000000..1b8db72
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerMapper.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Oakland Software Incorporated 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:
+ *     Oakland Software Incorporated - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.swt.widgets.Item;
+
+/**
+ * Allows improved performance by optimizing label updates of the CommonViewer.
+ * 
+ * Often label updates come in the form of resource updates, and the resources
+ * themselves are not directly stored in the {@link CommonViewer}; instead other model
+ * objects are stored.  In addition, it may be the case where the objects that
+ * have changed are not present in the Tree associated with the CommonViewer
+ * because they have not been opened or expanded.
+ * 
+ * You can use an instance of this class to define a mapping between the current
+ * Tree Items associated with the CommonViewer and the (typically resource) objects
+ * where a change is notified.  The change is notified to the 
+ * {@link CommonViewer#handleLabelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent)}.
+ * 
+ * The mapper object (implementing this interface) is associated with the CommonViewer using 
+ * the {@link CommonViewer#setMapper(ICommonViewerMapper)} method.
+ * 
+ * When this mapper wishes to update the CommonViewer, the 
+ * {@link CommonViewer#doUpdateItem(org.eclipse.swt.widgets.Widget)} 
+ * method is used.
+ * 
+ * @since 3.4
+ * @noextend This interface is not intended to be extended by clients.
+ *
+ */
+public interface ICommonViewerMapper {
+	
+	/**
+	 * Adds a new item to the map.  Called by the {@link CommonViewer} when the element is
+	 * added to the Tree.
+	 * 
+	 * @param element Element to map
+	 * @param item The item used for the element
+	 */
+	public void addToMap(Object element, Item item);
+
+	/**
+	 * Removes an element from the map. Called by the {@link CommonViewer} when the element is
+	 * removed from the Tree.
+	 * 
+	 * @param element The data element
+	 * @param item The table or tree item
+	 */
+	public void removeFromMap(Object element, Item item);
+
+	/**
+	 * Clears the map.
+	 */
+	public void clearMap();
+
+	/**
+	 * Tests if the map is empty
+	 * @return Returns if there are mappings
+	 */
+	public boolean isEmpty();
+	
+	/**
+	 * Tests if this mapper handles the specified object.  This is used only
+	 * by the viewer to determine if the object should be looked up in the mapper.
+	 * This is not to be used when the object is being added to the mapper, as
+	 * the mapper may adapt to the desired object to be mapped (like adapting
+	 * from a Java model object to a resource object for example).
+	 * 
+	 * @param object the object that the mapper can handle
+	 * @return true if it does
+	 */
+	public boolean handlesObject(Object object);
+		
+	/**
+	 * Indicates the specified object has changed.  If the object
+	 * has a corresponding Item in the map, the associated {@link CommonViewer}
+	 * is notified of the change using the {@link CommonViewer#doUpdateItem(org.eclipse.swt.widgets.Widget)} 
+	 * method so that it can update its state.
+	 * 
+	 * @param object the object that changed
+	 */
+	public void objectChanged(Object object);
+	
+	
+	
+
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerSite.java
new file mode 100755
index 0000000..0fe9cb5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerSite.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * 
+ * Provides context for extensions including a valid shell, a selection
+ * provider, and a unique identifier corresponding to the abstract viewer behind
+ * the viewer site.
+ *  
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ICommonViewerSite extends IAdaptable {
+
+	/**
+	 * 
+	 * @return The unique identifier associated with the defined abstract
+	 *         viewer. In general, this will be the id of the
+	 *         <b>org.eclipse.ui.views</b> extension that defines the view
+	 *         part.
+	 */
+	String getId();
+
+
+	/**
+	 * 
+	 * @return A valid shell corresponding to the shell of the
+	 *         {@link CommonViewer}
+	 */
+	Shell getShell();
+
+	/**
+	 * 
+	 * @return The selection provider that can provide a current, valid
+	 *         selection. The default selection provider is the
+	 *         {@link CommonViewer}.
+	 */
+	ISelectionProvider getSelectionProvider();
+
+	/**
+	 * Sets the selection provider for this common viewer site.
+	 * 
+	 * @param provider
+	 *            the selection provider, or <code>null</code> to clear it
+	 */
+	public void setSelectionProvider(ISelectionProvider provider);
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerWorkbenchSite.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerWorkbenchSite.java
new file mode 100755
index 0000000..041356b
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ICommonViewerWorkbenchSite.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+
+/**
+ * 
+ * Provides a page, set of action bars, menu registration callback, and active
+ * window.
+ * 
+ * @since 3.2
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * 
+ */
+public interface ICommonViewerWorkbenchSite extends ICommonViewerSite {
+
+	/**
+	 * Returns the page corresponding to this viewer site.
+	 * 
+	 * @return the page corresponding to this viewer site
+	 */
+	public IWorkbenchPage getPage();
+
+	/**
+	 * Registers a pop-up menu with a particular id for extension.
+	 * <p>
+	 * Within the workbench one plug-in may extend the pop-up menus for a view
+	 * or editor within another plug-in. In order to be eligible for extension,
+	 * the menu must be registered by calling <code>registerContextMenu</code>.
+	 * Once this has been done the workbench will automatically insert any
+	 * action extensions which exist.
+	 * </p>
+	 * <p>
+	 * A unique menu id must be provided for each registered menu. This id
+	 * should be published in the Javadoc for the page.
+	 * </p>
+	 * <p>
+	 * Any pop-up menu which is registered with the workbench should also define
+	 * a <code>GroupMarker</code> in the registered menu with id
+	 * <code>IWorkbenchActionConstants.MB_ADDITIONS</code>. Other plug-ins
+	 * will use this group as a reference point for insertion. The marker should
+	 * be defined at an appropriate location within the menu for insertion.
+	 * </p>
+	 * 
+	 * @param menuId
+	 *            the menu id
+	 * @param menuManager
+	 *            the menu manager
+	 * @param selectionProvider
+	 *            the selection provider
+	 */
+	void registerContextMenu(String menuId, MenuManager menuManager,
+			ISelectionProvider selectionProvider);
+
+	/**
+	 * Returns the action bars for this page site. Pages have exclusive use of
+	 * their site's action bars.
+	 * 
+	 * @return the action bars
+	 */
+	IActionBars getActionBars();
+
+	/**
+	 * 
+	 * @return A workbench window corresponding to the container of the
+	 *         {@link CommonViewer}
+	 */
+	IWorkbenchWindow getWorkbenchWindow();
+
+	/**
+	 * @return the IWorkbenchPart that this site is embedded within.
+	 */
+	IWorkbenchPart getPart();
+
+	/**
+	 * @return the IWorkbenchPartSite that this site is embedded within.
+	 */
+	IWorkbenchPartSite getSite();
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IDescriptionProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IDescriptionProvider.java
new file mode 100755
index 0000000..c140aed
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IDescriptionProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+/**
+ * 
+ * Label providers (as specified by the <i>labelProvider</i> attribute of the
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extension point) may 
+ * choose to also implement this interface in order to provide text for 
+ * the status bar at the bottom of the Eclipse window. 
+ * 
+ * @since 3.2
+ */
+public interface IDescriptionProvider {
+
+	/**
+	 * <p>
+	 * Provide a description for the status bar view, if available. A default
+	 * string of the form "(x) items selected" will be used if this method
+	 * choose to return null.
+	 * </p>
+	 * 
+	 * <p>
+	 * The empty string ("") will be respected as a valid value if returned.
+	 * Return <b>null </b> if the extension defers to the default method of
+	 * supplying status bar descriptions.
+	 * </p>
+	 * 
+	 * @param anElement
+	 *            The element selected in the Navigator
+	 * @return A description for the status bar view, or null if not available.
+	 */
+	String getDescription(Object anElement);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionActivationListener.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionActivationListener.java
new file mode 100755
index 0000000..9a9a5c8
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionActivationListener.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+
+/**
+ * 
+ * An extension activation listener is notified whenever the activation state
+ * changes for one or more content extensions.
+ * 
+ * @since 3.2
+ * @see INavigatorActivationService
+ * @see INavigatorActivationService#addExtensionActivationListener(IExtensionActivationListener)
+ * @see INavigatorActivationService#removeExtensionActivationListener(IExtensionActivationListener)
+ */
+public interface IExtensionActivationListener {
+	/**
+	 * @param aViewerId
+	 *            The viewer id of the INavigatorContentService
+	 * @param theNavigatorExtensionIds
+	 *            A sorted array of updated extension ids
+	 * @param isActive
+	 *            The new activation state of the extensions
+	 */
+	void onExtensionActivation(String aViewerId,
+			String[] theNavigatorExtensionIds, boolean isActive);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionStateModel.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionStateModel.java
new file mode 100755
index 0000000..dfeb24a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IExtensionStateModel.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+
+/**
+ * 
+ * Allows clients to coordinate state across components that are part of the
+ * same logical extension.
+ * 
+ * <p>
+ * That is, a content provider might vary how it exposes its content based on
+ * the state of a specific property in the model. Interested parties may add
+ * themselves as {@link IPropertyChangeListener}s to track changes in the state
+ * model.
+ * </p>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface IExtensionStateModel {
+
+	/**
+	 * The id is used to look up the state model across different components of
+	 * the same logical extension. Generally, the id of the content extension is
+	 * used.
+	 * 
+	 * @return The unique identifier of this state model.
+	 */
+	String getId();
+
+	/**
+	 * 
+	 * @return The viewer id that this state model is associated with.
+	 */
+	String getViewerId();
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @return The current value of the property.
+	 */
+	String getStringProperty(String aPropertyName);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @return The current value of the property.
+	 */
+	boolean getBooleanProperty(String aPropertyName);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @return The current value of the property.
+	 */
+	int getIntProperty(String aPropertyName);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @return The current value of the property.
+	 */
+	Object getProperty(String aPropertyName);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @param aPropertyValue
+	 *            The new value of a the given property.
+	 */
+	void setStringProperty(String aPropertyName, String aPropertyValue);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @param aPropertyValue
+	 *            The new value of a the given property.
+	 */
+	void setBooleanProperty(String aPropertyName, boolean aPropertyValue);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @param aPropertyValue
+	 *            The new value of a the given property.
+	 */
+	void setIntProperty(String aPropertyName, int aPropertyValue);
+
+	/**
+	 * 
+	 * @param aPropertyName
+	 *            The name of a given property
+	 * @param aPropertyValue
+	 *            The new value of a the given property.
+	 */
+	void setProperty(String aPropertyName, Object aPropertyValue);
+
+	/**
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IPropertyChangeListener} that
+	 *            should be notified when changes occur in this model.
+	 */
+	void addPropertyChangeListener(IPropertyChangeListener aListener);
+
+	/**
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IPropertyChangeListener} that
+	 *            should no longer be notified when changes occur in this model.
+	 */
+	void removePropertyChangeListener(IPropertyChangeListener aListener);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ILinkHelper.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ILinkHelper.java
new file mode 100755
index 0000000..26fa765
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/ILinkHelper.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+
+/**
+ * <p>
+ * Provides information to the Common Navigator on how to link selections with
+ * active editors and vice versa.
+ * </p>
+ * <p>
+ * The Common Navigator allows clients to plug-in their own custom logic for
+ * linking selections from the Viewer to active editors. This interface is used
+ * by the <b>org.eclipse.ui.navigator.linkHelper </b> extension
+ * point to gather information and trigger editor activations.
+ * </p>
+ *  
+ * @since 3.2
+ */
+public interface ILinkHelper {
+
+	/**
+	 * <p>
+	 * Determine the correct structured selection for the Common Navigator given
+	 * anInput.
+	 * </p>
+	 * 
+	 * @param anInput
+	 *            An Editor input
+	 * @return A selection to be set against the {@link CommonViewer}
+	 */
+	IStructuredSelection findSelection(IEditorInput anInput);
+
+	/**
+	 * <p>
+	 * Activate the correct editor for aSelection.
+	 * </p>
+	 * 
+	 * @param aPage
+	 *            A WorkbenchPage to use for editor location and activation
+	 * @param aSelection
+	 *            The current selection from the {@link CommonViewer}
+	 */
+	void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IMementoAware.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IMementoAware.java
new file mode 100755
index 0000000..1dd6ea4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IMementoAware.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.ui.IMemento;
+
+/**
+ * Clients may use mementos to persist interesting state between sessions.
+ * Clients should ensure that the memento keys are unique; generally by using
+ * the id of the content extension as a prefix.
+ * 
+ * @since 3.2
+ * 
+ */
+public interface IMementoAware {
+
+	/**
+	 * <p>
+	 * Restore the previous state of any actions using the flags in aMemento.
+	 * This method allows the state of any actions that persist from session to
+	 * session to be restored.
+	 * </p>
+	 * 
+	 * @param aMemento
+	 *            A memento that was given to the view part to restore its
+	 *            state.
+	 */
+	public void restoreState(IMemento aMemento);
+
+	/**
+	 * <p>
+	 * Save flags in aMemento to remember the state of any actions that persist
+	 * from session to session.
+	 * </p>
+	 * <p>
+	 * Extensions should qualify any keys stored in the memento with their
+	 * plugin id
+	 * </p>
+	 * 
+	 * @param aMemento
+	 *            A memento that was given to the view part to save its state.
+	 */
+	public void saveState(IMemento aMemento);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorActivationService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorActivationService.java
new file mode 100755
index 0000000..fc98ce1
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorActivationService.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+/**
+ * 
+ * Determines if an extension is <i>active</i> within the context of a given
+ * viewer and manages the persistence of this information. If an extension is
+ * <i>active</i> then the extension will contribute functionality to the
+ * viewer. If an extension is not <i>active</i>, then the extension will not be
+ * given opportunities to contribute functionality to the given viewer. See
+ * {@link INavigatorContentService} for more detail on what states are
+ * associated with a content extension.
+ * 
+ * @since 3.2
+ * 
+ */
+public interface INavigatorActivationService {
+
+	/**
+	 * Activate the extensions specified by the extensionIds array. Clients may
+	 * also choose to disable all other extensions. The set of descriptors
+	 * returned is the set that were activated as a result of this call. In the
+	 * case of this method, that means that a descriptor will be returned for
+	 * each extensionId in the array, regardless of whether that extension is
+	 * already enabled.
+	 * 
+	 * <p>
+	 * Clients must call {@link #persistExtensionActivations()} to save the the
+	 * activation state after activating or deactivating extensions.
+	 * </p>
+	 * 
+	 * @param extensionIds
+	 *            The list of extensions to activate
+	 * @param toDeactivateAllOthers
+	 *            True will deactivate all other extensions; False will leave
+	 *            the other activations as-is
+	 * @return A list of all INavigatorContentDescriptors that were activated as
+	 *         a result of this call. This will be the set of
+	 *         INavigatorContentDescriptors that corresponds exactly to the set
+	 *         of given extensionIds.
+	 */
+	public INavigatorContentDescriptor[] activateExtensions(
+			String[] extensionIds, boolean toDeactivateAllOthers);
+
+	/**
+	 * Deactivate the extensions specified by the extensionIds. Clients may
+	 * choose to activate all other extensions which are not explicitly
+	 * disabled. If toActivateAllOthers is true, the array of returned
+	 * descriptors will be the collection of all extensions not specified in the
+	 * extensionIds array. If it is false, the array will be empty.
+	 * 
+	 * <p>
+	 * Clients must call {@link #persistExtensionActivations()} to save the the
+	 * activation state after activating or deactivating extensions.
+	 * </p>
+	 * 
+	 * @param extensionIds
+	 *            The list of extensions to activate
+	 * @param toActivateAllOthers
+	 *            True will activate all other extensions; False will leave the
+	 *            other activations as-is
+	 * @return A list of all INavigatorContentDescriptors that were activated as
+	 *         a result of this call. If toActivateAllOthers is false, the
+	 *         result will be an empty array. Otherwise, it will be the set of
+	 *         all visible extensions minus those given in the 'extensionIds'
+	 *         parameter.
+	 */
+	public INavigatorContentDescriptor[] deactivateExtensions(
+			String[] extensionIds, boolean toActivateAllOthers);
+
+	/**
+	 * 
+	 * Checks the known activation state for the given viewer id to determine if
+	 * the given navigator extension is 'active'.
+	 * 
+	 * @param aNavigatorExtensionId
+	 *            The unique identifier associated with a given extension.
+	 * 
+	 * @return True if the extension is active in the context of the viewer id.
+	 */
+	public boolean isNavigatorExtensionActive(String aNavigatorExtensionId);
+
+	/**
+	 * Save the activation state of each content extension for the associated
+	 * content service. Clients should persist the activation state after any
+	 * call to {@link #activateExtensions(String[], boolean)} or
+	 * {@link #deactivateExtensions(String[], boolean)}.
+	 * 
+	 */
+	public void persistExtensionActivations();
+
+	/**
+	 * Request notification when the activation state changes.
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IExtensionActivationListener}
+	 */
+	public void addExtensionActivationListener(
+			IExtensionActivationListener aListener);
+
+	/**
+	 * No longer receive notification when activation state changes.
+	 * 
+	 * @param aListener
+	 *            An implementation of {@link IExtensionActivationListener}
+	 */
+	public void removeExtensionActivationListener(
+			IExtensionActivationListener aListener);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java
new file mode 100755
index 0000000..5c8191f
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.Set;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+/**
+ * 
+ * The descriptor provides a the low-level handle to a content extension. Information such as
+ * the Id, the name, the priority, and whether the descriptor provides one or
+ * more root elements is provided.  This descriptor is used to form the 
+ * {@link INavigatorContentExtension}.
+ * 
+ * <p>
+ * There is a one-to-many correspondence between the {@link INavigatorContentDescriptor} and
+ * {@link INavigatorContentExtension}.  An instance of the {@link INavigatorContentExtension} is
+ * created for each {@link INavigatorContentDescriptor} used by a 
+ * {@link INavigatorContentService}.
+ * </p>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface INavigatorContentDescriptor {
+
+	/**
+	 * Returns the navigator content extension id
+	 * 
+	 * @return the navigator content extension id
+	 */
+	String getId();
+
+	/**
+	 * Returns the name of this navigator extension
+	 * 
+	 * @return the name of this navigator extension
+	 */
+	String getName();
+
+	/**
+	 * Returns the priority of the navigator content extension.
+	 * 
+	 * @return the priority of the navigator content extension. Returns {@link Priority#NORMAL}
+	 *         if no priority was specified.
+	 */
+	int getPriority();
+	
+	/**
+	 * Returns the extension that this extension must appear before.
+	 * 
+	 * @return The value specified by the <i>appearsBefore</i> attribute of the
+	 *         &lt;navigatorContent/&gt; element.
+	 *         
+	 * @since 3.5        
+	 */
+	public String getAppearsBeforeId();
+	
+	/**
+	 * Returns the unique sequence number of this extension.  This is calculated based on
+	 * the priority and the appears before and represents the order the extension will appear
+	 * relative to the other extensions
+	 * 
+	 * @return The sequence number of the extension
+	 *         
+	 * @since 3.5        
+	 */
+	public int getSequenceNumber();
+	
+	/**
+	 * The enabledByDefault attribute specifies whether an extension should be
+	 * activated in the context of a viewer automatically. Users may override
+	 * this setting through the "Types of Content" dialog. This will be true
+	 * if either the activeByDefault attribute of the navigatorContent element 
+	 * is true, or if an initialActivationExpression is specified which resolves
+	 * to true.
+	 * 
+	 * @return true if the extension is enabled by default.
+	 */
+	boolean isActiveByDefault();
+
+	/**
+	 * True if this content extension is used only to specify a commonSorter 
+	 * in order to provide only sorting.
+	 * @return true if sort only
+	 * 
+	 * @since 3.5
+	 */
+	boolean isSortOnly();
+	
+	/**
+	 * Determine if this content extension is enabled for the given element.
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension is enabled for the element.
+	 */
+	boolean isTriggerPoint(Object anElement);
+
+	/**
+	 * Determine if this content extension could provide the given element as a
+	 * child.
+	 * 
+	 * <p>
+	 * This method is used to determine what the parent of an element could be
+	 * for Link with Editor support.
+	 * </p>
+	 * 
+	 * @param anElement
+	 *            The element that should be used for the evaluation.
+	 * @return True if and only if the extension might provide an object of this
+	 *         type as a child.
+	 */
+	boolean isPossibleChild(Object anElement);
+
+	/**
+	 * A convenience method to check all elements in a selection.
+	 * 
+	 * @param aSelection
+	 *            A non-null selection
+	 * @return True if and only if every element in the selection is a possible
+	 *         child.
+	 */
+	boolean arePossibleChildren(IStructuredSelection aSelection);
+
+	/**
+	 * @return Returns the suppressedExtensionId or null if none specified.
+	 */
+	String getSuppressedExtensionId();
+
+	/**
+	 * @return Returns the overridePolicy or null if this extension does not
+	 *         override another extension.
+	 * @since 3.4
+	 */
+	OverridePolicy getOverridePolicy();
+
+	/**
+	 * @return The descriptor of the <code>suppressedExtensionId</code> if
+	 *         non-null.
+	 */
+	INavigatorContentDescriptor getOverriddenDescriptor();
+
+	/**
+	 * 
+	 * Does not force the creation of the set of overriding extensions.
+	 * 
+	 * @return True if this extension has overriding extensions.
+	 */
+	boolean hasOverridingExtensions();
+
+	/**
+	 * @return The set of overriding extensions (of type
+	 *         {@link INavigatorContentDescriptor})
+	 */
+	Set getOverriddingExtensions();
+
+	/**
+	 * @return true if the extension's content provider may adapt to a {@link SaveablesProvider}.
+	 */
+	boolean hasSaveablesProvider();
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentExtension.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentExtension.java
new file mode 100755
index 0000000..ee56986
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentExtension.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/**
+ * The content extension represents the components of a <b>navigatorContent</b>
+ * extension. These handles are managed by a content service
+ * {@link INavigatorContentService}.  An extension is formed from the
+ * {@link INavigatorContentDescriptor}. 
+ * 
+ * <p>
+ * There is a one-to-many correspondence between the {@link INavigatorContentDescriptor} and
+ * {@link INavigatorContentExtension}.  An instance of the {@link INavigatorContentExtension} is
+ * created for each {@link INavigatorContentDescriptor} used by a 
+ * {@link INavigatorContentService}.
+ * </p>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface INavigatorContentExtension extends IAdaptable {
+
+	/**
+	 * 
+	 * @return The id attribute of the navigatorContent extension.
+	 */
+	String getId();
+
+	/**
+	 * There is one descriptor for all instances of a
+	 * INavigatorContentExtension.
+	 * 
+	 * 
+	 * @return A handle to the descriptor used to manage this extension.
+	 */
+	INavigatorContentDescriptor getDescriptor();
+
+	/**
+	 * Clients may choose to implement {@link ICommonContentProvider}, but are
+	 * only required to supply an implementation of {@link ITreeContentProvider}.
+	 * 
+	 * @return The content provider defined by the <b>navigatorContent</b>
+	 *         extension.
+	 * @see ICommonContentProvider
+	 * @see ITreeContentProvider
+	 */
+	ITreeContentProvider getContentProvider();
+
+	/**
+	 * The real underlying implementation may only support the
+	 * {@link ILabelProvider} interface, but a simple delegate is used when this
+	 * is the case to ensure that clients may anticpate an
+	 * {@link ICommonLabelProvider} interface.
+	 * 
+	 * <p>Since 3.4, the returned label provider may also implement
+	 * {@link org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider}
+	 * to provide styled text labels. Note that the empty styled string signals
+	 * that the label provider does not wish to render the label.
+	 * </p>
+	 * 
+	 * @return The content provider defined by the <b>navigatorContent</b>
+	 *         extension.
+	 * @see ICommonLabelProvider
+	 * @see ILabelProvider
+	 */
+	ICommonLabelProvider getLabelProvider(); 
+
+	/**
+	 * 
+	 * @return True if any class has been instantiated by this extension.
+	 */
+	boolean isLoaded();
+
+	/**
+	 * 
+	 * @return The state model associated with this content extension.
+	 * @see IExtensionStateModel
+	 */
+	IExtensionStateModel getStateModel();
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java
new file mode 100755
index 0000000..4833258
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.Set;
+
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISaveablesSource;
+
+/**
+ * 
+ * Manages content extensions for extensible viewers and provides reusable
+ * services for filters, sorting, the activation of content extensions, and DND.
+ * The service can locate the appropriate providers (for contents or labels) for
+ * an element and provide a ready-to-go {@link ITreeContentProvider} and
+ * {@link ILabelProvider} for viewers that wish to take advantage of the
+ * <b>org.eclipse.ui.navigator.navigatorContent</b> extensions defined for a
+ * particular <i>viewerId</i>.
+ * 
+ * <p>
+ * Clients can get the instance of this associated with the {@link CommonNavigator} using
+ * {@link CommonNavigator#getNavigatorContentService()}.
+ * </p>
+ * 
+ * <p>
+ * Clients may contribute logical extensions using
+ * <b>org.eclipse.ui.navigator.navigatorContent</b>. Each extension has three
+ * states which determine whether the extension is used by the content service:
+ * <ul>
+ * <li><a name="visible"><i>visible</i>: If a content extension id matches a
+ * <b>viewerContentBinding</b> for the <i>viewerId</i> of this content
+ * service, then the extension is <i>visible</i>. Visible extensions may only
+ * be configured through <b>viewerContentBinding</b>s. </li>
+ * 
+ * <li><a name="active"><i>active</i>: The active state may be set to a default using the
+ * <i>activeByDefault</i> attribute of <b>navigatorContent</b>. Users may
+ * toggle the <i>active</i> state through the "Available customizations"
+ * dialog. Clients may also configure the active extensions using
+ * {@link INavigatorActivationService#activateExtensions(String[], boolean)} or
+ * {@link INavigatorActivationService#deactivateExtensions(String[], boolean)}
+ * from the {@link #getActivationService() Activation Service} </li>
+ * 
+ * <li><a name="enabled"><i>enabled</i>: An extension is <i>enabled</i> for an element if the
+ * extension contributed that element or if the element is described in the
+ * <i>triggerPoints</i> element of the <b>navigatorContent</b> extension. The
+ * findXXX() methods search for <i>enabled</i> extensions. </li>
+ * </ul>
+ * </p>
+ * <p>
+ * A new instance of the content service should be created for each viewer.
+ * Clients should use {@link #createCommonContentProvider()} and
+ * {@link #createCommonLabelProvider()} for the viewer. Each content service
+ * tracks the viewer it is attached to. Clients may create the content service
+ * with a viewer using ({@link NavigatorContentServiceFactory#createContentService(String)}).
+ * Alternatively, when the content provider is created and set on a viewer,
+ * {@link IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, Object, Object)}
+ * will be called and the content provider will update the viewer used by its
+ * backing content service. Therefore, only each content service has exactly one
+ * content provider and one label provider.
+ * </p>
+ * <p>
+ * Extensions may also coordinate their behavior through a
+ * {@link IExtensionStateModel state model}. The state model holds properties
+ * and supports property change listeners. Actions can toggle the setting of
+ * properties and the corresponding content/label providers will respond to
+ * property change event. Each <b>navigatorContent</b> extension has its own
+ * contained state model keyed off of the content extension id.
+ * </p>
+ * <p>
+ * Clients may respond when content extensions are loaded by attaching a
+ * {@link INavigatorContentServiceListener} to the content service.
+ * </p>
+ * <p>
+ * Some extensions may provide content or label providers which implement
+ * {@link IMemento}. Clients must call {@link #restoreState(IMemento)} and
+ * {@link #saveState(IMemento)} at the appropriate times for these extensions to
+ * prepare themselves with the memento.
+ * </p>
+ * 
+ * @since 3.2
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * 
+ */
+public interface INavigatorContentService {
+
+	/**
+	 * Create a Content Provider which will use an enhanced delegation model to
+	 * locate extension content providers using this content service for each
+	 * element in the tree.
+	 * 
+	 * <p>
+	 * The content provider returned will populate the root of the viewer in one
+	 * of two ways.
+	 * <p>
+	 * In the first approach, the content provider will seek out content
+	 * extensions which are bound using a <b>viewerContentBinding</b>. If any
+	 * of the found <b>viewerContentBindings</b> declare the <i>isRoot</i>
+	 * attribute on as true, then that set of extensions will be consulted for
+	 * the root elements of the tree. The input of the viewer will be supplied
+	 * to each of their {@link IStructuredContentProvider#getElements(Object)}
+	 * methods and aggregate the results for the root of the viewer.
+	 * </p>
+	 * <p>
+	 * In the second approach, if no <b>viewerContentBindings</b> declare
+	 * <i>isRoot</i> as true, then all matching extensions are consulted based
+	 * on their <b>triggerPoints</b> expression in the <b>navigatorContent</b>
+	 * extension. Any matching extensions are then consulted via their
+	 * {@link IStructuredContentProvider#getElements(Object)} methods and the
+	 * results are aggregated into the root.
+	 * </p>
+	 * <p>
+	 * After the root is populated, the children of each root element are
+	 * determined by consulting the source extension and all extension which
+	 * describe the element in their <b>triggerPoints</b> expression.
+	 * </p>
+	 * <p>
+	 * If clients wish to use a viewer other than the CommonViewer, then they
+	 * are responsible for creating the content provider, and setting it on
+	 * their viewer.
+	 * </p>
+	 * 
+	 * @return An enhanced content provider that will use this content service
+	 *         to drive the viewer.
+	 */
+	ITreeContentProvider createCommonContentProvider();
+
+	/**
+	 * Create a Label Provider which will use an enhanced delegation model to
+	 * locate extension label providers using this content service for each
+	 * element in the tree.
+	 * 
+	 * <p>
+	 * The label of each element is determined by consulting the source of the
+	 * element. If the source chooses to return null, then other extensions
+	 * which declare the element in their <b>triggerPoints</b> extension are
+	 * consulted. The first non-null value is used (including the empty label).
+	 * </p>
+	 * 
+	 * <p>
+	 * If clients wish to use a viewer other than the CommonViewer, then they
+	 * are responsible for creating the label provider, and setting it on their
+	 * viewer.
+	 * </p>
+	 * 
+	 * @return An enhanced label provider that will use this content service to
+	 *         drive labels in the viewer.
+	 */
+	ILabelProvider createCommonLabelProvider();
+
+	/**
+	 * 
+	 * @return The description provider for this content service.
+	 */
+	IDescriptionProvider createCommonDescriptionProvider();
+
+	/**
+	 * The state model stores properties associated with the extension. Each
+	 * content extension has its own contained state model. Components of the
+	 * extension (content provider, label provider, action providers, etc) may
+	 * attach themselves as listeners to the model ({@link IExtensionStateModel#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)})
+	 * and respond to changes to the values of the properties.
+	 * 
+	 * @param anExtensionId
+	 *            The extension id defined by a <b>navigatorContent</b>
+	 *            extension.
+	 * @return The state model for the given extension id.
+	 */
+	IExtensionStateModel findStateModel(String anExtensionId);
+
+	/**
+	 * The viewer id is used to locate matching <b>viewerContentBindings</b>.
+	 * In general, this would be the id of the view defined by a
+	 * <b>org.eclipse.ui.views</b> extension. However, there is no formal
+	 * requirement that this is the case.
+	 * 
+	 * @return The viewerId used to create this content service.
+	 */
+	String getViewerId();
+
+	/**
+	 * The viewer descriptor provides some basic information about the abstract
+	 * viewer that uses this content service.
+	 * 
+	 * @return The viewer descriptor for this content service.
+	 * @see INavigatorViewerDescriptor
+	 */
+	INavigatorViewerDescriptor getViewerDescriptor();
+
+	/**
+	 * See <a href="#active">above</a> for the definition of <i>active</i>.
+	 * 
+	 * @param anExtensionId
+	 *            The unqiue identifier from a content extension.
+	 * @return True if and only if the given extension id is <i>active</i> for
+	 *         this content service.
+	 * @see INavigatorContentService For more information on what <i>active</i>
+	 *      means.
+	 * 
+	 */
+	boolean isActive(String anExtensionId);
+
+	/**
+	 *  See <a href="#visible">above</a> for the definition of <i>visible</i>.
+	 *  
+	 * @param anExtensionId
+	 *            The unqiue identifier from a content extension.
+	 * @return True if and only if the given extension id is <i>visible</i> to
+	 *         this content service.
+	 * @see INavigatorContentService For more information on what <i>visible</i>
+	 *      means.
+	 */
+	boolean isVisible(String anExtensionId);
+
+	/**
+	 * Return the set of <i>visible</i> extension ids for this content service,
+	 * which includes those that are bound through <b>viewerContentBinding</b>s
+	 * and those that are bound through
+	 * {@link #bindExtensions(String[], boolean)}.
+	 * 
+	 * @return The set of <i>visible</i> extension ids for this content service
+	 */
+	String[] getVisibleExtensionIds();
+
+	/**
+	 * Return the set of <i>visible</i> content descriptors for this content
+	 * service, which includes those that are bound through
+	 * <b>viewerContentBinding</b>s and those that are bound through
+	 * {@link #bindExtensions(String[], boolean)}.
+	 * 
+	 * @return The set of <i>visible</i> content descriptors for this content
+	 *         service
+	 */
+	INavigatorContentDescriptor[] getVisibleExtensions();
+
+	/**
+	 * Bind the set of given extensions to this content service. Programmatic
+	 * bindings allow clients to make extensions <i>visible</i> to an instance
+	 * of the content service by appending to the bindings declared through
+	 * <b>org.eclipse.ui.navigator.viewer</b>. Programmatic bindings are not
+	 * persisted and are not remembered or propagated to other instances of the
+	 * INavigatorContentService in the same session. Programmatic bindings
+	 * cannot be undone for a given instance of the INavigatorContentService and
+	 * do not override declarative bindings.
+	 * <p>
+	 * Once a content extension has been bound to the INavigatorContentService,
+	 * clients may use
+	 * {@link INavigatorActivationService#activateExtensions(String[], boolean) }
+	 * or
+	 * {@link  INavigatorActivationService#deactivateExtensions(String[], boolean) }
+	 * to control the <i>activation</i> state of the extension. See
+	 * {@link INavigatorContentService} for more information on the difference
+	 * between <i>visible</i> and <i>active</i>.
+	 * </p>
+	 * 
+	 * @param extensionIds
+	 *            The list of extensions to make visible.
+	 * @param isRoot
+	 *            whether the context provider should be a root content provider
+	 * @return A list of all INavigatorContentDescriptors that correspond to the
+	 *         given extensionIds.
+	 */
+	INavigatorContentDescriptor[] bindExtensions(String[] extensionIds,
+			boolean isRoot);
+
+	/**
+	 * Restore the state associated with the memento.
+	 * 
+	 * @param aMemento
+	 *            The memento for extensions to use when restoring previous
+	 *            settings.
+	 */
+	void restoreState(IMemento aMemento);
+
+	/**
+	 * Persist any session-to-session state with the memento.
+	 * 
+	 * @param aMemento
+	 *            The memento for extensions to use when persisting previous
+	 *            settings.
+	 */
+	void saveState(IMemento aMemento);
+
+	/**
+	 * Add a listener to be notified whenever an extension is loaded.
+	 * 
+	 * @param aListener
+	 *            A listener to be attached.
+	 */
+	void addListener(INavigatorContentServiceListener aListener);
+
+	/**
+	 * Remove a listener (by identity) from the set of listeners.
+	 * 
+	 * @param aListener
+	 *            A listener to be detached.
+	 */
+	void removeListener(INavigatorContentServiceListener aListener);
+
+	/**
+	 * The root content providers are recalculated by this method. The attached
+	 * viewer is also refreshed as a result of this method.
+	 * 
+	 */
+	void update();
+
+	/**
+	 * Release any acquired resources and instantiated content extensions.
+	 * 
+	 */
+	void dispose();
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression or that indicate they should be bound as
+	 * a root extension.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         either declared through a
+	 *         <b>org.eclipse.ui.navigator.viewer/viewerContentBinding</b> to
+	 *         be a root element or have a <b>triggerPoints</b> expression that
+	 *         is <i>enabled</i> for the given element.
+	 */
+	Set findRootContentExtensions(Object anElement);
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>triggerPoints</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>triggerPoints</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	Set findContentExtensionsByTriggerPoint(Object anElement);
+
+	/**
+	 * Search for extensions that declare the given element in their
+	 * <b>possibleChildren</b> expression.
+	 * 
+	 * @param anElement
+	 *            The element to use in the query
+	 * @return The set of {@link INavigatorContentExtension}s that are
+	 *         <i>visible</i> and <i>active</i> for this content service and
+	 *         have a <b>possibleChildren</b> expression that is <i>enabled</i>
+	 *         for the given element.
+	 */
+	Set findContentExtensionsWithPossibleChild(Object anElement);
+
+	/**
+	 * The filter service can provide the available filters for the viewer, and
+	 * manage which filters are <i>active</i>.
+	 * 
+	 * @return An {@link INavigatorFilterService} that can provide information
+	 *         to a viewer about what filters are <i>visible</i> and <i>active</i>.
+	 */
+	INavigatorFilterService getFilterService();
+
+	/**
+	 * The sorter service provides the appropriate sorter based on the current
+	 * items being sorted. By default, the CommonViewer uses
+	 * {@link CommonViewerSorter} which delegates to this service. Clients do
+	 * not need to provide their own {@link ViewerSorter} unless they wish to
+	 * override this functionality.
+	 * 
+	 * @return An {@link INavigatorSorterService} that can provide
+	 *         {@link ViewerSorter} based on the context of the parent.
+	 */
+	INavigatorSorterService getSorterService();
+
+	/**
+	 * The pipeline service calculates the appropriate viewer modification or
+	 * refresh that should be applied for viewers that wish to take advantage of
+	 * the model pipelining that some extensions use to massage or reshape
+	 * contents in the viewer. Clients that use the {@link CommonViewer} do not
+	 * need to be concerned with this service as the refreshes are automatically
+	 * computed using this service.
+	 * 
+	 * 
+	 * @return The {@link INavigatorPipelineService} which can determine the
+	 *         correct updates to apply to a viewer.
+	 */
+	INavigatorPipelineService getPipelineService();
+
+	/**
+	 * The DND Service provides instances of {@link CommonDragAdapterAssistant}
+	 * and {@link CommonDropAdapterAssistant} for this content service.
+	 * 
+	 * @return The {@link INavigatorDnDService} which can add additional
+	 *         TransferTypes for the DragAdapter and setup the data correctly
+	 *         for those extended Transfer Types.
+	 */
+	INavigatorDnDService getDnDService();
+
+	/**
+	 * The activation service is used to toggle whether certain extensions have
+	 * the opportunity to contribute content and/or actions.
+	 * 
+	 * @return The {@link INavigatorActivationService} for this content service.
+	 */
+	INavigatorActivationService getActivationService();
+	
+	/**
+	 * The saveable service helps implementing {@link ISaveablesSource}.
+	 * 
+	 * @return the {@link INavigatorSaveablesService} for this content service.
+	 */
+	INavigatorSaveablesService getSaveablesService();
+	
+	/** 
+	 * Return the content extension for the given id. 
+	 * 
+	 * @param anExtensionId The id used to define the <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b> extension.
+	 * @return An instance of the content extension for the given extension id. May return <b>null</b> if the id is invalid.
+	 */
+	public INavigatorContentExtension getContentExtensionById(String anExtensionId);
+	
+	/** 
+	 * Return the content extension for the given id. 
+	 * 
+	 * @param anExtensionId The id used to define the <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b> extension.
+	 * @return An instance of the content extension for the given extension id. May return <b>null</b> if the id is invalid.
+	 * @since 3.3
+	 */
+	public INavigatorContentDescriptor getContentDescriptorById(String anExtensionId);
+
+
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentServiceListener.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentServiceListener.java
new file mode 100755
index 0000000..72ddadc
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentServiceListener.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+
+
+/**
+ * <p>
+ * Used by clients who would like to listen for the load event of am
+ * {@link INavigatorContentExtension}.
+ * 
+ * @since 3.2
+ */
+public interface INavigatorContentServiceListener {
+
+	
+	/**
+	 * Notifies the listener that the given extension
+	 * has now been loaded. Extensions are loaded as 
+	 * needed as the user expands nodes in the tree viewer. 
+	 * 
+	 * @param anExtension The extension that was loaded.
+	 */
+	void onLoad(INavigatorContentExtension anExtension);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorDnDService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorDnDService.java
new file mode 100755
index 0000000..56591a4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorDnDService.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.TransferData;
+
+/**
+ * 
+ * Provides instances of {@link CommonDragAdapterAssistant} and
+ * {@link CommonDropAdapterAssistant} for the associated
+ * {@link INavigatorContentService}.
+ * 
+ * <p>
+ * Clients should only take note of this Service they are are using the
+ * {@link INavigatorContentService} in the context of a viewer which is not or
+ * does not extend {@link CommonViewer}. Clients should take a look at the
+ * initialization of the DND support in the {@link CommonViewer} if they wish to
+ * support this capability in their own viewers.
+ * </p>
+ * 
+ * @see CommonDragAdapter
+ * @see CommonDragAdapterAssistant
+ * @see CommonDropAdapter
+ * @see CommonDropAdapterAssistant
+ * @see CommonViewer
+ * @see INavigatorContentService#getDnDService()
+ * @see <a
+ *      href="http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html">Drag
+ *      and Drop: Adding Drag and Drop to an SWT Application</a>
+ * @see <a
+ *      href="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html">Drag
+ *      and Drop in the Eclipse UI (Custom Transfer Types)</a>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ * 
+ */
+public interface INavigatorDnDService {
+
+	/**
+	 * 
+	 * As part of the <b>org.eclipse.ui.navigator.viewer</b> extension point,
+	 * clients may explicit extend the support Transfer Types of a particular
+	 * viewer using the <b>dragAssistant</b> element. This element defines a
+	 * class which extends {@link CommonDragAdapterAssistant} and can direct the
+	 * viewer on how to provide different kinds of DND Transfer Types. The array
+	 * is returned in no particular order.
+	 * 
+	 * @return An array of {@link CommonDragAdapterAssistant} or an empty array.
+	 */
+	CommonDragAdapterAssistant[] getCommonDragAssistants();
+
+	/**
+	 * Clients may choose to programmatically bind drag assistants to an
+	 * instance of the DND Service. A programmatic binding is not persisted
+	 * between sessions and is not propagated to other instances of
+	 * {@link INavigatorContentService} with the same id. 
+	 * 
+	 * @param anAssistant The assistant to bind.
+	 */
+	void bindDragAssistant(CommonDragAdapterAssistant anAssistant);
+
+	/**
+	 * 
+	 * This method returns an array of {@link CommonDropAdapterAssistant} from
+	 * content extensions that are <i>visible</i> and <i>active</i> for the
+	 * associated {@link INavigatorContentService}. The array is sorted by
+	 * priority, with overrides taken into account.
+	 * 
+	 * <p>
+	 * The array should be processed from the first element to the last, asking
+	 * each extension to
+	 * {@link CommonDropAdapterAssistant#validateDrop(Object, int, org.eclipse.swt.dnd.TransferData)}.
+	 * The first to successfully validate the drop operation will have the
+	 * opportunity to
+	 * {@link CommonDropAdapterAssistant#handleDrop(CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, Object) handle the drop}
+	 * </p>
+	 * 
+	 * @param aDropTarget
+	 *            The target element in the viewer of the drop operation.
+	 * @param theTransferType
+	 *            The transfer type of the current drop operation.
+	 * @return An array of {@link CommonDropAdapterAssistant}s that are defined
+	 *         by the set of
+	 *         <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b>
+	 *         extensions that provide a <b>possibleChildren</b> expression
+	 *         that matches the given drop target.
+	 */
+	CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
+			Object aDropTarget, TransferData theTransferType);
+
+	/**
+	 * 
+	 * This method returns an array of {@link CommonDropAdapterAssistant} from
+	 * content extensions that are <i>visible</i> and <i>active</i> for the
+	 * associated {@link INavigatorContentService}.
+	 * 
+	 * <p>
+	 * The array should be processed from the first element to the last, asking
+	 * each extension to
+	 * {@link CommonDropAdapterAssistant#validateDrop(Object, int, org.eclipse.swt.dnd.TransferData)}.
+	 * The first to successfully validate the drop operation will have the
+	 * opportunity to
+	 * {@link CommonDropAdapterAssistant#handleDrop(CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, Object) handle the drop}
+	 * </p>
+	 * 
+	 * @param aDropTarget
+	 *            The target element in the viewer of the drop operation.
+	 * @param theDragSelection
+	 *            The drag selection of the current drop operation.
+	 * @return An array of {@link CommonDropAdapterAssistant}s that are defined
+	 *         by the set of
+	 *         <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b>
+	 *         extensions that provide a <b>possibleChildren</b> expression
+	 *         that matches the given drop target.
+	 */
+	CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
+			Object aDropTarget, IStructuredSelection theDragSelection);
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorFilterService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorFilterService.java
new file mode 100755
index 0000000..cbc4fe5
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorFilterService.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Provides support for managing the filters defined for a Common Navigator
+ * viewer.
+ * 
+ * <p>
+ * An INavigatorFilterService manages the available common filters and their
+ * current activation state for a particular INavigatorContentService. An
+ * INavigatorFilterService cannot be acquired without an
+ * INavigatorContentService (through
+ * {@link INavigatorContentService#getFilterService}). Each instance will
+ * provide information specific to the content service associated with it.
+ * </p>
+ * <p>
+ * The visibility of commonFilters is controlled through matching
+ * <b>viewerContentBinding</b>s. That is, like content extensions, the id of a
+ * commonFilter must match an includes expression for at least one
+ * <b>viewerContentBinding</b> element for the corresponding
+ * INavigatorContentService.
+ * </p>
+ * <p>
+ * The activation of each filter should be persisted from session to session.
+ * Clients of this interface have control over when the persistence occurs. In
+ * particular, clients should call {@link  #persistFilterActivationState()}
+ * after each call to {@link #setActiveFilterIds(String[])}.
+ * </p> 
+ * 
+ * @see INavigatorContentService#getFilterService()
+ * @see ViewerFilter
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface INavigatorFilterService {
+
+	/**
+	 * 
+	 * Determine the set of filters which are <i>visible</i> to the
+	 * content service associated with this filter service. 
+	 * 
+	 * @param toReturnOnlyActiveFilters
+	 *            True indicates that only active filters should be returned.
+	 * @return An array of ViewerFilters that should be applied to the viewer
+	 *         rendering the content from this INavigatorContentService
+	 */
+	ViewerFilter[] getVisibleFilters(boolean toReturnOnlyActiveFilters);
+
+	/**
+	 * 
+	 * <i>Visible</i> filters are filters whose ids match a
+	 * <b>viewerContentBinding</b> for the corresponding viewer.
+	 * 
+	 * @return An array of all visible filter descriptors.
+	 */
+	ICommonFilterDescriptor[] getVisibleFilterDescriptors();
+
+	/**
+	 * @param aFilterId
+	 *            Check the activation of aFilterId for the content service
+	 *            corresponding to this filter service.
+	 * @return True if the filter specified by the id is active for the content
+	 *         service corresponding to this filter service.
+	 */
+	boolean isActive(String aFilterId);
+
+	/**
+	 * Cause the specified set of filters to be activated, and any filters not
+	 * specified to be deactivated. Updates the viewer filters for the
+	 * associated viewer. This is a higher level operation that handles the
+	 * filter activation completely, in contrast to
+	 * {@link #setActiveFilterIds(String[])} which does not set the viewer
+	 * filter state. This is probably the one you want if you are changing
+	 * filters.
+	 * 
+	 * @param theFilterIds
+	 *            An array of filter ids to activate.
+	 * @since 3.5
+	 */
+	public void activateFilterIdsAndUpdateViewer(String[] theFilterIds);
+
+	/**
+	 * Activate the set of given filters. An <i>active</i> filter will always be
+	 * returned from {@link #getVisibleFilters(boolean)}. An <i>inactive</i> filter will
+	 * only be returned from {@link #getVisibleFilters(boolean)} when it is
+	 * called with <b>false</b>.
+	 * 
+	 * 
+	 * @param theFilterIds
+	 *            An array of filter ids to activate.
+	 * 
+	 */
+	void setActiveFilterIds(String[] theFilterIds);
+
+	/** 
+	 * Persist the current activation state for visible filters.
+	 */
+	void persistFilterActivationState();
+	
+	/**
+	 * 
+	 * Return the viewer filter for the given descriptor
+	 * 
+	 * @param theDescriptor
+	 *            A non-null filter descriptor.
+	 * @return the viewer filter for the given descriptor
+	 * @since 3.3
+	 */
+	ViewerFilter getViewerFilter(ICommonFilterDescriptor theDescriptor);
+	
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorPipelineService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorPipelineService.java
new file mode 100755
index 0000000..5eacdb4
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorPipelineService.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+/**
+ * 
+ * Performs calculations that are necessary to determine the correct children to
+ * render in the viewer.
+ * 
+ * @see INavigatorContentService#getPipelineService()
+ * @see PipelinedShapeModification
+ * @see PipelinedViewerUpdate
+ * @see IPipelinedTreeContentProvider
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ */
+public interface INavigatorPipelineService {
+
+	/**
+	 * Intercept attempts to add elements directly to the viewer.
+	 * 
+	 * <p>
+	 * For content extensions that reshape the structure of children in a
+	 * viewer, their overridden extensions may sometimes use optimized refreshes
+	 * to add elements to the tree. These attempts must be intercepted and
+	 * mapped to the correct set of model elements in the overriding extension.
+	 * Clients may add, remove, or modify elements in the given set of added
+	 * children. Clients should return a set for downstream extensions to
+	 * massage further.
+	 * </p>
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param anAddModification
+	 *            The shape modification which contains the current suggested
+	 *            parent and children. Clients may modify this parameter
+	 *            directly and return it as the new shape modification.
+	 * @return The new shape modification to use. Clients should <b>never</b>
+	 *         return <b>null</b> from this method.
+	 */
+	public PipelinedShapeModification interceptAdd(
+			PipelinedShapeModification anAddModification);
+
+	/**
+	 * Intercept attempts to remove elements directly from the viewer.
+	 * 
+	 * <p>
+	 * For content extensions that reshape the structure of children in a
+	 * viewer, their overridden extensions may sometimes use optimized refreshes
+	 * to remove elements to the tree. These attempts must be intercepted and
+	 * mapped to the correct set of model elements in the overriding extension.
+	 * Clients may add, remove, or modify elements in the given set of removed
+	 * children. Clients should return a set for downstream extensions to
+	 * massage further.
+	 * </p>
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param aRemoveModification
+	 *            The shape modification which contains the current suggested
+	 *            parent and children. Clients may modify this parameter
+	 *            directly and return it as the new shape modification.
+	 * @return The new shape modification to use. Clients should <b>never</b>
+	 *         return <b>null</b> from this method.
+	 */
+	public PipelinedShapeModification interceptRemove(
+			PipelinedShapeModification aRemoveModification);
+	
+	/**
+	 * Intercept calls to viewer <code>refresh()</code> methods.
+	 * 
+	 * <p>
+	 * Clients may modify the given update to add or remove the elements to be
+	 * refreshed. Clients may return the same instance that was passed in for
+	 * the next downstream extension.
+	 * </p>
+	 * 
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param aRefreshSynchronization
+	 *            The (current) refresh update to execute against the viewer.
+	 * @return The (potentially reshaped) refresh to execute against the viewer.
+	 */
+	boolean interceptRefresh(PipelinedViewerUpdate aRefreshSynchronization);
+	
+	/**
+	 * Intercept calls to viewer <code>update()</code> methods.
+	 * 
+	 * <p>
+	 * Clients may modify the given update to add or remove the elements to be
+	 * updated. Clients may also add or remove properties for the given targets
+	 * to optimize the refresh. Clients may return the same instance that was
+	 * passed in for the next downstream extension.
+	 * </p>
+	 * 
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param anUpdateSynchronization
+	 *            The (current) update to execute against the viewer.
+	 * @return The (potentially reshaped) update to execute against the viewer.
+	 */
+	public boolean interceptUpdate(
+			PipelinedViewerUpdate anUpdateSynchronization);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSaveablesService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSaveablesService.java
new file mode 100755
index 0000000..a56e637
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSaveablesService.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.ISaveablesLifecycleListener;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.Saveable;
+
+/**
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface INavigatorSaveablesService {
+
+	/**
+	 * Initializes this service. Must be called on the UI thread, and may only
+	 * be called once. The given viewer's control must not be disposed.
+	 * <p>
+	 * The given listener will be notified of changes to the result of
+	 * {@link #getSaveables()} and to the dirty state of those saveables. The
+	 * given source will be used as the event source for these event
+	 * notifications.
+	 * </p>
+	 * <p>
+	 * The given viewer's selection will be used by
+	 * {@link #getActiveSaveables()} to determine the active saveables. The
+	 * active saveables are determined by iterating over the current selection,
+	 * and for each element, walking up its parent chain until an element
+	 * representing a saveable is found, or a root element is reached.
+	 * </p>
+	 * 
+	 * @param source
+	 * @param viewer
+	 * @param listener
+	 * 
+	 */
+	public void init(ISaveablesSource source, StructuredViewer viewer,
+			ISaveablesLifecycleListener listener);
+
+	/**
+	 * Returns the Saveable objects for which elements are contained in the
+	 * tree.
+	 * 
+	 * @return the saveables
+	 */
+	public Saveable[] getSaveables();
+
+	/**
+	 * Returns the active saveables based on the current selection. This method
+	 * must be called on the UI thread.
+	 * 
+	 * @return the active saveables based on the current selection
+	 */
+	public Saveable[] getActiveSaveables();
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSorterService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSorterService.java
new file mode 100755
index 0000000..cebbe48
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorSorterService.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.Map;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * 
+ * Provides an interface to extensions declared in
+ * <b>org.eclipse.ui.navigator.navigatorContent/commonSorter</b>.
+ * 
+ * <p>
+ * Like other extensions to the Common Navigator framework, sorters defined by
+ * the above extension point must be bound to the associated
+ * {@link INavigatorContentService} through a
+ * <b>org.eclipse.ui.navigator.viewer/viewerContentBinding</b> extension.
+ * </p>
+ * 
+ * @see INavigatorContentService#getSorterService()
+ * @see ViewerSorter
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ */
+public interface INavigatorSorterService {
+
+	/**
+	 * Return a {@link ViewerSorter} from an extension which is visible to the
+	 * associated {@link INavigatorContentService} and whose <b>parentExpression</b>
+	 * matches the given parent.
+	 * 
+	 * @param aParent
+	 *            An element from the tree
+	 * @return An applicable ViewerSorter or simple {@link ViewerSorter} if no
+	 *         sorter is found.
+	 */
+	ViewerSorter findSorterForParent(Object aParent);
+
+	/**
+	 * Return a {@link ViewerSorter} from an extension which is visible to the
+	 * associated {@link INavigatorContentService} and whose <b>parentExpression</b>
+	 * matches the given parent.
+	 * 
+	 * @param source
+	 *            The source of the element.
+	 * @param parent
+	 *            An element from the tree
+	 * @param lvalue
+	 *            An element from the tree
+	 * @param rvalue
+	 *            An element from the tree
+	 * @return An applicable ViewerSorter or simple {@link ViewerSorter} if no
+	 *         sorter is found.
+	 */
+	ViewerSorter findSorter(INavigatorContentDescriptor source, Object parent,
+			Object lvalue, Object rvalue);
+
+	/**
+	 * Find and return all viewer sorters associated with the given descriptor.
+	 * 
+	 * <p>
+	 * The <i>commonSorter</i> element is not required to have an id, so in
+	 * some cases, an auto-generated id, using the content extension id as a
+	 * base, is generated to ensure the map is properly filled with all
+	 * available sorters. No guarantees are given as to the order or consistency
+	 * of these generated ids between invocations.
+	 * </p>
+	 * 
+	 * @param theSource
+	 *            A descriptor that identifies a particular content extension
+	 * @return A Map[String sorterDescriptorId, ViewerSorter instance] where the
+	 *         key is the id defined in the extension and the value is the
+	 *         instantiated sorter.
+	 * 
+	 * @see INavigatorContentService#getContentDescriptorById(String)
+	 * @see INavigatorContentService#getContentExtensionById(String)
+	 * @see INavigatorContentExtension#getDescriptor()
+	 * @since 3.3
+	 */
+	public Map findAvailableSorters(INavigatorContentDescriptor theSource);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorViewerDescriptor.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorViewerDescriptor.java
new file mode 100755
index 0000000..9c85978
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/INavigatorViewerDescriptor.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.Separator;
+
+/**
+ * Provides a basic metadata about the abstract viewer for a particular content
+ * service.
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.2
+ * 
+ */
+public interface INavigatorViewerDescriptor {
+
+	/**
+	 * {@value} (boolean): True indicates the
+	 * "Available Extensions" tab in the "Available Customizations" dialog
+	 * should not be available for the user (defaults to <b>false</b>).
+	 * 
+	 */
+	String PROP_HIDE_AVAILABLE_EXT_TAB = "org.eclipse.ui.navigator.hideAvailableExtensionsTab"; //$NON-NLS-1$
+
+	/**
+	 * {@value} (boolean): True
+	 * indicates the entire "Available Customizations" dialog should not be
+	 * available for the user (defaults to <b>false</b>).
+	 */
+	String PROP_HIDE_AVAILABLE_CUSTOMIZATIONS_DIALOG = "org.eclipse.ui.navigator.hideAvailableCustomizationsDialog"; //$NON-NLS-1$
+
+	/**
+	 * {@value} (boolean): True indicates the
+	 * "Collapse All" button should not be available for the user (defaults to
+	 * <b>false</b>).
+	 */
+	String PROP_HIDE_COLLAPSE_ALL_ACTION = "org.eclipse.ui.navigator.hideCollapseAllAction"; //$NON-NLS-1$
+
+	/**
+	 * {@value} (boolean): True indicates
+	 * the "Link With Editor" action should not be available for the user
+	 * (defaults to <b>false</b>).
+	 */
+	String PROP_HIDE_LINK_WITH_EDITOR_ACTION = "org.eclipse.ui.navigator.hideLinkWithEditorAction"; //$NON-NLS-1$
+
+	/**
+	 * {@value} (string): The help context id to be used for the customize view dialog, if not specified
+	 * help will not be available.
+	 * @since 3.5
+	 */
+	String PROP_CUSTOMIZE_VIEW_DIALOG_HELP_CONTEXT = "org.eclipse.ui.navigator.customizeViewDialogHelpContext"; //$NON-NLS-1$
+
+	/**
+	 * Returns the id of the viewer targeted by this extension.
+	 * 
+	 * @return the id of the viewer targeted by this extension.
+	 */
+	String getViewerId();
+
+	/**
+	 * The default value of the popup menu id is the viewer id. Clients may
+	 * override this value using a <b>navigatorConfiguration</b> extension.
+	 * 
+	 * @return The id of the context menu of the viewer.
+	 */
+	String getPopupMenuId();
+
+	/**
+	 * Returns true if the content extension of the given id is 'visible'. A
+	 * content extension is 'visible' if it matches a viewerContentBinding for
+	 * the given viewer id.
+	 * 
+	 * @param aContentExtensionId
+	 *            The id to query
+	 * @return True if the content extension matches a viewerContentBinding for
+	 *         the viewer id of this descriptor.
+	 */
+	boolean isVisibleContentExtension(String aContentExtensionId);
+
+	/**
+	 * Returns true if the action extension of the given id is 'visible'. An
+	 * action extension is 'visible' if it matches a viewerActionBinding for the
+	 * given viewer id.
+	 * 
+	 * @param anActionExtensionId
+	 *            The id to query
+	 * @return True if the action extension matches a viewerActionBinding for
+	 *         the viewer id of this descriptor.
+	 */
+	boolean isVisibleActionExtension(String anActionExtensionId);
+
+	/**
+	 * Returns true if the content extension of the given id matches a
+	 * viewerContentBinding extension that declares isRoot as true.
+	 * 
+	 * @param aContentExtensionId
+	 *            The id to query
+	 * @return True if the content extension matches a viewerContentBinding
+	 *         which declares 'isRoot' as true for the viewer id of this
+	 *         descriptor.
+	 */
+	boolean isRootExtension(String aContentExtensionId);
+
+	/**
+	 * Returns true if there exists at least one matching viewerContentBinding
+	 * which declares isRoot as true. This behavior will override the default
+	 * enablement for the viewer root.
+	 * 
+	 * @return True if there exists a matching viewerContentBinding which
+	 *         declares isRoot as true.
+	 */
+	boolean hasOverriddenRootExtensions();
+
+	/**
+	 * Returns true by default. A true value indicates that object and view
+	 * contributions should be supported by the popup menu of any viewer
+	 * described by this viewer descriptor. The value may be overridden from the
+	 * &lt;popupMenu /&gt; child element of the &lt;viewer /&gt; element in the
+	 * <b>org.eclipse.ui.navigator.viewer</b> extension point.
+	 * 
+	 * @return True if object/view contributions should be allowed or False
+	 *         otherwise.
+	 */
+	boolean allowsPlatformContributionsToContextMenu();
+
+	/**
+	 * 
+	 * Custom insertion points are declared through a nested 'popupMenu' element
+	 * in the <b>org.eclipse.ui.navigator.viewer</b> extension point. Each
+	 * insertion point represents either a {@link Separator} or
+	 * {@link GroupMarker} in the context menu of the viewer.
+	 * <p>
+	 * 
+	 * @return The set of custom insertion points, if any. A null list indicates
+	 *         the default set (as defined by {@link NavigatorActionService})
+	 *         should be used. An empty list indicates there are no declarative
+	 *         insertion points.
+	 */
+	MenuInsertionPoint[] getCustomInsertionPoints();
+
+	/**
+	 * @param aPropertyName
+	 *            A property name corresponding to a configuration option from
+	 *            <b>org.eclipse.ui.navigator.viewer</b>
+	 * @return The unmodified string value returned from the extension (<b>null</b>
+	 *         is a possible return value).
+	 */
+	String getStringConfigProperty(String aPropertyName);
+
+	/**
+	 * @param aPropertyName
+	 *            A property name corresponding to a configuration option from
+	 *            <b>org.eclipse.ui.navigator.viewer</b>
+	 * @return The boolean value returned from the extension (<b>null</b> is a
+	 *         possible return value).
+	 */
+	boolean getBooleanConfigProperty(String aPropertyName);
+	
+	/**
+	 * @return the help context associated with this viewer as specified by 
+	 * the helpContext attribute of the &lt;viewer /&gt; element in the
+	 * <b>org.eclipse.ui.navigator.viewer</b> extension point.
+	 * @since 3.4
+	 */
+	String getHelpContext();
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider.java
new file mode 100755
index 0000000..e03ed74
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.Set;
+
+/**
+ * 
+ * To correctly implement pipelining you should implement
+ * {@link IPipelinedTreeContentProvider2} which provides the
+ * additional
+ * {@link IPipelinedTreeContentProvider2#hasChildren(Object)} method.
+ * This allows the calculation of hasChildren to match what will be provided in
+ * calculating the children. If you don't implement the hasChildren, you may get
+ * "false positive" hasChildrens which will result in a "+" indication in the
+ * tree in the event that the pipelined children calculation.
+ * 
+ * The only reason these are two separate interfaces is historical.
+ * 
+ * @since 3.2
+ * 
+ */
+public interface IPipelinedTreeContentProvider extends ICommonContentProvider {
+
+	/**
+	 * Intercept the children that would be contributed to the viewer and
+	 * determine how to change the shape of those children. The set of children
+	 * should be modified to contain the correct children to return to the
+	 * viewer.
+	 * 
+	 * @param aParent
+	 *            A parent from the viewer
+	 * @param theCurrentChildren
+	 *            The set of children contributed thus far from upstream content
+	 *            providers.
+	 */
+	void getPipelinedChildren(Object aParent, Set theCurrentChildren);
+
+	/**
+	 * Intercept the elements that would be contributed to the root of the
+	 * viewer and determine how to change the shape of those children. The given
+	 * set of elements should be modified to contain the correct elements to
+	 * return to the viewer.
+	 * 
+	 * @param anInput
+	 *            An input from the viewer
+	 * @param theCurrentElements
+	 *            The set of children contributed thus far from upstream content
+	 *            providers.
+	 */
+	void getPipelinedElements(Object anInput, Set theCurrentElements);
+
+	/**
+	 * Intercept requests for a parent of the given object.
+	 * 
+	 * @param anObject
+	 *            The object being queried for a parent.
+	 * @param aSuggestedParent
+	 *            The parent already suggested from upstream extensions.
+	 * @return The intended parent from this pipelined content provider. If you
+	 *         wish to not influence the parent, then return the
+	 *         aSuggestedParent value.
+	 */
+	Object getPipelinedParent(Object anObject, Object aSuggestedParent);
+
+	/**
+	 * Intercept attempts to add elements directly to the viewer.
+	 * 
+	 * <p>
+	 * For content extensions that reshape the structure of children in a
+	 * viewer, their overridden extensions may sometimes use optimized refreshes
+	 * to add elements to the tree. These attempts must be intercepted and
+	 * mapped to the correct set of model elements in the overriding extension.
+	 * Clients may add, remove, or modify elements in the given set of added
+	 * children. Clients should return a set for downstream extensions to
+	 * massage further.
+	 * </p>
+	 * <p>
+	 * Clients may change what parent the reshaped elements are added to, so
+	 * long as that parent is not the root of the viewer.
+	 * </p>
+	 * <p>
+	 * Clients should never create their own pipeline shape modifications, but
+	 * instead return the shape modification that was passed in with appropriate
+	 * changes.
+	 * </p>
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param anAddModification
+	 *            The shape modification which contains the current suggested
+	 *            parent and children. Clients may modify this parameter
+	 *            directly and return it as the new shape modification.
+	 * @return The new shape modification to use. Clients should <b>never</b>
+	 *         return <b>null</b> from this method.
+	 */
+	PipelinedShapeModification interceptAdd(PipelinedShapeModification anAddModification);
+
+	/**
+	 * Intercept attempts to remove elements directly from the viewer.
+	 * 
+	 * <p>
+	 * For content extensions that reshape the structure of children in a
+	 * viewer, their overridden extensions may sometimes use optimized refreshes
+	 * to remove elements to the tree. These attempts must be intercepted and
+	 * mapped to the correct set of model elements in the overriding extension.
+	 * Clients may add, remove, or modify elements in the given set of removed
+	 * children. Clients should return a set for downstream extensions to
+	 * massage further.
+	 * </p>
+	 * <p>
+	 * The parent will be <b>null</b> for remove modifications.
+	 * <p>
+	 * Clients should never create their own pipeline shape modifications, but
+	 * instead return the shape modification that was passed in with appropriate
+	 * changes.
+	 * </p>
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param aRemoveModification
+	 *            The shape modification which contains the current suggested
+	 *            parent and children. Clients may modify this parameter
+	 *            directly and return it as the new shape modification.
+	 * @return The new shape modification to use. Clients should <b>never</b>
+	 *         return <b>null</b> from this method.
+	 */
+	PipelinedShapeModification interceptRemove(PipelinedShapeModification aRemoveModification);
+
+	/**
+	 * Intercept calls to viewer <code>refresh()</code> methods.
+	 * 
+	 * <p>
+	 * Clients may modify the given update to add or remove the elements to be
+	 * refreshed. Clients may return the same instance that was passed in for
+	 * the next downstream extension.
+	 * </p>
+	 * 
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param aRefreshSynchronization
+	 *            The (current) refresh update to execute against the viewer.
+	 * @return True if the viewer update was modified.
+	 */
+	boolean interceptRefresh(PipelinedViewerUpdate aRefreshSynchronization);
+
+	/**
+	 * Intercept calls to viewer <code>update()</code> methods.
+	 * 
+	 * <p>
+	 * Clients may modify the given update to add or remove the elements to be
+	 * updated. Clients may also add or remove properties for the given targets
+	 * to optimize the refresh. Clients may return the same instance that was
+	 * passed in for the next downstream extension.
+	 * </p>
+	 * 
+	 * <p>
+	 * <b>Clients should not call any of the add, remove, refresh, or update
+	 * methods on the viewer from this method or any code invoked by the
+	 * implementation of this method.</b>
+	 * </p>
+	 * 
+	 * @param anUpdateSynchronization
+	 *            The (current) update to execute against the viewer.
+	 * @return True if the viewer update was modified.
+	 */
+	boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider2.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider2.java
new file mode 100644
index 0000000..b6a121a
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/IPipelinedTreeContentProvider2.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Oakland Software Incorporated 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:
+ *     Oakland Software Incorporated - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/**
+ * 
+ * A pipelined content provider allows an extension to reshape the contributions
+ * of an upstream content extension.
+ * 
+ * An "upstream" extension is either:
+ * <ul>
+ * <li>the extension overridden by this extension using the
+ * <b>org.eclipse.ui.navigatorContent/navigatorContent/override</b> element, or</li>
+ * <li>another extension that overrides the same extension this extension
+ * overrides, but with higher priority than this extension.</li>
+ * </ul>
+ * 
+ * Overridden extensions form a tree where the nodes of the tree represent the
+ * content extensions, children represent overriding extensions, and the
+ * children are sorted by priority. Pipeline contributions traverse the tree,
+ * allowing children to override the contributions of their parent, giving
+ * precedence to the children of highest priority.
+ * 
+ * {@link ITreeContentProvider} is respected by the Common Navigator.
+ * 
+ * Note: this should be used instead of {@link IPipelinedTreeContentProvider} so
+ * that the hasChildren indication reflects the actual pipelined children that
+ * will be presented.
+ * 
+ * @see INavigatorPipelineService
+ * @see INavigatorContentService#getPipelineService()
+ * @since 3.5
+ * 
+ */
+public interface IPipelinedTreeContentProvider2 extends IPipelinedTreeContentProvider {
+
+	/**
+	 * Intercept the fact of having children and optionally modify this. This
+	 * calculation should match whether children will be actually provided.
+	 * 
+	 * @param anInput
+	 *            An input from the viewer
+	 * @param currentHasChildren
+	 *            The current proposed setting of hasChildren thus far from the
+	 *            upstream content providers.
+	 * @return The new value for hasChildren
+	 */
+	boolean hasPipelinedChildren(Object anInput, boolean currentHasChildren);
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/LinkHelperService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/LinkHelperService.java
new file mode 100755
index 0000000..154265e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/LinkHelperService.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.extensions.LinkHelperDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.LinkHelperManager;
+
+/**
+ * Manages the link helpers which are used to define the behavior of
+ * the link with editor function.
+ * 
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @since 3.4
+ */
+public class LinkHelperService {
+
+	private static final ILinkHelper[] CANT_GET_NO_HELP = new ILinkHelper[0];
+
+	private NavigatorContentService contentService;
+
+	private final Map linkHelpers = new HashMap();
+
+	/**
+	 * @param aContentService
+	 *            The associated content service for this link helper service.
+	 */
+	LinkHelperService(NavigatorContentService aContentService) {
+		contentService = aContentService;
+	}
+
+	/**
+	 * 
+	 * @param anObject
+	 *            An object from the viewer
+	 * @return An array of link helpers that know about elements in the
+	 *         selection or null
+	 */
+	public ILinkHelper[] getLinkHelpersFor(Object anObject) {
+
+		LinkHelperDescriptor[] descriptors = LinkHelperManager.getInstance()
+				.getLinkHelpersFor(anObject, contentService);
+		if (descriptors.length == 0) {
+			return CANT_GET_NO_HELP;
+		}
+
+		Set helpers = new LinkedHashSet();
+		for (int i = 0; i < descriptors.length; i++) {
+			helpers.add(getLinkHelper(descriptors[i]));
+		}
+		if (helpers.size() == 0)
+			return CANT_GET_NO_HELP;
+		return (ILinkHelper[]) helpers.toArray(new ILinkHelper[helpers.size()]);
+
+	}
+
+	/**
+	 * 
+	 * @param input
+	 *            The Editor input from the active viewer.
+	 * @return An array of link helpers that know about elements in the
+	 *         selection or null
+	 */
+	public ILinkHelper[] getLinkHelpersFor(IEditorInput input) {
+		LinkHelperDescriptor[] descriptors = LinkHelperManager.getInstance()
+				.getLinkHelpersFor(input, contentService);
+		if (descriptors.length == 0) {
+			return CANT_GET_NO_HELP;
+		}
+
+		Set helpers = new LinkedHashSet();
+		for (int i = 0; i < descriptors.length; i++) {
+			helpers.add(getLinkHelper(descriptors[i]));
+		}
+		if (helpers.size() == 0)
+			return CANT_GET_NO_HELP;
+		return (ILinkHelper[]) helpers.toArray(new ILinkHelper[helpers.size()]);
+	}
+
+	private ILinkHelper getLinkHelper(LinkHelperDescriptor descriptor) {
+		ILinkHelper helper = (ILinkHelper) linkHelpers.get(descriptor);
+		if (helper == null) {
+			synchronized (this) {
+				if (helper == null) {
+					linkHelpers.put(descriptor, helper = descriptor
+							.createLinkHelper());
+				}
+			}
+		}
+		return helper;
+	}
+	
+	/**
+	 * Return a selection that contains the elements that the given editor input 
+	 * represent.
+	 * @param input the editor input
+	 * @return a selection that contains the elements that the given editor input 
+	 * represent
+	 */
+	public IStructuredSelection getSelectionFor(IEditorInput input) {
+		ILinkHelper[] helpers = getLinkHelpersFor(input);
+
+		IStructuredSelection selection = StructuredSelection.EMPTY;
+		IStructuredSelection newSelection = StructuredSelection.EMPTY;
+
+		for (int i = 0; i < helpers.length; i++) {
+			selection = helpers[i].findSelection(input);
+			if (selection != null && !selection.isEmpty()) {
+				newSelection = mergeSelection(newSelection, selection);
+			}
+		}
+		return newSelection;
+	} 
+	
+	private IStructuredSelection mergeSelection(IStructuredSelection aBase,
+			IStructuredSelection aSelectionToAppend) {
+		if (aBase == null || aBase.isEmpty()) {
+			return (aSelectionToAppend != null) ? aSelectionToAppend
+					: StructuredSelection.EMPTY;
+		} else if (aSelectionToAppend == null || aSelectionToAppend.isEmpty()) {
+			return aBase;
+		} else {
+			List newItems = new ArrayList(aBase.toList());
+			newItems.addAll(aSelectionToAppend.toList());
+			return new StructuredSelection(newItems);
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/MenuInsertionPoint.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/MenuInsertionPoint.java
new file mode 100755
index 0000000..589383c
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/MenuInsertionPoint.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+/**
+ * A descriptive construct to relay information about a menu insertion point;
+ * including the name of the insertion point and whether the item should be
+ * rendered as a separator or group marker.
+ * 
+ * @since 3.2
+ * 
+ */
+public final class MenuInsertionPoint {
+	private String name;
+
+	private boolean isSeparator;
+	
+	private String toString;
+
+	/**
+	 * 
+	 * @param aName
+	 *            The name that clients will refer to when inserting items into
+	 *            the menu at this point.
+	 * @param toMakeASeparator
+	 *            A value of true will cause the point to be rendered as a
+	 *            org.eclipse.jface.action.Separator (a "bar" in the menu);
+	 *            false will cause the point to be rendered as a
+	 *            org.eclipse.jface.action.GroupMarker.
+	 */
+	public MenuInsertionPoint(String aName, boolean toMakeASeparator) {
+		name = aName;
+		isSeparator = toMakeASeparator;
+	}
+
+	/**
+	 * 
+	 * @return True if the point should be rendered as a
+	 *         org.eclipse.jface.action.Separator (a "bar" in the menu); or
+	 *         false if the point should be rendered as a
+	 *         org.eclipse.jface.action.GroupMarker.
+	 */
+	public boolean isSeparator() {
+		return isSeparator;
+	}
+
+	/**
+	 * 
+	 * @return The name that clients will refer to when inserting items into the
+	 *         menu at this point.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	public String toString() { 
+		if(toString == null) {
+			toString = "MenuInsertionPoint[name=\""+name+"\", isSeparator="+isSeparator+"]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+		return toString;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorActionService.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorActionService.java
new file mode 100755
index 0000000..0839457
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorActionService.java
@@ -0,0 +1,380 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable;
+import org.eclipse.ui.internal.navigator.actions.CommonActionDescriptorManager;
+import org.eclipse.ui.internal.navigator.actions.CommonActionProviderDescriptor;
+import org.eclipse.ui.internal.navigator.extensions.CommonActionExtensionSite;
+import org.eclipse.ui.internal.navigator.extensions.SkeletonActionProvider;
+
+/**
+ * <p>
+ * Provides context menu items and {@link IActionBars} contributions for a particular abstract
+ * viewer. The interface matches that of {@link ActionGroup} and may be used in the same manner.
+ * Clients must call
+ * {@link NavigatorActionService#prepareMenuForPlatformContributions(MenuManager, ISelectionProvider, boolean)}
+ * when using this class to allow object or viewer contributions. The
+ * <b>org.eclipse.ui.navigator.viewer/viewer/popupMenu</b> element may override whether platform
+ * contributions are allowed to the menu with its <i>allowsPlatformContributions</i> attribute.
+ * "Platform Contributions" are menu items that are added through the <b>org.eclipse.ui.popupMenus</b>
+ * extension point.
+ * </p>
+ * <p>
+ * A {@link CommonActionProvider} has opportunities to contribute to the context menu and
+ * {@link org.eclipse.ui.IActionBars} whenever the selection in the viewer changes. Action Providers
+ * are selected based on the enablement expressions of their associated content extension or their
+ * own enablement expression if it is declared as a top-level &lt;actionProvider /&gt; element (of
+ * the <b>org.eclipse.ui.navigator.navigatorContent</b> extension point). See the schema
+ * documentation of <b>org.eclipse.ui.navigator.navigatorContent</b> for more information on how to
+ * specify an Action Provider.
+ * </p>
+ * <p>
+ * Clients that reuse this service outside of an instance of {@link CommonNavigator} must be sure
+ * that {{@link #fillActionBars(IActionBars)} is called whenever the selection changes. The
+ * retargetable actions for each selection could change, based on who contributed the items.
+ * 
+ * @since 3.2
+ * 
+ */
+public final class NavigatorActionService extends ActionGroup implements IMementoAware {
+
+	private static final IContributionItem[] DEFAULT_GROUPS = new IContributionItem[]{new Separator(ICommonMenuConstants.GROUP_NEW), new GroupMarker(ICommonMenuConstants.GROUP_GOTO), new GroupMarker(ICommonMenuConstants.GROUP_OPEN), new GroupMarker(ICommonMenuConstants.GROUP_OPEN_WITH), new Separator(ICommonMenuConstants.GROUP_EDIT), new GroupMarker(ICommonMenuConstants.GROUP_SHOW), new GroupMarker(ICommonMenuConstants.GROUP_REORGANIZE), new GroupMarker(ICommonMenuConstants.GROUP_PORT), new Separator(ICommonMenuConstants.GROUP_GENERATE), new Separator(ICommonMenuConstants.GROUP_SEARCH), new Separator(ICommonMenuConstants.GROUP_BUILD), new Separator(ICommonMenuConstants.GROUP_ADDITIONS), new Separator(ICommonMenuConstants.GROUP_PROPERTIES)};
+
+	private final ICommonViewerSite commonViewerSite;
+
+	private final StructuredViewer structuredViewer;
+
+	private final NavigatorContentService contentService;
+
+	private final INavigatorViewerDescriptor viewerDescriptor;
+
+	private final Set actionProviderDescriptors = new HashSet();
+
+	/*
+	 * Map of CommonActionProviderDescriptors to CommonActionProviders
+	 */
+	private final Map actionProviderInstances = new HashMap();
+
+	private IMemento memento;
+
+	private IContributionItem[] menuGroups;
+
+	private boolean disposed = false;
+
+	/**
+	 * @param aCommonViewerSite
+	 *            A site that provides information about the context for extensions.
+	 * @param aStructuredViewer
+	 *            The associated StructuredViewer. Used to initialize extensions. <b>May NOT be
+	 *            null.</b>
+	 * @param aContentService
+	 *            The associated INavigatorContentService (for extensions that coordinate behavior
+	 *            with content extensions -- either nested or top-level action providers). <b>May
+	 *            NOT be null.</b>
+	 */
+	public NavigatorActionService(ICommonViewerSite aCommonViewerSite, StructuredViewer aStructuredViewer, INavigatorContentService aContentService) {
+		super();
+		Assert.isNotNull(aCommonViewerSite);
+		Assert.isNotNull(aStructuredViewer);
+		Assert.isNotNull(aContentService);
+
+		commonViewerSite = aCommonViewerSite;
+		contentService = (NavigatorContentService) aContentService;
+		structuredViewer = aStructuredViewer;
+		viewerDescriptor = contentService.getViewerDescriptor();
+
+	}
+
+	/**
+	 * Prepares the menu for object contributions, if the option is set in the extension. The option
+	 * is controlled by the &lgt;popupMenu /&gt; element's 'allowPlatformContributions' attribute.
+	 * Clients may choose to ignore this setting by supplying a value of <b>true</b> for the
+	 * <code>force</code> attribute.
+	 * 
+	 * @param menu
+	 *            The context menu of the IViewPart
+	 * @param aSelectionProvider
+	 *            The selection provider that will supplement actions with a valid, current
+	 *            selection.
+	 * @param force
+	 *            A value of 'true' forces the menu to be registered for object/view contributions.
+	 *            Otherwise, the option from the extension point will be respected. See
+	 *            <b>org.eclipse.ui.navigator.viewer/viewer</b> for more information.
+	 */
+	public void prepareMenuForPlatformContributions(MenuManager menu, ISelectionProvider aSelectionProvider, boolean force) {
+		Assert.isTrue(!disposed);
+
+		if (commonViewerSite instanceof ICommonViewerWorkbenchSite) {
+			/*
+			 * Hooks into the Eclipse framework for Object contributions, and View contributions.
+			 */
+			if (force || viewerDescriptor.allowsPlatformContributionsToContextMenu()) {
+				((ICommonViewerWorkbenchSite) commonViewerSite).registerContextMenu(contentService.getViewerDescriptor().getPopupMenuId(), menu, aSelectionProvider);
+			}
+		}
+	}
+
+	/**
+	 * Requests that the service invoke extensions to fill the given menu with Action Providers that
+	 * are interested in elements from the given selection.
+	 * 
+	 * <p>
+	 * Object contributions (see <b>org.eclipes.ui.popupMenus</b>) may also respected by this
+	 * method if <code>toRespectObjectContributions</code> is true.
+	 * </p>
+	 * 
+	 * @param aMenu
+	 *            The menu being presented to the user.
+	 * @see ActionGroup#fillContextMenu(IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager aMenu) {
+		Assert.isTrue(!disposed);
+
+		if (menuGroups == null) {
+			createMenuGroups();
+		}
+
+		for (int i = 0; i < menuGroups.length; i++) {
+			aMenu.add(menuGroups[i]);
+		}
+
+		addCommonActionProviderMenu(aMenu);
+	}
+
+	private void createMenuGroups() {
+		MenuInsertionPoint[] customPoints = viewerDescriptor.getCustomInsertionPoints();
+
+		if (customPoints == null) {
+			menuGroups = DEFAULT_GROUPS;
+		} else {
+			menuGroups = new IContributionItem[customPoints.length];
+			for (int i = 0; i < customPoints.length; i++) {
+				if (customPoints[i].isSeparator()) {
+					menuGroups[i] = new Separator(customPoints[i].getName());
+				} else {
+					menuGroups[i] = new GroupMarker(customPoints[i].getName());
+				}
+			}
+		}
+	}
+
+	private boolean filterActionProvider(final CommonActionProviderDescriptor providerDesc) {
+		IPluginContribution piCont = new IPluginContribution() {
+			public String getLocalId() {
+				return providerDesc.getId();
+			}
+
+			public String getPluginId() {
+				return providerDesc.getPluginId();
+			}
+		};
+
+		return WorkbenchActivityHelper.filterItem(piCont);
+	}
+	
+	/**
+	 * @param aMenu
+	 */
+	private void addCommonActionProviderMenu(final IMenuManager aMenu) {
+		final CommonActionProviderDescriptor[] providerDescriptors = CommonActionDescriptorManager
+				.getInstance().findRelevantActionDescriptors(contentService, getContext());
+		if (providerDescriptors.length > 0) {
+			for (int i = 0; i < providerDescriptors.length; i++) {
+				final CommonActionProviderDescriptor providerDescriptorLocal = providerDescriptors[i];
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						if (!filterActionProvider(providerDescriptorLocal)) {
+							CommonActionProvider provider = getActionProviderInstance(providerDescriptorLocal);
+							provider.setContext(getContext());
+							provider.fillContextMenu(aMenu);
+						}
+					}
+				});
+			}
+		}
+	}
+	
+	/**
+	 * Request that the service invoke extensions to fill the given IActionBars with retargetable
+	 * actions or view menu contributions from Action Providers that are interested in the given
+	 * selection.
+	 * 
+	 * @param theActionBars
+	 *            The action bars in use by the current view site.
+	 * @see ActionGroup#fillActionBars(IActionBars)
+	 */
+	public void fillActionBars(final IActionBars theActionBars) {
+		Assert.isTrue(!disposed);
+
+		theActionBars.clearGlobalActionHandlers();
+		ActionContext context = getContext();
+		if (context == null) {
+			context = new ActionContext(StructuredSelection.EMPTY);
+		}
+
+		final CommonActionProviderDescriptor[] providerDescriptors = CommonActionDescriptorManager
+				.getInstance().findRelevantActionDescriptors(contentService, context);
+		if (providerDescriptors.length > 0) {
+			for (int i = 0; i < providerDescriptors.length; i++) {
+				final CommonActionProviderDescriptor providerDesciptorLocal = providerDescriptors[i];
+				final ActionContext actionContextLocal = context;
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						if (!filterActionProvider(providerDesciptorLocal)) {
+							CommonActionProvider provider = null;
+							provider = getActionProviderInstance(providerDesciptorLocal);
+							provider.setContext(actionContextLocal);
+							provider.fillActionBars(theActionBars);
+							provider.updateActionBars();
+						}
+					}
+				});
+			}
+		}
+		theActionBars.updateActionBars();
+		theActionBars.getMenuManager().update();
+	}
+
+	/**
+	 * Dispose of any state or resources held by the service.
+	 * 
+	 * @see ActionGroup#dispose()
+	 */
+	public void dispose() {
+		synchronized (actionProviderInstances) {
+			for (Iterator iter = actionProviderInstances.values().iterator(); iter.hasNext();) {
+				CommonActionProvider element = (CommonActionProvider) iter.next();
+				element.dispose();
+			}
+			actionProviderInstances.clear();
+		}
+		actionProviderDescriptors.clear();
+		disposed = false;
+	}
+
+	/**
+	 * Use the given memento to restore the state of each Action Provider as it is initialized.
+	 * 
+	 * @param aMemento
+	 *            The memento retrieved from the dialog settings
+	 */
+	public void restoreState(IMemento aMemento) {
+		Assert.isTrue(!disposed);
+		memento = aMemento;
+
+		synchronized (actionProviderInstances) {
+			for (Iterator actionProviderIterator = actionProviderInstances.values().iterator(); actionProviderIterator
+					.hasNext();) {
+				final CommonActionProvider provider = (CommonActionProvider) actionProviderIterator
+						.next();
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						provider.restoreState(memento);
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * Request that Action Providers save any state that they find interesting.
+	 * 
+	 * @param aMemento
+	 *            The memento retrieved from the dialog settings
+	 */
+	public void saveState(IMemento aMemento) {
+		Assert.isTrue(!disposed);
+
+		memento = aMemento;
+		CommonActionProvider provider = null;
+		synchronized (actionProviderInstances) {
+			for (Iterator actionProviderIterator = actionProviderInstances.values().iterator(); actionProviderIterator.hasNext();) {
+				provider = (CommonActionProvider) actionProviderIterator.next();
+				provider.saveState(memento);
+			}
+		}
+	}
+
+	/**
+	 * 
+	 * @param aProviderDescriptor
+	 * @return a CommonActionProvider
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public CommonActionProvider getActionProviderInstance(
+			final CommonActionProviderDescriptor aProviderDescriptor) {
+		CommonActionProvider provider = null;
+		provider = (CommonActionProvider) actionProviderInstances.get(aProviderDescriptor);
+		if (provider != null) {
+			return provider;
+		}
+		synchronized (actionProviderInstances) {
+			provider = (CommonActionProvider) actionProviderInstances.get(aProviderDescriptor);
+			if (provider == null) {
+				final CommonActionProvider[] retProvider = new CommonActionProvider[1];
+				SafeRunner.run(new NavigatorSafeRunnable() {
+					public void run() throws Exception {
+						retProvider[0] = aProviderDescriptor.createActionProvider();
+						if (retProvider[0] != null) {
+							initialize(aProviderDescriptor.getId(), aProviderDescriptor
+									.getPluginId(), retProvider[0]);
+						}
+					}
+				});
+				// This could happen in the exception case
+				if (retProvider[0] == null)
+					retProvider[0] = SkeletonActionProvider.INSTANCE;
+				actionProviderInstances.put(aProviderDescriptor, retProvider[0]);
+				provider = retProvider[0];
+			}
+		}
+		return provider;
+	}
+
+	private void initialize(final String id, final String pluginId,
+			final CommonActionProvider anActionProvider) {
+		if (anActionProvider != null && anActionProvider != SkeletonActionProvider.INSTANCE) {
+			SafeRunner.run(new NavigatorSafeRunnable() {
+				public void run() throws Exception {
+					ICommonActionExtensionSite configuration = new CommonActionExtensionSite(id,
+							pluginId, commonViewerSite, contentService, structuredViewer);
+					anActionProvider.init(configuration);
+					anActionProvider.restoreState(memento);
+					anActionProvider.setContext(new ActionContext(StructuredSelection.EMPTY));
+				}
+			});
+		}
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorContentServiceFactory.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorContentServiceFactory.java
new file mode 100755
index 0000000..fb39881
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/NavigatorContentServiceFactory.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.internal.navigator.NavigatorContentService;
+
+
+/**
+ * Provides a factory pattern for creating {@link INavigatorContentService}s 
+ * for given viewer ids.  
+ * 
+ * <p>
+ * Clients may supply the viewer in {@link #createContentService(String, StructuredViewer) }
+ * or wait until the content provider is created by the service 
+ * and set on the viewer. When the content provider is set, the 
+ * viewer will call inputChanged(), and the content service
+ * will update its managed viewer accordingly. Therefore, each
+ * content service should be attached to at most one viewer. 
+ * </p>
+ *  
+ * @since 3.2  
+ *
+ */
+public final class NavigatorContentServiceFactory {
+	
+	/**
+	 * The singleton instance for creating NavigatorContentServices. 
+	 */
+	public static final NavigatorContentServiceFactory INSTANCE = new NavigatorContentServiceFactory(); 
+	
+	
+	/**
+	 * Returns an instance of INavigatorContentService configured 
+	 * for the given id. Instances are not shared for the same 
+	 * viewerId. 
+	 * 
+	 * @param aViewerId The viewer id of interest
+	 * @return An instance of INavigatorContentService configured for the given id. 
+	 */
+	public INavigatorContentService createContentService(String aViewerId) { 
+		return createContentService(aViewerId, null);
+	}
+	
+	/**
+	 * Returns an instance of INavigatorContentService configured 
+	 * for the given id. Instances are not shared for the same 
+	 * viewerId. 
+	 * 
+	 * @param aViewerId The viewer id of interest
+	 * @param aViewer The content service can use the given viewer to initialize content providers 
+	 * @return An instance of INavigatorContentService configured for the given id. 
+	 * @see IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, Object, Object)
+	 */
+	public INavigatorContentService createContentService(String aViewerId, StructuredViewer aViewer) {
+		if(aViewer == null) {
+			return new NavigatorContentService(aViewerId);
+		}
+		return new NavigatorContentService(aViewerId, aViewer);
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/OverridePolicy.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/OverridePolicy.java
new file mode 100755
index 0000000..bdcd144
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/OverridePolicy.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+/**
+ * <p>
+ * Enumeration of the OverridePolicy values supported by the Common Navigator.
+ * </p>
+ * 
+ * @since 3.4
+ */
+public final class OverridePolicy {
+
+	/**
+	 * Indicates InvokeOnlyIfSuppressedExtAlsoVisibleAndActive OverridePolicy as
+	 * an int.
+	 */
+	public static final int InvokeOnlyIfSuppressedExtAlsoVisibleAndActive_VALUE = -1;
+
+	/**
+	 * Indicates InvokeAlwaysRegardlessOfSuppressedExt OverridePolicy as an int.
+	 */
+	public static final int InvokeAlwaysRegardlessOfSuppressedExt_VALUE = 1;
+
+	/**
+	 * Indicates InvokeOnlyIfSuppressedExtAlsoVisibleAndActive OverridePolicy as
+	 * a String.
+	 */
+	public static final String InvokeOnlyIfSuppressedExtAlsoVisibleAndActive_LITERAL = "InvokeOnlyIfSuppressedExtAlsoVisibleAndActive"; //$NON-NLS-1$
+
+	/**
+	 * Indicates InvokeAlwaysRegardlessOfSuppressedExt OverridePolicy as a
+	 * String.
+	 */
+	public static final String InvokeAlwaysRegardlessOfSuppressedExt_LITERAL = "InvokeAlwaysRegardlessOfSuppressedExt"; //$NON-NLS-1$
+
+	/**
+	 * Indicates InvokeOnlyIfSuppressedExtAlsoVisibleAndActive OverridePolicy as
+	 * a OverridePolicy enumeration.
+	 */
+	public static final OverridePolicy InvokeOnlyIfSuppressedExtAlsoVisibleAndActive = new OverridePolicy(
+			InvokeOnlyIfSuppressedExtAlsoVisibleAndActive_VALUE,
+			InvokeOnlyIfSuppressedExtAlsoVisibleAndActive_LITERAL);
+
+	/**
+	 * Indicates InvokeAlwaysRegardlessOfSuppressedExt OverridePolicy as a
+	 * OverridePolicy enumeration.
+	 */
+	public static final OverridePolicy InvokeAlwaysRegardlessOfSuppressedExt = new OverridePolicy(
+			InvokeAlwaysRegardlessOfSuppressedExt_VALUE,
+			InvokeAlwaysRegardlessOfSuppressedExt_LITERAL);
+
+	/**
+	 * The ordered array of possible enumeration values.
+	 */
+	public static final OverridePolicy[] ENUM_ARRAY = new OverridePolicy[] {
+			InvokeOnlyIfSuppressedExtAlsoVisibleAndActive,
+			InvokeAlwaysRegardlessOfSuppressedExt };
+
+	/**
+	 * 
+	 * Returns the correct instance of the OverridePolicy ENUM for aLiteral.
+	 * 
+	 * <p>
+	 * This method will return InvokeAlwaysRegardlessOfSuppressedExt if the
+	 * supplied value of aLiteral is invalid.
+	 * </p>
+	 * 
+	 * @param aLiteral
+	 *            One of the defined *_LITERAL constants of this class
+	 * @return The corresponding OverridePolicy Enum or
+	 *         InvokeAlwaysRegardlessOfSuppressedExt if aLiteral is invalid
+	 */
+	public static OverridePolicy get(String aLiteral) {
+		for (int i = 0; i < ENUM_ARRAY.length; i++) {
+			if (ENUM_ARRAY[i].getLiteral().equals(aLiteral)) {
+				return ENUM_ARRAY[i];
+			}
+		}
+		return InvokeAlwaysRegardlessOfSuppressedExt;
+	}
+
+	/**
+	 * 
+	 * Returns the correct instance of the OverridePolicy ENUM for aValue.
+	 * 
+	 * <p>
+	 * This method will return InvokeAlwaysRegardlessOfSuppressedExt if the
+	 * supplied value of aValue is invalid.
+	 * </p>
+	 * 
+	 * @param aValue
+	 *            One of the defined *_VALUE constants of this class
+	 * @return The corresponding OverridePolicy Enum or
+	 *         InvokeAlwaysRegardlessOfSuppressedExt if aValue is invalid
+	 */
+	public static OverridePolicy get(int aValue) {
+
+		switch (aValue) {
+		case InvokeOnlyIfSuppressedExtAlsoVisibleAndActive_VALUE:
+			return InvokeOnlyIfSuppressedExtAlsoVisibleAndActive;
+		case InvokeAlwaysRegardlessOfSuppressedExt_VALUE:
+		default:
+			return InvokeAlwaysRegardlessOfSuppressedExt;
+
+		}
+	}
+
+	private final int value;
+
+	private final String literal;
+
+	protected OverridePolicy(int aValue, String aLiteral) {
+		value = aValue;
+		literal = aLiteral;
+	}
+
+	/**
+	 * 
+	 * @return The literal string for this specific OverridePolicy.
+	 */
+	public String getLiteral() {
+		return literal;
+	}
+
+	/**
+	 * 
+	 * @return The integer value for this specific OverridePolicy.
+	 */
+	public int getValue() {
+		return value;
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedShapeModification.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedShapeModification.java
new file mode 100755
index 0000000..15559c9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedShapeModification.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.Set;
+
+/**
+ * 
+ * Indicates how a shape modification should be transformed when applied to the
+ * tree. Clients use {@link PipelinedShapeModification} as the input and return
+ * type from intercept methods on {@link IPipelinedTreeContentProvider}.
+ * 
+ * <p>
+ * Overriding extensions should use these to map attempts to directly modify the
+ * tree down to the overridden model. A shape modification can either be an
+ * <i>add</i> or <i>remove</i> shape modification, and the type is determined by
+ * the context of its use. If supplied to an <code>interceptRemove</code>
+ * method, then it is a remove shape modification, otherwise if supplied to an
+ * <code>interceptAdd</code> method, then it is an add shape modification.
+ * </p>
+ * 
+ * 
+ * @since 3.2
+ * 
+ */
+public final class PipelinedShapeModification {
+
+	private Object parent;
+
+	private final Set children;
+
+	/**
+	 * Create a shape modification. The given parent and children will be set as
+	 * the initial values for the shape modification.
+	 * 
+	 * @param aParent
+	 *            The parent for the add or remove call to the tree.
+	 * @param theChildren
+	 *            The children that should be added or removed from the tree.
+	 */
+	public PipelinedShapeModification(Object aParent, Set theChildren) {
+		parent = aParent;
+		children = theChildren;
+	}
+
+	/**
+	 * 
+	 * @return The parent to use for the shape modification.
+	 */
+	public final Object getParent() {
+		return parent;
+	}
+
+	/**
+	 * 
+	 * @param aParent
+	 *            The parent to use for the shape modification.
+	 */
+	public final void setParent(Object aParent) {
+		parent = aParent;
+	}
+
+	/**
+	 * 
+	 * @return The current set of children. Clients may add or remove elements
+	 *         directly to this set.
+	 */
+	public final Set getChildren() {
+		return children;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedViewerUpdate.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedViewerUpdate.java
new file mode 100755
index 0000000..3b194f9
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/PipelinedViewerUpdate.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+
+/**
+ * 
+ * A pipelined viewer update should map requests to refresh or update elements
+ * in the viewer to their correct, modified structure. Clients use
+ * {@link PipelinedViewerUpdate} as the input and return type from intercept
+ * methods on {@link IPipelinedTreeContentProvider}.
+ * 
+ * <p>
+ * Clients should use the viewer update to describe how the request from the
+ * upstream extension (see {@link IPipelinedTreeContentProvider} for more
+ * information on <i>upstream</i> extensions) should be reshaped when applied
+ * to the tree. A request from an upstream extension to refresh a given element
+ * could result in multiple refresh requests from downstream extensions.
+ * Therefore, the refresh targets are modeled as a set.
+ * </p>
+ * <p>
+ * Initially, this set will contain the original element that was passed to the
+ * refresh requests. Clients may squash the refresh by clearing the set, change
+ * the original target by removing the current element and adding a new target,
+ * or expand the refresh by adding more elements to the set.
+ * </p>
+ * <p>
+ * A pipelined extension may receive a {@link PipelinedViewerUpdate} as the
+ * result of a call to {@link AbstractTreeViewer#refresh()}-methods or
+ * {@link AbstractTreeViewer#update(Object, String[])}-methods. The
+ * <code>properties</code> field is only applicable for <code>update()</code>
+ * calls and the <code>updateLabels</code> field is only applicable for
+ * <code>refresh()</code> calls.
+ * </p>
+ *  
+ * @since 3.2
+ * 
+ */
+public final class PipelinedViewerUpdate {
+
+	private static final String[] NO_PROPERTIES = new String[0];
+
+	private final Set refreshTargets = new LinkedHashSet();
+
+	private boolean updateLabels = false;
+
+	private Map properties;
+
+	/**
+	 * Properties allow optimization for <code>update</code> calls.
+	 * 
+	 * @param aTarget
+	 *            The target which may have specific properties associated with
+	 *            it for an optimized refresh.
+	 * 
+	 * @return Returns the properties for the given target. If no properties are
+	 *         specified, then an empty array is returned. <b>null</b> will
+	 *         never be returned.
+	 */
+	public final String[] getProperties(Object aTarget) {
+		if (properties != null && properties.containsKey(aTarget)) {
+			String[] props = (String[]) properties.get(aTarget);
+			return props != null ? props : NO_PROPERTIES;
+		}
+		return NO_PROPERTIES;
+	}
+
+	/**
+	 * 
+	 * Properties allow optimization for <code>update</code> calls.
+	 * 
+	 * @param aTarget
+	 *            The target of the properties.
+	 * @param theProperties
+	 *            The properties to pass along to the <code>update</code>
+	 *            call.
+	 * @see AbstractTreeViewer#update(Object, String[])
+	 */
+	public final void setProperties(Object aTarget, String[] theProperties) {
+		if (theProperties != null && theProperties.length > 0) {
+			if (properties == null) {
+				properties = new HashMap();
+			}
+			properties.put(aTarget, theProperties);
+
+		} else {
+			properties.remove(aTarget);
+		}
+
+		if (properties.size() == 0) {
+			properties = null;
+		}
+
+	}
+
+	/**
+	 * @return Returns the current set of refresh targets. Clients may add or
+	 *         remove directly to or from this set.
+	 */
+	public final Set getRefreshTargets() {
+		return refreshTargets;
+	}
+
+	/**
+	 * @return Returns the true if the labels should also be updated during the
+	 *         <code>refresh</code>.
+	 */
+	public final boolean isUpdateLabels() {
+		return updateLabels;
+	}
+
+	/**
+	 * @param toUpdateLabels
+	 *            True indicates that calls to <code>refresh</code> should
+	 *            force the update of the labels in addition to refreshing the
+	 *            structure.
+	 */
+	public final void setUpdateLabels(boolean toUpdateLabels) {
+		updateLabels = toUpdateLabels;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/Priority.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/Priority.java
new file mode 100755
index 0000000..61164db
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/Priority.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+/**
+ * <p>
+ * Enumeration of the Priority values supported by the Common Navigator.
+ * </p>
+ *  
+ * @since 3.2
+ */
+public final class Priority {
+
+	/**
+	 * Indicates Highest priority as an int.
+	 */
+	public static final int HIGHEST_PRIORITY_VALUE = 0;
+
+	/**
+	 * Indicates Higher priority as an int.
+	 */
+	public static final int HIGHER_PRIORITY_VALUE = 1;
+
+	/**
+	 * Indicates High priority as an int.
+	 */
+	public static final int HIGH_PRIORITY_VALUE = 2;
+
+	/**
+	 * Indicates Normal priority as an int.
+	 */
+	public static final int NORMAL_PRIORITY_VALUE = 3;
+
+	/**
+	 * Indicates Low priority as an int.
+	 */
+	public static final int LOW_PRIORITY_VALUE = 4;
+
+	/**
+	 * Indicates Lower priority as an int.
+	 */
+	public static final int LOWER_PRIORITY_VALUE = 5;
+
+	/**
+	 * Indicates Lowest priority as an int.
+	 */
+	public static final int LOWEST_PRIORITY_VALUE = 6;
+
+	/**
+	 * Indicates Highest priority as a String.
+	 */
+	public static final String HIGHEST_PRIORITY_LITERAL = "highest"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Higher priority as a String.
+	 */
+	public static final String HIGHER_PRIORITY_LITERAL = "higher"; //$NON-NLS-1$
+
+	/**
+	 * Indicates High priority as a String.
+	 */
+	public static final String HIGH_PRIORITY_LITERAL = "high"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Normal priority as a String.
+	 */
+	public static final String NORMAL_PRIORITY_LITERAL = "normal"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Low priority as a String.
+	 */
+	public static final String LOW_PRIORITY_LITERAL = "low"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Lower priority as a String.
+	 */
+	public static final String LOWER_PRIORITY_LITERAL = "lower"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Lowest priority as a String.
+	 */
+	public static final String LOWEST_PRIORITY_LITERAL = "lowest"; //$NON-NLS-1$
+
+	/**
+	 * Indicates Highest priority as a Priority enumeration.
+	 */
+	public static final Priority HIGHEST = new Priority(HIGHEST_PRIORITY_VALUE,
+			HIGHEST_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates Higher priority as a Priority enumeration.
+	 */
+	public static final Priority HIGHER = new Priority(HIGHER_PRIORITY_VALUE,
+			HIGHER_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates High priority as a Priority enumeration.
+	 */
+	public static final Priority HIGH = new Priority(HIGH_PRIORITY_VALUE,
+			HIGH_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates Normal priority as a Priority enumeration.
+	 */
+	public static final Priority NORMAL = new Priority(NORMAL_PRIORITY_VALUE,
+			NORMAL_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates Low priority as a Priority enumeration.
+	 */
+	public static final Priority LOW = new Priority(LOW_PRIORITY_VALUE,
+			LOW_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates Lower priority as a Priority enumeration.
+	 */
+	public static final Priority LOWER = new Priority(LOWER_PRIORITY_VALUE,
+			LOWER_PRIORITY_LITERAL);
+
+	/**
+	 * Indicates Lowest priority as a Priority enumeration.
+	 */
+	public static final Priority LOWEST = new Priority(LOWEST_PRIORITY_VALUE,
+			LOWEST_PRIORITY_LITERAL);
+
+	/**
+	 * The ordered array of possible enumeration values (0=> Highest,
+	 * length-1=>Lowest)
+	 */
+	public static final Priority[] ENUM_ARRAY = new Priority[] { HIGHEST,
+			HIGHER, HIGH, NORMAL, LOW, LOWER, LOWEST };
+
+	/**
+	 * 
+	 * Returns the correct instance of the Priority ENUM for aLiteral.
+	 * 
+	 * <p>
+	 * This method will return NORMAL if the supplied value of aLiteral is
+	 * invalid.
+	 * </p>
+	 * 
+	 * @param aLiteral
+	 *            One of the defined *_LITERAL constants of this class
+	 * @return The corresponding Priority Enum or NORMAL if aLiteral is invalid
+	 */
+	public static Priority get(String aLiteral) {
+		for (int i = 0; i < ENUM_ARRAY.length; i++) {
+			if (ENUM_ARRAY[i].getLiteral().equals(aLiteral)) {
+				return ENUM_ARRAY[i];
+			}
+		}
+		return NORMAL;
+	}
+
+	/**
+	 * 
+	 * Returns the correct instance of the Priority ENUM for aValue.
+	 * 
+	 * <p>
+	 * This method will return NORMAL if the supplied value of aValue is
+	 * invalid.
+	 * </p>
+	 * 
+	 * @param aValue
+	 *            One of the defined *_VALUE constants of this class
+	 * @return The corresponding Priority Enum or NORMAL if aValue is invalid
+	 */
+	public static Priority get(int aValue) {
+
+		switch (aValue) {
+		case HIGHEST_PRIORITY_VALUE:
+			return HIGHEST;
+		case HIGHER_PRIORITY_VALUE:
+			return HIGHER;
+		case HIGH_PRIORITY_VALUE:
+			return HIGH;
+		case LOWER_PRIORITY_VALUE:
+			return LOWER;
+		case LOWEST_PRIORITY_VALUE:
+			return LOWEST;
+		case NORMAL_PRIORITY_VALUE:
+		default:
+			return NORMAL;
+		}
+	}
+
+	private final int value;
+
+	private final String literal;
+
+	protected Priority(int aValue, String aLiteral) {
+		value = aValue;
+		literal = aLiteral;
+	}
+
+	/**
+	 * 
+	 * @return The literal string for this specific Priority.
+	 */
+	public String getLiteral() {
+		return literal;
+	}
+
+	/**
+	 * 0 is the lowest priority; 7 is the highest.
+	 * 
+	 * @return The integer value for this specific Priority. 
+	 */
+	public int getValue() {
+		return value;
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return "Priority ["+getLiteral()+"]";  //$NON-NLS-1$//$NON-NLS-2$
+	}
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/SaveablesProvider.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/SaveablesProvider.java
new file mode 100755
index 0000000..10c2034
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/SaveablesProvider.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.navigator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.ui.ISaveablesLifecycleListener;
+import org.eclipse.ui.Saveable;
+import org.eclipse.ui.SaveablesLifecycleEvent;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Provides {@link Saveable} objects to the common navigator, and allows to map
+ * between elements in the tree and models.
+ * <p>
+ * This class is intended to be subclassed by clients.
+ * </p>
+ * Instances of subclasses will be returned from content extensions that
+ * implement {@link IAdaptable}.
+ * 
+ * @since 3.2
+ * 
+ */
+public abstract class SaveablesProvider implements IDisposable {
+
+	private ISaveablesLifecycleListener listener;
+
+	/**
+	 * Creates a new saveable model provider. May only be called by subclasses.
+	 * 
+	 */
+	protected SaveablesProvider() {
+	}
+
+	/**
+	 * Initializes this SaveablesProvider with the given listener, and calls the hook method doInit().
+	 * 
+	 * @param listener
+	 */
+	final public void init(ISaveablesLifecycleListener listener) {
+		this.listener = listener;
+		doInit();
+	}
+
+	/**
+	 * May be overridden by clients. The default implementation does nothing.
+	 */
+	protected void doInit() {
+	}
+
+	/**
+	 * Notifies the listener that the given models were opened in this model
+	 * provider. This method must be called on the UI thread.
+	 * 
+	 * @param models
+	 */
+	final protected void fireSaveablesOpened(Saveable[] models) {
+		listener.handleLifecycleEvent(new SaveablesLifecycleEvent(this,
+				SaveablesLifecycleEvent.POST_OPEN, models, false));
+	}
+
+	/**
+	 * Notifies the listener that the given models are about to be closed in
+	 * this model provider. This method must be called on the UI thread.
+	 * 
+	 * @param models
+	 * @param force
+	 *            true if the closing may be canceled by the user
+	 * @return true if the listener vetoed the closing (may be ignored if force
+	 *         is true)
+	 */
+	final protected boolean fireSaveablesClosing(Saveable[] models,
+			boolean force) {
+		SaveablesLifecycleEvent saveablesLifecycleEvent = new SaveablesLifecycleEvent(
+				this, SaveablesLifecycleEvent.PRE_CLOSE, models, force);
+		listener.handleLifecycleEvent(saveablesLifecycleEvent);
+		return saveablesLifecycleEvent.isVeto();
+	}
+
+	/**
+	 * Notifies the listener that the given models were closed in this model
+	 * provider. This method must be called on the UI thread.
+	 * 
+	 * @param models
+	 */
+	final protected void fireSaveablesClosed(Saveable[] models) {
+		listener.handleLifecycleEvent(new SaveablesLifecycleEvent(this,
+				SaveablesLifecycleEvent.POST_CLOSE, models, false));
+	}
+
+	/**
+	 * Notifies the listener that the given models' dirty state has changed.
+	 * This method must be called on the UI thread.
+	 * 
+	 * @param models
+	 */
+	final protected void fireSaveablesDirtyChanged(Saveable[] models) {
+		listener.handleLifecycleEvent(new SaveablesLifecycleEvent(this,
+				SaveablesLifecycleEvent.DIRTY_CHANGED, models, false));
+	}
+
+	/**
+	 * Returns the saveables reachable through this provider. Changes to the
+	 * list of saveables or to the saveables' dirty state must be announced
+	 * using the appropriate fire* methods.
+	 * 
+	 * @return the saveables returned by this saveables provider.
+	 */
+	public abstract Saveable[] getSaveables();
+
+	/**
+	 * Returns the elements representing the given saveable. It is recommended
+	 * that a saveable be represented by only one element.
+	 * 
+	 * @param saveable
+	 * @return the elements representing the given saveable (array may be empty)
+	 */
+	public abstract Object[] getElements(Saveable saveable);
+
+	/**
+	 * Returns the saveable for the given element, or null if the element does
+	 * not represent a saveable.
+	 * 
+	 * @param element
+	 * @return the saveable for the given element, or null
+	 */
+	public abstract Saveable getSaveable(Object element);
+
+	/**
+	 * Disposes of this saveables provider. Subclasses may extend, but must call
+	 * the super implementation.
+	 */
+	public void dispose() {
+		listener = null;
+	}
+
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/WizardActionGroup.java b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/WizardActionGroup.java
new file mode 100755
index 0000000..1f3d81e
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/WizardActionGroup.java
@@ -0,0 +1,320 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.navigator;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.internal.navigator.wizards.CommonWizardDescriptor;
+import org.eclipse.ui.internal.navigator.wizards.CommonWizardDescriptorManager;
+import org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+import org.eclipse.ui.wizards.IWizardRegistry;
+
+/**
+ * 
+ * Populates context menus with shortcut actions for defined wizards. Wizards
+ * may be defined by any of the following extension points:
+ * <p>
+ * <ul>
+ * <li><b>org.eclipse.ui.newWizards</b></li>
+ * <li><b>org.eclipse.ui.importWizards</b></li>
+ * <li><b>org.eclipse.ui.exportWizards</b></li>
+ * </ul>
+ * </p>
+ * <p>
+ * Here are the required steps for using this feature correctly:
+ * <ol>
+ * <li>Declare all new/import/export wizards from the extension points above,
+ * or locate the existing wizards that you intend to reuse.</li>
+ * <li>Declare <b>org.eclipse.ui.navigator.navigatorContent/commonWizard</b>
+ * elements to identify which wizards should be associated with what items in
+ * your viewer or navigator.</li>
+ * <li>If you are using Resources in your viewer and have bound the resource
+ * extension declared in <b>org.eclipse.ui.navigator.resources</b>, then you
+ * will get most of this functionality for free.</li>
+ * <li>Otherwise, you may choose to build your own custom menu. In which case,
+ * you may instantiate this class, and hand it the menu or submenu that you want
+ * to list out the available wizard shortcuts via
+ * {@link WizardActionGroup#fillContextMenu(IMenuManager)}.</li>
+ * </ol>
+ * </p>
+ *
+ * @see PlatformUI#getWorkbench()
+ * @see IWorkbench#getNewWizardRegistry()
+ * @see IWorkbench#getImportWizardRegistry()
+ * @see IWorkbench#getExportWizardRegistry()
+ * @since 3.2
+ * 
+ */
+public final class WizardActionGroup extends ActionGroup {
+
+	/**
+	 * The type for commonWizard extensions with the value "new" for their type
+	 * attribute.
+	 */
+	public static final String TYPE_NEW = "new"; //$NON-NLS-1$
+
+	/**
+	 * The type for commonWizard extensions with the value "new" for their type
+	 * attribute.
+	 */
+	public static final String TYPE_IMPORT = "import"; //$NON-NLS-1$
+
+	/**
+	 * The type for commonWizard extensions with the value "new" for their type
+	 * attribute.
+	 */
+	public static final String TYPE_EXPORT = "export"; //$NON-NLS-1$
+
+	private static final CommonWizardDescriptor[] NO_DESCRIPTORS = new CommonWizardDescriptor[0];
+	
+	private static final String[] NO_IDS = new String[0];  
+	
+	private CommonWizardDescriptor[] descriptors;
+
+	/* a map of (id, IAction)-pairs. */
+	private Map actions;
+
+	/*
+	 * the window is passed to created WizardShortcutActions for the shell and
+	 * selection service.
+	 */
+	private IWorkbenchWindow window;
+
+	/* the correct wizard registry for this action group (getRegistry()) */
+	private IWizardRegistry wizardRegistry; 
+
+	private boolean disposed = false;
+
+	private String type;
+
+	private INavigatorContentService contentService;
+
+	/**
+	 * 
+	 * @param aWindow
+	 *            The window that will be used to acquire a Shell and a
+	 *            Selection Service
+	 * @param aWizardRegistry
+	 *            The wizard registry will be used to locate the correct wizard
+	 *            descriptions.
+	 * @param aType
+	 *            Indicates the value of the type attribute of the commonWizard
+	 *            extension point. Use any of the TYPE_XXX constants defined on
+	 *            this class.
+	 * @see PlatformUI#getWorkbench()
+	 * @see IWorkbench#getNewWizardRegistry()
+	 * @see IWorkbench#getImportWizardRegistry()
+	 * @see IWorkbench#getExportWizardRegistry()
+	 */
+	public WizardActionGroup(IWorkbenchWindow aWindow,
+			IWizardRegistry aWizardRegistry, String aType) {
+		super();
+		Assert.isNotNull(aWindow);
+		Assert.isNotNull(aWizardRegistry);
+		Assert
+				.isTrue(aType != null
+						&& (TYPE_NEW.equals(aType) || TYPE_IMPORT.equals(aType) || TYPE_EXPORT
+								.equals(aType)));
+		window = aWindow;
+		wizardRegistry = aWizardRegistry;
+		type = aType;
+
+	}
+	
+
+	/**
+	 * 
+	 * @param aWindow
+	 *            The window that will be used to acquire a Shell and a
+	 *            Selection Service
+	 * @param aWizardRegistry
+	 *            The wizard registry will be used to locate the correct wizard
+	 *            descriptions.
+	 * @param aType
+	 *            Indicates the value of the type attribute of the commonWizard
+	 *            extension point. Use any of the TYPE_XXX constants defined on
+	 *            this class.
+	 * @param aContentService 
+	 * 			 The content service to use when deciding visibility.         
+	 * @see PlatformUI#getWorkbench()
+	 * @see IWorkbench#getNewWizardRegistry()
+	 * @see IWorkbench#getImportWizardRegistry()
+	 * @see IWorkbench#getExportWizardRegistry()
+	 */
+	public WizardActionGroup(IWorkbenchWindow aWindow,
+			IWizardRegistry aWizardRegistry, String aType, INavigatorContentService aContentService) {
+		this(aWindow, aWizardRegistry, aType);
+		contentService = aContentService;
+
+	}
+
+	public void setContext(ActionContext aContext) {
+		Assert.isTrue(!disposed);
+
+		super.setContext(aContext);
+		if (aContext != null) {
+			ISelection selection = aContext.getSelection();
+			Object element = null;
+			if (selection instanceof IStructuredSelection) {
+				element = ((IStructuredSelection) selection).getFirstElement();
+			}
+			if(element == null) {
+				element = Collections.EMPTY_LIST;
+			}
+			// null should be okay here
+			setWizardActionDescriptors(CommonWizardDescriptorManager.getInstance()
+					.getEnabledCommonWizardDescriptors(element, type, contentService));
+		} else {
+			setWizardActionDescriptors(NO_DESCRIPTORS);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void fillContextMenu(IMenuManager menu) {
+		Assert.isTrue(!disposed);
+ 
+		if (descriptors != null) { 
+			Map groups = findGroups(); 
+			SortedSet sortedWizards = null;
+			String menuGroupId = null;
+			for (Iterator menuGroupItr = groups.keySet().iterator(); menuGroupItr.hasNext();) {
+				menuGroupId = (String) menuGroupItr.next();
+				sortedWizards = (SortedSet) groups.get(menuGroupId); 
+				menu.add(new Separator(menuGroupId));
+				for (Iterator wizardItr = sortedWizards.iterator(); wizardItr.hasNext();) {
+					menu.add((IAction) wizardItr.next());				
+				}
+			} 
+		} 
+	}
+
+	/**
+	 * @return A Map of menuGroupIds to SortedSets of IActions. 
+	 */
+	private synchronized Map/*<String, SortedSet<IAction>>*/  findGroups() {  
+		IAction action = null;
+		Map groups = new TreeMap();
+		SortedSet sortedWizards = null;
+		String menuGroupId = null;
+		for (int i = 0; i < descriptors.length; i++) {
+			menuGroupId = descriptors[i].getMenuGroupId() != null ? 
+							descriptors[i].getMenuGroupId() : CommonWizardDescriptor.DEFAULT_MENU_GROUP_ID;
+			sortedWizards = (SortedSet) groups.get(menuGroupId);
+			if(sortedWizards == null) {
+				groups.put(descriptors[i].getMenuGroupId(), sortedWizards = new TreeSet(ActionComparator.INSTANCE));
+			}  
+			if ((action = getAction(descriptors[i].getWizardId())) != null) {
+				sortedWizards.add(action); 
+			}			
+		}
+		return groups;
+	}
+
+
+	public void dispose() {
+		super.dispose();
+		actions = null;
+		window = null;
+		descriptors = null;
+		wizardRegistry = null;
+		disposed = true;
+	}
+
+	/*
+	 * (non-Javadoc) Returns the action for the given wizard id, or null if not
+	 * found.
+	 */
+	protected IAction getAction(String id) {
+		if (id == null || id.length() == 0) {
+			return null;
+		}
+
+		// Keep a cache, rather than creating a new action each time,
+		// so that image caching in ActionContributionItem works.
+		IAction action = (IAction) getActions().get(id);
+		if (action == null) {
+			IWizardDescriptor descriptor = wizardRegistry.findWizard(id);
+			if (descriptor != null) {
+				action = new WizardShortcutAction(window, descriptor);
+				getActions().put(id, action);
+			}
+		}
+
+		return action;
+	}
+
+	/**
+	 * @return a map of (id, IAction)-pairs.
+	 */
+	protected Map getActions() {
+		if (actions == null) {
+			actions = new HashMap();
+		}
+		return actions;
+	}
+
+	/**
+	 * @return Returns the wizardActionIds.
+	 */
+	public synchronized String[] getWizardActionIds() { 
+		if(descriptors != null && descriptors.length > 0) { 
+			String[] wizardActionIds = new String[descriptors.length]; 
+			for (int i = 0; i < descriptors.length; i++) {
+				wizardActionIds[i] = descriptors[i].getWizardId();
+			}
+			return wizardActionIds;
+		}
+		return NO_IDS;
+	}
+
+	/**
+	 * @param theWizardDescriptors
+	 *            The wizard action ids to set. These should be defined through
+	 *            <b>org.eclipse.ui.xxxWizards</b>
+	 */
+	private synchronized void setWizardActionDescriptors(CommonWizardDescriptor[] theWizardDescriptors) { 
+		descriptors = theWizardDescriptors;
+	}
+	  
+	private static class ActionComparator implements Comparator {
+		
+		private static final ActionComparator INSTANCE = new ActionComparator();
+		/* (non-Javadoc)
+		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+		 */
+		public int compare(Object arg0, Object arg1) {
+			return ((IAction)arg0).getText().compareTo(((IAction)arg1).getText());
+		}
+	} 
+}
diff --git a/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/package.html b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/package.html
new file mode 100755
index 0000000..2a81cf8
--- /dev/null
+++ b/bundles/org.eclipse.rap.ui.navigator/src/org/eclipse/ui/navigator/package.html
@@ -0,0 +1,12 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <title>Package-level Javadoc</title>
+</head>
+<body>
+Provides the Common Navigator framework. Services allow clients to contribute
+reusable content/label providers and define viewers that use the available content/label
+providers.
+</body>
+</html>