Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Schindl2016-02-03 10:34:36 +0000
committerTom Schindl2016-02-03 10:34:36 +0000
commitc9c9165b42de26a6e2148781e4d6ae66df0856cc (patch)
tree856d08e2da8015746ee22fcf4835cff5ebb33ec6
parentc3e8fbfb271489fb18acb2ad1852b326885206ac (diff)
downloadorg.eclipse.efxclipse-c9c9165b42de26a6e2148781e4d6ae66df0856cc.tar.gz
org.eclipse.efxclipse-c9c9165b42de26a6e2148781e4d6ae66df0856cc.tar.xz
org.eclipse.efxclipse-c9c9165b42de26a6e2148781e4d6ae66df0856cc.zip
Bug 487084 - Add abstraction for Input-Grouping (eg Project/Module)
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF3
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup.xml8
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/InputContext.java5
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextLookup.java18
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextProvider.java10
-rw-r--r--bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/internal/DefaultInputContextLookup.java37
6 files changed, 80 insertions, 1 deletions
diff --git a/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF b/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
index ad3198a1f..b3b9aed74 100644
--- a/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
+++ b/bundles/code/org.eclipse.fx.code.editor/META-INF/MANIFEST.MF
@@ -20,5 +20,6 @@ Service-Component: OSGI-INF/services/org.eclipse.fx.code.editor.services.interna
OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.FileInputTypeProvider.xml,
OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.InputDocumentTypeProvider.xml,
OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultFileIconProvider.xml,
- OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.NoHighlightDocumentTypePartitionerProvider.xml
+ OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.NoHighlightDocumentTypePartitionerProvider.xml,
+ OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup.xml
Bundle-Vendor: Eclipse.org
diff --git a/bundles/code/org.eclipse.fx.code.editor/OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup.xml b/bundles/code/org.eclipse.fx.code.editor/OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup.xml
new file mode 100644
index 000000000..9471de90c
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor/OSGI-INF/services/org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.2.0" name="org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup">
+ <service>
+ <provide interface="org.eclipse.fx.code.editor.services.InputContextLookup"/>
+ </service>
+ <reference bind="registerInputContextProvider" cardinality="0..n" interface="org.eclipse.fx.code.editor.services.InputContextProvider" name="registerInputContextProvider" policy="static" policy-option="greedy" unbind="unregisterInputContextProvider"/>
+ <implementation class="org.eclipse.fx.code.editor.services.internal.DefaultInputContextLookup"/>
+</scr:component> \ No newline at end of file
diff --git a/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/InputContext.java b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/InputContext.java
new file mode 100644
index 000000000..fe6da7960
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/InputContext.java
@@ -0,0 +1,5 @@
+package org.eclipse.fx.code.editor;
+
+public interface InputContext {
+ public String getId();
+}
diff --git a/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextLookup.java b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextLookup.java
new file mode 100644
index 000000000..9e7cc0ef4
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextLookup.java
@@ -0,0 +1,18 @@
+package org.eclipse.fx.code.editor.services;
+
+import java.util.UUID;
+
+import org.eclipse.fx.code.editor.Input;
+import org.eclipse.fx.code.editor.InputContext;
+
+public interface InputContextLookup {
+ public static final InputContext DEFAULT = new InputContext() {
+ private final String ID = UUID.randomUUID().toString();
+
+ @Override
+ public String getId() {
+ return ID;
+ }
+ };
+ public InputContext getContext(Input<?> input);
+}
diff --git a/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextProvider.java b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextProvider.java
new file mode 100644
index 000000000..7455de8df
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/InputContextProvider.java
@@ -0,0 +1,10 @@
+package org.eclipse.fx.code.editor.services;
+
+import java.util.function.Predicate;
+
+import org.eclipse.fx.code.editor.Input;
+import org.eclipse.fx.code.editor.InputContext;
+
+public interface InputContextProvider extends Predicate<Input<?>> {
+ public InputContext getContext(Input<?> input);
+}
diff --git a/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/internal/DefaultInputContextLookup.java b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/internal/DefaultInputContextLookup.java
new file mode 100644
index 000000000..324c2b98a
--- /dev/null
+++ b/bundles/code/org.eclipse.fx.code.editor/src/org/eclipse/fx/code/editor/services/internal/DefaultInputContextLookup.java
@@ -0,0 +1,37 @@
+package org.eclipse.fx.code.editor.services.internal;
+
+import java.util.Map;
+
+import org.eclipse.fx.code.editor.Input;
+import org.eclipse.fx.code.editor.InputContext;
+import org.eclipse.fx.code.editor.services.InputContextLookup;
+import org.eclipse.fx.code.editor.services.InputContextProvider;
+import org.eclipse.fx.core.RankedObjectRegistry;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicyOption;
+
+@Component
+public class DefaultInputContextLookup implements InputContextLookup {
+ private static final String CONTEXT_KEY = DefaultInputContextLookup.class.getName() + ".inputContext";
+ private RankedObjectRegistry<InputContextProvider> providerList = new RankedObjectRegistry<>();
+
+ @Reference(cardinality=ReferenceCardinality.MULTIPLE,policyOption=ReferencePolicyOption.GREEDY)
+ public synchronized void registerInputContextProvider(InputContextProvider provider, Map<String, Object> properties) {
+ providerList.registerObject(RankedObjectRegistry.getOSGiServiceRank(properties),provider);
+ }
+
+ public synchronized void unregisterInputContextProvider(InputContextProvider provider) {
+ providerList.unregisterObject(provider);
+ }
+
+ @Override
+ public synchronized InputContext getContext(Input<?> input) {
+ return (InputContext)input.getTransientData().computeIfAbsent(CONTEXT_KEY, k -> providerList.unsynchronizedStream()
+ .filter( p -> p.test(input))
+ .findFirst()
+ .map( p -> p.getContext(input))
+ .orElse(DEFAULT));
+ }
+}

Back to the top