From 65f6159a5fdc57fb788c992d8be81636a9ad0351 Mon Sep 17 00:00:00 2001 From: Roberto E. Escobar Date: Fri, 27 Apr 2012 22:03:25 -0700 Subject: feature[ats_VGR8B]: Redesign InternalOseeEventManager to fix initialization Redesign OseeEventManager Make OseeEventManagerService Fix access control service initialization Re-enable skynet core tests --- .../OSGI-INF/access.control.service.xml | 3 +- .../OSGI-INF/object.access.provider.xml | 1 - .../OSGI-INF/static.access.control.helper.xml | 5 -- .../framework/access/AccessControlManager.java | 17 ++++- .../access/internal/AccessControlHelper.java | 40 ++++++++--- .../access/internal/AccessControlService.java | 38 +++++++--- .../access/internal/AccessControlServiceProxy.java | 37 ++++++++-- .../access/internal/ObjectAccessProvider.java | 77 -------------------- .../access/internal/ObjectAccessProviderProxy.java | 84 ++++++++++++++++------ 9 files changed, 169 insertions(+), 133 deletions(-) delete mode 100644 plugins/org.eclipse.osee.framework.access/OSGI-INF/static.access.control.helper.xml delete mode 100644 plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProvider.java (limited to 'plugins/org.eclipse.osee.framework.access') diff --git a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.control.service.xml b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.control.service.xml index 8ac54f9891a..fc7b8e278f8 100644 --- a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.control.service.xml +++ b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.control.service.xml @@ -7,4 +7,5 @@ - \ No newline at end of file + + diff --git a/plugins/org.eclipse.osee.framework.access/OSGI-INF/object.access.provider.xml b/plugins/org.eclipse.osee.framework.access/OSGI-INF/object.access.provider.xml index f1bd825d7ed..930f58a61de 100644 --- a/plugins/org.eclipse.osee.framework.access/OSGI-INF/object.access.provider.xml +++ b/plugins/org.eclipse.osee.framework.access/OSGI-INF/object.access.provider.xml @@ -4,5 +4,4 @@ - diff --git a/plugins/org.eclipse.osee.framework.access/OSGI-INF/static.access.control.helper.xml b/plugins/org.eclipse.osee.framework.access/OSGI-INF/static.access.control.helper.xml deleted file mode 100644 index 6190fd28d33..00000000000 --- a/plugins/org.eclipse.osee.framework.access/OSGI-INF/static.access.control.helper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/AccessControlManager.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/AccessControlManager.java index 677f156faeb..3a2efdb8e74 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/AccessControlManager.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/AccessControlManager.java @@ -13,8 +13,8 @@ package org.eclipse.osee.framework.access; import java.util.Collection; import java.util.logging.Level; -import org.eclipse.osee.framework.access.internal.AccessControlService; import org.eclipse.osee.framework.access.internal.AccessControlHelper; +import org.eclipse.osee.framework.access.internal.AccessControlService; import org.eclipse.osee.framework.core.enums.PermissionEnum; import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException; import org.eclipse.osee.framework.core.exception.OseeCoreException; @@ -34,7 +34,12 @@ public final class AccessControlManager { } public static AccessControlService getService() { - AccessControlService accessService = AccessControlHelper.getAccessControlService(); + AccessControlService accessService = null; + try { + accessService = AccessControlHelper.getAccessControlService(); + } catch (OseeCoreException ex) { + OseeLog.log(AccessControlHelper.class, Level.SEVERE, "Acquiring Access Control Service", ex); + } if (accessService == null) { OseeLog.log(AccessControlHelper.class, Level.SEVERE, "Access Service was null"); } @@ -70,7 +75,13 @@ public final class AccessControlManager { } public static boolean isOseeAdmin() throws OseeCoreException { - return getService().isOseeAdmin(); + AccessControlService service = null; + try { + service = AccessControlHelper.getAccessControlService(); + } catch (Exception ex) { + // Do nothing; + } + return service != null ? service.isOseeAdmin() : false; } public static Collection getAccessControlList(Object object) { diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlHelper.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlHelper.java index 11f2d4cd21f..eadc6b11863 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlHelper.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlHelper.java @@ -10,26 +10,46 @@ *******************************************************************************/ package org.eclipse.osee.framework.access.internal; +import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.services.IAccessControlService; +import org.eclipse.osee.framework.core.util.Conditions; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; public final class AccessControlHelper { public static final String PLUGIN_ID = "org.eclipse.osee.framework.access"; - private static AccessControlService accessControlService; + private AccessControlHelper() { + // Utility class + } - public void setAccessControlService(IAccessControlService accessControlService) { - if (accessControlService instanceof AccessControlServiceProxy) { - AccessControlHelper.accessControlService = - ((AccessControlServiceProxy) accessControlService).getProxiedObject(); - } else { - AccessControlHelper.accessControlService = null; - } + private static BundleContext getBundleContext() throws OseeCoreException { + Bundle bundle = FrameworkUtil.getBundle(AccessControlHelper.class); + Conditions.checkNotNull(bundle, "bundle"); + return bundle.getBundleContext(); + } + + private static T getService(Class clazz) throws OseeCoreException { + BundleContext context = getBundleContext(); + Conditions.checkNotNull(context, "bundleContext"); + ServiceReference reference = context.getServiceReference(clazz); + Conditions.checkNotNull(reference, "serviceReference"); + T service = context.getService(reference); + Conditions.checkNotNull(service, "service"); + return service; } @Deprecated - public static AccessControlService getAccessControlService() { - return accessControlService; + public static AccessControlService getAccessControlService() throws OseeCoreException { + IAccessControlService service = getService(IAccessControlService.class); + AccessControlService toReturn = null; + if (service instanceof AccessControlServiceProxy) { + toReturn = ((AccessControlServiceProxy) service).getProxiedObject(); + } + return toReturn; } } diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java index 1a04b349271..0a1eef7517b 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java @@ -61,11 +61,12 @@ import org.eclipse.osee.framework.skynet.core.UserManager; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.OseeEventService; import org.eclipse.osee.framework.skynet.core.event.filter.ArtifactEventFilter; import org.eclipse.osee.framework.skynet.core.event.filter.ArtifactTypeEventFilter; import org.eclipse.osee.framework.skynet.core.event.filter.BranchGuidEventFilter; import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; import org.eclipse.osee.framework.skynet.core.event.listener.IArtifactEventListener; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEventType; @@ -121,14 +122,22 @@ public class AccessControlService implements IAccessControlService { private final IOseeCachingService cachingService; private final IOseeDatabaseService databaseService; private final IdentityService identityService; - private AccessControlUpdateListener eventListener; + private final OseeEventService eventService; - public AccessControlService(IOseeDatabaseService databaseService, IOseeCachingService cachingService, IdentityService identityService) { + private IArtifactEventListener listener1; + private IArtifactEventListener listener2; + + public AccessControlService(IOseeDatabaseService databaseService, IOseeCachingService cachingService, IdentityService identityService, OseeEventService eventService) { super(); this.databaseService = databaseService; this.cachingService = cachingService; this.identityService = identityService; - OseeEventManager.addListener(new AccessControlUpdateListener()); + this.eventService = eventService; + } + + public void start() { + listener1 = new AccessControlUpdateListener(); + eventService.addListener(EventQosType.NORMAL, listener1); if (!DbUtil.isDbInit()) { try { @@ -139,6 +148,17 @@ public class AccessControlService implements IAccessControlService { } } + public void stop() { + if (listener1 != null) { + eventService.removeListener(EventQosType.NORMAL, listener1); + listener1 = null; + } + if (listener2 != null) { + eventService.removeListener(EventQosType.NORMAL, listener2); + listener2 = null; + } + } + private ArtifactTypeCache getArtifactTypeCache() { return cachingService.getArtifactTypeCache(); } @@ -308,9 +328,9 @@ public class AccessControlService implements IAccessControlService { } } - if (eventListener == null) { - eventListener = new AccessControlUpdateListener((Artifact) userArtifact.getFullArtifact()); - OseeEventManager.addListener(eventListener); + if (listener2 == null) { + listener2 = new AccessControlUpdateListener((Artifact) userArtifact.getFullArtifact()); + eventService.addListener(EventQosType.NORMAL, listener2); } if (!accessDataCache.containsKey(key)) { @@ -616,7 +636,7 @@ public class AccessControlService implements IAccessControlService { } } try { - OseeEventManager.kickAccessControlArtifactsEvent(this, event); + eventService.send(this, event); } catch (Exception ex) { OseeLog.log(AccessControlHelper.class, Level.SEVERE, ex); } @@ -645,7 +665,7 @@ public class AccessControlService implements IAccessControlService { } } try { - OseeEventManager.kickAccessControlArtifactsEvent(this, event); + eventService.send(this, event); } catch (Exception ex) { OseeLog.log(AccessControlHelper.class, Level.SEVERE, ex); } diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlServiceProxy.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlServiceProxy.java index f4604f4c700..62723c241d3 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlServiceProxy.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlServiceProxy.java @@ -23,16 +23,19 @@ import org.eclipse.osee.framework.core.services.IdentityService; import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.framework.database.IOseeDatabaseService; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.OseeEventService; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; public final class AccessControlServiceProxy implements IAccessControlService { private IOseeDatabaseService dbService; private IOseeCachingService cachingService; private IdentityService identityService; + private OseeEventService eventService; private AccessControlService accessService; private AccessEventListener accessEventListener; + private Thread thread; public void setDbService(IOseeDatabaseService dbService) { this.dbService = dbService; @@ -46,6 +49,10 @@ public final class AccessControlServiceProxy implements IAccessControlService { this.identityService = identityService; } + public void setEventService(OseeEventService eventService) { + this.eventService = eventService; + } + public AccessControlService getProxiedObject() { return accessService; } @@ -59,23 +66,41 @@ public final class AccessControlServiceProxy implements IAccessControlService { } public void start() { - accessService = new AccessControlService(dbService, cachingService, identityService); + accessService = new AccessControlService(dbService, cachingService, identityService, eventService); accessEventListener = new AccessEventListener(accessService, new AccessControlCacheHandler()); - OseeEventManager.addPriorityListener(accessEventListener); + eventService.addListener(EventQosType.PRIORITY, accessEventListener); + + Runnable runnable = new Runnable() { + @Override + public void run() { + accessService.start(); + } + }; + + thread = new Thread(runnable); + thread.start(); } public void stop() { + if (thread != null) { + thread.interrupt(); + thread = null; + } + if (accessEventListener != null) { - OseeEventManager.removeListener(accessEventListener); + eventService.removeListener(EventQosType.PRIORITY, accessEventListener); accessEventListener = null; } - accessService = null; + + if (accessService != null) { + accessService.stop(); + accessService = null; + } } private void checkInitialized() throws OseeCoreException { Conditions.checkNotNull(accessService, "accessService", "Access Service not properly initialized"); - Conditions.checkNotNull(accessEventListener, "accessEventListener", "Access Service not properly initialized"); } @Override diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProvider.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProvider.java deleted file mode 100644 index 91b75704d22..00000000000 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProvider.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Boeing. - * 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: - * Boeing - initial API and implementation - *******************************************************************************/ -package org.eclipse.osee.framework.access.internal; - -import java.util.Collection; -import org.eclipse.osee.framework.access.IAccessProvider; -import org.eclipse.osee.framework.core.data.IOseeBranch; -import org.eclipse.osee.framework.core.enums.PermissionEnum; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.core.model.Branch; -import org.eclipse.osee.framework.core.model.IBasicArtifact; -import org.eclipse.osee.framework.core.model.access.AccessData; -import org.eclipse.osee.framework.core.model.access.AccessDetail; -import org.eclipse.osee.framework.core.model.access.Scope; -import org.eclipse.osee.framework.skynet.core.artifact.Artifact; -import org.eclipse.osee.framework.skynet.core.relation.RelationLink; - -public class ObjectAccessProvider implements IAccessProvider { - - private final AccessControlService accessService; - - public ObjectAccessProvider(AccessControlService accessService) { - this.accessService = accessService; - } - - @Override - public void computeAccess(IBasicArtifact userArtifact, Collection objToCheck, AccessData accessData) throws OseeCoreException { - for (Object object : objToCheck) { - if (object instanceof Artifact) { - setArtifactAccessData(userArtifact, (Artifact) object, accessData); - } else if (object instanceof Branch) { - setBranchAccessData(userArtifact, (Branch) object, accessData); - } else if (object instanceof RelationLink) { - RelationLink relation = (RelationLink) object; - Artifact artifactA = relation.getArtifactA(); - Artifact artifactB = relation.getArtifactB(); - setArtifactAccessData(userArtifact, artifactA, accessData); - setArtifactAccessData(userArtifact, artifactB, accessData); - } - } - } - - private void setArtifactAccessData(IBasicArtifact userArtifact, Artifact artifact, AccessData accessData) throws OseeCoreException { - setBranchAccessData(userArtifact, artifact.getBranch(), accessData); - String reason = "Legacy Artifact Permission"; - PermissionEnum userPermission = accessService.getArtifactPermission(userArtifact, artifact); - - if (userPermission == null) { - reason = "User Permission was null in setArtifactAccessData - artifact is read only"; - userPermission = PermissionEnum.READ; - } else if (artifact.isHistorical()) { - userPermission = PermissionEnum.READ; - reason = "User Permission set to Read - artifact is historical - artifact is read only"; - } else if (!artifact.getFullBranch().isEditable()) { - userPermission = PermissionEnum.READ; - reason = "User Permission set to Read - artifact's branch is not editable - artifact is read only"; - } - //artifact.isDeleted() - accessData.add(artifact, - new AccessDetail>(artifact, userPermission, Scope.createLegacyScope(), reason)); - } - - private void setBranchAccessData(IBasicArtifact userArtifact, IOseeBranch branch, AccessData accessData) throws OseeCoreException { - String reason = "Legacy Branch Permission"; - PermissionEnum userPermission = accessService.getBranchPermission(userArtifact, branch); - accessData.add(branch, new AccessDetail(branch, userPermission, Scope.createLegacyScope(), reason)); - } - -} diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProviderProxy.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProviderProxy.java index 76f11701450..4f7c6a8eee8 100644 --- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProviderProxy.java +++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/ObjectAccessProviderProxy.java @@ -13,47 +13,89 @@ package org.eclipse.osee.framework.access.internal; import java.util.Collection; import java.util.logging.Level; import org.eclipse.osee.framework.access.IAccessProvider; +import org.eclipse.osee.framework.core.data.IOseeBranch; +import org.eclipse.osee.framework.core.enums.PermissionEnum; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.model.IBasicArtifact; import org.eclipse.osee.framework.core.model.access.AccessData; +import org.eclipse.osee.framework.core.model.access.AccessDetail; +import org.eclipse.osee.framework.core.model.access.Scope; import org.eclipse.osee.framework.core.services.IAccessControlService; -import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.relation.RelationLink; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; public final class ObjectAccessProviderProxy implements IAccessProvider { - private IAccessProvider accessProvider; - private IAccessControlService accessControlService; + private BundleContext bundleContext; - public void setAccessControlService(IAccessControlService accessControlService) { - this.accessControlService = accessControlService; + public void start(BundleContext bundleContext) { + this.bundleContext = bundleContext; } - public void start() { - if (accessControlService instanceof AccessControlServiceProxy) { - AccessControlServiceProxy proxy = (AccessControlServiceProxy) accessControlService; - accessProvider = new ObjectAccessProvider(proxy.getProxiedObject()); + public void stop() { + bundleContext = null; + } + + private AccessControlService getAccessService() { + AccessControlService toReturn = null; + + ServiceReference reference = + bundleContext.getServiceReference(IAccessControlService.class); + IAccessControlService service = bundleContext.getService(reference); + if (service instanceof AccessControlServiceProxy) { + AccessControlServiceProxy proxy = (AccessControlServiceProxy) service; + toReturn = proxy.getProxiedObject(); } else { OseeLog.log(AccessControlHelper.class, Level.SEVERE, "Error initializing ObjectAccessProvider"); } + return toReturn; } - public void stop() { - accessProvider = null; + @Override + public void computeAccess(IBasicArtifact userArtifact, Collection objToCheck, AccessData accessData) throws OseeCoreException { + for (Object object : objToCheck) { + if (object instanceof Artifact) { + setArtifactAccessData(userArtifact, (Artifact) object, accessData); + } else if (object instanceof Branch) { + setBranchAccessData(userArtifact, (Branch) object, accessData); + } else if (object instanceof RelationLink) { + RelationLink relation = (RelationLink) object; + Artifact artifactA = relation.getArtifactA(); + Artifact artifactB = relation.getArtifactB(); + setArtifactAccessData(userArtifact, artifactA, accessData); + setArtifactAccessData(userArtifact, artifactB, accessData); + } + } } - public IAccessProvider getAccessProvider() { - return accessProvider; - } + private void setArtifactAccessData(IBasicArtifact userArtifact, Artifact artifact, AccessData accessData) throws OseeCoreException { + setBranchAccessData(userArtifact, artifact.getBranch(), accessData); + String reason = "Legacy Artifact Permission"; + PermissionEnum userPermission = getAccessService().getArtifactPermission(userArtifact, artifact); - private void checkInitialized() throws OseeCoreException { - Conditions.checkNotNull(getAccessProvider(), "object access provider", - "Object Access Provider not properly initialized"); + if (userPermission == null) { + reason = "User Permission was null in setArtifactAccessData - artifact is read only"; + userPermission = PermissionEnum.READ; + } else if (artifact.isHistorical()) { + userPermission = PermissionEnum.READ; + reason = "User Permission set to Read - artifact is historical - artifact is read only"; + } else if (!artifact.getFullBranch().isEditable()) { + userPermission = PermissionEnum.READ; + reason = "User Permission set to Read - artifact's branch is not editable - artifact is read only"; + } + //artifact.isDeleted() + accessData.add(artifact, + new AccessDetail>(artifact, userPermission, Scope.createLegacyScope(), reason)); } - @Override - public void computeAccess(IBasicArtifact userArtifact, Collection objToCheck, AccessData accessData) throws OseeCoreException { - checkInitialized(); - getAccessProvider().computeAccess(userArtifact, objToCheck, accessData); + private void setBranchAccessData(IBasicArtifact userArtifact, IOseeBranch branch, AccessData accessData) throws OseeCoreException { + String reason = "Legacy Branch Permission"; + PermissionEnum userPermission = getAccessService().getBranchPermission(userArtifact, branch); + accessData.add(branch, new AccessDetail(branch, userPermission, Scope.createLegacyScope(), reason)); } + } \ No newline at end of file -- cgit v1.2.3