Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Dirix2015-07-29 14:17:32 +0000
committerLaurent Goubet2016-02-15 15:15:28 +0000
commit8cb4a034963f904194c2c668dd75d8631c29e871 (patch)
tree9e8fa63064c38569dd62a401deae68a878b63e45
parent49497ead3dc1e340aa42ff72aae9001ae07e2d5e (diff)
downloadorg.eclipse.emf.compare-8cb4a034963f904194c2c668dd75d8631c29e871.tar.gz
org.eclipse.emf.compare-8cb4a034963f904194c2c668dd75d8631c29e871.tar.xz
org.eclipse.emf.compare-8cb4a034963f904194c2c668dd75d8631c29e871.zip
[473985] Enable comparison dialog in pure e4
Removes all runtime dependencies to the workbench which allows the comparison dialog to run in pure e4 applications when platform/compare is modified in the same way. Adds a new org.eclipse.emf.compare.ide.ui.e4 bundle which contains modified versions of org.eclipse.ui.progress classes. This bundle is only required for pure e4 applications. Bug: 473985 Signed-off-by: Stefan Dirix <sdirix@eclipsesource.com> Change-Id: I8610a1d27e51dd954fd88edcdfed08fedd9b2d98
-rw-r--r--org.eclipse.emf.compare-parent/pom.xml1
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.checkstyle10
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.classpath7
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.project39
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/.api_filters27
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.core.prefs132
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.plugin.eclipse.prefs3
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.core.prefs374
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.ui.prefs60
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.pde.api.tools.prefs97
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/META-INF/MANIFEST.MF14
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/OSGI-INF/contentManagerProvider.xml7
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/build.properties6
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/plugin.properties12
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/pom.xml15
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4DeferredTreeContentManager.java137
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4PendingUpdateAdapter.java30
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/EMFCompareDeferredTreeContentManagerProviderImpl.java33
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java54
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java30
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java28
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java16
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/SaveComparisonModelAction.java18
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManager.java40
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerImpl.java55
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerProvider.java29
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerUtil.java55
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/CompareHandlerService.java10
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/ui/SynchronizerDialog.java7
32 files changed, 1298 insertions, 53 deletions
diff --git a/org.eclipse.emf.compare-parent/pom.xml b/org.eclipse.emf.compare-parent/pom.xml
index f341631fd..6d6be68e3 100644
--- a/org.eclipse.emf.compare-parent/pom.xml
+++ b/org.eclipse.emf.compare-parent/pom.xml
@@ -84,6 +84,7 @@
<module>../plugins/org.eclipse.emf.compare.edit</module>
<module>../plugins/org.eclipse.emf.compare.ide</module>
<module>../plugins/org.eclipse.emf.compare.ide.ui</module>
+ <module>../plugins/org.eclipse.emf.compare.ide.ui.e4</module>
<module>../plugins/org.eclipse.emf.compare.ide.ui.tests</module>
<module>../plugins/org.eclipse.emf.compare.ide.tests</module>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.checkstyle b/plugins/org.eclipse.emf.compare.ide.ui.e4/.checkstyle
new file mode 100644
index 000000000..89c72ff46
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.checkstyle
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <local-check-config name="EMF Compare" location="/org.eclipse.emf.compare-parent/codeStyle/EMFCompareCheckstyle5Configuration.xml" type="project" description="">
+ <additional-data name="protect-config-file" value="false"/>
+ </local-check-config>
+ <fileset name="all" enabled="true" check-config-name="EMF Compare" local="true">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.classpath b/plugins/org.eclipse.emf.compare.ide.ui.e4/.classpath
new file mode 100644
index 000000000..64c5e31b7
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.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/plugins/org.eclipse.emf.compare.ide.ui.e4/.project b/plugins/org.eclipse.emf.compare.ide.ui.e4/.project
new file mode 100644
index 000000000..1af0af7a6
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.project
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.compare.ide.ui.e4</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.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/.api_filters b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/.api_filters
new file mode 100644
index 000000000..26ae2a52e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/.api_filters
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.compare.ide.ui" version="2">
+ <resource path="src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/table/TableContentMergeViewer.java" type="org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.table.TableContentMergeViewer">
+ <filter id="571519004">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.table.TableContentMergeViewer.createMergeViewer(Composite, IMergeViewerMergeViewerSide)"/>
+ <message_argument value="ArrayContentProvider"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/compare/ide/ui/internal/logical/EMFResourceMappingMerger.java" type="org.eclipse.emf.compare.ide.ui.internal.logical.EMFResourceMappingMerger">
+ <filter comment="The EMFResourceMappingMerger needs none of the behavior from the abstract ResourceMappingMerger." id="574619656">
+ <message_arguments>
+ <message_argument value="IResourceMappingMerger"/>
+ <message_argument value="EMFResourceMappingMerger"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/WrappableTreeViewer.java" type="org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.WrappableTreeViewer">
+ <filter id="571473929">
+ <message_arguments>
+ <message_argument value="TreeViewer"/>
+ <message_argument value="WrappableTreeViewer"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.core.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.core.prefs
new file mode 100644
index 000000000..1fab65578
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.core.prefs
@@ -0,0 +1,132 @@
+#FindBugs User Preferences
+#Tue Mar 12 08:11:54 CET 2013
+cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
+detectorAtomicityProblem=AtomicityProblem|true
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorBooleanReturnNull=BooleanReturnNull|true
+detectorCallToUnsupportedMethod=CallToUnsupportedMethod|false
+detectorCheckExpectedWarnings=CheckExpectedWarnings|false
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorCrossSiteScripting=CrossSiteScripting|true
+detectorDefaultEncodingDetector=DefaultEncodingDetector|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDontIgnoreResultOfPutIfAbsent=DontIgnoreResultOfPutIfAbsent|true
+detectorDontUseEnum=DontUseEnum|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
+detectorExplicitSerialization=ExplicitSerialization|true
+detectorFinalizerNullsFields=FinalizerNullsFields|true
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorFormatStringChecker=FormatStringChecker|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInconsistentAnnotations=InconsistentAnnotations|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|true
+detectorInitializeNonnullFieldsInConstructor=InitializeNonnullFieldsInConstructor|true
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorIntCast2LongAsInstant=IntCast2LongAsInstant|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorLostLoggerDueToWeakReference=LostLoggerDueToWeakReference|true
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
+detectorNumberConstructor=NumberConstructor|true
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass=ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorRepeatedConditionals=RepeatedConditionals|true
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStaticCalendarDetector=StaticCalendarDetector|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
+detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
+detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+effort=default
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|15
+filter_settings_neg=NOISE,I18N,EXPERIMENTAL|
+run_at_full_build=true
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.plugin.eclipse.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.plugin.eclipse.prefs
new file mode 100644
index 000000000..4235f7661
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/edu.umd.cs.findbugs.plugin.eclipse.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+edu.umd.cs.findbugs.plugin.eclipse.findbugsMarkerScariest=Error
+edu.umd.cs.findbugs.plugin.eclipse.findbugsMarkerScary=Error
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..99f26c020
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.runtime.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 000000000..5a0ad22d2
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..89b506d56
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,374 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
+org.eclipse.jdt.core.compiler.problem.deadCode=error
+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=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.includeFieldsInNullAnalysis=disabled
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=error
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=error
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=error
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
+org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=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=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=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.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=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=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=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=110
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=8
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_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=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=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=110
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=false
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..4e1442ee9
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,60 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMF Compare
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=fr;com;java;javax;org;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+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=false
+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=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+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=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.pde.api.tools.prefs b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 000000000..01461e0e0
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,97 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Warning
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Warning
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Warning
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Warning
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Warning
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Warning
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Warning
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Warning
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Warning
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Warning
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Warning
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Warning
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Warning
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Warning
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Warning
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Warning
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Warning
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Warning
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Warning
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Warning
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Warning
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Warning
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Warning
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Warning
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Warning
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Warning
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Warning
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Warning
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Warning
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Warning
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Warning
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Warning
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Warning
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Warning
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Warning
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Warning
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Warning
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Warning
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Warning
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Warning
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Warning
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Warning
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Warning
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Warning
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Warning
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Warning
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Warning
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Warning
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Warning
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Warning
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Warning
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Warning
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Warning
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=false
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Warning
+malformed_since_tag=Warning
+missing_since_tag=Warning
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.ide.ui.e4/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..8db5517e7
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.compare.ide.ui.e4
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: org.eclipse.emf.compare.ide.ui;bundle-version="4.1.0",
+ org.eclipse.ui,
+ org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Service-Component: OSGI-INF/contentManagerProvider.xml
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.emf.compare.ide.ui.e4;x-internal:=true
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/OSGI-INF/contentManagerProvider.xml b/plugins/org.eclipse.emf.compare.ide.ui.e4/OSGI-INF/contentManagerProvider.xml
new file mode 100644
index 000000000..a6d00d352
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/OSGI-INF/contentManagerProvider.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.emf.compare.ide.ui.e4.contentmanagerprovider">
+ <implementation class="org.eclipse.emf.compare.ide.ui.e4.EMFCompareDeferredTreeContentManagerProviderImpl"/>
+ <service>
+ <provide interface="org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManagerProvider"/>
+ </service>
+</scr:component>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/build.properties b/plugins/org.eclipse.emf.compare.ide.ui.e4/build.properties
new file mode 100644
index 000000000..42eea322e
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/build.properties
@@ -0,0 +1,6 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ plugin.properties,\
+ .,\
+ OSGI-INF/
+source.. = src/
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/plugin.properties b/plugins/org.eclipse.emf.compare.ide.ui.e4/plugin.properties
new file mode 100644
index 000000000..549590efa
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/plugin.properties
@@ -0,0 +1,12 @@
+################################################################################
+# Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+# Stefan Dirix - initial API and implementation
+################################################################################
+pluginName = EMF Compare IDE UI E4
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/pom.xml b/plugins/org.eclipse.emf.compare.ide.ui.e4/pom.xml
new file mode 100644
index 000000000..377985507
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.compare</groupId>
+ <artifactId>emf.compare-bundle-parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.compare-parent/bundle-parent</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.compare</groupId>
+ <artifactId>org.eclipse.emf.compare.ide.ui.e4</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4DeferredTreeContentManager.java b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4DeferredTreeContentManager.java
new file mode 100644
index 000000000..da88fd716
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4DeferredTreeContentManager.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.e4;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManager;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.internal.progress.ProgressMessages;
+import org.eclipse.ui.progress.DeferredTreeContentManager;
+import org.eclipse.ui.progress.PendingUpdateAdapter;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * Subclass of {@link DeferredTreeContentManager} which works without a workbench.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+@SuppressWarnings("restriction")
+public class E4DeferredTreeContentManager extends DeferredTreeContentManager implements EMFCompareDeferredTreeContentManager {
+
+ /**
+ * The treeviewer whose content is to manage.
+ */
+ private final AbstractTreeViewer treeViewer;
+
+ /**
+ * Listener collection.
+ */
+ private ListenerList updateCompleteListenerList;
+
+ /**
+ * Constructor.
+ *
+ * @param treeViewer
+ * The treeViewer to update.
+ */
+ public E4DeferredTreeContentManager(AbstractTreeViewer treeViewer) {
+ super(treeViewer);
+ this.treeViewer = treeViewer;
+ }
+
+ @Override
+ protected PendingUpdateAdapter createPendingUpdateAdapter() {
+ return new E4PendingUpdateAdapter();
+ }
+
+ @Override
+ protected void addChildren(final Object parent, final Object[] children, final IProgressMonitor monitor) {
+ UIJob updateJob = new UIJob(Display.getDefault(),
+ ProgressMessages.DeferredTreeContentManager_AddingChildren) {
+ @Override
+ public IStatus runInUIThread(IProgressMonitor updateMonitor) {
+ // Cancel the job if the tree viewer got closed
+ if (treeViewer.getControl().isDisposed() || updateMonitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+ treeViewer.add(parent, children);
+ return Status.OK_STATUS;
+ }
+ };
+ updateJob.setSystem(true);
+ updateJob.schedule();
+ }
+
+ @Override
+ protected void runClearPlaceholderJob(PendingUpdateAdapter placeholder) {
+ final E4PendingUpdateAdapter e4Placeholder = (E4PendingUpdateAdapter)placeholder;
+ if (e4Placeholder.isRemoved()) {
+ return;
+ }
+ // Clear the placeholder if it is still there
+ UIJob clearJob = new UIJob(Display.getDefault(), ProgressMessages.DeferredTreeContentManager_ClearJob) {
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ if (!e4Placeholder.isRemoved()) {
+ Control control = treeViewer.getControl();
+ if (control.isDisposed()) {
+ return Status.CANCEL_STATUS;
+ }
+ treeViewer.remove(e4Placeholder);
+ e4Placeholder.setRemoved(true);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ clearJob.setSystem(true);
+
+ if (updateCompleteListenerList != null) {
+ Object[] listeners = updateCompleteListenerList.getListeners();
+ for (int i = 0; i < listeners.length; i++) {
+ clearJob.addJobChangeListener((IJobChangeListener)listeners[i]);
+ }
+ }
+ clearJob.schedule();
+ }
+
+ // XXX Copied from super class since we need access to updateCompleteListenerList within
+ // #runClearPlaceholderJob
+ @Override
+ public void addUpdateCompleteListener(IJobChangeListener listener) {
+ if (listener == null && updateCompleteListenerList != null) {
+ Object[] listeners = updateCompleteListenerList.getListeners();
+ if (listeners.length == 1) {
+ removeUpdateCompleteListener((IJobChangeListener)listeners[0]);
+ }
+ } else {
+ if (updateCompleteListenerList == null) {
+ updateCompleteListenerList = new ListenerList();
+ }
+ updateCompleteListenerList.add(listener);
+ }
+ }
+
+ // XXX Copied from super class since we need access to updateCompleteListenerList within
+ // #runClearPlaceholderJob
+ @Override
+ public void removeUpdateCompleteListener(IJobChangeListener listener) {
+ if (updateCompleteListenerList != null) {
+ updateCompleteListenerList.remove(listener);
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4PendingUpdateAdapter.java b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4PendingUpdateAdapter.java
new file mode 100644
index 000000000..19332d83b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/E4PendingUpdateAdapter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.e4;
+
+import org.eclipse.ui.progress.PendingUpdateAdapter;
+
+/**
+ * Extend class to make methods visible in this package.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public class E4PendingUpdateAdapter extends PendingUpdateAdapter {
+ @Override
+ protected boolean isRemoved() {
+ return super.isRemoved();
+ }
+
+ @Override
+ protected void setRemoved(boolean removedValue) {
+ super.setRemoved(removedValue);
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/EMFCompareDeferredTreeContentManagerProviderImpl.java b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/EMFCompareDeferredTreeContentManagerProviderImpl.java
new file mode 100644
index 000000000..3f5f14efe
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui.e4/src/org/eclipse/emf/compare/ide/ui/e4/EMFCompareDeferredTreeContentManagerProviderImpl.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.e4;
+
+import org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManager;
+import org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManagerProvider;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+
+/**
+ * Service implementation to return the e4 version of
+ * {@link org.eclipse.ui.progress.DeferredTreeContentManager DeferredTreeContentManager} which is
+ * {@link E4DeferredTreeContentManager}.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public class EMFCompareDeferredTreeContentManagerProviderImpl implements EMFCompareDeferredTreeContentManagerProvider {
+
+ /**
+ * {@inheritDoc}
+ */
+ public EMFCompareDeferredTreeContentManager createEMFDeferredTreeContentManager(AbstractTreeViewer viewer) {
+ return new E4DeferredTreeContentManager(viewer);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
index 243bcf270..19bdea2cd 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.ide.ui/META-INF/MANIFEST.MF
@@ -47,6 +47,7 @@ Export-Package: org.eclipse.emf.compare.ide.ui.dependency;x-friends:="org.eclips
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;x-friends:="org.eclipse.emf.compare.ide.ui.tests",
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions;x-internal:=true,
org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider;x-internal:=true,
+ org.eclipse.emf.compare.ide.ui.internal.treecontentmanager;x-friends:="org.eclipse.emf.compare.ide.ui.e4",
org.eclipse.emf.compare.ide.ui.internal.util;x-internal:=true,
org.eclipse.emf.compare.ide.ui.logical,
org.eclipse.emf.compare.ide.ui.mergeresolution,
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
index 9828913c2..a2ead67d7 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2015 Obeo and others.
+ * Copyright (c) 2012, 2016 Obeo 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
@@ -8,6 +8,7 @@
* Contributors:
* Obeo - initial API and implementation
* Michael Borkowski - bug 462863
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer;
@@ -313,13 +314,8 @@ public abstract class EMFCompareContentMergeViewer extends ContentMergeViewer im
fRight = createMergeViewer(composite, MergeViewerSide.RIGHT);
fRight.addSelectionChangedListener(this);
- IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
- final ITheme currentTheme;
- if (themeManager != null) {
- currentTheme = themeManager.getCurrentTheme();
- } else {
- currentTheme = null;
- }
+ final ITheme currentTheme = getCurrentTheme();
+
boolean leftIsLocal = getCompareConfiguration().getBooleanProperty("LEFT_IS_LOCAL", false);
fColors = new EMFCompareColor(composite.getDisplay(), leftIsLocal, currentTheme,
getCompareConfiguration().getEventBus());
@@ -336,6 +332,21 @@ public abstract class EMFCompareContentMergeViewer extends ContentMergeViewer im
}
/**
+ * Determines the current used theme.
+ *
+ * @return The currently used theme if available, {@code null} otherwise.
+ */
+ private ITheme getCurrentTheme() {
+ if (PlatformUI.isWorkbenchRunning()) {
+ final IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
+ if (themeManager != null) {
+ return themeManager.getCurrentTheme();
+ }
+ }
+ return null;
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#createToolItems(org.eclipse.jface.action.ToolBarManager)
@@ -359,16 +370,18 @@ public abstract class EMFCompareContentMergeViewer extends ContentMergeViewer im
}
// Add extension point contributions to the content merge viewer toolbar
- IServiceLocator workbench = PlatformUI.getWorkbench();
- final IMenuService menuService = (IMenuService)workbench.getService(IMenuService.class);
- if (menuService != null) {
- menuService.populateContributionManager(toolBarManager,
- "toolbar:org.eclipse.emf.compare.contentmergeviewer.toolbar"); //$NON-NLS-1$
- toolBarManager.getControl().addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- menuService.releaseContributions(toolBarManager);
- }
- });
+ if (PlatformUI.isWorkbenchRunning()) {
+ IServiceLocator workbench = PlatformUI.getWorkbench();
+ final IMenuService menuService = (IMenuService)workbench.getService(IMenuService.class);
+ if (menuService != null) {
+ menuService.populateContributionManager(toolBarManager,
+ "toolbar:org.eclipse.emf.compare.contentmergeviewer.toolbar"); //$NON-NLS-1$
+ toolBarManager.getControl().addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ menuService.releaseContributions(toolBarManager);
+ }
+ });
+ }
}
}
@@ -620,6 +633,11 @@ public abstract class EMFCompareContentMergeViewer extends ContentMergeViewer im
* the given selection.
*/
private void updatePropertiesView(ISelection selection) {
+ if (!PlatformUI.isWorkbenchRunning()) {
+ // no update of property view outside of workbench
+ return;
+ }
+
if (selection instanceof StructuredSelection) {
StructuredSelection structuredSelection = (StructuredSelection)selection;
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
index 31fffee84..9beb79421 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2015 Obeo.
+ * Copyright (c) 2013, 2016 Obeo 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
@@ -95,19 +96,20 @@ public class CompareToolBar implements ISelectionChangedListener {
compareConfiguration.getEventBus().register(this);
// Add extension point contributions to the structure merge viewer toolbar
- IServiceLocator workbench = PlatformUI.getWorkbench();
-
- final IMenuService menuService = (IMenuService)workbench.getService(IMenuService.class);
- if (menuService != null) {
- menuService.populateContributionManager(toolbarManager,
- "toolbar:org.eclipse.emf.compare.structuremergeviewer.toolbar"); //$NON-NLS-1$
- ToolBar toolbar = toolbarManager.getControl();
- if (toolbar != null) {
- toolbar.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- menuService.releaseContributions(toolbarManager);
- }
- });
+ if (PlatformUI.isWorkbenchRunning()) {
+ IServiceLocator workbench = PlatformUI.getWorkbench();
+ final IMenuService menuService = (IMenuService)workbench.getService(IMenuService.class);
+ if (menuService != null) {
+ menuService.populateContributionManager(toolbarManager,
+ "toolbar:org.eclipse.emf.compare.structuremergeviewer.toolbar"); //$NON-NLS-1$
+ ToolBar toolbar = toolbarManager.getControl();
+ if (toolbar != null) {
+ toolbar.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ menuService.releaseContributions(toolbarManager);
+ }
+ });
+ }
}
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
index 4d9f6344d..da825cebf 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2015 Obeo and others.
+ * Copyright (c) 2013, 2016 Obeo 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
@@ -9,7 +9,7 @@
* Obeo - initial API and implementation
* Michael Borkowski - bug 467191
* Philip Langer - bug 462884
- * Stefan Dirix - bug 474030
+ * Stefan Dirix - bugs 473985 and 474030
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
@@ -609,13 +609,8 @@ public class EMFCompareStructureMergeViewer extends AbstractStructuredViewerWrap
tabFolder.setData(CompareUI.COMPARE_VIEWER_TITLE, EMFCompareIDEUIMessages
.getString("EMFCompareStructureMergeViewer.title")); //$NON-NLS-1$
- IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
- final ITheme currentTheme;
- if (themeManager != null) {
- currentTheme = themeManager.getCurrentTheme();
- } else {
- currentTheme = null;
- }
+ final ITheme currentTheme = getCurrentTheme();
+
boolean leftIsLocal = getCompareConfiguration().getBooleanProperty("LEFT_IS_LOCAL", false); //$NON-NLS-1$
fColors = new EMFCompareColor(control.getDisplay(), leftIsLocal, currentTheme,
getCompareConfiguration().getEventBus());
@@ -631,6 +626,21 @@ public class EMFCompareStructureMergeViewer extends AbstractStructuredViewerWrap
}
/**
+ * Determines the current used theme.
+ *
+ * @return The currently used theme if available, {@code null} otherwise.
+ */
+ private ITheme getCurrentTheme() {
+ if (PlatformUI.isWorkbenchRunning()) {
+ final IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
+ if (themeManager != null) {
+ return themeManager.getCurrentTheme();
+ }
+ }
+ return null;
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.ContentViewer#getContentProvider()
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
index 2ef3cee03..06377dec4 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2015 Obeo and others.
+ * Copyright (c) 2012, 2016 Obeo 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
@@ -8,6 +8,7 @@
* Contributors:
* Obeo - initial API and implementation
* Michael Borkowski - public CallbackType visibility for testing
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
@@ -39,6 +40,8 @@ import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIMessages;
+import org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManager;
+import org.eclipse.emf.compare.ide.ui.internal.treecontentmanager.EMFCompareDeferredTreeContentManagerUtil;
import org.eclipse.emf.compare.rcp.ui.internal.util.SWTUtil;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider2;
import org.eclipse.emf.edit.tree.TreeNode;
@@ -208,7 +211,7 @@ public class EMFCompareStructureMergeViewerContentProvider extends AdapterFactor
}
/** {@link DeferredTreeContentManager} use to fetch groups in a external {@link Job}. */
- private final DeferredTreeContentManager contenManagerAdapter;
+ private final EMFCompareDeferredTreeContentManager contentManagerAdapter;
/** Holds true if this content provider is currently fetching children. */
private boolean isFetchingGroup;
@@ -234,8 +237,9 @@ public class EMFCompareStructureMergeViewerContentProvider extends AdapterFactor
public EMFCompareStructureMergeViewerContentProvider(AdapterFactory adapterFactory,
AbstractTreeViewer viewer) {
super(adapterFactory);
- contenManagerAdapter = new DeferredTreeContentManager(viewer);
- contenManagerAdapter.addUpdateCompleteListener(this);
+ contentManagerAdapter = EMFCompareDeferredTreeContentManagerUtil
+ .createEMFDeferredTreeContentManager(viewer);
+ contentManagerAdapter.addUpdateCompleteListener(this);
lock = new ReentrantLock();
listeners = new CopyOnWriteArrayList<EMFCompareStructureMergeViewerContentProvider.FetchListener>();
callbacks = new CopyOnWriteArrayList<EMFCompareStructureMergeViewerContentProvider.CallbackHolder>();
@@ -451,7 +455,7 @@ public class EMFCompareStructureMergeViewerContentProvider extends AdapterFactor
}
compareInputAdapter
.setDeferredAdapter(new EMFCompareStructureMergeViewerContentProviderDeferredAdapter(this));
- pending = contenManagerAdapter.getChildren(compareInputAdapter);
+ pending = contentManagerAdapter.getChildren(compareInputAdapter);
}
return pending;
}
@@ -484,7 +488,7 @@ public class EMFCompareStructureMergeViewerContentProvider extends AdapterFactor
@Override
public void dispose() {
super.dispose();
- contenManagerAdapter.removeUpdateCompleteListener(this);
+ contentManagerAdapter.removeUpdateCompleteListener(this);
listeners.clear();
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/SaveComparisonModelAction.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/SaveComparisonModelAction.java
index 53fab84f7..e595af40a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/SaveComparisonModelAction.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/SaveComparisonModelAction.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2016 Obeo 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions;
@@ -38,6 +39,7 @@ import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
@@ -79,7 +81,7 @@ public class SaveComparisonModelAction extends Action {
*/
@Override
public void run() {
- Shell parent = PlatformUI.getWorkbench().getDisplay().getActiveShell();
+ Shell parent = getShell();
FileDialog fileDialog = new FileDialog(parent, SWT.SAVE);
String filePath = fileDialog.open();
@@ -106,6 +108,18 @@ public class SaveComparisonModelAction extends Action {
}
/**
+ * Returns the active shell from the workbench (if running) or the default display.
+ *
+ * @return The active shell.
+ */
+ private Shell getShell() {
+ if (PlatformUI.isWorkbenchRunning()) {
+ return PlatformUI.getWorkbench().getDisplay().getActiveShell();
+ }
+ return Display.getDefault().getActiveShell();
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.jface.action.Action#isEnabled()
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManager.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManager.java
new file mode 100644
index 000000000..ce705d619
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManager.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.internal.treecontentmanager;
+
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+
+/**
+ * A wrapper interface for {@link org.eclipse.ui.progress.DeferredTreeContentManager
+ * DeferredTreeContentManager} which enables EMFCompare to switch between its own and the default platform
+ * implementation. This is required to detach EMFCompare from
+ * {@link org.eclipse.ui.progress.DeferredTreeContentManager DeferredTreeContentManager}'s dependency to the
+ * workbench and therefore enables EMFCompare to support pure E4 applications.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public interface EMFCompareDeferredTreeContentManager {
+
+ /**
+ * @see org.eclipse.ui.progress.DeferredTreeContentManager#addUpdateCompleteListener(IJobChangeListener)
+ */
+ public void addUpdateCompleteListener(IJobChangeListener listener);
+
+ /**
+ * @see org.eclipse.ui.progress.DeferredTreeContentManager#getChildren(Object)
+ */
+ public Object[] getChildren(final Object parent);
+
+ /**
+ * @see org.eclipse.ui.progress.DeferredTreeContentManager#removeUpdateCompleteListener(IJobChangeListener)
+ */
+ public void removeUpdateCompleteListener(IJobChangeListener listener);
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerImpl.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerImpl.java
new file mode 100644
index 000000000..d70b4d216
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerImpl.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.internal.treecontentmanager;
+
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.ui.progress.DeferredTreeContentManager;
+
+/**
+ * The default implementation of {@link EMFCompareDeferredTreeContentManager} forwards to
+ * {@link DeferredTreeContentManager}.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public class EMFCompareDeferredTreeContentManagerImpl implements EMFCompareDeferredTreeContentManager {
+
+ private DeferredTreeContentManager manager;
+
+ /**
+ * Constructor.
+ */
+ public EMFCompareDeferredTreeContentManagerImpl(AbstractTreeViewer viewer) {
+ manager = new DeferredTreeContentManager(viewer);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void addUpdateCompleteListener(IJobChangeListener listener) {
+ manager.addUpdateCompleteListener(listener);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Object[] getChildren(Object parent) {
+ return manager.getChildren(parent);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void removeUpdateCompleteListener(IJobChangeListener listener) {
+ manager.removeUpdateCompleteListener(listener);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerProvider.java
new file mode 100644
index 000000000..59f559da5
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerProvider.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.internal.treecontentmanager;
+
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+
+/**
+ * Provider Service for {@link EMFCompareDeferredTreeContentManager}s.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public interface EMFCompareDeferredTreeContentManagerProvider {
+ /**
+ * Provides a {@link EMFCompareDeferredTreeContentManager} for the given viewer.
+ *
+ * @param viewer
+ * The viewer with which the {@link EMFCompareDeferredTreeContentManager} is created.
+ * @return The created {@link EMFCompareDeferredTreeContentManager}.
+ */
+ public EMFCompareDeferredTreeContentManager createEMFDeferredTreeContentManager(AbstractTreeViewer viewer);
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerUtil.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerUtil.java
new file mode 100644
index 000000000..567a26315
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/treecontentmanager/EMFCompareDeferredTreeContentManagerUtil.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Muenchen GmbH 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:
+ * Stefan Dirix - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.ide.ui.internal.treecontentmanager;
+
+import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Util Class for handling {@link EMFCompareDeferredTreeContentManagerProvider} service.
+ *
+ * @author Stefan Dirix <sdirix@eclipsesource.com>
+ */
+public final class EMFCompareDeferredTreeContentManagerUtil {
+
+ /**
+ * No constructor for Util classes.
+ */
+ private EMFCompareDeferredTreeContentManagerUtil() {
+ }
+
+ /**
+ * Uses the {@link EMFCompareDeferredTreeContentManagerProvider} service to create an
+ * {@link EMFCompareDeferredTreeContentManager}.
+ *
+ * @param viewer
+ * The viewer with which the {@link EMFCompareDeferredTreeContentManager} is created.
+ * @return The created {@link EMFCompareDeferredTreeContentManager}.
+ */
+ // suppress warnings which are caused by compatibility to helios
+ @SuppressWarnings({"rawtypes", "unchecked" })
+ public static EMFCompareDeferredTreeContentManager createEMFDeferredTreeContentManager(
+ AbstractTreeViewer viewer) {
+ BundleContext bundleContext = EMFCompareIDEUIPlugin.getDefault().getBundle().getBundleContext();
+ ServiceReference reference = bundleContext
+ .getServiceReference(EMFCompareDeferredTreeContentManagerProvider.class.getName());
+ if (reference != null) {
+ EMFCompareDeferredTreeContentManagerProvider service = (EMFCompareDeferredTreeContentManagerProvider)bundleContext
+ .getService(reference);
+ return service.createEMFDeferredTreeContentManager(viewer);
+ } else {
+ // default implementation
+ return new EMFCompareDeferredTreeContentManagerImpl(viewer);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/CompareHandlerService.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/CompareHandlerService.java
index a51a23491..868b59d1a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/CompareHandlerService.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/util/CompareHandlerService.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2014 IBM Corporation and others.
+ * Copyright (c) 2007, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
* Obeo - adapted for EMF Compare
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.util;
@@ -48,6 +49,10 @@ public class CompareHandlerService {
return new CompareHandlerService(container, null);
}
}
+ if (!PlatformUI.isWorkbenchRunning() && shell != null) {
+ Expression e = new ActiveShellExpression(shell);
+ return new CompareHandlerService(container, e);
+ }
if (container.getWorkbenchPart() == null && shell != null) {
// We're in a dialog so we can use an active shell expression
IHandlerService service = (IHandlerService)PlatformUI.getWorkbench().getService(
@@ -99,7 +104,8 @@ public class CompareHandlerService {
fHandlerService = service;
}
}
- if (fHandlerService == null && fContainer.getWorkbenchPart() == null && fExpression != null) {
+ if (PlatformUI.isWorkbenchRunning() && fHandlerService == null
+ && fContainer.getWorkbenchPart() == null && fExpression != null) {
// We're in a dialog so we can use an active shell expression
IHandlerService service = (IHandlerService)PlatformUI.getWorkbench().getService(
IHandlerService.class);
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/ui/SynchronizerDialog.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/ui/SynchronizerDialog.java
index e84093069..03cdb2d0b 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/ui/SynchronizerDialog.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/ui/SynchronizerDialog.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2014 Obeo.
+ * Copyright (c) 2014, 2016 Obeo 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Stefan Dirix - bug 473985
*******************************************************************************/
package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.actions.ui;
@@ -23,6 +24,7 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
/**
@@ -70,7 +72,8 @@ public class SynchronizerDialog extends MessageDialogWithToggle {
*/
@Override
protected Control createCustomArea(Composite parent) {
- if (preferencePageID != null) {
+ // only add hyperlink if workbench is running since the preference dialog depends on it
+ if (preferencePageID != null && PlatformUI.isWorkbenchRunning()) {
Composite container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, true);
container.setLayout(layout);

Back to the top