From a41dda0bdfba5c4f1c54ab1408d6fd119586f221 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 8 Apr 2018 11:04:17 +0200 Subject: [PATCH] Introduce OSGi-filter based context function --- .../argeo/cms/e4/rap/CmsLoginLifecycle.java | 26 +++++++++++---- org.argeo.cms.e4/OSGI-INF/homeRepository.xml | 8 +++++ org.argeo.cms.e4/bnd.bnd | 2 ++ org.argeo.cms.e4/build.properties | 11 ++++--- .../contexts/OsgiFilterContextFunction.java | 33 +++++++++++++++++++ .../cms/ui/eclipse/forms/ManagedForm.java | 1 + 6 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 org.argeo.cms.e4/OSGI-INF/homeRepository.xml create mode 100644 org.argeo.cms.e4/src/org/argeo/cms/e4/contexts/OsgiFilterContextFunction.java diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java index 687290626..8b437a0e7 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java @@ -23,7 +23,19 @@ public class CmsLoginLifecycle implements CmsView { private LoginContext loginContext; @PostContextCreate - boolean login(Display d) { + boolean login(Display d) {// , IEclipseContext eclipseContext) { + // RepositoryFactory repositoryFactory = + // eclipseContext.get(RepositoryFactory.class); + // Map params = new HashMap<>(); + // params.put("cn", "home"); + // Repository homeRepository; + // try { + // homeRepository = repositoryFactory.getRepository(params); + // } catch (RepositoryException e1) { + // throw new CmsException("Cannot get home repository", e1); + // } + // eclipseContext.set("(cn=home)", homeRepository); + Subject subject = Subject.getSubject(AccessController.getContext()); Display display = Display.getCurrent(); CmsLoginShell loginShell = new CmsLoginShell(this); @@ -63,12 +75,12 @@ public class CmsLoginLifecycle implements CmsView { if (loginContext == null) throw new CmsException("Login context cannot be null"); // logout previous login context -// if (this.loginContext != null) -// try { -// this.loginContext.logout(); -// } catch (LoginException e1) { -// System.err.println("Could not log out: " + e1); -// } + // if (this.loginContext != null) + // try { + // this.loginContext.logout(); + // } catch (LoginException e1) { + // System.err.println("Could not log out: " + e1); + // } this.loginContext = loginContext; } diff --git a/org.argeo.cms.e4/OSGI-INF/homeRepository.xml b/org.argeo.cms.e4/OSGI-INF/homeRepository.xml new file mode 100644 index 000000000..c03e62e76 --- /dev/null +++ b/org.argeo.cms.e4/OSGI-INF/homeRepository.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/org.argeo.cms.e4/bnd.bnd b/org.argeo.cms.e4/bnd.bnd index a1fbdcd82..8c15aafbb 100644 --- a/org.argeo.cms.e4/bnd.bnd +++ b/org.argeo.cms.e4/bnd.bnd @@ -1,3 +1,5 @@ +Service-Component: OSGI-INF/homeRepository.xml +Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.swt,\ org.eclipse.e4.ui.model.application.ui,\ org.eclipse.e4.ui.model.application,\ diff --git a/org.argeo.cms.e4/build.properties b/org.argeo.cms.e4/build.properties index 0b085594e..4d2873aff 100644 --- a/org.argeo.cms.e4/build.properties +++ b/org.argeo.cms.e4/build.properties @@ -1,5 +1,6 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - OSGI-INF/,\ - . +output.. = bin/ +bin.includes = META-INF/,\ + OSGI-INF/,\ + .,\ + OSGI-INF/homeRepository.xml +source.. = src/ diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/contexts/OsgiFilterContextFunction.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/contexts/OsgiFilterContextFunction.java new file mode 100644 index 000000000..b0fdcc108 --- /dev/null +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/contexts/OsgiFilterContextFunction.java @@ -0,0 +1,33 @@ +package org.argeo.cms.e4.contexts; + +import org.argeo.cms.CmsException; +import org.eclipse.e4.core.contexts.ContextFunction; +import org.eclipse.e4.core.contexts.IEclipseContext; +import org.eclipse.e4.core.di.IInjector; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; + +@SuppressWarnings("restriction") +public class OsgiFilterContextFunction extends ContextFunction { + + private BundleContext bc = FrameworkUtil.getBundle(OsgiFilterContextFunction.class).getBundleContext(); + + @Override + public Object compute(IEclipseContext context, String contextKey) { + ServiceReference[] srs; + try { + srs = bc.getServiceReferences((String) null, contextKey); + } catch (InvalidSyntaxException e) { + throw new CmsException("Context key " + contextKey + " must be a valid osgi filter", e); + } + if (srs == null || srs.length == 0) { + return IInjector.NOT_A_VALUE; + } else { + // return the first one + return bc.getService(srs[0]); + } + } + +} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java index 19e8211e6..4140465a1 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/eclipse/forms/ManagedForm.java @@ -51,6 +51,7 @@ public class ManagedForm implements IManagedForm { toolkit = new FormToolkit(parent.getDisplay()); ownsToolkit = true; form = toolkit.createScrolledForm(parent); + } /** -- 2.30.2