diff options
17 files changed, 186 insertions, 106 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.api/META-INF/MANIFEST.MF index 74008a2c462..acaf5de3617 100644 --- a/plugins/org.eclipse.osee.ats.api/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.api/META-INF/MANIFEST.MF @@ -30,11 +30,11 @@ Export-Package: org.eclipse.osee.ats.api, org.eclipse.osee.ats.api.workflow.log, org.eclipse.osee.ats.api.workflow.state, org.eclipse.osee.ats.api.workflow.transition -Import-Package: javax.ws.rs;version="2.0.0", - javax.ws.rs.core;version="2.0.0", - org.codehaus.jackson.annotate;version="1.9.13", - org.codehaus.jackson.map.annotate;version="1.9.13", - org.codehaus.jackson.map.ser.std;version="1.9.13", +Import-Package: javax.ws.rs, + javax.ws.rs.core, + org.codehaus.jackson.annotate, + org.codehaus.jackson.map.annotate, + org.codehaus.jackson.map.ser.std, org.eclipse.osee.activity.api, org.eclipse.osee.framework.core.data, org.eclipse.osee.framework.core.enums, @@ -43,4 +43,6 @@ Import-Package: javax.ws.rs;version="2.0.0", org.eclipse.osee.framework.jdk.core.type, org.eclipse.osee.framework.jdk.core.util, org.eclipse.osee.framework.logging, - org.eclipse.osee.jaxrs.mvc + org.eclipse.osee.jaxrs.mvc, + org.osgi.framework, + org.osgi.service.event diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/util/IAtsEventService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/util/IAtsEventService.java new file mode 100644 index 00000000000..54f50e272dd --- /dev/null +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/util/IAtsEventService.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2015 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.ats.api.util; + +import org.osgi.framework.BundleContext; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventAdmin; + +/** + * @author Donald G. Dunne + */ +public interface IAtsEventService { + + /** + * Used to post and send OSGI events. Can use postEvent and sendEvent methods directly. + */ + EventAdmin getEventAdmin(String pluginId); + + /** + * Initiate asynchronous, ordered delivery of an event. This method returns to the caller before delivery of the + * event is completed. Events are delivered in the order that they are received by this method. + * + * @param event The event to send to all listeners which subscribe to the topic of the event. + * @throws SecurityException If the caller does not have {@code TopicPermission[topic,PUBLISH]} for the topic + * specified in the event. + */ + void postEvent(Event event, String pluginId); + + /** + * Initiate synchronous delivery of an event. This method does not return to the caller until delivery of the event + * is completed. + * + * @param event The event to send to all listeners which subscribe to the topic of the event. + * @throws SecurityException If the caller does not have {@code TopicPermission[topic,PUBLISH]} for the topic + * specified in the event. + */ + void sendEvent(Event event, String pluginId); + + /** + * Used to register for osgi events + */ + BundleContext getBundleContext(String pluginId); + +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF index ad04e8bc06a..4ccf9c5eb73 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF @@ -129,7 +129,8 @@ Import-Package: com.google.common.collect, org.eclipse.osee.orcs.rest.model, org.eclipse.osee.orcs.writer.model.reader, org.eclipse.osee.support.test.util, - org.osgi.framework + org.osgi.framework, + org.osgi.service.event Service-Component: OSGI-INF/*.xml Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/access/AtsBranchAccessManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/access/AtsBranchAccessManagerTest.java index da488ea5483..5f0ac6c6b8b 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/access/AtsBranchAccessManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/access/AtsBranchAccessManagerTest.java @@ -26,58 +26,21 @@ import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; -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.transaction.SkynetTransaction; import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; /** * @author Donald G. Dunne */ public class AtsBranchAccessManagerTest { - private static <T> T getService(Class<T> clazz) { - Bundle bundle = FrameworkUtil.getBundle(AtsBranchAccessManager.class); - Assert.assertNotNull(bundle); - BundleContext context = bundle.getBundleContext(); - Assert.assertNotNull(context); - ServiceReference<T> reference = context.getServiceReference(clazz); - Assert.assertNotNull(reference); - T service = context.getService(reference); - Assert.assertNotNull(service); - return service; - } - - public static OseeEventService getEventService() { - return getService(OseeEventService.class); - } - - @Test - public void testAtsBranchAccessManager() { - int numListeners = OseeEventManager.getNumberOfListeners(); - new AtsBranchAccessManager(getEventService()); - Assert.assertEquals(numListeners + 1, OseeEventManager.getNumberOfListeners()); - } - - @Test - public void testDispose() { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); - int numListeners = OseeEventManager.getNumberOfListeners(); - mgr.dispose(); - Assert.assertEquals(numListeners - 1, OseeEventManager.getNumberOfListeners()); - } - @Test public void testIsApplicable() throws OseeCoreException { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(); Assert.assertFalse(mgr.isApplicable(AtsUtilCore.getAtsBranch())); Assert.assertFalse(mgr.isApplicable(SAW_Bld_1)); @@ -118,7 +81,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testGetContextIdBranch() throws Exception { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(); TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) DemoTestUtil.getUncommittedActionWorkflow(DemoWorkType.Requirements); @@ -165,7 +128,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testConvertAccessAttributeToGuid() throws Exception { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(); TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) DemoTestUtil.getUncommittedActionWorkflow(DemoWorkType.Requirements); diff --git a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF index 5a1d6ff042d..c3872f3b964 100644 --- a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF @@ -50,6 +50,7 @@ Import-Package: com.google.common.cache, org.eclipse.osee.framework.jdk.core.util.xml, org.eclipse.osee.framework.logging, org.eclipse.osee.framework.messaging.event.res, + org.eclipse.osee.framework.plugin.core, org.eclipse.osee.framework.plugin.core.util, org.eclipse.osee.framework.skynet.core, org.eclipse.osee.framework.skynet.core.artifact, diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/IAtsClient.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/IAtsClient.java index fe280299484..2fb85340e4d 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/IAtsClient.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/IAtsClient.java @@ -30,6 +30,7 @@ import org.eclipse.osee.ats.api.team.IAtsWorkItemFactory; import org.eclipse.osee.ats.api.user.IAtsUserService; import org.eclipse.osee.ats.api.util.IArtifactResolver; import org.eclipse.osee.ats.api.util.IAtsChangeSet; +import org.eclipse.osee.ats.api.util.IAtsEventService; import org.eclipse.osee.ats.api.util.IAtsStoreService; import org.eclipse.osee.ats.api.util.IAtsUtilService; import org.eclipse.osee.ats.api.util.ISequenceProvider; @@ -191,4 +192,6 @@ public interface IAtsClient extends IAtsServices, IAtsNotifier, IAttributeResolv List<IAtsSearchDataProvider> getSearchDataProviders(); Log getLogger(); + + IAtsEventService getEventService(); } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java index 28cca16a3d5..bb63331f5ca 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java @@ -44,6 +44,7 @@ import org.eclipse.osee.ats.api.team.IAtsWorkItemFactory; import org.eclipse.osee.ats.api.user.IAtsUserService; import org.eclipse.osee.ats.api.util.IArtifactResolver; import org.eclipse.osee.ats.api.util.IAtsChangeSet; +import org.eclipse.osee.ats.api.util.IAtsEventService; import org.eclipse.osee.ats.api.util.IAtsStoreService; import org.eclipse.osee.ats.api.util.IAtsUtilService; import org.eclipse.osee.ats.api.util.ISequenceProvider; @@ -182,6 +183,7 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient { private IAtsTaskService taskService; private Log logger; List<IAtsSearchDataProvider> searchDataProviders; + private IAtsEventService eventService; public AtsClientImpl() { searchDataProviders = new ArrayList<>(); @@ -276,6 +278,8 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient { userService, attributeResolverService, atsStateFactory, configProxy, getServices()); taskService = new AtsTaskService(this); + eventService = new AtsEventServiceImpl(); + } public void setAttributeResolverService(IAttributeResolver attributeResolverService) { @@ -834,4 +838,9 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient { return logger; } + @Override + public IAtsEventService getEventService() { + return eventService; + } + } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsEventServiceImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsEventServiceImpl.java new file mode 100644 index 00000000000..49766752524 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsEventServiceImpl.java @@ -0,0 +1,40 @@ +/* + * Created on Feb 1, 2016 + * + * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE + */ +package org.eclipse.osee.ats.core.client.internal; + +import org.eclipse.osee.ats.api.util.IAtsEventService; +import org.eclipse.osee.framework.plugin.core.PluginUtil; +import org.osgi.framework.BundleContext; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventAdmin; + +/** + * @author Donald G. Dunne + */ +public class AtsEventServiceImpl implements IAtsEventService { + + @Override + public EventAdmin getEventAdmin(String pluginId) { + return (EventAdmin) getBundleContext(pluginId).getServiceReference(EventAdmin.class); + } + + @Override + public void postEvent(Event event, String pluginId) { + getEventAdmin(pluginId).postEvent(event); + } + + @Override + public void sendEvent(Event event, String pluginId) { + getEventAdmin(pluginId).sendEvent(event); + } + + @Override + public BundleContext getBundleContext(String pluginId) { + PluginUtil pluginUtil = new PluginUtil(pluginId); + return pluginUtil.getBundleContext(); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsBranchAccessManager.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsBranchAccessManager.java index 238eca14612..48218871cd8 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsBranchAccessManager.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/access/AtsBranchAccessManager.java @@ -28,6 +28,7 @@ import org.eclipse.osee.ats.core.client.util.AtsUtilClient; import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.ats.internal.Activator; import org.eclipse.osee.ats.internal.AtsClientService; +import org.eclipse.osee.framework.access.AccessControlManager; import org.eclipse.osee.framework.core.data.IAccessContextId; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; @@ -41,17 +42,14 @@ import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache; import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; -import org.eclipse.osee.framework.skynet.core.event.OseeEventService; import org.eclipse.osee.framework.skynet.core.event.filter.ArtifactTypeEventFilter; 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.IAccessControlEventListener; 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; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifact; import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; /** * This class will return access context ids related to editing artifacts stored on a team workflow's working branch. @@ -61,10 +59,10 @@ import org.eclipse.osee.framework.skynet.core.event.model.Sender; * <br> * Access is determined from "Access Context Id" value stored on Team Workflow, if not there, then Actionable Items, if * not there, then Team Defs. - * + * * @author Donald G. Dunne */ -public class AtsBranchAccessManager implements IArtifactEventListener, IAccessControlEventListener { +public class AtsBranchAccessManager implements IArtifactEventListener, EventHandler { // Cache to store artifact guid to context id list so don't have to re-compute private final Map<Long, Collection<IAccessContextId>> branchUuidToContextIdCache = @@ -76,21 +74,13 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo private final RoleContextProvider roleContextProvider; private volatile long cacheUpdated = 0; - private final OseeEventService eventService; - - public AtsBranchAccessManager(OseeEventService eventService) { - this(eventService, null); - + public AtsBranchAccessManager() { + // Available for osgi instantiation + this(null); } - public AtsBranchAccessManager(OseeEventService eventService, RoleContextProvider roleContextProvider) { - this.eventService = eventService; + public AtsBranchAccessManager(RoleContextProvider roleContextProvider) { this.roleContextProvider = roleContextProvider; - eventService.addListener(EventQosType.NORMAL, this); - } - - public void dispose() { - eventService.removeListener(EventQosType.NORMAL, this); } /** @@ -240,13 +230,6 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo } @Override - public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) { - if (accessControlEvent.getEventType() == AccessControlEventType.BranchAccessControlModified) { - clearCache(); - } - } - - @Override public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { for (EventBasicGuidArtifact guidArt : artifactEvent.getArtifacts()) { if (atsConfigArtifactTypes.contains(guidArt.getArtTypeGuid())) { @@ -266,4 +249,13 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo } } + @Override + public void handleEvent(Event event) { + try { + clearCache(); + } catch (Exception ex) { + OseeLog.log(AccessControlManager.class, Level.SEVERE, ex); + } + } + } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsCmAccessControlProxy.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsCmAccessControlProxy.java index 562ad6f9e1b..2b2f270dcc4 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsCmAccessControlProxy.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsCmAccessControlProxy.java @@ -63,7 +63,6 @@ public class AtsCmAccessControlProxy implements CmAccessControl, HasAccessModel } if (atsBranchObjectManager != null) { - atsBranchObjectManager.dispose(); atsBranchObjectManager = null; } cmService = null; @@ -83,7 +82,7 @@ public class AtsCmAccessControlProxy implements CmAccessControl, HasAccessModel accessModel = new OseeDslAccessModel(interpreter, dslProvider); RoleContextProvider roleAccessProvider = new OseeDslRoleContextProvider(dslProvider); - atsBranchObjectManager = new AtsBranchAccessManager(eventService, roleAccessProvider); + atsBranchObjectManager = new AtsBranchAccessManager(roleAccessProvider); cmService = new AtsCmAccessControl(atsBranchObjectManager); listener = new AtsDslProviderUpdateListener(dslProvider); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranch.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranch.java index 16bccac7ad8..7033824c50d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranch.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranch.java @@ -21,6 +21,7 @@ import org.eclipse.osee.ats.api.data.AtsArtifactTypes; import org.eclipse.osee.ats.core.client.branch.AtsBranchUtil; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowManager; +import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.ats.internal.Activator; import org.eclipse.osee.ats.internal.AtsClientService; import org.eclipse.osee.ats.util.AtsBranchManager; @@ -36,13 +37,13 @@ import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.SystemGroup; import org.eclipse.osee.framework.skynet.core.User; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; -import org.eclipse.osee.framework.skynet.core.event.listener.IAccessControlEventListener; import org.eclipse.osee.framework.skynet.core.event.listener.IArtifactEventListener; import org.eclipse.osee.framework.skynet.core.event.listener.IBranchEventListener; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; -import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEventType; +import org.eclipse.osee.framework.skynet.core.event.model.AccessTopicEventType; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event.model.BranchEvent; import org.eclipse.osee.framework.skynet.core.event.model.BranchEventType; @@ -65,12 +66,17 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; +import org.osgi.framework.BundleContext; +import org.osgi.service.event.EventConstants; +import org.osgi.service.event.EventHandler; /** + * TopicHandler for {@link AccessEventTopicType.ACCESS_BRANCH_MODIFIED} + * * @author Megumi Telles * @author Donald G. Dunne */ -public class XWorkingBranch extends GenericXWidget implements IArtifactWidget, IAccessControlEventListener, IArtifactEventListener, IBranchEventListener { +public class XWorkingBranch extends GenericXWidget implements IArtifactWidget, IArtifactEventListener, IBranchEventListener, EventHandler { private TeamWorkFlowArtifact teamArt; private Button createBranchButton; @@ -244,6 +250,11 @@ public class XWorkingBranch extends GenericXWidget implements IArtifactWidget, I refreshLockImage(); refreshLabel(); refreshEnablement(); + + BundleContext context = AtsClientService.get().getEventService().getBundleContext(Activator.PLUGIN_ID); + context.registerService(EventHandler.class.getName(), this, + AtsUtilCore.hashTable(EventConstants.EVENT_TOPIC, AccessTopicEventType.ACCESS_BRANCH_MODIFIED.getTopic())); + } private void refreshLockImage() { @@ -326,9 +337,6 @@ public class XWorkingBranch extends GenericXWidget implements IArtifactWidget, I } else { AccessControlManager.setPermission(SystemGroup.Everyone.getArtifact(), branch, PermissionEnum.READ); } - AccessControlEvent event = new AccessControlEvent(); - event.setEventType(AccessControlEventType.BranchAccessControlModified); - OseeEventManager.kickAccessControlArtifactsEvent(this, event); AWorkbench.popup(String.format("Branch set to [%s]", !isLocked ? "Locked" : "NOT Locked")); } } catch (OseeCoreException ex) { @@ -465,9 +473,13 @@ public class XWorkingBranch extends GenericXWidget implements IArtifactWidget, I } @Override - public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) { - if (accessControlEvent.getEventType() == AccessControlEventType.BranchAccessControlModified) { - refreshOnBranchEvent(); + public void handleEvent(org.osgi.service.event.Event event) { + IOseeBranch branch = teamArt.getBranch(); + if (branch != null) { + AccessControlEvent accessEvent = EventUtil.getTopicJson(event, AccessControlEvent.class); + if (accessEvent.isForBranch(branch)) { + refreshOnBranchEvent(); + } } } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranchButtonLock.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranchButtonLock.java index 19486c306fc..ddf2ea79f32 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranchButtonLock.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/XWorkingBranchButtonLock.java @@ -21,11 +21,8 @@ import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.SystemGroup; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.listener.IAccessControlEventListener; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; -import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEventType; -import org.eclipse.osee.framework.skynet.core.event.model.Sender; import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; import org.eclipse.osee.framework.ui.skynet.FrameworkImage; import org.eclipse.osee.framework.ui.swt.ImageManager; @@ -34,11 +31,14 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; +import org.osgi.service.event.EventHandler; /** + * TopicHandler for {@link AccessEventTopicType.ACCESS_BRANCH_MODIFIED} + * * @author Shawn F. Cook */ -public class XWorkingBranchButtonLock extends XWorkingBranchButtonAbstract implements IAccessControlEventListener { +public class XWorkingBranchButtonLock extends XWorkingBranchButtonAbstract implements EventHandler { public static String WIDGET_NAME = "XWorkingBranchButtonLock"; @@ -114,9 +114,6 @@ public class XWorkingBranchButtonLock extends XWorkingBranchButtonAbstract imple } else { AccessControlManager.setPermission(SystemGroup.Everyone.getArtifact(), branch, PermissionEnum.READ); } - AccessControlEvent event = new AccessControlEvent(); - event.setEventType(AccessControlEventType.BranchAccessControlModified); - OseeEventManager.kickAccessControlArtifactsEvent(this, event); AWorkbench.popup(String.format("Branch set to [%s]", !isLocked ? "Locked" : "NOT Locked")); } } catch (OseeCoreException ex) { @@ -125,9 +122,13 @@ public class XWorkingBranchButtonLock extends XWorkingBranchButtonAbstract imple } @Override - public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) { - if (accessControlEvent.getEventType() == AccessControlEventType.BranchAccessControlModified) { - refreshWorkingBranchWidget(); + public void handleEvent(org.osgi.service.event.Event event) { + Branch branch = getTeamArt().getWorkingBranch(); + if (branch != null) { + AccessControlEvent accessEvent = EventUtil.getTopicJson(event, AccessControlEvent.class); + if (accessEvent.isForBranch(branch)) { + refreshWorkingBranchWidget(); + } } } diff --git a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.artifact.topic.handler.xml b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.artifact.topic.handler.xml index 0ebc0475822..17351d7417a 100644 --- a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.artifact.topic.handler.xml +++ b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.artifact.topic.handler.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true"> <implementation class="org.eclipse.osee.framework.access.internal.AccessArtifactTopicEventHandler"/> <service> <provide interface="org.osgi.service.event.EventHandler"/> diff --git a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.branch.topic.handler.xml b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.branch.topic.handler.xml index f1cef7381b5..04bb640f595 100644 --- a/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.branch.topic.handler.xml +++ b/plugins/org.eclipse.osee.framework.access/OSGI-INF/access.branch.topic.handler.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true"> <implementation class="org.eclipse.osee.framework.access.internal.AccessBranchTopicEventHandler"/> <service> <provide interface="org.osgi.service.event.EventHandler"/> 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 7dd4b303315..5ab517e4051 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 @@ -74,8 +74,8 @@ 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; -import org.eclipse.osee.framework.skynet.core.event.model.AccessTopicEventType; import org.eclipse.osee.framework.skynet.core.event.model.AccessTopicEventPayload; +import org.eclipse.osee.framework.skynet.core.event.model.AccessTopicEventType; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event.model.Sender; import org.eclipse.osee.framework.skynet.core.utility.DbUtil; @@ -661,6 +661,7 @@ public class AccessControlService implements IAccessControlService { int subjectId = data.getSubject().getArtId(); AccessObject accessControlledObject = data.getObject(); + boolean isArtifact = accessControlledObject instanceof ArtifactAccessObject; if (removeFromDb) { accessControlledObject.removeFromDatabase(subjectId); } @@ -672,9 +673,10 @@ public class AccessControlService implements IAccessControlService { AccessTopicEventPayload event = new AccessTopicEventPayload(); event.setBranchUuid(accessControlledObject.getBranchId()); - if (accessControlledObject instanceof ArtifactAccessObject) { + if (isArtifact) { event.addArtifact(((ArtifactAccessObject) accessControlledObject).getArtId()); } + OseeEventManager.kickAccessTopicEvent(this, event, AccessTopicEventType.ACCESS_ARTIFACT_MODIFIED); } @@ -772,11 +774,9 @@ public class AccessControlService implements IAccessControlService { getJdbcClient().runPreparedUpdate(DELETE_BRANCH_ACL_FROM_BRANCH, theBranch.getUuid()); try { - if (eventService != null) { - AccessControlEvent event = new AccessControlEvent(); - event.setEventType(AccessControlEventType.BranchAccessControlModified); - eventService.send(this, event); - } + AccessTopicEventPayload event = new AccessTopicEventPayload(); + event.setBranchUuid(branch.getUuid()); + OseeEventManager.kickAccessTopicEvent(this, event, AccessTopicEventType.ACCESS_BRANCH_MODIFIED); } catch (Exception ex) { OseeLog.log(AccessControlHelper.class, Level.SEVERE, ex); } diff --git a/plugins/org.eclipse.osee.framework.plugin.core/src/org/eclipse/osee/framework/plugin/core/PluginUtil.java b/plugins/org.eclipse.osee.framework.plugin.core/src/org/eclipse/osee/framework/plugin/core/PluginUtil.java index bcf9b8d0679..9b3acec32e4 100644 --- a/plugins/org.eclipse.osee.framework.plugin.core/src/org/eclipse/osee/framework/plugin/core/PluginUtil.java +++ b/plugins/org.eclipse.osee.framework.plugin.core/src/org/eclipse/osee/framework/plugin/core/PluginUtil.java @@ -21,6 +21,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.plugin.core.util.OseeData; import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; /** * @author Ryan D. Brooks @@ -43,7 +44,7 @@ public class PluginUtil { /** * finds a resource in the plugin bundle and writes it out to the default persistent storage area as a regular file - * + * * @return Return plugin file reference */ public File getPluginFile(String path) throws IOException { @@ -85,4 +86,9 @@ public class PluginUtil { return inputs; } + public BundleContext getBundleContext() { + Bundle bundle = Platform.getBundle(pluginId); + return bundle.getBundleContext(); + } + } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEventType.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEventType.java index 2831dfbf425..cbeb3e58811 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEventType.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEventType.java @@ -14,7 +14,6 @@ package org.eclipse.osee.framework.skynet.core.event.model; * @author Donald G. Dunne */ public enum AccessControlEventType { - BranchAccessControlModified(EventType.LocalAndRemote, "ADTfjBxPSRAM5raZwywA", 10), ArtifactsLocked(EventType.LocalAndRemote, "AAn_QHnJpWky8xcyKEgA", 15), ArtifactsUnlocked(EventType.LocalAndRemote, "AFRkIPF_y3ExB4XCyPgA", 20), UserAuthenticated(EventType.LocalOnly, "AFRkIhbm0BbIGKALcKQA", 25); |