diff --git a/org.eclipse.mylyn.monitor.reports/.classpath b/org.eclipse.mylyn.monitor.reports/.classpath
index c9c6503..6f1aa2c 100644
--- a/org.eclipse.mylyn.monitor.reports/.classpath
+++ b/org.eclipse.mylyn.monitor.reports/.classpath
@@ -6,10 +6,6 @@
 			<accessrule kind="accessible" pattern="**/internal/**"/>
 		</accessrules>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
-		<accessrules>
-			<accessrule kind="nonaccessible" pattern="com/sun/**"/>
-		</accessrules>
-	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/org.eclipse.mylyn.sandbox.ui/.classpath b/org.eclipse.mylyn.sandbox.ui/.classpath
deleted file mode 100644
index 108625f..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.classpath
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		<accessrules>
-			<accessrule kind="accessible" pattern="**/internal/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="src" path="testsrc"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
-		<accessrules>
-			<accessrule kind="nonaccessible" pattern="com/sun/**"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.mylyn.sandbox.ui/.cvsignore b/org.eclipse.mylyn.sandbox.ui/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/org.eclipse.mylyn.sandbox.ui/.project b/org.eclipse.mylyn.sandbox.ui/.project
deleted file mode 100644
index 8ed8564..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.mylar.sandbox</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index ff187c5..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,301 +0,0 @@
-#Wed Jan 18 17:12:52 PST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-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.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-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=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-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=1
-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_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=false
-org.eclipse.jdt.core.formatter.comment.format_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_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_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=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_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_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.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=120
-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
diff --git a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 1a3bc26..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Wed Jan 18 17:12:52 PST 2006
-eclipse.preferences.version=1
-formatter_profile=_Mylar based on Eclipse [built-in]
-formatter_settings_version=9
-internal.default.compliance=default
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><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">/**\r\n * @return the ${bare_field_name}\r\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">/**\r\n * @param ${param} the ${bare_field_name} to set\r\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">/**\r\n * ${tags}\r\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">/**\r\n * \r\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">/**\r\n * @author ${user}\r\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">/**\r\n * \r\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">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"></template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">/*******************************************************************************\r\n * Copyright (c) 2004 - 2006 University Of British Columbia and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *\r\n * Contributors\:\r\n *     University Of British Columbia - initial API and implementation\r\n *******************************************************************************/\r\n\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\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">\r\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">\r\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">\r\n</template><template autoinsert\="false" 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\r\n${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ignore\r\n${body_statement}</template><template autoinsert\="false" 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}\r\n// ignore</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
deleted file mode 100644
index f454a5e..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.ltk.core.refactoring.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Jun 02 15:31:33 PDT 2006
-eclipse.preferences.version=1
-org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=true
diff --git a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.pde.prefs b/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index c2370a1..0000000
--- a/org.eclipse.mylyn.sandbox.ui/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-#Thu Nov 03 15:47:08 PST 2005
-compilers.p.deprecated=2
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/org.eclipse.mylyn.sandbox.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.sandbox.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 4923c1b..0000000
--- a/org.eclipse.mylyn.sandbox.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,27 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Mylar Sandbox Plug-in
-Bundle-SymbolicName: org.eclipse.mylar.sandbox; singleton:=true
-Bundle-Version: 0.4
-Bundle-Activator: org.eclipse.mylar.internal.sandbox.MylarSandboxPlugin
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.gef,
- org.eclipse.mylar.core,
- org.eclipse.mylar.ui,
- org.eclipse.mylar.java,
- org.eclipse.jdt.core,
- org.eclipse.mylar.tasklist,
- org.eclipse.core.resources,
- org.eclipse.ui.browser,
- org.eclipse.mylar.monitor.reports,
- org.junit,
- org.eclipse.mylar.bugzilla.core,
- org.eclipse.mylar.bugzilla.ui
-Eclipse-AutoStart: true
-Bundle-Vendor: Eclipse.org
-Bundle-ClassPath: mylar-sandbox.jar
-Export-Package: org.eclipse.mylar.internal.sandbox,
- org.eclipse.mylar.internal.sandbox.viz
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.mylyn.sandbox.ui/about.html b/org.eclipse.mylyn.sandbox.ui/about.html
deleted file mode 100644
index 1aeb16b..0000000
--- a/org.eclipse.mylyn.sandbox.ui/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 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</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.mylyn.sandbox.ui/build.properties b/org.eclipse.mylyn.sandbox.ui/build.properties
deleted file mode 100644
index e96f6f0..0000000
--- a/org.eclipse.mylyn.sandbox.ui/build.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2004 - 2005 University Of British Columbia 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:
-#     University Of British Columbia - initial API and implementation
-###############################################################################
-bin.includes = plugin.xml,\
-               META-INF/,\
-               mylar-sandbox.jar,\
-               icons/
-src.includes = plugin.xml,\
-               META-INF/,\
-               icons/,\
-               src/,\
-               testsrc/
-jars.compile.order = mylar-sandbox.jar
-source.mylar-sandbox.jar = src/,\
-                           testsrc/
-output.mylar-sandbox.jar = bin/
-jre.compilation.profile = J2SE-1.5
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/control-panel.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/control-panel.gif
deleted file mode 100644
index 1d97dd3..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/control-panel.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/folder.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/folder.gif
deleted file mode 100644
index 51e703b..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/folder.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/icons-task-jira.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/icons-task-jira.gif
deleted file mode 100644
index f1fa823..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/icons-task-jira.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/model.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/model.gif
deleted file mode 100644
index 580a303..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/model.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/monitor.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/monitor.gif
deleted file mode 100644
index 3ea4ad7..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/monitor.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/icons/eview16/task-list.gif b/org.eclipse.mylyn.sandbox.ui/icons/eview16/task-list.gif
deleted file mode 100644
index 6ab2668..0000000
--- a/org.eclipse.mylyn.sandbox.ui/icons/eview16/task-list.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.mylyn.sandbox.ui/plugin.xml b/org.eclipse.mylyn.sandbox.ui/plugin.xml
deleted file mode 100644
index 1a7f27a..0000000
--- a/org.eclipse.mylyn.sandbox.ui/plugin.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-
-   <extension point="org.eclipse.ui.viewActions"> 
-   <viewContribution
-         id="org.eclipse.mylar.monitor.reports.ui.switchTaskFolder"
-         targetID="org.eclipse.mylar.tasks.ui.views.TaskListView">
-      <action
-            class="org.eclipse.mylar.internal.sandbox.share.SwitchTaskDataFolderAction"
-            icon="icons/eview16/folder.gif"
-            id="org.eclipse.mylar.monitor.reports.ui.actions.switchTask"
-            label="Sandbox: Switch Task Data Folder..."
-            menubarPath="context"
-            style="push">
-      </action>
-   </viewContribution>
-   </extension>
-   
-   <!--
-   <extension point="org.eclipse.ui.viewActions"> 
-		<viewContribution 
-			id="org.eclipse.mylar.jira.ui.tasklist.actions" 
-	   		targetID="org.eclipse.mylar.tasks.ui.views.TaskListView">	  			
-    		<action
-            class="org.eclipse.mylar.sandbox.jira.CreateJiraTaskAction"
-            enablesFor="*"
-            icon="icons/eview16/icons-task-jira.gif"
-            id="org.eclipse.mylar.bugzilla.tasklist.addExisting"
-            label="Add Existing Jira Report"
-            menubarPath="reports"
-            style="push"
-            tooltip="Add Existing Jira Report"> 
-  			</action>
-	    </viewContribution> 
-   </extension>
-   -->
-
-   <extension point="org.eclipse.ui.decorators">
-      <decorator
-            lightweight="true"
-            label="Mylar Sandbox: Interest Level Decorator"
-            class="org.eclipse.mylar.internal.sandbox.misc.InterestDebuggingDecorator"
-            state="false"
-            id="org.eclipse.mylar.sandbox.ui.decorator.interest">
-         <description>
-			Appends interest level to nodes
-		 </description>
-         <enablement>
-            <objectClass name="java.lang.Object"/>
-         </enablement>
-      </decorator>
-   </extension>
-
-   <extension point="org.eclipse.ui.views"> 
-	  <view name="Sandbox: Context Tree"
-            icon="icons/eview16/model.gif"
-            category="org.eclipse.mylar"
-            class="org.eclipse.mylar.internal.sandbox.viz.MylarContextTreeView"
-            id="org.eclipse.mylar.ui.views.TaskscapeTreeView">
-      </view> 
-	  <view name="Sandbox: Context Control Panel"
-        icon="icons/eview16/control-panel.gif"
-        category="org.eclipse.mylar"
-        class="org.eclipse.mylar.internal.sandbox.viz.MylarControlPanelView"
-        id="org.eclipse.mylar.ui.views.MylarControlPanelView">
-      </view>
-  </extension>
-
-  	<extension point = "org.eclipse.ui.popupMenus">
-     <objectContribution
-        id="org.eclipse.mylar.ui.instrospection"
-        objectClass="java.lang.Object">
-	    <action  
-  		  	label="Mylar Sanbox: Introspect Object" 
-	  		menubarPath="mylar" 
-	  		id="org.eclipse.mylar.sandbox.actions.introspect" 
-	  		class="org.eclipse.mylar.internal.sandbox.misc.IntrospectObjectAction"
-	  		enablesFor="1"/>
-	 </objectContribution>
-	</extension>
-
-      <!--
-        <provider 
-         	markupProviderClass="org.eclipse.mylar.sandbox.viz.MylarJavaMarkupProvider" 
-         	name="Mylar Provider" 
-         	priority="9" 
-         	description="Provider that shows java declarations that are part of a Mylar context for a task." 
-         	emptyMessage="No active Mylar context to display" 
-         	contentProviderClass="org.eclipse.mylar.sandbox.viz.MylarJavaContentProvider" 
-         	id="mylarprovider" />
-        -->
-        
-      
-		<!-- This schema works for the older (1.1?) CVS version of the Visualiser from AJDT  
-		<provider
-		    class="org.eclipse.mylar.sandbox.viz.MylarJavaContentProvider"
-		    markupclass="org.eclipse.mylar.sandbox.viz.MylarJavaMarkupProvider"
-		    name="Mylar Java Provider"
-		    title="Mylar Java Task Context"
-		    priority="8"
-		    description="Provider that shows java declarations that are part of a Mylar context for a task."
-		    emptyMessage="No active Mylar context to display"
-		    id="mylarprovider">
-		</provider>
-		 --> 
-  
-  <!--
-   <extension point = "org.eclipse.ui.popupMenus">
-     <objectContribution
-        id="org.eclipse.mylar.interest"
-        objectClass="org.eclipse.jdt.core.IJavaElement">
-        <action id="org.eclipse.mylar.ui.actions.OpenRelatedElementsQuickView" 
-              label="Related elements" 
-	      	  menubarPath="mylar" 
-              icon="icons/eview16/active-search.gif" 
-              tooltip="Active Search quick view" 
-              class="org.eclipse.mylar.ui.actions.OpenRelatedElementsQuickView" 
-              enablesFor="1"/> 
-	 </objectContribution>
-  </extension>
-  -->
-</plugin>
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/MylarSandboxPlugin.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/MylarSandboxPlugin.java
deleted file mode 100644
index f6c40dc..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/MylarSandboxPlugin.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.mylar.internal.sandbox.share.SharedDataDirectoryManager;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * @author Mik Kersten
- */
-public class MylarSandboxPlugin extends AbstractUIPlugin {
-
-	private static MylarSandboxPlugin plugin;
-
-	private SharedDataDirectoryManager sharedDataDirectoryManager = new SharedDataDirectoryManager();
-
-	public MylarSandboxPlugin() {
-		super();
-		plugin = this;
-	}
-
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		plugin = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static MylarSandboxPlugin 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("org.eclipse.mylar.internal.sandbox", path);
-	}
-
-	public SharedDataDirectoryManager getSharedDataDirectoryManager() {
-		return sharedDataDirectoryManager;
-	}
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/jira/CreateJiraTaskAction.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/jira/CreateJiraTaskAction.java
deleted file mode 100644
index 8a1e7ef..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/jira/CreateJiraTaskAction.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox.jira;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-import org.eclipse.mylar.internal.tasklist.ui.views.TaskListView;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * @author Mik Kersten
- * @author Ken Sueda
- */
-public class CreateJiraTaskAction extends Action implements IViewActionDelegate {
-
-	private static final String LABEL = "Add Existing Jira Report";
-
-	public static final String ID = "org.eclipse.mylar.bugs.jira.actions.create.bug";
-
-	public CreateJiraTaskAction() {
-		setText(LABEL);
-		setToolTipText(LABEL);
-		setId(ID);
-	}
-
-	@Override
-	public void run() {
-		if (TaskListView.getFromActivePerspective() == null)
-			return;
-
-		MylarStatusHandler.fail(new RuntimeException("unimplmented"), "unimplemented", true);
-		// String bugIdString = TaskListView.getDefault().getBugIdFromUser();
-		// int bugId = -1;
-		// try {
-		// if (bugIdString != null) {
-		// bugId = Integer.parseInt(bugIdString);
-		// } else {
-		// return;
-		// }
-		// } catch (NumberFormatException nfe) {
-		// TaskListView.getDefault().showMessage("Please enter a valid report
-		// number");
-		// return;
-		// }
-		//	
-		// ITask newTask = new BugzillaTask("Bugzilla-"+bugId, "<bugzilla
-		// info>", true, true);
-		// Object selectedObject =
-		// ((IStructuredSelection)TaskListView.getDefault().getViewer().getSelection()).getFirstElement();
-		//    	
-		// ITaskHandler taskHandler =
-		// MylarTaskListPlugin.getDefault().getTaskHandlerForElement(newTask);
-		// if(taskHandler != null){
-		// ITask addedTask = taskHandler.taskAdded(newTask);
-		// if(addedTask instanceof BugzillaTask){
-		// BugzillaTask newTask2 = (BugzillaTask)addedTask;
-		// if(newTask2 == newTask){
-		// ((BugzillaTask)newTask).scheduleDownloadReport();
-		// } else {
-		// newTask = newTask2;
-		// ((BugzillaTask)newTask).updateTaskDetails();
-		// }
-		// }
-		// } else {
-		// ((BugzillaTask)newTask).scheduleDownloadReport();
-		// }
-		// if (selectedObject instanceof TaskCategory){
-		// ((TaskCategory)selectedObject).addTask(newTask);
-		// } else {
-		// MylarTaskListPlugin.getTaskListManager().addRootTask(newTask);
-		// }
-		// BugzillaUiPlugin.getDefault().getBugzillaTaskListManager().addToBugzillaTaskRegistry((BugzillaTask)newTask);
-		//
-		// if(TaskListView.getDefault() != null)
-		// TaskListView.getDefault().getViewer().refresh();
-	}
-
-	public void init(IViewPart view) {
-	}
-
-	public void run(IAction action) {
-		run();
-	}
-
-	public void selectionChanged(IAction action, ISelection selection) {
-
-	}
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/InterestDebuggingDecorator.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/InterestDebuggingDecorator.java
deleted file mode 100644
index 3813e48..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/InterestDebuggingDecorator.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox.misc;
-
-import java.util.ConcurrentModificationException;
-
-import org.eclipse.jface.viewers.*;
-import org.eclipse.mylar.internal.core.MylarContextRelation;
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-import org.eclipse.mylar.provisional.core.IMylarElement;
-import org.eclipse.mylar.provisional.core.IMylarStructureBridge;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.mylar.provisional.ui.MylarUiPlugin;
-
-/**
- * @author Mik Kersten
- */
-public class InterestDebuggingDecorator implements ILightweightLabelDecorator {
-
-	public InterestDebuggingDecorator() {
-		super();  
-	}
- 
-	public void decorate(Object element, IDecoration decoration) {
-		IMylarStructureBridge bridge = null;
-		try {
-			if (MylarPlugin.getDefault() == null)
-				return;
-			bridge = MylarPlugin.getDefault().getStructureBridge(element);
-		} catch (ConcurrentModificationException cme) {
-			// ignored, because we can add structure bridges during decoration
-		}
-		try {
-			IMylarElement node = null;
-			if (element instanceof MylarContextRelation) {
-				decoration.setForegroundColor(MylarUiPlugin.getDefault().getColorMap().RELATIONSHIP);
-			} else if (element instanceof IMylarElement) {
-				node = (IMylarElement) element;
-			} else {
-				if (bridge != null && bridge.getContentType() != null) {
-					node = MylarPlugin.getContextManager().getElement(bridge.getHandleIdentifier(element));
-				}
-			}
-			if (node != null) {
-				decoration.addSuffix(" {" + node.getInterest().getValue() + "}");
-			}
-		} catch (Exception e) {
-			MylarStatusHandler.log(e, "decoration failed");
-		}
-	}
-
-	public void addListener(ILabelProviderListener listener) {
-		// don't care about listeners
-	}
-
-	public void dispose() {
-		// don't care when we are disposed
-	}
-
-	public boolean isLabelProperty(Object element, String property) {
-		return false;
-	}
-
-	public void removeListener(ILabelProviderListener listener) {
-		// don't care about listeners
-	}
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/IntrospectObjectAction.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/IntrospectObjectAction.java
deleted file mode 100644
index 32b1413..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/IntrospectObjectAction.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox.misc;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.mylar.provisional.core.IMylarElement;
-import org.eclipse.mylar.provisional.core.IMylarStructureBridge;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * @author Mik Kersten
- */
-public class IntrospectObjectAction implements IViewActionDelegate {
-
-	private ISelection currentSelection;
-
-	public void init(IViewPart view) {
-
-	}
-
-	public void run(IAction action) {
-		if (currentSelection instanceof StructuredSelection) {
-			StructuredSelection selection = (StructuredSelection) currentSelection;
-			Object object = selection.getFirstElement();
-
-			String text = "Object class: " + object.getClass() + "\n\n";
-
-			try {
-				IMylarStructureBridge bridge = MylarPlugin.getDefault().getStructureBridge(object);
-				IMylarElement node = MylarPlugin.getContextManager().getElement(bridge.getHandleIdentifier(object));
-				if (node != null) {
-					text += "Interest value: " + node.getInterest().getValue() + "\n";
-					text += node.getInterest().toString();
-				}
-			} catch (Throwable t) {
-				text += "<no structure bridge>";
-			}
-
-			MessageDialog.openInformation(null, "Mylar Sandbox", text);
-		}
-	}
-
-	public void selectionChanged(IAction action, ISelection selection) {
-		this.currentSelection = selection;
-	}
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/PassiveTimer.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/PassiveTimer.java
deleted file mode 100644
index 19fb4ee..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/misc/PassiveTimer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox.misc;
-
-/**
- * Check against the system clock--doesn't need to run as thread.
- * 
- * @author Mik Kersten
- */
-public class PassiveTimer {
-
-	private long elapsed = 0;
-
-	private long lastStartTime = System.currentTimeMillis();
-
-	public void restart() {
-		lastStartTime = System.currentTimeMillis();
-		elapsed = 0;
-	}
-
-	public long getElapsedInSeconds() {
-		elapsed = System.currentTimeMillis() - lastStartTime;
-		return elapsed / 1000;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SharedDataDirectoryManager.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SharedDataDirectoryManager.java
deleted file mode 100644
index 6577fe5..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SharedDataDirectoryManager.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylar.internal.sandbox.share;
-
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-
-/**
- * @author Wesley Coelho
- * @author Mik Kersten
- */
-public class SharedDataDirectoryManager {
-
-	/**
-	 * True if the shared data directory has been temporarily set for reporting
-	 * purposes
-	 */
-	private boolean sharedDataDirectoryInUse = false;
-
-	/**
-	 * Path of the data directory to temporarily use as the MylarDataDirectory
-	 * (for reporting)
-	 */
-	private String sharedDataDirectory = null;
-
-	/**
-	 * Sets the path of a shared data directory to be temporarily used (for
-	 * reporting). Call useMainDataDirectory() to return to using the main data
-	 * directory.
-	 */
-	public void setSharedDataDirectory(String dirPath) {
-		sharedDataDirectory = dirPath;
-	}
-
-	/**
-	 * Returns the shared data directory path if one has been set. If not, the
-	 * empty string is returned. Note that the directory may not currently be in
-	 * use.
-	 */
-	public String getSharedDataDirectory() {
-		if (sharedDataDirectory != null) {
-			return sharedDataDirectory;
-		} else {
-			return "";
-		}
-	}
-
-	/**
-	 * Set to true to use the shared data directory set with
-	 * setSharedDataDirectory(String) Set to false to return to using the main
-	 * data directory
-	 */
-	public void setSharedDataDirectoryEnabled(boolean enable) {
-		if (enable && sharedDataDirectory == null) {
-			MylarStatusHandler.fail(new Exception("EnableDataDirectoryException"),
-					"Could not enable shared data directory because no shared data directory was specifed.", true);
-			return;
-		}
-		sharedDataDirectoryInUse = enable;
-	}
-
-	/**
-	 * True if a shared data directory rather than the main data directory is
-	 * currently in use
-	 */
-	public boolean isSharedDataDirectoryEnabled() {
-		return sharedDataDirectoryInUse;
-	}
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SwitchTaskDataFolderAction.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SwitchTaskDataFolderAction.java
deleted file mode 100644
index 34e1fb7..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/share/SwitchTaskDataFolderAction.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-package org.eclipse.mylar.internal.sandbox.share;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-import org.eclipse.mylar.internal.monitor.reports.MylarReportsPlugin;
-import org.eclipse.mylar.internal.sandbox.MylarSandboxPlugin;
-import org.eclipse.mylar.internal.tasklist.ui.ComboSelectionDialog;
-import org.eclipse.mylar.internal.tasklist.ui.views.TaskListView;
-import org.eclipse.mylar.internal.ui.actions.ToggleContextCaptureAction;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.mylar.provisional.tasklist.MylarTaskListPlugin;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * Contributes a menu item to the task list that opens a dialog box that allows
- * the user to select a task data directory to use.
- * 
- * @author Wesley Coelho
- */
-public class SwitchTaskDataFolderAction extends Action implements IViewActionDelegate {
-
-	protected final static String TITLE = "Switch Task Data Folder";
-
-	protected final static String PROMPT = "Select the folder to switch to:";
-
-	protected final static String MAIN_LOCAL_DATA_DIR = "Main Task Data Folder";
-
-	protected Shell shell = null;
-
-	public void init(IViewPart view) {
-		shell = view.getViewSite().getShell();
-	}
-
-	public void run(IAction action) {
-
-		String[] folderStrings = getFolderStrings();
-		String targetFolder = null;
-		if (folderStrings != null) {
-			targetFolder = showComboSelectionDialog(folderStrings);
-		}
-
-		if (targetFolder != null && !targetFolder.trim().equals("")) {
-			switchTaskDataFolder(targetFolder);
-		}
-	}
-
-	public void selectionChanged(IAction action, ISelection selection) {
-		// No action required
-	}
-
-	/**
-	 * Prompts the user for the name of the task data folder to switch to.
-	 * Returns the string selected by the user or the empty string if no valid
-	 * input was given.
-	 */
-	protected String showComboSelectionDialog(String[] folderStrings) {
-		ComboSelectionDialog dialog = new ComboSelectionDialog(shell, TITLE, PROMPT, folderStrings, 0);
-		dialog.open();
-
-		return dialog.getSelectedString();
-	}
-
-	/**
-	 * Returns an array of the string names of the folders in the main data
-	 * directory plus the default folder.
-	 * 
-	 * This performs validation and will alert the user of the following
-	 * failures: - No shared task folder specified - No subfolders with task
-	 * data
-	 * 
-	 * Will return null on failure (Public for testing only)
-	 */
-	public String[] getFolderStrings() {
-		try {
-			List<String> folders = new ArrayList<String>();
-
-			// Check that a shared data path has been specified
-			String sharedDataPath = MylarReportsPlugin.getDefault().getRootSharedDataDirectory();
-			if (sharedDataPath.trim().equals("")) {
-				MessageDialog.openError(shell, "Switch Task Folder Error",
-						"Please specify a root shared task folder in the Mylar Reports preference page.");
-				return null;
-			}
-
-			// Check that the directory is accessible
-			File rootDir = new File(sharedDataPath);
-			if (!rootDir.exists() || !rootDir.isDirectory()) {
-				MessageDialog.openError(shell, "Switch Task Folder Error",
-						"The root folder specified in the Mylar Reports preference page could not be found.");
-				return null;
-			}
-
-			// Add the option to switch back to the main local data directory
-			if (MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().isSharedDataDirectoryEnabled()) {
-				folders.add(MAIN_LOCAL_DATA_DIR);
-			}
-
-			// Add the list of folders with task data
-			File[] files = rootDir.listFiles();
-			for (int i = 0; i < files.length; i++) {
-				File currFile = files[i];
-				if (currFile.isDirectory() && containsTaskData(currFile)
-						&& !MylarPlugin.getDefault().getDataDirectory().endsWith(currFile.getName())) {
-					folders.add(currFile.getName());
-				}
-			}
-
-			// Check that at least one folder was found to switch to
-			if (!(folders.size() > 0)) {
-				MessageDialog
-						.openError(shell, "Switch Task Folder Error",
-								"No task data folders were found in the root folder specified in the Mylar Reports preference page.");
-				return null;
-			}
-
-			String[] folderStrings = new String[folders.size()];
-			for (int i = 0; i < folderStrings.length; i++) {
-				folderStrings[i] = folders.get(i);
-			}
-
-			return folderStrings;
-
-		} catch (RuntimeException e) {
-			MylarStatusHandler.fail(e, "Could not create list of task folders to switch to.", true);
-			return null;
-		}
-	}
-
-	/**
-	 * Returns true if the specified folder contains task data. Currently just
-	 * checks if it contains a task list file.
-	 */
-	protected boolean containsTaskData(File folder) {
-		File[] files = folder.listFiles();
-		for (int i = 0; i < files.length; i++) {
-			File currFile = files[i];
-			if (currFile.isFile() && currFile.getName().equals(MylarTaskListPlugin.DEFAULT_TASK_LIST_FILE)) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * Switches the current data folder to the specified folder. Specify only
-	 * the folder name and not the full path.
-	 * 
-	 * Note: This currently always resumes capture when returning to the main
-	 * data directory (and suspends capture when switching to a shared
-	 * directory).
-	 * 
-	 * (Public for testing only)
-	 */
-	public void switchTaskDataFolder(String targetFolder) {
-
-		MylarTaskListPlugin.getDefault().getTaskListSaveManager().saveTaskListAndContexts();
-
-		if (targetFolder.equals(MAIN_LOCAL_DATA_DIR)) {
-			MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().setSharedDataDirectoryEnabled(false);
-			// MylarTaskListPlugin.getDefault().setDataDirectory(MylarPlugin.getDefault().getDataDirectory());
-			(new ToggleContextCaptureAction()).resume(); // TODO: don't use
-			// actions directly
-			TaskListView.getFromActivePerspective().indicateSharedFolder("");
-			MylarPlugin.getContextManager().setActivationHistorySuppressed(false);
-		} else {
-			String dataDirPath = MylarReportsPlugin.getDefault().getRootSharedDataDirectory() + File.separator
-					+ targetFolder;
-			MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().setSharedDataDirectory(dataDirPath);
-			MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().setSharedDataDirectoryEnabled(true);
-			// MylarTaskListPlugin.getDefault().setDataDirectory(dataDirPath);
-			(new ToggleContextCaptureAction()).pause();
-			TaskListView.getFromActivePerspective().indicateSharedFolder(targetFolder);
-			MylarPlugin.getContextManager().setActivationHistorySuppressed(true);
-		}
-	}
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarContextTreeView.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarContextTreeView.java
deleted file mode 100644
index 2934474..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarContextTreeView.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-package org.eclipse.mylar.internal.sandbox.viz;
-
-
-import java.util.List;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-import org.eclipse.mylar.internal.ui.MylarImages;
-import org.eclipse.mylar.internal.ui.actions.ToggleDecorateInterestLevelAction;
-import org.eclipse.mylar.internal.ui.views.ContextContentProvider;
-import org.eclipse.mylar.internal.ui.views.ContextNodeOpenListener;
-import org.eclipse.mylar.internal.ui.views.DelegatingContextLabelProvider;
-import org.eclipse.mylar.provisional.core.IMylarContext;
-import org.eclipse.mylar.provisional.core.IMylarContextListener;
-import org.eclipse.mylar.provisional.core.IMylarElement;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.mylar.provisional.ui.InterestSorter;
-import org.eclipse.mylar.provisional.ui.MylarUiPlugin;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * @author Mik Kersten
- */
-public class MylarContextTreeView extends ViewPart {
-
-	private ViewerSorter viewerSorter;
-
-	protected TreeViewer viewer;
-
-	private Action decorateInterestLevel;
-
-	private Action linkRefresh;
-
-	private boolean activeRefresh = true;// MylarPlugin.DEBUG_MODE;
-
-	private final IMylarContextListener REFRESH_UPDATE_LISTENER = new IMylarContextListener() {
-
-		public void interestChanged(List<IMylarElement> nodes) {
-			for (IMylarElement node : nodes)
-				refresh(node);
-		}
-
-		public void contextActivated(IMylarContext taskscape) {
-			refresh();
-		}
-
-		public void contextDeactivated(IMylarContext taskscape) {
-			refresh();
-		}
-
-		public void presentationSettingsChanging(UpdateKind kind) {
-			refresh();
-		}
-
-		public void presentationSettingsChanged(UpdateKind kind) {
-			refresh();
-		}
-
-		public void landmarkAdded(IMylarElement element) {
-			refresh();
-		}
-
-		public void landmarkRemoved(IMylarElement element) {
-			refresh();
-		}
-
-		public void edgesChanged(IMylarElement node) {
-			refresh();
-		}
-
-		private void refresh() {
-			refresh(null);
-		}
-
-		private void refresh(final IMylarElement node) {
-			PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
-				public void run() {
-					try {
-						if (viewer != null && !viewer.getTree().isDisposed()) {
-							if (node != null) {
-								viewer.refresh(node);
-							} else {
-								viewer.refresh();
-							}
-						}
-					} catch (Throwable t) {
-						MylarStatusHandler.fail(t, "Could not update viewer", false);
-					}
-				}
-			});
-		}
-
-		public void nodeDeleted(IMylarElement node) {
-			refresh();
-		}
-	};
-
-	public MylarContextTreeView() {
-		MylarPlugin.getContextManager().addListener(REFRESH_UPDATE_LISTENER);
-	}
-
-	@Override
-	public void createPartControl(Composite parent) {
-		viewerSorter = new InterestSorter();
-		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-		viewer.setContentProvider(new ContextContentProvider(viewer.getTree(), this.getViewSite(), false));
-		viewer.setSorter(viewerSorter);
-		viewer.setInput(getViewSite());
-
-		// viewer.setLabelProvider(new TaskscapeNodeLabelProvider());
-		viewer.setLabelProvider(new DecoratingLabelProvider(new DelegatingContextLabelProvider(), PlatformUI
-				.getWorkbench().getDecoratorManager().getLabelDecorator()));
-
-		makeActions();
-		hookContextMenu();
-		contributeToActionBars();
-		viewer.getTree().setBackground(MylarUiPlugin.getDefault().getColorMap().BACKGROUND_COLOR);
-
-		viewer.addOpenListener(new ContextNodeOpenListener(viewer));
-	}
-
-	protected Object[] refreshView(Object parent) {
-		if (MylarPlugin.getContextManager() == null) {
-			return new String[] { "No model" };
-		} else {
-			try {
-				return MylarPlugin.getContextManager().getActiveContext().getAllElements().toArray();
-			} catch (Throwable t) {
-				MylarStatusHandler.fail(t, "failed to show model", false);
-				return new String[] { "Absent or incompatible model data: " + t.getMessage(),
-						"Consider resetting model file." };
-			}
-		}
-	}
-
-	private void hookContextMenu() {
-		MenuManager menuMgr = new MenuManager("#PopupMenu");
-		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			public void menuAboutToShow(IMenuManager manager) {
-				MylarContextTreeView.this.fillContextMenu(manager);
-			}
-		});
-		Menu menu = menuMgr.createContextMenu(viewer.getControl());
-		viewer.getControl().setMenu(menu);
-		getSite().registerContextMenu(menuMgr, viewer);
-	}
-
-	private void contributeToActionBars() {
-		IActionBars bars = getViewSite().getActionBars();
-		fillLocalPullDown(bars.getMenuManager());
-		fillLocalToolBar(bars.getToolBarManager());
-	}
-
-	private void fillLocalPullDown(IMenuManager manager) {
-		manager.add(decorateInterestLevel);
-		manager.add(new Separator());
-	}
-
-	private void fillContextMenu(IMenuManager manager) {
-		manager.add(decorateInterestLevel);
-		// Other plug-ins can contribute there actions here
-		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-	}
-
-	private void fillLocalToolBar(IToolBarManager manager) {
-		manager.add(linkRefresh);
-		manager.add(decorateInterestLevel);
-	}
-
-	private void makeActions() {
-		linkRefresh = new ActiveRefreshAction();
-		linkRefresh.setToolTipText("Active Refresh");
-		linkRefresh.setImageDescriptor(MylarImages.SYNCHED);
-		linkRefresh.setChecked(activeRefresh);
-
-		decorateInterestLevel = new ToggleDecorateInterestLevelAction();
-	}
-
-	/**
-	 * Passing the focus request to the viewer's control.
-	 */
-	@Override
-	public void setFocus() {
-		viewer.getControl().setFocus();
-	}
-
-	class ActiveRefreshAction extends Action {
-		public ActiveRefreshAction() {
-			super(null, IAction.AS_CHECK_BOX);
-		}
-
-		@Override
-		public void run() {
-			activeRefresh = !activeRefresh;
-			setChecked(activeRefresh);
-			if (activeRefresh) {
-				MylarPlugin.getContextManager().addListener(REFRESH_UPDATE_LISTENER);
-			} else {
-				MylarPlugin.getContextManager().removeListener(REFRESH_UPDATE_LISTENER);
-			}
-		}
-	}
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanel.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanel.java
deleted file mode 100644
index e025747..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanel.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Feb 8, 2005
- */
-package org.eclipse.mylar.internal.sandbox.viz;
-
-import org.eclipse.mylar.internal.core.MylarContextManager;
-import org.eclipse.mylar.provisional.core.IMylarContextListener;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * @author Mik Kersten
- */
-public class MylarControlPanel extends Composite {
-	private Scale dosScale;
-
-	// private TableViewer tableViewer;
-	private Scale doiScale;
-
-	public MylarControlPanel(ViewPart part, Composite parent, int style) {
-		super(parent, style);
-		final GridLayout gridLayout_3 = new GridLayout();
-		gridLayout_3.verticalSpacing = 2;
-		gridLayout_3.marginWidth = 0;
-		gridLayout_3.marginHeight = 0;
-		gridLayout_3.horizontalSpacing = 1;
-		setLayout(gridLayout_3);
-
-		final Label activeLabel = new Label(this, SWT.NONE);
-		activeLabel.setText("Active tasks ");
-		activeLabel
-				.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
-
-		// tableViewer = new TableViewer(this, SWT.BORDER);
-		// final GridData gridData = new GridData();
-		// gridData.widthHint = 141;
-		// tableViewer.getTable().setLayoutData(new
-		// GridData(GridData.FILL_BOTH));
-		// tableViewer.setContentProvider(new ItemContentProvider());
-		// tableViewer.setInput(part.getViewSite());
-		// tableViewer.setLabelProvider(new TasklistLabelProvider());
-
-		final Composite group = new Composite(this, SWT.NONE);
-		final GridLayout gridLayout_2 = new GridLayout();
-		gridLayout_2.verticalSpacing = 0;
-		gridLayout_2.horizontalSpacing = 0;
-		gridLayout_2.marginWidth = 0;
-		gridLayout_2.marginHeight = 0;
-		group.setLayout(gridLayout_2);
-		final GridData gridData_1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
-		gridData_1.heightHint = 45;
-		group.setLayoutData(gridData_1);
-
-		final Composite doiComposite = new Composite(group, SWT.NONE);
-		final GridData gridData_2 = new GridData(GridData.FILL_BOTH);
-		gridData_2.heightHint = 20;
-		gridData_2.widthHint = 191;
-		doiComposite.setLayoutData(gridData_2);
-		final GridLayout gridLayout = new GridLayout();
-		gridLayout.horizontalSpacing = 1;
-		gridLayout.verticalSpacing = 1;
-		gridLayout.marginWidth = 1;
-		gridLayout.marginHeight = 1;
-		gridLayout.numColumns = 2;
-		doiComposite.setLayout(gridLayout);
-
-		final Label doiLabel = new Label(doiComposite, SWT.NONE);
-		final GridData gridData_4 = new GridData();
-		gridData_4.widthHint = 105;
-		doiLabel.setLayoutData(gridData_4);
-		doiLabel.setText(" Degree of interest");
-		doiScale = new Scale(doiComposite, SWT.NONE);
-		final GridData gridData_3 = new GridData(GridData.FILL_HORIZONTAL);
-		gridData_3.heightHint = 17;
-		doiScale.setLayoutData(gridData_3);
-		doiScale.setPageIncrement(1);
-		doiScale.setSelection(6);
-		doiScale.setMinimum(0);
-		doiScale.setMaximum(12);
-		doiScale.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				MylarContextManager.getScalingFactors().setInteresting(scaleDoiSelection(doiScale.getSelection()));
-				MylarPlugin.getContextManager().notifyActivePresentationSettingsChange(
-						IMylarContextListener.UpdateKind.SCALING);
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// don't care about default selection
-			}
-		});
-		doiScale.addMouseListener(new MouseListener() {
-			public void mouseDoubleClick(MouseEvent e) {
-				// don't care about double click
-			}
-
-			public void mouseDown(MouseEvent e) {
-				// don't care about mouse down
-			}
-
-			public void mouseUp(MouseEvent e) {
-				MylarContextManager.getScalingFactors().setInteresting(scaleDoiSelection(doiScale.getSelection()));
-				MylarPlugin.getContextManager().notifyPostPresentationSettingsChange(
-						IMylarContextListener.UpdateKind.SCALING);
-			}
-		});
-
-		final Composite dosComposite = new Composite(group, SWT.NONE);
-		final GridData gridData_2_1 = new GridData(GridData.FILL_BOTH);
-		gridData_2_1.heightHint = 20;
-		gridData_2_1.widthHint = 191;
-		dosComposite.setLayoutData(gridData_2_1);
-		final GridLayout gridLayout_1 = new GridLayout();
-		gridLayout_1.verticalSpacing = 1;
-		gridLayout_1.horizontalSpacing = 1;
-		gridLayout_1.marginWidth = 1;
-		gridLayout_1.marginHeight = 1;
-		gridLayout_1.numColumns = 2;
-		dosComposite.setLayout(gridLayout_1);
-
-		final Label dosLabel = new Label(dosComposite, SWT.NONE);
-		final GridData gridData_5 = new GridData();
-		gridData_5.widthHint = 105;
-		dosLabel.setLayoutData(gridData_5);
-		dosLabel.setBounds(0, 0, 120, 30);
-		dosLabel.setText(" Degree of separation");
-
-		dosScale = new Scale(dosComposite, SWT.NONE);
-		final GridData gridData_3_1 = new GridData(GridData.FILL_HORIZONTAL);
-		gridData_3_1.heightHint = 17;
-		dosScale.setIncrement(1);
-		dosScale.setLayoutData(gridData_3_1);
-		dosScale.setMinimum(1);
-		dosScale.setMaximum(5);
-		dosScale.setSelection(2);
-		dosScale.setPageIncrement(1);
-		dosScale.setBounds(0, 0, 120, 30);
-		dosScale.setToolTipText("landmarks | interesting | projects | dependent projects | workspace");
-		dosScale.addMouseListener(new MouseListener() {
-			public void mouseDoubleClick(MouseEvent e) {
-				// don't care about double click
-			}
-
-			public void mouseDown(MouseEvent e) {
-				// don't care about mouse down
-			}
-
-			public void mouseUp(MouseEvent e) {
-				MylarContextManager.getScalingFactors().setDegreeOfSeparation(dosScale.getSelection());
-				MylarPlugin.getContextManager().refreshRelatedElements();
-			}
-
-		});
-
-		// initDragAndDrop(tableViewer);
-		// tableViewer.refresh();
-	}
-
-	private float scaleDoiSelection(int selection) {
-		int value = selection;
-		int scaledValue = (-1) * (value - 6);
-		if (scaledValue < 0)
-			scaledValue = 0;
-		return scaledValue;
-	}
-
-	// private static final class ItemContentProvider implements
-	// IStructuredContentProvider {
-	//
-	// public Object[] getElements(Object inputElement) {
-	// return
-	// TaskListPlugin.getTaskListManager().getTaskList().getActiveTasks().toArray();
-	// }
-	//
-	// public void dispose() {
-	// }
-	//
-	// public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
-	// {
-	// }
-	// }
-
-	// private void initDragAndDrop(final TableViewer tableViewer) {
-	// TextTransfer textTransfer = TextTransfer.getInstance();
-	// DropTarget target = new DropTarget(tableViewer.getTable(), DND.DROP_COPY
-	// | DND.DROP_MOVE);
-	// target.setTransfer(new Transfer[] { textTransfer });
-	// target.addDropListener(new TaskListDropTargetListener(this, tableViewer,
-	// textTransfer, true));
-	//        
-	// DragSource source = new DragSource(tableViewer.getTable(), DND.DROP_COPY
-	// | DND.DROP_MOVE);
-	// Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
-	// source.setTransfer(types);
-	// source.addDragListener(new DragSourceListener() {
-	//
-	// public void dragStart(DragSourceEvent event) {
-	// if (((StructuredSelection)tableViewer.getSelection()).getFirstElement()
-	// == null) {
-	// event.doit = false;
-	// }
-	// }
-	//
-	// public void dragSetData(DragSourceEvent event) {
-	// StructuredSelection selection =
-	// (StructuredSelection)tableViewer.getSelection();
-	// ITask task = (ITask)selection.getFirstElement();
-	// if (task != null) {
-	// event.data = "" + task.getId();
-	// } else {
-	// event.data = " ";
-	// }
-	// }
-	//
-	// public void dragFinished(DragSourceEvent event) {
-	// StructuredSelection selection =
-	// (StructuredSelection)tableViewer.getSelection();
-	// if (selection.isEmpty()) {
-	// return;
-	// } else {
-	// ITask task = (ITask) selection.getFirstElement();
-	// tableViewer.remove(task);
-	// tableViewer.refresh();
-	// }
-	// }
-	//            
-	// });
-	// }
-
-	// class ViewLabelProvider extends LabelProvider implements IColorProvider {
-	// 
-	// public String getText(Object obj) {
-	// if (obj instanceof BugzillaTask) {
-	// String desc =
-	// TaskListPlugin.getDefault().getBugzillaProvider().getBugzillaDescription(
-	// ((BugzillaTask)obj));
-	// return desc;
-	// } else if (obj instanceof Task) {
-	// Task task = (Task)obj;
-	// return task.toString();// + " [" + task.getId() + "]";
-	// } else {
-	// return obj.toString();
-	// }
-	// }
-	//            
-	// public Image getImage(Object obj) {
-	// String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
-	// if (obj instanceof Category) {
-	// return MylarImages.getImage(MylarImages.TASK_CATEGORY);
-	// } else if (obj instanceof BugzillaTask) {
-	// return MylarImages.getImage(MylarImages.TASK_BUGZILLA);
-	// } else if (obj instanceof Task) {
-	// return MylarImages.getImage(MylarImages.TASK);
-	// } else {
-	// return null;
-	// }
-	// }
-	// public Color getForeground(Object element) {
-	// return null;
-	// }
-	//        
-	// public Color getBackground(Object element) {
-	// if (element instanceof ITask) {
-	// ITask task = (ITask)element;
-	// if (task.isActive()) {
-	// Highlighter highlighter =
-	// MylarUiPlugin.getDefault().getHighlighterForTaskId(((Task)task).getId());
-	// if (highlighter != null) {
-	// return highlighter.getHighlightColor();
-	// } else {
-	// return null;
-	// }
-	// }
-	// }
-	// return null;
-	// }
-	// }
-
-	@Override
-	public void dispose() {
-		super.dispose();
-	}
-
-	// protected void checkSubclass() {
-	//    	
-	// }
-
-	// public TableViewer getTableViewer() {
-	// return tableViewer;
-	// }
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanelView.java b/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanelView.java
deleted file mode 100644
index 923c8cc..0000000
--- a/org.eclipse.mylyn.sandbox.ui/src/org/eclipse/mylyn/internal/sandbox/viz/MylarControlPanelView.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Feb 4, 2005
- */
-package org.eclipse.mylar.internal.sandbox.viz;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * @author Mik Kersten
- */
-public class MylarControlPanelView extends ViewPart {
-
-	public MylarControlPanelView() {
-		super();
-	}
-
-	@Override
-	public void createPartControl(Composite parent) {
-		new MylarControlPanel(this, parent, SWT.NONE);
-	}
-
-	@Override
-	public void setFocus() {
-		// don't need to set the focus
-	}
-
-}
diff --git a/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/CollabNetRegularExpressionTest.java b/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/CollabNetRegularExpressionTest.java
deleted file mode 100644
index 8d6200f..0000000
--- a/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/CollabNetRegularExpressionTest.java
+++ /dev/null
@@ -1,201 +0,0 @@
-///*******************************************************************************
-// * Copyright (c) 2004 - 2006 University Of British Columbia 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:
-// *     University Of British Columbia - initial API and implementation
-// *******************************************************************************/
-//
-//package org.eclipse.mylar.sandbox.tests;
-//
-//import java.io.BufferedReader;
-//import java.io.IOException;
-//import java.io.StringReader;
-//
-//import junit.framework.TestCase;
-//
-//import org.eclipse.core.runtime.IProgressMonitor;
-//import org.eclipse.core.runtime.NullProgressMonitor;
-//import org.eclipse.core.runtime.OperationCanceledException;
-//import org.eclipse.mylar.internal.bugzilla.core.IBugzillaConstants;
-//import org.eclipse.mylar.internal.bugzilla.ui.BugzillaUiPlugin;
-//import org.eclipse.mylar.internal.bugzilla.ui.search.BugzillaSearchHit;
-//
-//import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;
-//import com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression;
-//
-///**
-// * @author Mik Kersten
-// * @author Marco Sferra
-// */
-//public class CollabNetRegularExpressionTest extends TestCase {
-//
-//	private static final RegularExpression reColVal1 = new RegularExpression(
-//			"<span class=\"issue_type\">([^>]+)</span>", "i");
-//
-//	private static final RegularExpression reColVal2 = new RegularExpression("<span class=\"priority\">([^>]+)</span>",
-//			"i");
-//
-//	private static final RegularExpression reColVal3 = new RegularExpression("<span class=\"platform\">([^>]+)</span>",
-//			"i");
-//
-//	private static final RegularExpression reColVal4 = new RegularExpression("<span class=\"owner\">([^>]+)</span>",
-//			"i");
-//
-//	private static final RegularExpression reColVal5 = new RegularExpression("<span class=\"status\">([^>]+)</span>",
-//			"i");
-//
-//	private static final RegularExpression reColVal6 = new RegularExpression(
-//			"<span class=\"resolution\">([^>]+)</span>", "i");
-//
-//	private static final RegularExpression reColVal7 = new RegularExpression("<span class=\"summary\">([^>]+)</span>",
-//			"i");
-//
-//	public void testMatchV220() throws IOException {
-//		BufferedReader in = new BufferedReader(new StringReader(EXAMPLE_REPORT));
-//		Match match = new Match();
-//		BugzillaSearchHit hit = createHit(new NullProgressMonitor(), in, match,
-//				IBugzillaConstants.ECLIPSE_BUGZILLA_URL, 123);
-//		assertEquals("nor", hit.getSeverity());
-//		assertEquals("P2", hit.getPriority());
-//	}
-//
-//	BugzillaSearchHit createHit(IProgressMonitor monitor, BufferedReader in, Match match, String serverUrl, int id)
-//			throws IOException {
-//
-//		String severity = "none";
-//		String priority = "none";
-//		String platform = "none";
-//		String owner = "none";
-//		String state = "none";
-//		String result = "none";
-//		String summary = "none";
-//
-//		do {
-//			if (monitor.isCanceled()) {
-//				throw new OperationCanceledException("Search cancelled");
-//			}
-//			String line = in.readLine();
-//			if (line == null) {
-//				break;
-//			}
-//			line = line.trim();
-//			if (severity.equals("none")) {
-//				severity = readSeverity(line);
-//			}
-//			if (priority.equals("none")) {
-//				priority = readPriority(line);
-//			}
-//			if (platform.equals("none")) {
-//				platform = readPlatform(line);
-//			}
-//			if (owner.equals("none")) {
-//				owner = readOwner(line);
-//			}
-//			if (state.equals("none")) {
-//				state = readStatus(line);
-//			}
-//			if (result.equals("none")) {
-//				result = readResolution(line);
-//			}
-//			if (summary.equals("none")) {
-//				summary = readSummary(line);
-//			}
-//		} while (summary.equals("none"));
-//
-//		String description = "<activate to view description>";
-//
-//		// String server = "<unknown server>";
-//
-//		String query = "";
-//		try {
-//			String recentQuery = BugzillaUiPlugin.getMostRecentQuery();
-//			if (recentQuery != null) {
-//				query = recentQuery;
-//			}
-//			// server = BugzillaPlugin.getDefault().getServerName();
-//		} catch (Exception exception1) {
-//		}
-//		return new BugzillaSearchHit(serverUrl, id, description, severity, priority, platform, state, result, owner,
-//				query);
-//
-//	}
-//
-//	private static final String EXAMPLE_REPORT = "<tr class=\"b\">\n" + "<td>\n"
-//			+ "<a href=\"show_bug.cgi?id=1\">1</a>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"issue_type\">nor</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"priority\">P2</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"platform\">All</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"owner\">euxx</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"status\">NEW</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"resolution\">no result</span>\n" + "</td>\n"
-//			+ "<td class=\"red\"><span class=\"summary\">Security context is not getting propagated</span>\n"
-//			+ "</td>\n" + "</tr>\n";
-//
-//	public static String readSeverity(String line) {
-//		Match match = new Match();
-//		if (reColVal1.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readPriority(String line) {
-//		Match match = new Match();
-//		if (reColVal2.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readPlatform(String line) {
-//		Match match = new Match();
-//		if (reColVal3.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readOwner(String line) {
-//		Match match = new Match();
-//		if (reColVal4.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readStatus(String line) {
-//		Match match = new Match();
-//		if (reColVal5.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readResolution(String line) {
-//		Match match = new Match();
-//		if (reColVal6.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//	public static String readSummary(String line) {
-//		Match match = new Match();
-//		if (reColVal7.matches(line, match)) {
-//			return match.getCapturedText(1);
-//		} else {
-//			return "none";
-//		}
-//	}
-//
-//}
diff --git a/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/SharedTaskFolderTest.java b/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/SharedTaskFolderTest.java
deleted file mode 100644
index 74cdeeb..0000000
--- a/org.eclipse.mylyn.sandbox.ui/testsrc/org/eclipse/mylyn/sandbox/tests/SharedTaskFolderTest.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.eclipse.mylar.sandbox.tests;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import junit.framework.TestCase;
-
-import org.eclipse.mylar.internal.core.MylarContext;
-import org.eclipse.mylar.internal.monitor.reports.MylarReportsPlugin;
-import org.eclipse.mylar.internal.sandbox.MylarSandboxPlugin;
-import org.eclipse.mylar.internal.sandbox.share.SwitchTaskDataFolderAction;
-import org.eclipse.mylar.provisional.core.InteractionEvent;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.mylar.provisional.tasklist.ITask;
-import org.eclipse.mylar.provisional.tasklist.MylarTaskListPlugin;
-import org.eclipse.mylar.provisional.tasklist.Task;
-import org.eclipse.mylar.provisional.tasklist.TaskListManager;
-
-/**
- * Tests changing the shared task directory
- * currently in use.
- * 
- * @author Wesley Coelho
- */
-public class SharedTaskFolderTest extends TestCase{
-
-	private File sharedDataRootDir = null;
-	private File bobsDataDir = null;
-	private File jillsDataDir = null;
-	private String originalMainDataDir = null;
-	private String originalSharedDataDir = null;
-	private TaskListManager manager = MylarTaskListPlugin.getTaskListManager(); 
-	
-	/**
-	 * Set up a shared task directory structure by creating some data
-	 * in the main directory and copying it to the shared directories.
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		//Get the original main data directory so that it can be reset later
-		originalMainDataDir = MylarPlugin.getDefault().getDataDirectory();
-		
-		//Create a task to make sure there is some data in the main directory
-		createAndSaveTask("Task1");
-		
-		//Create the shared data directory structure
-		sharedDataRootDir = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + "SharedDataDir");
-		sharedDataRootDir.mkdir();
-		assertTrue(sharedDataRootDir.exists());	
-		
-		bobsDataDir = new File(sharedDataRootDir.getPath() + File.separator + "Bob");
-		bobsDataDir.mkdir();
-		assertTrue(bobsDataDir.exists());
-		
-		jillsDataDir = new File(sharedDataRootDir.getPath() + File.separator + "Jill");
-		jillsDataDir.mkdir();
-		assertTrue(jillsDataDir.exists());
-
-		//Start the shared data dirs off with copies of the main data
-		File mainDataDir = new File(originalMainDataDir);
-		for ( File currFile : mainDataDir.listFiles()) {
-			File destFile = new File(bobsDataDir.getPath() + File.separator + currFile.getName());
-			copy(currFile, destFile);
-			destFile = new File(jillsDataDir.getPath() + File.separator + currFile.getName());
-			copy(currFile, destFile);
-		}
-		
-		//Set the shared data dir
-		originalSharedDataDir = MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().getSharedDataDirectory();
-		MylarReportsPlugin.getDefault().getPreferenceStore().setValue(MylarReportsPlugin.SHARED_TASK_DATA_ROOT_DIR, sharedDataRootDir.getPath());
-		MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().setSharedDataDirectory(sharedDataRootDir.getPath());
-		assertFalse(MylarPlugin.getDefault().getDataDirectory().equals(sharedDataRootDir.getPath()));
-	}
-	
-	/**
-	 * Tests moving the main mylar data directory to another location
-	 */
-	public void testSharedDataDirSwitching(){
-		SwitchTaskDataFolderAction switchAction = new SwitchTaskDataFolderAction();
-		
-		//Create a task to appear in the main data dir only
-		ITask mainDataDirTask = createAndSaveTask("Main Dir Task");
-		
-		//Check the options of folders to switch to
-		String[] sharedDataFolderOptions = switchAction.getFolderStrings();
-		//Note that index 0 is a string indicating a switch back to the main data directory
-		assertTrue(sharedDataFolderOptions[0].equals("Bob"));
-		assertTrue(sharedDataFolderOptions[1].equals("Jill"));
-		
-		//Switch to Bob's folder
-		switchAction.switchTaskDataFolder(sharedDataFolderOptions[0]);
-		
-		//Check that the task created in the main data dir isn't there
-		File mainDataDirTaskFile = MylarPlugin.getContextManager().getFileForContext(mainDataDirTask.getHandleIdentifier());
-//		File mainDataDirTaskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + mainDataDirTask.getContextPath() + MylarTaskListPlugin.FILE_EXTENSION);
-		assertFalse(mainDataDirTaskFile.exists());
-		assertNull(manager.getTaskList().getTask(mainDataDirTask.getHandleIdentifier()));
-		
-		fail(); // uncomment below
-		//Create a new task in bob's task data folder only and check that it exists in the right place
-//		ITask bobsTask = createAndSaveTask("Bob's Task");
-//		
-//		File bobsTaskFile = new File(bobsDataDir.getPath() + File.separator + 
-//				MylarPlugin.getContextManager().getFileForContext(mainDataDirTask.getHandleIdentifier()).getName());
-//		assertTrue(bobsTaskFile.exists());
-//		bobsTaskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + bobsTask.getContextPath() + MylarTaskListPlugin.FILE_EXTENSION);
-//		assertTrue(bobsTaskFile.exists());
-//		assertNotNull(manager.getTaskForHandle(bobsTask.getHandleIdentifier(), false));
-//		
-//		//Switch to Jill's folder
-//		switchAction.switchTaskDataFolder(sharedDataFolderOptions[1]);
-//		
-//		//Check that Bob's task isn't there
-//		bobsTaskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + bobsTask.getContextPath() + MylarTaskListPlugin.FILE_EXTENSION);
-//		assertFalse(bobsTaskFile.exists());
-//		assertNull(manager.getTaskForHandle(bobsTask.getHandleIdentifier(), false));		
-//		
-//		//Switch back to Bob's folder
-//		switchAction.switchTaskDataFolder(sharedDataFolderOptions[0]);
-//		
-//		//Check that bob's task is still there
-//		bobsTaskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + bobsTask.getContextPath() + MylarTaskListPlugin.FILE_EXTENSION);
-//		assertTrue(bobsTaskFile.exists());
-//		assertNotNull(manager.getTaskForHandle(bobsTask.getHandleIdentifier(), false));			
-//		
-//		//Switch back to the main data folder
-//		sharedDataFolderOptions = switchAction.getFolderStrings();
-//		switchAction.switchTaskDataFolder(sharedDataFolderOptions[0]);
-//		
-//		//Check that the main task is there
-//		mainDataDirTaskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + mainDataDirTask.getContextPath() + MylarTaskListPlugin.FILE_EXTENSION);
-//		assertTrue(mainDataDirTaskFile.exists());
-//		assertNotNull(manager.getTaskForHandle(mainDataDirTask.getHandleIdentifier(), false));			
-		
-	}
-		
-	/**
-	 * Creates a task with an interaction event and checks that it has
-	 * been properly saved in the currently active data directory
-	 */
-	protected ITask createAndSaveTask(String taskName){
-		
-		//Create the task and add it to the root of the task list
-		ITask newTask = new Task(MylarTaskListPlugin.getTaskListManager().genUniqueTaskHandle(), taskName, true);
-		manager.getTaskList().moveToRoot(newTask);
-		MylarContext mockContext = MylarPlugin.getContextManager().loadContext(newTask.getHandleIdentifier());//, newTask.getContextPath());
-		InteractionEvent event = new InteractionEvent(InteractionEvent.Kind.EDIT,"structureKind","handle","originId");
-		mockContext.parseEvent(event);
-		MylarPlugin.getContextManager().activateContext(mockContext);
-
-		fail(); // uncomment below
-//		//Save the context file and check that it exists
-//		MylarPlugin.getContextManager().saveContext(mockContext.getId());//, newTask.getContextPath());
-//		File taskFile = new File(MylarPlugin.getDefault().getDataDirectory() + File.separator + newTask.getContextPath() + MylarContextManager.CONTEXT_FILE_EXTENSION);
-//		assertTrue(MylarPlugin.getContextManager().hasContext(newTask.getContextPath()));
-//		assertTrue(taskFile.exists());			
-		
-		return newTask;
-	}
-		
-	protected void tearDown() throws Exception{
-		
-		//Reset the shared directory to the original value
-		MylarSandboxPlugin.getDefault().getSharedDataDirectoryManager().setSharedDataDirectory(originalSharedDataDir);
-		MylarReportsPlugin.getDefault().getPreferenceStore().setValue(MylarReportsPlugin.SHARED_TASK_DATA_ROOT_DIR, originalSharedDataDir);
-		
-		//Delete the test shared data directories
-		deleteDir(bobsDataDir);
-		deleteDir(jillsDataDir);
-		deleteDir(sharedDataRootDir);
-		
-		super.tearDown();
-	}
-	
-	private void deleteDir(File targetDir){
-		File[] files = targetDir.listFiles();
-		for (File file : files) {
-			file.delete();
-		}
-		
-		targetDir.delete();
-		assertFalse(targetDir.exists());
-	}
-	
-	// Note: Copied from MylarTaskListPlugin
-	private boolean copy(File src, File dst) {
-		try {
-			InputStream in = new FileInputStream(src);
-			OutputStream out = new FileOutputStream(dst);
-
-			// Transfer bytes from in to out
-			byte[] buf = new byte[1024];
-			int len;
-			while ((len = in.read(buf)) > 0) {
-				out.write(buf, 0, len);
-			}
-			in.close();
-			out.close();
-			return true;
-		} catch (IOException ioe) {
-			return false;
-		}
-	}
-	
-}
