From 8a0c7e5540452146e9ed5f5f7b9286ac6c7b5484 Mon Sep 17 00:00:00 2001 From: Edgar Mueller Date: Thu, 12 Feb 2015 12:31:32 +0100 Subject: [PATCH] Made ESOrgUnitProvider configurable --- .../server/model/ESOrgUnitProvider.java | 5 ++-- .../schema/accessControl.exsd | 16 ++++++++++++ .../internal/server/EMFStoreController.java | 26 +++++++++---------- .../server/accesscontrol/AccessControl.java | 24 +++++++++++++++-- 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/server/model/ESOrgUnitProvider.java b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/server/model/ESOrgUnitProvider.java index c8fc985a7..72533ad1d 100644 --- a/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/server/model/ESOrgUnitProvider.java +++ b/bundles/org.eclipse.emf.emfstore.server.model/src/org/eclipse/emf/emfstore/server/model/ESOrgUnitProvider.java @@ -35,11 +35,12 @@ public interface ESOrgUnitProvider { * * @return a set of all known groups. */ - // TODO existieren wirklich Set getGroups(); /** - * @return + * Returns a list of all known {@link ESProjectHistory ESProjectHistories}. + * + * @return a list of all known {@link ESProjectHistory ESProjectHistories} */ List getProjects(); } diff --git a/bundles/org.eclipse.emf.emfstore.server/schema/accessControl.exsd b/bundles/org.eclipse.emf.emfstore.server/schema/accessControl.exsd index 8eb653d55..29044678a 100644 --- a/bundles/org.eclipse.emf.emfstore.server/schema/accessControl.exsd +++ b/bundles/org.eclipse.emf.emfstore.server/schema/accessControl.exsd @@ -21,6 +21,7 @@ + @@ -94,6 +95,21 @@ + + + + + + + + + + + + + + + diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java index 83c6efe47..9ed5e3ae4 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java @@ -51,7 +51,6 @@ import org.eclipse.emf.emfstore.internal.server.core.helper.ResourceHelper; import org.eclipse.emf.emfstore.internal.server.exceptions.FatalESException; import org.eclipse.emf.emfstore.internal.server.exceptions.StorageException; -import org.eclipse.emf.emfstore.internal.server.impl.api.ESOrgUnitProviderImpl; import org.eclipse.emf.emfstore.internal.server.model.ModelFactory; import org.eclipse.emf.emfstore.internal.server.model.ProjectHistory; import org.eclipse.emf.emfstore.internal.server.model.ServerSpace; @@ -239,19 +238,19 @@ private void initLogging() { Platform.getLog(Platform.getBundle(EMFSTORE_COMMON_BUNDLE)).addLogListener(new ILogListener() { - public void logging(IStatus status, String plugin) { - if (status.getSeverity() == IStatus.INFO) { - System.out.println(status.getMessage()); - } else if (!status.isOK()) { - System.err.println(status.getMessage()); - final Throwable exception = status.getException(); - if (exception != null) { - exception.printStackTrace(System.err); + public void logging(IStatus status, String plugin) { + if (status.getSeverity() == IStatus.INFO) { + System.out.println(status.getMessage()); + } else if (!status.isOK()) { + System.err.println(status.getMessage()); + final Throwable exception = status.getException(); + if (exception != null) { + exception.printStackTrace(System.err); + } } } - } - }); + }); } private void handleStartupListener() { @@ -296,7 +295,7 @@ private void copyFileToWorkspace(String target, String source, String failure, S try { FileUtil.copyFile(new URL("platform:/plugin/" //$NON-NLS-1$ + element.getIConfigurationElement().getNamespaceIdentifier() + "/" + attribute) //$NON-NLS-1$ - .openConnection().getInputStream(), targetFile); + .openConnection().getInputStream(), targetFile); return; } catch (final IOException e) { ModelUtil.logWarning( @@ -424,8 +423,7 @@ public static EMFStoreController getInstance() { private static synchronized AccessControl initAccessControl(ServerSpace serverSpace) throws FatalESException { setSuperUser(serverSpace); - // TODO: extract into extension point - return new AccessControl(new ESOrgUnitProviderImpl(serverSpace)); + return new AccessControl(serverSpace); } private static void setSuperUser(ServerSpace serverSpace) throws FatalESException { diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java index 46748c197..cc2bc2785 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/AccessControl.java @@ -14,6 +14,8 @@ import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint; import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPointException; import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; +import org.eclipse.emf.emfstore.internal.server.impl.api.ESOrgUnitProviderImpl; +import org.eclipse.emf.emfstore.internal.server.model.ServerSpace; import org.eclipse.emf.emfstore.server.auth.ESAuthorizationService; import org.eclipse.emf.emfstore.server.auth.ESOrgUnitResolver; import org.eclipse.emf.emfstore.server.model.ESOrgUnitProvider; @@ -35,10 +37,13 @@ public class AccessControl { private final LoginService loginService; - public AccessControl(ESOrgUnitProvider orgUnitProvider) { - this.orgUnitProvider = orgUnitProvider; + private final ServerSpace serverSpace; + + public AccessControl(ServerSpace serverSpace) { + this.serverSpace = serverSpace; sessions = new Sessions(); + orgUnitProvider = initOrgUnitProviderService(); orgUnitResolver = initOrgUnitResolverService(); authorizationService = initAuthorizationService(); loginService = new LoginService(sessions, orgUnitProvider, @@ -81,6 +86,21 @@ private ESOrgUnitResolver initOrgUnitResolverService() { return new DefaultESOrgUnitResolverService(orgUnitProvider); } + private ESOrgUnitProvider initOrgUnitProviderService() { + try { + if (new ESExtensionPoint(ACCESSCONTROL_EXTENSION_ID, true).size() > 0) { + return new ESExtensionPoint(ACCESSCONTROL_EXTENSION_ID, true).getClass( + "orgUnitProviderClass", ESOrgUnitProvider.class); //$NON-NLS-1$ + } + } catch (final ESExtensionPointException e) { + final String message = "Custom org unit provider class not be initialized"; + ModelUtil.logException(message, e); + return null; + } + + return new ESOrgUnitProviderImpl(serverSpace); + } + /** * {@inheritDoc} *