summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaspar De Groot2011-01-31 01:42:18 (EST)
committerCaspar De Groot2011-01-31 01:42:18 (EST)
commit15da7ea5032ee075b23b6adf1049d5d8826e5b87 (patch)
treeaa48d90c211638a54f9275d8d0360b43b2d6527f
parent71699643ac576c5a7e933cc83d93d288a5f1f4bb (diff)
downloadcdo.incubator-15da7ea5032ee075b23b6adf1049d5d8826e5b87.zip
cdo.incubator-15da7ea5032ee075b23b6adf1049d5d8826e5b87.tar.gz
cdo.incubator-15da7ea5032ee075b23b6adf1049d5d8826e5b87.tar.bz2
Moving ...emf.cdo.ui.branch to incubation/ folder
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.classpath7
-rwxr-xr-xorg.eclipse.emf.cdo.ui.branch/.cvsignore2
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.project44
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.core.prefs360
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.ui.prefs120
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.ltk.core.refactoring.prefs3
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.tasks.ui.prefs4
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.team.ui.prefs3
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.api.tools.prefs94
-rw-r--r--org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.prefs31
-rw-r--r--org.eclipse.emf.cdo.ui.branch/META-INF/MANIFEST.MF24
-rw-r--r--org.eclipse.emf.cdo.ui.branch/about.html28
-rw-r--r--org.eclipse.emf.cdo.ui.branch/build.properties10
-rw-r--r--org.eclipse.emf.cdo.ui.branch/copyright.txt8
-rw-r--r--org.eclipse.emf.cdo.ui.branch/plugin.properties11
-rw-r--r--org.eclipse.emf.cdo.ui.branch/plugin.xml26
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/BranchViewPart.java198
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/bundle/OM.java48
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/BranchPointFigure.java29
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/CommitInfoFigure.java48
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/TreeRootFigure.java30
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/geometry/GeometryUtils.java218
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/AbstractBranchPointNode.java119
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNode.java63
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNodeUtils.java221
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/NewBranchConnection.java29
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/RootNode.java29
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/SameBranchConnection.java29
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractBranchViewLayoutStrategy.java239
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractVerticalLayoutStrategy.java175
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchContainer.java67
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchTreeLayoutAlgorithm.java171
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchView.java212
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchViewLayoutStrategy.java84
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/Deque.java55
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/HorizontallyAlternatingSubBranches.java58
-rw-r--r--org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/RightHandSubBranches.java42
38 files changed, 2942 insertions, 0 deletions
diff --git a/org.eclipse.emf.cdo.ui.branch/.classpath b/org.eclipse.emf.cdo.ui.branch/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.ui.branch/.cvsignore b/org.eclipse.emf.cdo.ui.branch/.cvsignore
new file mode 100755
index 0000000..7c18d5d
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.cvsignore
@@ -0,0 +1,2 @@
+bin
+tmp
diff --git a/org.eclipse.emf.cdo.ui.branch/.project b/org.eclipse.emf.cdo.ui.branch/.project
new file mode 100644
index 0000000..48887cf
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.cdo.ui.branch</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.emf.cdo.releng.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.emf.cdo.releng/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.emf.cdo.releng.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..406902a
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Thu Dec 18 13:30:26 CET 2008
+eclipse.preferences.version=1
+encoding//model/org.eclipse.emf.cdo.defs.ecorediag=UTF-8
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..064239f
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,360 @@
+#Wed Mar 10 18:21:41 CET 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.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.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+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=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+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_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=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=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a1e5400
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,120 @@
+#Sun Mar 14 05:47:20 CET 2010
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=11
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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 * Eike Stepper - initial API and implementation\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 Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><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 autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\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">${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">${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}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="false" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="false" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.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 function" enabled\="true" id\="org.eclipse.wst.jsdt.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.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-JSDoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\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.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.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.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..270fde6
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..f21d919
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..e39131d
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description} \r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.api.tools.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..4fc4ff0
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..c6b96bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.ui.branch/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.ui.branch/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8be8b8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.emf.cdo.ui.branch;singleton:=true
+Bundle-Version: 4.0.0.qualifier
+Bundle-Activator: org.eclipse.emf.cdo.ui.internal.branch.bundle.OM$Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.ui;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.net4j;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.examples.company;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.tcp;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.zest.core;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.zest.layouts;bundle-version="[1.1.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.cdo.ui.internal.branch;version="4.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.ui.internal.branch.bundle;version="4.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.ui.internal.branch.figure;version="4.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.ui.internal.branch.geometry;version="4.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.ui.internal.branch.item;version="4.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.ui.internal.branch.layout;version="4.0.0";x-internal:=true
diff --git a/org.eclipse.emf.cdo.ui.branch/about.html b/org.eclipse.emf.cdo.ui.branch/about.html
new file mode 100644
index 0000000..82d49bf
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.ui.branch/build.properties b/org.eclipse.emf.cdo.ui.branch/build.properties
new file mode 100644
index 0000000..1c6fb59
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/build.properties
@@ -0,0 +1,10 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties
+src.includes = about.html,\
+ copyright.txt
diff --git a/org.eclipse.emf.cdo.ui.branch/copyright.txt b/org.eclipse.emf.cdo.ui.branch/copyright.txt
new file mode 100644
index 0000000..0507131
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ Eike Stepper - initial API and implementation \ No newline at end of file
diff --git a/org.eclipse.emf.cdo.ui.branch/plugin.properties b/org.eclipse.emf.cdo.ui.branch/plugin.properties
new file mode 100644
index 0000000..c233c06
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+# Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Client UI Branching Support
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.ui.branch/plugin.xml b/org.eclipse.emf.cdo.ui.branch/plugin.xml
new file mode 100644
index 0000000..ba04fd8
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.3"?>
+<!--
+ Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ class="org.eclipse.emf.cdo.ui.internal.branch.BranchViewPart"
+ id="org.eclipse.emf.cdo.ui.branch"
+ name="CDO Branch View"
+ restorable="true">
+ </view>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/BranchViewPart.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/BranchViewPart.java
new file mode 100644
index 0000000..01aefb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/BranchViewPart.java
@@ -0,0 +1,198 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.ui.internal.branch.figure.BranchPointFigure;
+import org.eclipse.emf.cdo.ui.internal.branch.figure.TreeRootFigure;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.NewBranchConnection;
+import org.eclipse.emf.cdo.ui.internal.branch.item.RootNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.SameBranchConnection;
+import org.eclipse.emf.cdo.ui.internal.branch.layout.BranchTreeLayoutAlgorithm;
+import org.eclipse.emf.cdo.ui.internal.branch.layout.RightHandSubBranches;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.tcp.TCPUtil;
+import org.eclipse.net4j.util.container.ContainerUtil;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.PrintLogHandler;
+import org.eclipse.net4j.util.om.trace.PrintTraceHandler;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.zest.core.widgets.Graph;
+import org.eclipse.zest.layouts.LayoutAlgorithm;
+import org.eclipse.zest.layouts.LayoutStyles;
+
+/**
+ * A view that displays cdo branch points, cdo branches and cdo commit infos in a graphical tree.
+ *
+ * @author Andre Dietisheim
+ */
+public class BranchViewPart extends ViewPart
+{
+ public static final String VIEW_ID = "org.eclipse.emf.cdo.ui.branch"; //$NON-NLS-1$
+
+ private IManagedContainer container;
+
+ private IConnector connector;
+
+ private CDOSession session;
+
+ @Override
+ public void createPartControl(Composite parent)
+ {
+ Graph graph = new Graph(parent, SWT.NONE);
+ // graph.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
+
+ createTestTree(graph);
+
+ LayoutAlgorithm layout = new BranchTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING,
+ new RightHandSubBranches());
+ // LayoutAlgorithm layout = new BranchTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING,
+ // new HorizontallyAlternatingSubBranches());
+ graph.setLayoutAlgorithm(layout, true);
+ }
+
+ @Override
+ public void init(IViewSite site) throws PartInitException
+ {
+ super.init(site);
+ initCDO();
+ site.getPage().addPartListener(new IPartListener2()
+ {
+ public void partVisible(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partOpened(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partInputChanged(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partHidden(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partDeactivated(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partClosed(IWorkbenchPartReference partRef)
+ {
+ cleanupCDO();
+ }
+
+ public void partBroughtToTop(IWorkbenchPartReference partRef)
+ {
+ }
+
+ public void partActivated(IWorkbenchPartReference partRef)
+ {
+ }
+ });
+ }
+
+ @Override
+ public void setFocus()
+ {
+ }
+
+ private void createTestTree(Graph graph)
+ {
+ CDOBranch mainBranch = session.getBranchManager().getMainBranch();
+ CDOBranch subBranch1 = mainBranch.createBranch("1");
+ CDOBranch subBranch1_1 = subBranch1.createBranch("1-1", subBranch1.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch1_2 = subBranch1.createBranch("1-2", subBranch1_1.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch1_2_1 = subBranch1.createBranch("1-2_1", subBranch1_2.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch1_2_2 = subBranch1.createBranch("1-2_2", subBranch1_2_1.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch2 = mainBranch.createBranch("2", subBranch1.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch2_1 = subBranch1.createBranch("2-1", subBranch2.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch2_2 = subBranch1.createBranch("2-2", subBranch2_1.getBase().getTimeStamp() + 30000000);
+ CDOBranch subBranch3 = mainBranch.createBranch("3", subBranch2.getBase().getTimeStamp() + 30000000);
+
+ RootNode rootNode = new RootNode(mainBranch.getBase(), graph, SWT.NONE, new TreeRootFigure());
+ BranchPointNode branchNode1 = new BranchPointNode(subBranch1.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 1"));
+ BranchPointNode branchNode1_1 = new BranchPointNode(subBranch1_1.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 1-1"));
+ BranchPointNode branchNode1_2 = new BranchPointNode(subBranch1_2.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 1-2"));
+ BranchPointNode branchNode1_2_1 = new BranchPointNode(subBranch1_2_1.getBase(), graph, SWT.NONE,
+ new BranchPointFigure("branch point 1-2-1"));
+ BranchPointNode branchNode1_2_2 = new BranchPointNode(subBranch1_2_2.getBase(), graph, SWT.NONE,
+ new BranchPointFigure("branch point 1-2-2"));
+ BranchPointNode branchNode2 = new BranchPointNode(subBranch2.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 2"));
+ BranchPointNode branchNode2_1 = new BranchPointNode(subBranch2_1.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 2-1"));
+ BranchPointNode branchNode2_2 = new BranchPointNode(subBranch2_2.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 2-2"));
+ BranchPointNode branchNode3 = new BranchPointNode(subBranch3.getBase(), graph, SWT.NONE, new BranchPointFigure(
+ "branch point 3"));
+
+ new SameBranchConnection(graph, SWT.NONE, rootNode, branchNode1);
+ new NewBranchConnection(graph, SWT.NONE, branchNode1, branchNode1_1);
+ new SameBranchConnection(graph, SWT.NONE, branchNode1_1, branchNode1_2);
+ new NewBranchConnection(graph, SWT.NONE, branchNode1_2, branchNode1_2_1);
+ new SameBranchConnection(graph, SWT.NONE, branchNode1_2_1, branchNode1_2_2);
+ new SameBranchConnection(graph, SWT.NONE, branchNode1, branchNode2);
+ new SameBranchConnection(graph, SWT.NONE, branchNode2, branchNode3);
+ new NewBranchConnection(graph, SWT.NONE, branchNode2, branchNode2_1);
+ new SameBranchConnection(graph, SWT.NONE, branchNode2_1, branchNode2_2);
+
+ }
+
+ private void initCDO()
+ {
+
+ OMPlatform.INSTANCE.setDebugging(true);
+ OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
+ OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
+
+ container = ContainerUtil.createContainer();
+ Net4jUtil.prepareContainer(container); // Register Net4j factories
+ TCPUtil.prepareContainer(container); // Register TCP factories
+ CDONet4jUtil.prepareContainer(container); // Register CDO factories
+ LifecycleUtil.activate(container);
+
+ connector = TCPUtil.getConnector(container, "localhost:2036"); //$NON-NLS-1$
+
+ org.eclipse.emf.cdo.net4j.CDOSessionConfiguration configuration = CDONet4jUtil.createSessionConfiguration();
+ configuration.setConnector(connector);
+ configuration.setRepositoryName("repo1"); //$NON-NLS-1$
+
+ session = configuration.openSession();
+ // session.getPackageRegistry().putEPackage(CompanyPackage.eINSTANCE);
+ }
+
+ private void cleanupCDO()
+ {
+ // Cleanup
+ session.close();
+ connector.close();
+ container.deactivate();
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/bundle/OM.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/bundle/OM.java
new file mode 100644
index 0000000..133ba39
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/bundle/OM.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Eike Stepper - initial API and implementation
+ * Victor Roldan Betancort - maintenance
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+import org.eclipse.net4j.util.ui.UIActivator;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.emf.cdo.ui.branch"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Activator extends UIActivator
+ {
+ public static Activator INSTANCE;
+
+ public Activator()
+ {
+ super(BUNDLE);
+ INSTANCE = this;
+ }
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/BranchPointFigure.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/BranchPointFigure.java
new file mode 100644
index 0000000..cd00d84
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/BranchPointFigure.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.figure;
+
+import org.eclipse.draw2d.ColorConstants;
+
+/**
+ * The Figure used to visualize a BranchPoint
+ *
+ * @author Andre Dietisheim
+ */
+public class BranchPointFigure extends CommitInfoFigure
+{
+ public BranchPointFigure(String text)
+ {
+ super(text);
+ setBackgroundColor(ColorConstants.red);
+ setForegroundColor(ColorConstants.red);
+ setSize(30, 30);
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/CommitInfoFigure.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/CommitInfoFigure.java
new file mode 100644
index 0000000..a2927cf
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/CommitInfoFigure.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.figure;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Ellipse;
+import org.eclipse.draw2d.Label;
+import org.eclipse.swt.SWT;
+
+/**
+ * The Figure used to visualize a commit info node in the branch tree.
+ *
+ * @author Andre Dietisheim
+ */
+public class CommitInfoFigure extends Ellipse
+{
+ // private Label label;
+
+ /**
+ * Instantiates a new commit info figure.
+ *
+ * @param text
+ * the text
+ */
+ public CommitInfoFigure(String text)
+ {
+ setAntialias(SWT.ON);
+ // ToolbarLayout layout = new ToolbarLayout();
+ // setLayoutManager(layout);
+ setBackgroundColor(ColorConstants.yellow);
+ setForegroundColor(ColorConstants.yellow);
+ setOpaque(true);
+ // figures have to have impair widths (in order to have connections attached to the center)
+ setSize(31, 31);
+ // setAlpha(100);
+ setLineWidth(6);
+ setFill(false);
+ setToolTip(new Label(text));
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/TreeRootFigure.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/TreeRootFigure.java
new file mode 100644
index 0000000..b584964
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/figure/TreeRootFigure.java
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.figure;
+
+import org.eclipse.emf.cdo.ui.internal.branch.item.RootNode;
+
+import org.eclipse.draw2d.RectangleFigure;
+
+/**
+ * The Figure used to visualize the (single) root node of a BranchTree.
+ *
+ * @author Andre Dietisheim
+ * @see RootNode
+ */
+public class TreeRootFigure extends RectangleFigure
+{
+ public TreeRootFigure()
+ {
+ setSize(30, 30);
+ setVisible(false);
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/geometry/GeometryUtils.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/geometry/GeometryUtils.java
new file mode 100644
index 0000000..53f2909
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/geometry/GeometryUtils.java
@@ -0,0 +1,218 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.geometry;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentDimension;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+
+/**
+ * Holds various utiliy method that help to deal with gemoetry classes in zest .
+ */
+public class GeometryUtils
+{
+
+ /**
+ * Adds the width and height of the given second (source) dimension to the given first (target) dimension .
+ *
+ * @param targetDimension
+ * the this dimension
+ * @param sourceDimension
+ * the that dimension
+ */
+ public static void union(DisplayIndependentDimension targetDimension, DisplayIndependentDimension sourceDimension)
+ {
+ targetDimension.width += sourceDimension.width;
+ targetDimension.height += sourceDimension.height;
+ }
+
+ /**
+ * Moves the given Rectangle horizontally by xOffset and vertically by yOffset and returns a new translated rectangle
+ * instance.
+ *
+ * @param xOffset
+ * the offset on the x axis to move the rectangle
+ * @param yOffset
+ * the offset on the y axis to move the rectangle
+ * @param rectangle
+ * the rectangle to translate
+ * @return a new translated rectangle instance
+ */
+ public static DisplayIndependentRectangle translateRectangle(double xOffset, double yOffset,
+ DisplayIndependentRectangle rectangle)
+ {
+ DisplayIndependentRectangle newRectangle = new DisplayIndependentRectangle(rectangle);
+ newRectangle.x += xOffset;
+ newRectangle.y += yOffset;
+ return newRectangle;
+ }
+
+ /**
+ * Moves the given Rectangle horizontally and vertically by the the offsets indicated in the translation and returns a
+ * new translated rectangle instance.
+ *
+ * @param rectangle
+ * the rectangle to translate
+ * @param translation
+ * the translation with the offsets on the x- and y-axis
+ * @return a new translated rectangle instance
+ */
+ public static DisplayIndependentRectangle translateRectangle(DisplayIndependentDimension translation,
+ DisplayIndependentRectangle rectangle)
+ {
+ return translateRectangle(translation.width, translation.height, rectangle);
+ }
+
+ /**
+ * Returns the dimension needed to translate the given rectangle to the given location .
+ *
+ * @param rectangleToTranslate
+ * the rectangle to translate
+ * @param x
+ * the x coordinate to translate the rectangle to
+ * @param y
+ * the y coordinate to translate the rectangle to
+ * @return the translation
+ */
+ public static DisplayIndependentDimension getTranslation(DisplayIndependentRectangle rectangleToTranslate, double x,
+ double y)
+ {
+ return new DisplayIndependentDimension(x - rectangleToTranslate.x, y - rectangleToTranslate.y);
+ }
+
+ /**
+ * Gets the translation necessary to move the source coordinate to the target coordinate.
+ *
+ * @param sourceCoordinate
+ * the source x
+ * @param targetCoordinate
+ * the target x
+ * @return the translation
+ */
+ public static double getTranslation(double sourceCoordinate, double targetCoordinate)
+ {
+ return targetCoordinate - sourceCoordinate;
+ }
+
+ /**
+ * Answers whether the bottom of the first rectangle ends before the second rectangle's top starts (y coordinate).
+ *
+ * @param theseBounds
+ * the first rectangle that shall end before the first one
+ * @param thoseBounds
+ * the second rectangle that shall start after the first one ends
+ * @return true, if successful
+ */
+ public static boolean bottomEndsBefore(DisplayIndependentRectangle theseBounds,
+ DisplayIndependentRectangle thoseBounds)
+ {
+ return theseBounds.y + theseBounds.height < thoseBounds.y;
+ }
+
+ /**
+ * Expands the given rectangle to to the minimum size which can hold both this Rectangle and the rectangle (x, y, w,
+ * h).
+ *
+ * @param x
+ * X coordinate to expand the rectangle to.
+ * @param y
+ * Y coordinate to expand the rectangle to.
+ * @param rectangle
+ * the rectangle to expand
+ * @param width
+ * the width (starting at the x coordinate) to expand the rectangle to
+ * @param height
+ * the height (starting at the y coordinate) to expand the rectangle to
+ */
+ public static DisplayIndependentRectangle union(DisplayIndependentRectangle rectangle, double x, double y,
+ double width, double height)
+ {
+ DisplayIndependentRectangle bounds = new DisplayIndependentRectangle();
+ double right = Math.max(rectangle.x + rectangle.width, x + width);
+ double bottom = Math.max(rectangle.y + rectangle.height, y + height);
+ bounds.x = Math.min(rectangle.x, x);
+ bounds.y = Math.min(rectangle.y, y);
+ bounds.width = right - bounds.x;
+ bounds.height = bottom - bounds.y;
+ return bounds;
+ }
+
+ /**
+ * Expands the given first rectangle to the minimum size which can hold both this Rectangle and the second rectangle.
+ *
+ * @param thisRectangle
+ * the rectangle to expand
+ * @param thatRectangle
+ * the rectangle to include in the first one
+ * @return the new bounds
+ */
+ public static DisplayIndependentRectangle union(DisplayIndependentRectangle thisRectangle,
+ DisplayIndependentRectangle thatRectangle)
+ {
+ return union(thisRectangle, thatRectangle.x, thatRectangle.y, thatRectangle.width, thatRectangle.height);
+ }
+
+ /**
+ * Scales the given rectangle by the given factors.
+ *
+ * @param width
+ * the width
+ * @param height
+ * the height
+ * @param bounds
+ * the bounds
+ */
+ public static void scaleRectangle(double width, double height, DisplayIndependentRectangle bounds)
+ {
+ bounds.width *= width;
+ bounds.height *= height;
+ }
+
+ /**
+ * Subtracts the given height and width from the given rectangle and move its origin by the half of the given values.
+ *
+ * @param dimension
+ * the dimension
+ * @param rectangle
+ * the rectangle
+ */
+ public static DisplayIndependentRectangle substractBorders(DisplayIndependentDimension dimension,
+ DisplayIndependentRectangle rectangle)
+ {
+ DisplayIndependentRectangle newRectangle = new DisplayIndependentRectangle();
+ newRectangle.x = rectangle.x + dimension.width / 2;
+ newRectangle.y = rectangle.y + dimension.height / 2;
+ newRectangle.width = rectangle.width - dimension.width;
+ newRectangle.height = rectangle.height - dimension.height;
+ return newRectangle;
+ }
+
+ /**
+ * Centers the given rectangle on the bounds of the given other rectangle.
+ *
+ * @param rectangleToCenter
+ * the rectangle to center
+ * @param rectangle
+ * the rectangle
+ */
+ public static void center(DisplayIndependentRectangle rectangleToCenter, DisplayIndependentRectangle rectangle)
+ {
+ if (rectangle == null)
+ {
+ rectangleToCenter.x -= rectangleToCenter.width / 2;
+ rectangleToCenter.y -= rectangleToCenter.height / 2;
+ }
+ else
+ {
+ rectangleToCenter.x = rectangle.x + (rectangleToCenter.width - rectangle.width) / 2;
+ rectangleToCenter.y = rectangle.y + (rectangleToCenter.height - rectangle.height) / 2;
+ }
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/AbstractBranchPointNode.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/AbstractBranchPointNode.java
new file mode 100644
index 0000000..d8092d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/AbstractBranchPointNode.java
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.zest.core.widgets.CGraphNode;
+import org.eclipse.zest.core.widgets.IContainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Superclass for all nodes of a BranchTree. A branch tree node may have a connection to a single child (a branch tree
+ * node in a new sub-branch) and a single next sibling (a branch tree node in the same branch)
+ *
+ * @author Andre Dietisheim
+ * @see BranchPointNode
+ * @see RootNode
+ */
+public abstract class AbstractBranchPointNode extends CGraphNode implements CDOBranchPoint
+{
+ private CDOBranchPoint branchPoint;
+
+ public AbstractBranchPointNode(CDOBranchPoint branchPoint, IContainer graphModel, int style, IFigure figure)
+ {
+ super(graphModel, style, figure);
+ this.branchPoint = branchPoint;
+ }
+
+ public CDOBranch getBranch()
+ {
+ return branchPoint.getBranch();
+ }
+
+ public long getTimeStamp()
+ {
+ return branchPoint.getTimeStamp();
+ }
+
+ public int compareTo(CDOBranchPoint o)
+ {
+ return branchPoint.compareTo(o);
+ }
+
+ public AbstractBranchPointNode getNextOnSameBranch()
+ {
+ for (SameBranchConnection connection : getSameBranchSourceConnections())
+ {
+ return (AbstractBranchPointNode)connection.getDestination();
+ }
+
+ return null;
+ }
+
+ public AbstractBranchPointNode getPreviousSibling()
+ {
+ for (SameBranchConnection connection : getSameBranchTargetConnections())
+ {
+ return (AbstractBranchPointNode)connection.getSource();
+ }
+
+ return null;
+ }
+
+ public List<SameBranchConnection> getSameBranchSourceConnections()
+ {
+ List<SameBranchConnection> connectionList = new ArrayList<SameBranchConnection>();
+ for (Object sourceConnection : getSourceConnections())
+ {
+ if (sourceConnection instanceof SameBranchConnection)
+ {
+ connectionList.add((SameBranchConnection)sourceConnection);
+ }
+ }
+
+ return connectionList;
+ }
+
+ public List<SameBranchConnection> getSameBranchTargetConnections()
+ {
+ List<SameBranchConnection> connectionList = new ArrayList<SameBranchConnection>();
+ for (Object targetConnection : getTargetConnections())
+ {
+ if (targetConnection instanceof SameBranchConnection)
+ {
+ connectionList.add((SameBranchConnection)targetConnection);
+ }
+ }
+
+ return connectionList;
+ }
+
+ public AbstractBranchPointNode getLater(AbstractBranchPointNode node)
+ {
+ if (node != null && node.getTimeStamp() > getTimeStamp())
+ {
+ return node;
+ }
+
+ return this;
+ }
+
+ @Override
+ public String toString()
+ {
+ return super.toString() + " " + branchPoint; //$NON-NLS-1$
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNode.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNode.java
new file mode 100644
index 0000000..bb4a918
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNode.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.zest.core.widgets.GraphNode;
+import org.eclipse.zest.core.widgets.IContainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A node that holds a branch point. It may be connected to a further (single) BranchPointNode by a NewBranchConnection
+ * to a node in a sub-branch. It may also be connected to a node in the same branch by a SameBranchConnection.
+ *
+ * @author Andre Dietisheim
+ * @see SameBranchConnection
+ * @see NewBranchConnection
+ */
+public class BranchPointNode extends AbstractBranchPointNode
+{
+ public BranchPointNode(CDOBranchPoint branchPoint, IContainer graphModel, int style, IFigure figure)
+ {
+ super(branchPoint, graphModel, style, figure);
+ }
+
+ public AbstractBranchPointNode getNextOnNewBranch()
+ {
+ List<NewBranchConnection> connectionList = getNewBranchSourceConnections();
+ if (connectionList.size() >= 1)
+ {
+ NewBranchConnection connection = connectionList.get(0);
+ GraphNode node = connection.getDestination();
+ return (AbstractBranchPointNode)node;
+ }
+
+ return null;
+ }
+
+ public List<NewBranchConnection> getNewBranchSourceConnections()
+ {
+ List<NewBranchConnection> connectionList = new ArrayList<NewBranchConnection>();
+ for (Object sourceConnection : getSourceConnections())
+ {
+ if (sourceConnection instanceof NewBranchConnection)
+ {
+ connectionList.add((NewBranchConnection)sourceConnection);
+ }
+ }
+
+ return connectionList;
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNodeUtils.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNodeUtils.java
new file mode 100644
index 0000000..841a589
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/BranchPointNodeUtils.java
@@ -0,0 +1,221 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+
+/**
+ * Various utility methods that help to deal with the manipulations needed to build a BranchTree.
+ *
+ * @author Andre Dietisheim
+ */
+public class BranchPointNodeUtils
+{
+
+ /**
+ * returns a BranchGraphNode for a given internal Node.
+ *
+ * @param internalNode
+ * the internal node
+ * @return the branch graph node
+ * @see InternalNode
+ * @see AbstractBranchPointNode
+ */
+ public static AbstractBranchPointNode getBranchPointNode(InternalNode internalNode)
+ {
+ AbstractBranchPointNode branchGraphNode = null;
+ Object graphData = internalNode.getLayoutEntity().getGraphData();
+ if (graphData != null && graphData instanceof AbstractBranchPointNode)
+ {
+ branchGraphNode = (AbstractBranchPointNode)graphData;
+ }
+ return branchGraphNode;
+ }
+
+ /**
+ * Returns an internal node for a given branch graph node.
+ *
+ * @param branchPointNode
+ * the branch graph node
+ * @return the internal node
+ * @see AbstractBranchPointNode
+ * @see InternalNode
+ */
+ public static InternalNode getInternalNode(AbstractBranchPointNode branchPointNode)
+ {
+ InternalNode internalNode = null;
+ Object layoutInformation = branchPointNode.getLayoutEntity().getLayoutInformation();
+ if (layoutInformation instanceof InternalNode)
+ {
+ internalNode = (InternalNode)layoutInformation;
+ }
+ return internalNode;
+ }
+
+ /**
+ * Returns the center of the given node on the x-axis.
+ *
+ * @param node
+ * the node to get the x-center from
+ * @return the center of the given node on the x-axis
+ */
+ public static double getCenterX(AbstractBranchPointNode node)
+ {
+ InternalNode internalNode = getInternalNode(node);
+ return internalNode.getInternalX() + internalNode.getInternalWidth() / 2;
+ }
+
+ /**
+ * Centers the x coordinate of the given target node compared to the given source node and returns the result. If
+ * source node is <tt>null</tt>, the target node is translated to the right by the half of its own width (centered on
+ * its own location).
+ *
+ * @param nodeToCenter
+ * the node to center
+ * @param nodeToCenterOn
+ * the node to center on
+ * @return the centered x
+ */
+ public static double getCenteredX(InternalNode nodeToCenter, InternalNode nodeToCenterOn)
+ {
+ if (nodeToCenterOn == null)
+ {
+ return nodeToCenter.getInternalX() - nodeToCenter.getInternalWidth() / 2;
+ }
+
+ return nodeToCenterOn.getInternalX() + (nodeToCenterOn.getInternalWidth() - nodeToCenter.getInternalWidth()) / 2;
+ }
+
+ /**
+ * Centers the x coordinate of the given target node.
+ *
+ * @param sourceInternalNode
+ * the internal node to center on the x-axis
+ * @return the centered x
+ */
+ public static double getCenteredX(InternalNode sourceInternalNode)
+ {
+ return getCenteredX(sourceInternalNode, null);
+ }
+
+ /**
+ * Sets the internal size of the internal node that displays the given branch tree node.
+ *
+ * @param node
+ * the branch tree nodes whose internal node shall be set in (internal) size
+ * @see InternalNode
+ * @see InternalNode#setInternalSize(double, double)
+ * @see AbstractBranchPointNode#getSize()
+ */
+ public static void setInternalSize(AbstractBranchPointNode node)
+ {
+ InternalNode internalNode = getInternalNode(node);
+ internalNode.setInternalSize(node.getSize().preciseWidth(), node.getSize().preciseHeight());
+ }
+
+ /**
+ * Translates the internal location of the internal node that displays the given branch tree node.
+ *
+ * @param node
+ * the node whose internal node shall be translated
+ * @param deltaX
+ * the delta x
+ * @param deltaY
+ * the delta y
+ * @see InternalNode
+ * @see InternalNode#getInternalX()
+ * @see InternalNode#getInternalY()
+ * @see InternalNode#setInternalLocation(double, double)
+ */
+ public static void translateInternalLocation(AbstractBranchPointNode node, double deltaX, double deltaY)
+ {
+ InternalNode internalNode = getInternalNode(node);
+ internalNode.setInternalLocation(internalNode.getInternalX() + deltaX, internalNode.getInternalY() + deltaY);
+ }
+
+ /**
+ * Sets the internal location of the internal node which displays the given branch tree node.
+ *
+ * @param node
+ * the node whose internal node's internal location shall be set
+ * @param x
+ * the x
+ * @param y
+ * the y
+ */
+ public static void setInternalLocation(AbstractBranchPointNode node, double x, double y)
+ {
+ InternalNode internalNode = getInternalNode(node);
+ internalNode.setInternalLocation(x, y);
+ }
+
+ /**
+ * Centers the internal node (which displays the given branch tree node) horizontally relatively to the (internal node
+ * that displays) the given source node.
+ *
+ * @param nodeToBeCentered
+ * the node to be centered
+ * @param sourcePositionNode
+ * the source node
+ * @param y
+ * the y coordinate to apply
+ */
+ public static void centerHorizontally(AbstractBranchPointNode nodeToBeCentered,
+ AbstractBranchPointNode sourcePositionNode, double y)
+ {
+
+ InternalNode internalNode = getInternalNode(nodeToBeCentered);
+ double x = getCenteredX(internalNode, getInternalNode(sourcePositionNode));
+ internalNode.setInternalLocation(x, y);
+ }
+
+ /**
+ * Centers the internal node (which displays the given branch tree node) horizontally. It gets shifted to the right by
+ * the half of its own width.
+ *
+ * @param nodeToBeCentered
+ * the node to be centered
+ * @param y
+ * the y coordinate to apply
+ */
+ public static void centerHorizontally(AbstractBranchPointNode nodeToBeCentered, double y)
+ {
+ InternalNode internalNode = getInternalNode(nodeToBeCentered);
+ double x = getCenteredX(internalNode);
+ internalNode.setInternalLocation(x, y);
+ }
+
+ /**
+ * Returns the bounds of the given node.
+ *
+ * @param node
+ * the node to get the bounds of
+ * @return the bounds of the given node
+ */
+ public static DisplayIndependentRectangle getBounds(AbstractBranchPointNode node)
+ {
+ return getBounds(getInternalNode(node));
+ }
+
+ /**
+ * Returns the bounds of the given internal node.
+ *
+ * @param node
+ * the node to retrieve the bounds of
+ * @return the bounds
+ */
+ private static DisplayIndependentRectangle getBounds(InternalNode node)
+ {
+ return new DisplayIndependentRectangle(node.getInternalX(), node.getInternalY(), node.getInternalWidth(), node
+ .getInternalHeight());
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/NewBranchConnection.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/NewBranchConnection.java
new file mode 100644
index 0000000..bc7e57d
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/NewBranchConnection.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+/**
+ * Connects a BranchPoint node to another one. The second node have to be in another (sub-)branch, though.
+ *
+ * @author Andre Dietisheim
+ * @see SameBranchConnection
+ */
+import org.eclipse.zest.core.widgets.Graph;
+import org.eclipse.zest.core.widgets.GraphConnection;
+import org.eclipse.zest.core.widgets.GraphNode;
+
+public class NewBranchConnection extends GraphConnection
+{
+ public NewBranchConnection(Graph graphModel, int style, GraphNode source, GraphNode destination)
+ {
+ super(graphModel, style, source, destination);
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/RootNode.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/RootNode.java
new file mode 100644
index 0000000..9586ec0
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/RootNode.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.zest.core.widgets.IContainer;
+
+/**
+ * The unique root node of a branch tree.
+ *
+ * @author Andre Dietisheim
+ */
+public class RootNode extends AbstractBranchPointNode
+{
+ public RootNode(CDOBranchPoint branchPoint, IContainer graphModel, int style, IFigure figure)
+ {
+ super(branchPoint, graphModel, style, figure);
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/SameBranchConnection.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/SameBranchConnection.java
new file mode 100644
index 0000000..9b0677f
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/item/SameBranchConnection.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.item;
+
+import org.eclipse.zest.core.widgets.Graph;
+import org.eclipse.zest.core.widgets.GraphConnection;
+import org.eclipse.zest.core.widgets.GraphNode;
+
+/**
+ * Connects a BranchPointNode to another one in the same branch.
+ *
+ * @author Andre Dietisheim
+ * @see NewBranchConnection
+ */
+public class SameBranchConnection extends GraphConnection
+{
+ public SameBranchConnection(Graph graphModel, int style, GraphNode source, GraphNode destination)
+ {
+ super(graphModel, style, source, destination);
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractBranchViewLayoutStrategy.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractBranchViewLayoutStrategy.java
new file mode 100644
index 0000000..1a2419f
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractBranchViewLayoutStrategy.java
@@ -0,0 +1,239 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+import org.eclipse.emf.cdo.ui.internal.branch.item.AbstractBranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNodeUtils;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentDimension;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+
+/**
+ * A base strategy that layouts a branch view.
+ *
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractBranchViewLayoutStrategy implements BranchViewLayoutStrategy
+{
+ protected AbstractBranchViewLayoutStrategy()
+ {
+ }
+
+ public void layoutBaselineNode(BranchView branchView, AbstractBranchPointNode node)
+ {
+ BranchPointNodeUtils.setInternalSize(node);
+ setBaselineNodeLocation(node);
+ initBranchBounds(branchView, node);
+ }
+
+ protected void initBranchBounds(BranchView branchView, AbstractBranchPointNode node)
+ {
+ branchView.setBounds(BranchPointNodeUtils.getBounds(node));
+ }
+
+ /**
+ * Layout the given node as sibling node to the baseline node (and its siblings).
+ *
+ * @param branchView
+ * the branch view to layout the node to
+ * @param node
+ * the node to layout
+ */
+ public void layoutNode(BranchView branchView, AbstractBranchPointNode node, AbstractBranchPointNode previousNode)
+ {
+ BranchPointNodeUtils.setInternalSize(node);
+ setSameBranchNodeLocation(node, previousNode);
+ setBranchBounds(branchView, node);
+ }
+
+ /**
+ * Sets the bounds of the given node. The node is centered horizontally to the given previous node.
+ */
+ protected void setBaselineNodeLocation(AbstractBranchPointNode node)
+ {
+ double y = node.getTimeStamp();
+ BranchPointNodeUtils.centerHorizontally(node, y);
+ }
+
+ /**
+ * Sets the location of the given node. The node is centered horizontally to the given previous (sibling) node.
+ */
+ protected void setSameBranchNodeLocation(AbstractBranchPointNode node, AbstractBranchPointNode previousNode)
+ {
+ double y = node.getTimeStamp();
+ BranchPointNodeUtils.centerHorizontally(node, previousNode, y);
+ }
+
+ /**
+ * Sets the bounds of the current branch for the given additional node. The bounds are expanded if the size of the
+ * node requires it.
+ *
+ * @param branchView
+ * the branch view to set the bounds
+ * @param node
+ * the node that was added and shall be included in the given branch view
+ */
+ protected void setBranchBounds(BranchView branchView, AbstractBranchPointNode node)
+ {
+ DisplayIndependentRectangle bounds = GeometryUtils.union(branchView.getBounds(), //
+ BranchPointNodeUtils.getBounds(node));
+ branchView.setBounds(bounds);
+ }
+
+ /**
+ * Adds the given sub branch to this branch. This strategy distributes the sub-branches equally to the left and to the
+ * right of this branch. It starts by putting the last sub branch to the right of the current branch and puts the
+ * previous one to the left etc. .
+ *
+ * @param branchPointNode
+ * the node on the current branch view that the sub-branch view shall be attached to
+ * @param subBranchView
+ * the sub branch view to add
+ * @param branchView
+ * the branch view
+ */
+ public void layoutSubBranchView(BranchView branchView, BranchView subBranchView, BranchPointNode branchPointNode)
+ {
+ if (subBranchView != null)
+ {
+ setSubBranchViewLocation(branchView, subBranchView, branchPointNode);
+ branchView.setBounds(GeometryUtils.union(branchView.getBounds(), subBranchView.getBounds()));
+ }
+ }
+
+ /**
+ * Sets the new given sub branch view to the new location.
+ * <p>
+ * Subclasses have to provide an algorithm that calculates and sets this location.
+ *
+ * @param branchView
+ * the branch view
+ * @param subBranchView
+ * the sub branch view
+ * @param branchPointNode
+ * the branch point node
+ */
+ protected abstract void setSubBranchViewLocation(BranchView branchView, BranchView subBranchView,
+ BranchPointNode branchPointNode);
+
+ public void translateBy(BranchView branchView, DisplayIndependentDimension offsets)
+ {
+ translateBranchNodesBy(branchView, offsets);
+ branchView.setBounds(GeometryUtils.translateRectangle(offsets.width, offsets.height, branchView.getBounds()));
+ translateSubBranchesBy(branchView, offsets);
+ }
+
+ /**
+ * Translates all sub branches of the given branch.
+ *
+ * @param dimension
+ * the dimension to translate this branch by
+ */
+ protected void translateSubBranchesBy(BranchView branchView, DisplayIndependentDimension dimension)
+ {
+ for (BranchView subBranch : branchView.getSubBranchViews())
+ {
+ translateBy(subBranch, dimension);
+ branchView.setBounds(GeometryUtils.union(branchView.getBounds(), subBranch.getBounds()));
+ }
+ }
+
+ /**
+ * Translates all the sibling nodes in this branch view. Applies the given horizontal and vertical offset.
+ *
+ * @param branchView
+ * the branch view to translate the nodes of
+ * @param dimension
+ * the dimension to translate by
+ */
+ protected void translateBranchNodesBy(BranchView branchView, DisplayIndependentDimension dimension)
+ {
+ for (AbstractBranchPointNode node : branchView.getNodes())
+ {
+ BranchPointNodeUtils.translateInternalLocation(node, dimension.width, dimension.height);
+ }
+ }
+
+ public void scale(BranchView branchView, DisplayIndependentRectangle targetBounds)
+ {
+ DisplayIndependentRectangle branchViewBounds = branchView.getBounds();
+ DisplayIndependentDimension scaling = new DisplayIndependentDimension(targetBounds.width / branchViewBounds.width,
+ targetBounds.height / branchViewBounds.height);
+ scale(branchView, scaling);
+ translateBy(branchView, GeometryUtils.getTranslation(branchView.getBounds(), targetBounds.x, targetBounds.y));
+ }
+
+ public void scale(BranchView branchView, DisplayIndependentDimension scaling)
+ {
+ scaleSameBranchNodes(branchView, scaling);
+ scaleSubBranches(branchView, scaling);
+ }
+
+ /**
+ * Scales the positions of the nodes on the same branch view and sets the new bounds of the whole branch view.
+ *
+ * @param branchView
+ * the branch view to scale the nodes of
+ * @param scaling
+ * the scaling factor (x- and y-axis)
+ */
+ protected void scaleSameBranchNodes(BranchView branchView, DisplayIndependentDimension scaling)
+ {
+ double centerX = BranchPointNodeUtils.getCenterX(branchView.getBaselineNode());
+ branchView.resetBounds();
+ double scaledCenterX = centerX * scaling.width;
+ for (AbstractBranchPointNode node : branchView.getNodes())
+ {
+ InternalNode internalNode = BranchPointNodeUtils.getInternalNode(node);
+ double newX = scaledCenterX - internalNode.getInternalWidth() / 2;
+ double newY = internalNode.getInternalY() * scaling.height;
+ internalNode.setInternalLocation(newX, newY);
+ if (!branchView.areBoundsSet())
+ {
+ initBranchBounds(branchView, node);
+ }
+ else
+ {
+ setBranchBounds(branchView, node);
+ }
+ }
+ }
+
+ /**
+ * Scales the sub branches of the given branch view.
+ *
+ * @param branchView
+ * the branch view to scale the sub branches of
+ * @param scaling
+ * the scaling factor (x- and y-axis)
+ */
+ protected void scaleSubBranches(BranchView branchView, DisplayIndependentDimension scaling)
+ {
+ for (BranchView subBranch : branchView.getSubBranchViews())
+ {
+ scale(subBranch, scaling);
+ branchView.setBounds(GeometryUtils.union(branchView.getBounds(), subBranch.getBounds()));
+ }
+ }
+
+ /**
+ * Returns the horizontal padding between branch views.
+ *
+ * @return the branch padding
+ */
+ protected double getBranchPadding()
+ {
+ return 30;
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractVerticalLayoutStrategy.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractVerticalLayoutStrategy.java
new file mode 100644
index 0000000..bc0141e
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/AbstractVerticalLayoutStrategy.java
@@ -0,0 +1,175 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNodeUtils;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentDimension;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+
+/**
+ * A base strategy that layouts a branch view vertically. It centers its (sibling) nodes below each other while using
+ * their time stamp to set the y coordinate.
+ * <p>
+ *
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractVerticalLayoutStrategy extends AbstractBranchViewLayoutStrategy
+{
+ /**
+ * The strategy that's currently applied to layout sub branches @see
+ * {@link #getSubBranchTranslationStrategy(AbstractVerticalLayoutStrategy)}
+ */
+ protected SubBranchViewTranslation currentTranslationStrategy = null;
+
+ protected static final SubBranchViewTranslation RIGHT = new SubBranchViewTranslation()
+ {
+ public DisplayIndependentDimension getTranslationToBranchPoint(BranchView subBranchView,
+ BranchPointNode branchPointNode, double branchPadding)
+ {
+ InternalNode branchPointInternalNode = BranchPointNodeUtils.getInternalNode(branchPointNode);
+ return new DisplayIndependentDimension( //
+ GeometryUtils.getTranslation(subBranchView.getBounds().x, branchPointInternalNode.getInternalX()) //
+ + branchPointInternalNode.getInternalWidth() //
+ + branchPadding, 0);
+ }
+
+ public DisplayIndependentDimension getTranslationToLaterBranch(BranchView subBranchView, BranchView laterBranch,
+ double branchPadding)
+ {
+ DisplayIndependentRectangle laterBranchBounds = laterBranch.getBounds();
+ return new DisplayIndependentDimension(//
+ GeometryUtils.getTranslation(subBranchView.getBounds().x, laterBranchBounds.x) //
+ + laterBranchBounds.width //
+ + branchPadding, 0);
+ }
+ };
+
+ protected static final SubBranchViewTranslation LEFT = new SubBranchViewTranslation()
+ {
+ public DisplayIndependentDimension getTranslationToBranchPoint(BranchView subBranch,
+ BranchPointNode branchPointNode, double branchPadding)
+ {
+ InternalNode branchPointInternalNode = BranchPointNodeUtils.getInternalNode(branchPointNode);
+ DisplayIndependentRectangle subBranchBounds = subBranch.getBounds();
+ return new DisplayIndependentDimension( //
+ GeometryUtils.getTranslation(subBranchBounds.x, branchPointInternalNode.getInternalX()) //
+ - subBranchBounds.width //
+ - branchPadding, 0);
+ }
+
+ public DisplayIndependentDimension getTranslationToLaterBranch(BranchView subBranchView,
+ BranchView laterBranchView, double branchPadding)
+ {
+ return new DisplayIndependentDimension( //
+ GeometryUtils.getTranslation(subBranchView.getBounds().x, laterBranchView.getBounds().x) //
+ - branchPadding, 0);
+ }
+ };
+
+ protected static interface SubBranchViewTranslation
+ {
+ /**
+ * Returns the offset that's needed to translate the given branch view so that it does not overlap with the branch
+ * point.
+ *
+ * @param branchPointNode
+ * the branch point node
+ * @param subBranchView
+ * the sub branch view to translate
+ * @param branchPadding
+ * the padding between branches
+ * @return the translation that avoids the overlapping
+ */
+ public DisplayIndependentDimension getTranslationToBranchPoint(BranchView subBranchView,
+ BranchPointNode branchPointNode, double branchPadding);
+
+ /**
+ * Returns the offset that's needed to translate the given branch view so that it does not overlap with the given
+ * later branch view.
+ *
+ * @param subBranchView
+ * the sub branch view to translate
+ * @param latterBranchView
+ * the later branch view that the sub branch overlaps
+ * @param branchPadding
+ * the padding between branches
+ * @return the translation that avoids the overlapping
+ */
+ public DisplayIndependentDimension getTranslationToLaterBranch(BranchView subBranchView,
+ BranchView latterBranchView, double branchPadding);
+ }
+
+ /**
+ * Sets the location of the given sub branch in the current branch. Branches are created and located with the center
+ * of the baseline node at x == 0, y == 0. The bounds of the sub branch (and its sub sub-branches) reach from negative
+ * x-coordinates up to positive x-coordinates. The purpose of this method is to translate the whole sub branch to a
+ * location where it does not overlap the branch point. This method either applies a translation off the branch point
+ * or a translation off the later branch, it would overlap.
+ *
+ * @param subBranchView
+ * the sub branch view to layout in the current branch
+ * @param branchPointNode
+ * the branch point node the sub branch is attached to
+ * @param branchView
+ * the branch view the sub branch shall be attached to
+ */
+ @Override
+ public void setSubBranchViewLocation(BranchView branchView, BranchView subBranchView, BranchPointNode branchPointNode)
+ {
+ currentTranslationStrategy = getSubBranchTranslationStrategy(branchView, currentTranslationStrategy);
+ BranchView laterBranch = getLaterOverlapingBranch(branchView, subBranchView);
+ DisplayIndependentDimension translation = new DisplayIndependentDimension(0, 0);
+ if (laterBranch != null)
+ {
+ // overlaps with later sub-branch -> translate from later branch (to the right or to
+ // the left)
+ translation = currentTranslationStrategy.getTranslationToLaterBranch(subBranchView, laterBranch,
+ getBranchPadding());
+ }
+ else
+ {
+ // translate branch away from branchPointNode (to the right or to the left)
+ translation = currentTranslationStrategy.getTranslationToBranchPoint(subBranchView, branchPointNode,
+ getBranchPadding());
+ }
+ translateBy(subBranchView, translation);
+ }
+
+ /**
+ * Returns the strategy that translates the next branch view. It's called for each sub branch view.
+ *
+ * @param branchView
+ * the branch view to layout
+ * @param currentTranslationStrategy
+ * the current translation strategy
+ * @return the current sub branch strategy
+ * @see #LEFT
+ * @see #RIGHT
+ */
+ protected abstract SubBranchViewTranslation getSubBranchTranslationStrategy(BranchView branchView,
+ SubBranchViewTranslation currentTranslationStrategy);
+
+ /**
+ * Gets the later sub branch view, that possibly overlaps with the given sub branch view. Returns <tt>null</tt> if
+ * there's none that overlaps.
+ *
+ * @param subBranchView
+ * the sub branch view that shall be checked for collisions
+ * @param branchView
+ * the branch view the sub branch view is attached to
+ * @return the colliding later branch or <tt>null</tt> if there's none
+ */
+ public abstract BranchView getLaterOverlapingBranch(BranchView branchView, BranchView subBranchView);
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchContainer.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchContainer.java
new file mode 100644
index 0000000..9adeb9f
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchContainer.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The Class BranchTreeContainer.
+ */
+public class BranchContainer
+{
+
+ /** The bounds of this container. */
+ private DisplayIndependentRectangle bounds = new DisplayIndependentRectangle();
+
+ /** The node list. */
+ private List<InternalNode> nodeList = new ArrayList<InternalNode>();
+
+ /**
+ * Instantiates a new branch tree container with a new instance of a {@link DisplayIndependentRectangle}.
+ */
+ public BranchContainer()
+ {
+ this(new DisplayIndependentRectangle());
+ }
+
+ /**
+ * Instantiates a new branch tree container with the given instance of a {@link DisplayIndependentRectangle}.
+ *
+ * @param bounds
+ * the bounds
+ */
+ public BranchContainer(DisplayIndependentRectangle bounds)
+ {
+ this.bounds.x = bounds.x;
+ this.bounds.y = bounds.y;
+ this.bounds.width = bounds.width;
+ this.bounds.height = bounds.height;
+ }
+
+ /**
+ * Unifies the bounds of this container with the bounds of the given node.
+ *
+ * @param node
+ * the node
+ */
+ public void union(InternalNode node)
+ {
+ nodeList.add(node);
+ bounds = GeometryUtils.union(bounds, node.getInternalX(), node.getInternalY(), node.getInternalWidth(), node
+ .getInternalHeight());
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchTreeLayoutAlgorithm.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchTreeLayoutAlgorithm.java
new file mode 100644
index 0000000..3f54470
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchTreeLayoutAlgorithm.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+import org.eclipse.emf.cdo.ui.internal.branch.item.AbstractBranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNodeUtils;
+import org.eclipse.emf.cdo.ui.internal.branch.item.RootNode;
+
+import org.eclipse.zest.layouts.LayoutStyles;
+import org.eclipse.zest.layouts.algorithms.AbstractLayoutAlgorithm;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentDimension;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+import org.eclipse.zest.layouts.dataStructures.InternalNode;
+import org.eclipse.zest.layouts.dataStructures.InternalRelationship;
+
+/**
+ * A layout algorithm that builds a tree of branch nodes. Nodes on the same branch are centered horizontally below each
+ * other. Nodes on a new branch are shifted to the left/right - they sprout to the left/right. The description above
+ * applies to a vertical layout of the branch tree. A horizontal strategy is not implemented yet.
+ *
+ * @author Andre Dietisheim
+ */
+public class BranchTreeLayoutAlgorithm extends AbstractLayoutAlgorithm
+{
+ private static final int LAYOUT_STEPS = 2;
+
+ private RootNode rootNode;
+
+ private DisplayIndependentRectangle layoutBounds = null;
+
+ private DisplayIndependentDimension borders = new DisplayIndependentDimension(60, 60);
+
+ private BranchViewLayoutStrategy branchViewLayoutStrategy;
+
+ /**
+ * A layout algorithm that displays trees of cdo branches.
+ *
+ * @see CDOBranch
+ */
+ public BranchTreeLayoutAlgorithm(int styles, BranchViewLayoutStrategy branchViewLayoutStrategy)
+ {
+ super(styles);
+ this.branchViewLayoutStrategy = branchViewLayoutStrategy;
+ }
+
+ /**
+ * Tree layout algorithm Constructor with NO Style
+ */
+ public BranchTreeLayoutAlgorithm(BranchViewLayoutStrategy branchViewLayoutStrategy)
+ {
+ this(LayoutStyles.NONE, branchViewLayoutStrategy);
+ }
+
+ @Override
+ public void setLayoutArea(double x, double y, double width, double height)
+ {
+ }
+
+ @Override
+ protected int getCurrentLayoutStep()
+ {
+ return 0;
+ }
+
+ @Override
+ protected int getTotalNumberOfLayoutSteps()
+ {
+ return LAYOUT_STEPS;
+ }
+
+ @Override
+ protected void preLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
+ double x, double y, double width, double height)
+ {
+ if (entitiesToLayout.length > 0)
+ {
+ initRootNode(entitiesToLayout);
+ }
+ layoutBounds = new DisplayIndependentRectangle(x, y, width, height);
+ }
+
+ /**
+ * Searches the given entities and stores the root node
+ *
+ * @param entitiesToLayout
+ * the entities to layout
+ * @see RootNode
+ * @see AbstractBranchPointNode
+ */
+ private void initRootNode(InternalNode[] entitiesToLayout)
+ {
+ for (InternalNode internalNode : entitiesToLayout)
+ {
+ AbstractBranchPointNode node = BranchPointNodeUtils.getBranchPointNode(internalNode);
+ if (node != null)
+ {
+ if (node instanceof RootNode)
+ {
+ rootNode = (RootNode)node.getLater(rootNode);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void applyLayoutInternal(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider,
+ double boundsX, double boundsY, double boundsWidth, double boundsHeight)
+ {
+
+ if (entitiesToLayout.length > 0)
+ {
+ BranchView branchView = buildBranch(rootNode, branchViewLayoutStrategy);
+ fireProgressEvent(1, LAYOUT_STEPS);
+ // defaultFitWithinBounds(entitiesToLayout, layoutBounds);
+ fitWithinBounds(branchView);
+ }
+ }
+
+ private void fitWithinBounds(BranchView branchView)
+ {
+ DisplayIndependentRectangle boundsWithBorder = GeometryUtils.substractBorders(borders, layoutBounds);
+ branchView.getLayoutStrategy().scale(branchView, boundsWithBorder);
+ }
+
+ private BranchView buildBranch(AbstractBranchPointNode branchRootNode,
+ BranchViewLayoutStrategy branchViewLayoutStrategy)
+ {
+ return new BranchView(branchRootNode, branchViewLayoutStrategy);
+ // return new BranchView(branchRootNode, new RightHandSubBranches());
+ }
+
+ @Override
+ protected void postLayoutAlgorithm(InternalNode[] entitiesToLayout, InternalRelationship[] relationshipsToConsider)
+ {
+ updateLayoutLocations(entitiesToLayout);
+ fireProgressEvent(LAYOUT_STEPS, LAYOUT_STEPS);
+ }
+
+ @Override
+ protected boolean isValidConfiguration(boolean asynchronous, boolean continueous)
+ {
+ if (asynchronous && continueous)
+ {
+ return false;
+ }
+ else if (asynchronous && !continueous)
+ {
+ return true;
+ }
+ else if (!asynchronous && continueous)
+ {
+ return false;
+ }
+ else if (!asynchronous && !continueous)
+ {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchView.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchView.java
new file mode 100644
index 0000000..f577bf2
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchView.java
@@ -0,0 +1,212 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.ui.internal.branch.item.AbstractBranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNode;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+
+import java.util.Collection;
+
+/**
+ * A branch view is a logical structure that holds all nodes and sub branches. Its main purpose is to climb through the
+ * branch tree and call the layout strategy on all nodes in an appropriate manner.
+ * <p>
+ * The strategy applied is to first lay out all (sibling) nodes in the order of their time stamp. Sub-branches are
+ * skipped. In a second step all branches are positioned within the branch. The strategy starts with the latest one (in
+ * terms of time stamp).
+ *
+ * @author Andre Dietisheim
+ * @see HorizontallyAlternatingSubBranches
+ */
+public class BranchView
+{
+ private CDOBranch branch;
+
+ private AbstractBranchPointNode baselineNode;
+
+ protected Deque<AbstractBranchPointNode> nodes = new Deque<AbstractBranchPointNode>();
+
+ private Deque<BranchView> subBranchViews = new Deque<BranchView>();
+
+ private DisplayIndependentRectangle bounds;
+
+ private BranchViewLayoutStrategy layoutStrategy;
+
+ public BranchView(AbstractBranchPointNode baselineNode, BranchViewLayoutStrategy layoutStrategy)
+ {
+ branch = baselineNode.getBranch();
+ this.baselineNode = baselineNode;
+ this.layoutStrategy = layoutStrategy;
+ nodes.addLast(baselineNode);
+ layoutStrategy.layoutBaselineNode(this, baselineNode);
+ addNode(baselineNode.getNextOnSameBranch());
+
+ if (baselineNode instanceof BranchPointNode)
+ {
+ // add a branch to this node
+ BranchPointNode branchpointNode = (BranchPointNode)baselineNode;
+ addBranchView(branchpointNode.getNextOnNewBranch(), branchpointNode);
+ }
+ }
+
+ public CDOBranch getBranch()
+ {
+ return branch;
+ }
+
+ public AbstractBranchPointNode getBaselineNode()
+ {
+ return baselineNode;
+ }
+
+ public Collection<AbstractBranchPointNode> getNodes()
+ {
+ return nodes;
+ }
+
+ public BranchViewLayoutStrategy getLayoutStrategy()
+ {
+ return layoutStrategy;
+ }
+
+ /**
+ * Adds the given node to this branch. Climbs recursively up to all (sibling) nodes on the same branch. When it gets
+ * back from recursion it builds and attaches branches to those nodes.
+ * <p>
+ * The strategy is to add all sibling nodes in the order of their time stamp and to add the branches in the reverse
+ * (in terms of time stamp) order
+ *
+ * @see #addBranchView(AbstractBranchPointNode, BranchPointNode)
+ */
+ private void addNode(AbstractBranchPointNode node)
+ {
+ if (node != null)
+ {
+ AbstractBranchPointNode previousNode = nodes.peekLast();
+ nodes.addLast(node);
+ layoutStrategy.layoutNode(this, node, previousNode);
+ // recursively navigate to sibling
+ addNode(node.getNextOnSameBranch());
+
+ if (node instanceof BranchPointNode)
+ {
+ // add a branch to this node
+ BranchPointNode branchPointNode = (BranchPointNode)node;
+ addBranchView(branchPointNode.getNextOnNewBranch(), branchPointNode);
+ }
+ }
+ }
+
+ /**
+ * Adds a sub-branch to the given branch point node with the given baseline node.
+ */
+ private void addBranchView(AbstractBranchPointNode baselineNode, BranchPointNode branchPointNode)
+ {
+ if (baselineNode != null)
+ {
+ BranchView subBranchView = new BranchView(baselineNode, getLayoutStrategy());
+ layoutStrategy.layoutSubBranchView(this, subBranchView, branchPointNode);
+ subBranchViews.add(subBranchView);
+ }
+ }
+
+ /**
+ * Returns the bounds of this branch view. The bounds returned contain all sub-branches (and their nodes)
+ *
+ * @return the bounds
+ */
+ public DisplayIndependentRectangle getBounds()
+ {
+ return bounds;
+ }
+
+ /**
+ * Sets the bounds of this branch view. The bounds must contain this branch and all its sub branch views (and all
+ * their nodes)
+ *
+ * @param bounds
+ * the new bounds
+ */
+ public void setBounds(DisplayIndependentRectangle bounds)
+ {
+ this.bounds = bounds;
+ }
+
+ /**
+ * Returns not the last, but the one before the last sub branch view. If none is present, <tt>null<tt> is returned.
+ * <p>
+ * The sub branch views are collected bottom up (from the latest one to the earliest one in terms of time stamp).
+ * This method return the sub branch view that was layouted in the second but last step. Layout strategies need
+ * to check overlapping. Layout strategies that put sub branch views to one side of the main branch only (left/right
+ * or top/bottom) a sub branch overlaps the sub branch that's next in terms of time stamp. Distributing layout strategies
+ * need to check the one that was layouted 2 steps ago.
+ *
+ * @return the second to last sub branch view or <tt>null<tt>
+ * @see #getSubBranchViews()
+ * @see #getLastSubBranchView()
+ * @see AbstractVerticalLayoutStrategy#setSubBranchViewLocation
+ * @see HorizontallyAlternatingSubBranches#getLaterOverlapingBranch(BranchView, BranchView)
+ * @see RightHandSubBranches#getLaterOverlapingBranch(BranchView, BranchView)
+ */
+ public BranchView getSecondToLastSubBranchView()
+ {
+ if (subBranchViews.isEmpty() || subBranchViews.size() < 2)
+ {
+ return null;
+ }
+
+ return subBranchViews.get(subBranchViews.size() - 1);
+ }
+
+ /**
+ * Returns not the last sub branch view. If none is present, <tt>null<tt> is returned.
+ * <p>
+ * The sub branch views are collected bottom up (from the latest one to the earliest one in terms of time stamp).
+ * This method return the sub branch view that was layouted in the second but last step. Layout strategies need
+ * to check overlapping. Layout strategies that put sub branch views to one side of the main branch only (left/right
+ * or top/bottom) a sub branch overlaps the sub branch that's next in terms of time stamp. Distributing layout strategies
+ * need to check the one that was layouted 2 steps ago.
+ *
+ * @return the second to last sub branch view or <tt>null<tt>
+ * @see #getSubBranchViews()
+ * @see #getLastSubBranchView()
+ * @see AbstractVerticalLayoutStrategy#LEFT
+ * @see AbstractVerticalLayoutStrategy#RIGHT
+ */
+ public BranchView getLastSubBranchView()
+ {
+ return subBranchViews.peekLast();
+ }
+
+ /**
+ * Returns all sub branch views present in this branch view. The sub branch views are collected bottom up (from the
+ * latest one to the earliest one in terms of time stamp).
+ *
+ * @return all sub branch views in this branch view
+ */
+ public Deque<BranchView> getSubBranchViews()
+ {
+ return subBranchViews;
+ }
+
+ public void resetBounds()
+ {
+ bounds = null;
+ }
+
+ public boolean areBoundsSet()
+ {
+ return bounds != null;
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchViewLayoutStrategy.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchViewLayoutStrategy.java
new file mode 100644
index 0000000..9a3cee6
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/BranchViewLayoutStrategy.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.item.AbstractBranchPointNode;
+import org.eclipse.emf.cdo.ui.internal.branch.item.BranchPointNode;
+
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentDimension;
+import org.eclipse.zest.layouts.dataStructures.DisplayIndependentRectangle;
+
+/**
+ * @author Eike Stepper
+ */
+public interface BranchViewLayoutStrategy
+{
+
+ public abstract void layoutBaselineNode(BranchView branchView, AbstractBranchPointNode node);
+
+ /**
+ * Layout the given node as sibling node to the baseline node (and its siblings).
+ *
+ * @param branchView
+ * the branch view to layout the node to
+ * @param node
+ * the node to layout
+ */
+ public abstract void layoutNode(BranchView branchView, AbstractBranchPointNode node,
+ AbstractBranchPointNode previousNode);
+
+ /**
+ * Adds the given sub branch to this branch. This strategy distributes the sub-branches equally to the left and to the
+ * right of this branch. It starts by putting the last sub branch to the right of the current branch and puts the
+ * previous one to the left etc. .
+ *
+ * @param branchPointNode
+ * the node on the current branch view that the sub-branch view shall be attached to
+ * @param subBranchView
+ * the sub branch view to add
+ * @param branchView
+ * the branch view
+ */
+ public abstract void layoutSubBranchView(BranchView branchView, BranchView subBranchView,
+ BranchPointNode branchPointNode);
+
+ /**
+ * Translates the given branch view by the given dimension.
+ *
+ * @param branchView
+ * the branch view to translate
+ * @param offsets
+ * the offset on the x- and the y-axis
+ */
+ public void translateBy(BranchView branchView, DisplayIndependentDimension offsets);
+
+ /**
+ * Scales the given branch view by the given factor on the x- and on the y-axis and translates it to the given x and y
+ * coordinates.
+ *
+ * @param branchView
+ * the branch view
+ * @param targetBounds
+ * the target bounds to fit the scaled branch view to
+ */
+ public void scale(BranchView branchView, DisplayIndependentRectangle targetBounds);
+
+ /**
+ * Scales the given branch view by the given factor on the x- and on the y-axis.
+ *
+ * @param branchView
+ * the branch view to scale
+ * @param scaling
+ * the scaling factor (x- and y-axis)
+ */
+ public void scale(BranchView branchView, DisplayIndependentDimension scaling);
+
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/Deque.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/Deque.java
new file mode 100644
index 0000000..5dc9bbb
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/Deque.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Eike Stepper - initial API and implementation
+ * Andre Dietisheim - maintenance
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import java.util.LinkedList;
+
+/**
+ * A double ended list, that returns <tt>null</tt> if no element is present. Mimics the jdk 1.6 Deque.
+ *
+ * @author Eike Stepper
+ */
+public final class Deque<E> extends LinkedList<E>
+{
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Returns the first element if present, <tt>null</tt> otherwise.
+ *
+ * @return the first element in this list.
+ */
+ public E peekFirst()
+ {
+ if (isEmpty())
+ {
+ return null;
+ }
+
+ return getFirst();
+ }
+
+ /**
+ * Returns the last element if present, <tt>null</tt> otherwise.
+ *
+ * @return the e
+ */
+ public E peekLast()
+ {
+ if (isEmpty())
+ {
+ return null;
+ }
+
+ return getLast();
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/HorizontallyAlternatingSubBranches.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/HorizontallyAlternatingSubBranches.java
new file mode 100644
index 0000000..af3f15b
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/HorizontallyAlternatingSubBranches.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+
+/**
+ * A strategy that layouts a branch vertically and displaces sub branch view to the right or to the left. Left and right
+ * sub branches alternate equally, they're distributed equally.
+ *
+ * @author Andre Dietisheim
+ */
+public class HorizontallyAlternatingSubBranches extends AbstractVerticalLayoutStrategy
+{
+ /**
+ * Returns the strategy that layouts the next branch view. Starts with right, second call returns left, etc.
+ *
+ * @param branchView
+ * the branch view
+ * @param currentTranslationStrategy
+ * the current translation strategy
+ * @return the current sub branch strategy
+ * @see #LEFT
+ * @see #RIGHT
+ */
+ @Override
+ protected SubBranchViewTranslation getSubBranchTranslationStrategy(BranchView branchView,
+ SubBranchViewTranslation currentTranslationStrategy)
+ {
+ boolean isPairSubBranch = branchView.getSubBranchViews().size() % 2 == 0;
+ if (isPairSubBranch)
+ {
+ return RIGHT;
+ }
+
+ return LEFT;
+ }
+
+ @Override
+ public BranchView getLaterOverlapingBranch(BranchView branchView, BranchView subBranchView)
+ {
+ BranchView overlapingBranch = branchView.getSecondToLastSubBranchView();
+ if (overlapingBranch != null
+ && GeometryUtils.bottomEndsBefore(subBranchView.getBounds(), overlapingBranch.getBounds()))
+ {
+ return null;
+ }
+ return overlapingBranch;
+ }
+}
diff --git a/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/RightHandSubBranches.java b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/RightHandSubBranches.java
new file mode 100644
index 0000000..4c6f5ed
--- /dev/null
+++ b/org.eclipse.emf.cdo.ui.branch/src/org/eclipse/emf/cdo/ui/internal/branch/layout/RightHandSubBranches.java
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) 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:
+ * Andre Dietisheim - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui.internal.branch.layout;
+
+import org.eclipse.emf.cdo.ui.internal.branch.geometry.GeometryUtils;
+
+/**
+ * A strategy that layouts a branch. A branch centers its (sibling) nodes below each other while using their time stamp
+ * to set the y coordinate. Sub-Branches are displaced to the right or to the left (left and right sub branches are
+ * distributed equally).
+ *
+ * @author Andre Dietisheim
+ */
+public class RightHandSubBranches extends AbstractVerticalLayoutStrategy
+{
+ @Override
+ protected SubBranchViewTranslation getSubBranchTranslationStrategy(BranchView branchView,
+ SubBranchViewTranslation currentTranslationStrategy)
+ {
+ return RIGHT;
+ }
+
+ @Override
+ public BranchView getLaterOverlapingBranch(BranchView branchView, BranchView subBranchView)
+ {
+ BranchView overlapingBranch = branchView.getLastSubBranchView();
+ if (overlapingBranch != null
+ && GeometryUtils.bottomEndsBefore(subBranchView.getBounds(), overlapingBranch.getBounds()))
+ {
+ return null;
+ }
+ return overlapingBranch;
+ }
+}