diff options
author | Roberto E. Escobar | 2012-04-28 05:03:25 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2012-04-28 05:03:25 +0000 |
commit | 65f6159a5fdc57fb788c992d8be81636a9ad0351 (patch) | |
tree | 15d9a64d7c32fec05a3d2cb8b171a1636d475f91 | |
parent | bf9c5e0efcf32fcbeca4f871f4f12203c53e3d31 (diff) | |
download | org.eclipse.osee-65f6159a5fdc57fb788c992d8be81636a9ad0351.tar.gz org.eclipse.osee-65f6159a5fdc57fb788c992d8be81636a9ad0351.tar.xz org.eclipse.osee-65f6159a5fdc57fb788c992d8be81636a9ad0351.zip |
feature[ats_VGR8B]: Redesign InternalOseeEventManager to fix initialization
Redesign OseeEventManager
Make OseeEventManagerService
Fix access control service initialization
Re-enable skynet core tests
79 files changed, 2457 insertions, 1596 deletions
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsCacheManager.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsCacheManager.java index 9d1829c60bf..2fc98535540 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsCacheManager.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsCacheManager.java @@ -30,6 +30,7 @@ import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.logging.OseeLog; 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.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.IArtifactEventListener; @@ -181,6 +182,6 @@ public class AtsCacheManager implements IArtifactEventListener { @Override public List<? extends IEventFilter> getEventFilters() { - return Arrays.asList(OseeEventManager.getCommonBranchFilter()); + return Arrays.asList(EventUtil.getCommonBranchFilter()); } } diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsUtilCore.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsUtilCore.java index 57313e3dfbe..69452b12a25 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsUtilCore.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsUtilCore.java @@ -28,7 +28,7 @@ import org.eclipse.osee.framework.logging.OseeLog; 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.EventUtil; 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.utility.DbUtil; @@ -139,7 +139,7 @@ public class AtsUtilCore { public synchronized static List<IEventFilter> getAtsObjectEventFilters() { try { if (atsObjectEventFilter.isEmpty()) { - atsObjectEventFilter.add(OseeEventManager.getCommonBranchFilter()); + atsObjectEventFilter.add(EventUtil.getCommonBranchFilter()); atsObjectEventFilter.add(getAtsObjectArtifactTypeEventFilter()); } } catch (Exception ex) { diff --git a/plugins/org.eclipse.osee.ats.test/src/org/eclipse/osee/ats/access/AtsBranchAccessManagerTest.java b/plugins/org.eclipse.osee.ats.test/src/org/eclipse/osee/ats/access/AtsBranchAccessManagerTest.java index a075ebefd34..57066887005 100644 --- a/plugins/org.eclipse.osee.ats.test/src/org/eclipse/osee/ats/access/AtsBranchAccessManagerTest.java +++ b/plugins/org.eclipse.osee.ats.test/src/org/eclipse/osee/ats/access/AtsBranchAccessManagerTest.java @@ -27,6 +27,7 @@ import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.logging.OseeLog; 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.eclipse.osee.support.test.util.DemoActionableItems; @@ -36,19 +37,39 @@ import org.eclipse.osee.support.test.util.TestUtil; import org.junit.After; 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 method for {@link org.eclipse.osee.ats.access.AtsBranchAccessManager#AtsBranchAccessManager()}. */ @Test public void testAtsBranchAccessManager() { int numListeners = OseeEventManager.getNumberOfListeners(); - new AtsBranchAccessManager(); + new AtsBranchAccessManager(getEventService()); Assert.assertEquals(numListeners + 1, OseeEventManager.getNumberOfListeners()); } @@ -57,7 +78,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testDispose() { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); int numListeners = OseeEventManager.getNumberOfListeners(); mgr.dispose(); Assert.assertEquals(numListeners - 1, OseeEventManager.getNumberOfListeners()); @@ -71,7 +92,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testIsApplicable() throws OseeCoreException { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); Assert.assertFalse(mgr.isApplicable(AtsUtil.getAtsBranch())); Assert.assertFalse(mgr.isApplicable(DemoSawBuilds.SAW_Bld_1)); @@ -90,7 +111,8 @@ public class AtsBranchAccessManagerTest { public void cleanup() throws OseeCoreException { TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) DemoTestUtil.getUncommittedActionWorkflow(DemoWorkType.Requirements); - SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "testGetContextIdArtifact cleanup"); + SkynetTransaction transaction = + TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "testGetContextIdArtifact cleanup"); teamArt.getTeamDefinition().deleteAttributes(CoreAttributeTypes.AccessContextId); teamArt.getTeamDefinition().persist(transaction); for (Artifact art : teamArt.getTeamDefinition().getRelatedArtifacts( @@ -113,7 +135,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testGetContextIdBranch() throws OseeCoreException { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) DemoTestUtil.getUncommittedActionWorkflow(DemoWorkType.Requirements); @@ -171,7 +193,7 @@ public class AtsBranchAccessManagerTest { */ @Test public void testConvertAccessAttributeToGuid() throws OseeCoreException { - AtsBranchAccessManager mgr = new AtsBranchAccessManager(); + AtsBranchAccessManager mgr = new AtsBranchAccessManager(getEventService()); TeamWorkFlowArtifact teamArt = (TeamWorkFlowArtifact) DemoTestUtil.getUncommittedActionWorkflow(DemoWorkType.Requirements); diff --git a/plugins/org.eclipse.osee.ats/OSGI-INF/ats.cm.access.xml b/plugins/org.eclipse.osee.ats/OSGI-INF/ats.cm.access.xml index 363888e0528..9cf386136f1 100644 --- a/plugins/org.eclipse.osee.ats/OSGI-INF/ats.cm.access.xml +++ b/plugins/org.eclipse.osee.ats/OSGI-INF/ats.cm.access.xml @@ -6,4 +6,5 @@ <provide interface="org.eclipse.osee.framework.core.model.access.HasAccessModel"/> </service> <reference bind="setAccessModelInterpreter" cardinality="1..1" interface="org.eclipse.osee.framework.core.dsl.integration.AccessModelInterpreter" name="AccessModelInterpreter" policy="static"/> -</scr:component>
\ No newline at end of file + <reference bind="setEventService" cardinality="1..1" interface="org.eclipse.osee.framework.skynet.core.event.OseeEventService" name="OseeEventService" policy="static"/> +</scr:component> 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 0882f0eb8cf..750bc85f65c 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 @@ -41,9 +41,11 @@ 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.artifact.search.ArtifactQuery; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +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; @@ -67,23 +69,28 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo // Cache to store artifact guid to context id list so don't have to re-compute private final Map<String, Collection<IAccessContextId>> branchGuidToContextIdCache = new HashMap<String, Collection<IAccessContextId>>(50); - long cacheUpdated = 0; - private static List<Long> atsConfigArtifactTypes = Arrays.asList(AtsArtifactTypes.ActionableItem.getGuid(), + + private static final List<Long> atsConfigArtifactTypes = Arrays.asList(AtsArtifactTypes.ActionableItem.getGuid(), AtsArtifactTypes.TeamDefinition.getGuid()); private final RoleContextProvider roleContextProvider; + private volatile long cacheUpdated = 0; + + private final OseeEventService eventService; + + public AtsBranchAccessManager(OseeEventService eventService) { + this(eventService, null); - public AtsBranchAccessManager() { - this(null); } - public AtsBranchAccessManager(RoleContextProvider roleContextProvider) { - OseeEventManager.addListener(this); + public AtsBranchAccessManager(OseeEventService eventService, RoleContextProvider roleContextProvider) { + this.eventService = eventService; this.roleContextProvider = roleContextProvider; + eventService.addListener(EventQosType.NORMAL, this); } public void dispose() { - OseeEventManager.removeListener(this); + eventService.removeListener(EventQosType.NORMAL, this); } private Artifact getAssociatedArtifact(IOseeBranch branch) throws OseeCoreException { @@ -152,7 +159,7 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo * TODO Convert to protected once .test package is removed from ats.test bundle and tests have visibility of this * method without making public. */ - public Collection<IAccessContextId> internalGetFromWorkflow(TeamWorkFlowArtifact teamArt) { + public static Collection<IAccessContextId> internalGetFromWorkflow(TeamWorkFlowArtifact teamArt) { Set<IAccessContextId> contextIds = new HashSet<IAccessContextId>(); try { contextIds.addAll(getFromArtifact(teamArt)); @@ -177,7 +184,7 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo /** * Recursively check artifact and all default hierarchy parents */ - private Collection<IAccessContextId> getFromArtifact(Artifact artifact) { + private static Collection<IAccessContextId> getFromArtifact(Artifact artifact) { Set<IAccessContextId> contextIds = new HashSet<IAccessContextId>(); try { for (String guid : artifact.getAttributesToStringList(CoreAttributeTypes.AccessContextId)) { @@ -199,7 +206,7 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo * ATS "Access Context Id" attribute value can be stored as "guid" or "guid,name" for easy reading. This method * strips ,name out so only guid is returned. */ - private String convertAccessAttributeToGuid(String value) { + private static String convertAccessAttributeToGuid(String value) { return value.split(",")[0]; } @@ -212,14 +219,14 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo return getAtsObjectEventFilters(); } - private static List<IEventFilter> atsObjectEventFilter = new ArrayList<IEventFilter>(2); - private static ArtifactTypeEventFilter atsArtifactTypesFilter = new ArtifactTypeEventFilter( + private static final List<IEventFilter> atsObjectEventFilter = new ArrayList<IEventFilter>(2); + private static final ArtifactTypeEventFilter atsArtifactTypesFilter = new ArtifactTypeEventFilter( AtsArtifactTypes.TeamWorkflow, AtsArtifactTypes.TeamDefinition, AtsArtifactTypes.ActionableItem); private synchronized static List<IEventFilter> getAtsObjectEventFilters() { try { if (atsObjectEventFilter.isEmpty()) { - atsObjectEventFilter.add(OseeEventManager.getCommonBranchFilter()); + atsObjectEventFilter.add(EventUtil.getCommonBranchFilter()); atsObjectEventFilter.add(atsArtifactTypesFilter); } } catch (Exception ex) { @@ -264,4 +271,5 @@ public class AtsBranchAccessManager implements IArtifactEventListener, IAccessCo } } } + } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java index 70c0be56856..81de9734142 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMADetailsSection.java @@ -138,7 +138,7 @@ public class SMADetailsSection extends SectionPart { if (workingBranch == null) { try { // get what would be if branch created - ids = new AtsBranchAccessManager().internalGetFromWorkflow(workflow); + ids = AtsBranchAccessManager.internalGetFromWorkflow(workflow); message = ids.toString(); } catch (Exception ex) { OseeLog.log(Activator.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 b427ca59850..e9ace735800 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 @@ -23,7 +23,8 @@ import org.eclipse.osee.framework.core.model.IBasicArtifact; import org.eclipse.osee.framework.core.model.access.AccessModel; import org.eclipse.osee.framework.core.model.access.HasAccessModel; import org.eclipse.osee.framework.core.services.CmAccessControl; -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; import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; /** @@ -36,26 +37,31 @@ public class AtsCmAccessControlProxy implements CmAccessControl, HasAccessModel private AccessModelInterpreter accessModelInterpreter; private CmAccessControl cmService; private AccessModel accessModel; + private OseeEventService eventService; public void setAccessModelInterpreter(AccessModelInterpreter accessModelInterpreter) { this.accessModelInterpreter = accessModelInterpreter; } + public void setEventService(OseeEventService eventService) { + this.eventService = eventService; + } + public void start() { OseeDslProvider dslProvider = new AtsAccessOseeDslProvider("ats:/xtext/cm.access.osee"); accessModel = new OseeDslAccessModel(accessModelInterpreter, dslProvider); RoleContextProvider roleAccessProvider = new OseeDslRoleContextProvider(dslProvider); - atsBranchObjectManager = new AtsBranchAccessManager(roleAccessProvider); + atsBranchObjectManager = new AtsBranchAccessManager(eventService, roleAccessProvider); cmService = new AtsCmAccessControl(atsBranchObjectManager); listener = new AtsDslProviderUpdateListener(dslProvider); - OseeEventManager.addListener(listener); + eventService.addListener(EventQosType.NORMAL, listener); } public void stop() { if (listener != null) { - OseeEventManager.removeListener(listener); + eventService.removeListener(EventQosType.NORMAL, listener); listener = null; } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java index bdc39d4af17..71e091abd9f 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/defect/XDefectViewer.java @@ -40,6 +40,7 @@ import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.logging.OseeLevel; import org.eclipse.osee.framework.logging.OseeLog; 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.IArtifactEventListener; @@ -328,7 +329,8 @@ public class XDefectViewer extends GenericXWidget implements IArtifactWidget, IA MessageDialog.QUESTION, new String[] {"OK", "Cancel"}, 0); ed.setFillVertically(true); if (ed.open() == 0) { - SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Import Review Defects"); + SkynetTransaction transaction = + TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Import Review Defects"); for (String str : ed.getEntry().split("\n")) { str = str.replaceAll("\r", ""); if (!str.equals("")) { @@ -360,7 +362,8 @@ public class XDefectViewer extends GenericXWidget implements IArtifactWidget, IA "Are You Sure You Wish to Delete the Defects(s):\n\n" + builder.toString()); if (delete) { try { - SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Delete Review Defects"); + SkynetTransaction transaction = + TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Delete Review Defects"); deleteDefectHelper(items, persist, transaction); transaction.execute(); } catch (Exception ex) { @@ -387,7 +390,8 @@ public class XDefectViewer extends GenericXWidget implements IArtifactWidget, IA ed.setFillVertically(true); if (ed.open() == 0) { try { - SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Add Review Defect"); + SkynetTransaction transaction = + TransactionManager.createTransaction(AtsUtil.getAtsBranch(), "Add Review Defect"); ReviewDefectItem item = new ReviewDefectItem(); item.setDescription(ed.getEntry()); if (ed.getSeverity() != null) { @@ -566,7 +570,7 @@ public class XDefectViewer extends GenericXWidget implements IArtifactWidget, IA @Override public List<? extends IEventFilter> getEventFilters() { - return Arrays.asList(OseeEventManager.getCommonBranchFilter(), AtsUtilCore.getReviewArtifactTypeEventFilter()); + return Arrays.asList(EventUtil.getCommonBranchFilter(), AtsUtilCore.getReviewArtifactTypeEventFilter()); } @Override diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java index c298e7c5f4d..6acb39e67b8 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/role/XUserRoleViewer.java @@ -39,6 +39,7 @@ import org.eclipse.osee.framework.jdk.core.util.AHTML; import org.eclipse.osee.framework.logging.OseeLevel; import org.eclipse.osee.framework.logging.OseeLog; 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.IArtifactEventListener; @@ -295,7 +296,8 @@ public class XUserRoleViewer extends GenericXWidget implements IArtifactWidget, "Are You Sure You Wish to Delete the Roles(s):\n\n" + builder.toString()); if (delete) { try { - SkynetTransaction transaction = TransactionManager.createTransaction(reviewArt.getBranch(), "Delete Review Roles"); + SkynetTransaction transaction = + TransactionManager.createTransaction(reviewArt.getBranch(), "Delete Review Roles"); removeUserRoleHelper(items, transaction); transaction.execute(); } catch (Exception ex) { @@ -316,7 +318,8 @@ public class XUserRoleViewer extends GenericXWidget implements IArtifactWidget, public void handleNewUserRole() { try { - SkynetTransaction transaction = TransactionManager.createTransaction(reviewArt.getArtifact().getBranch(), "Add Review Roles"); + SkynetTransaction transaction = + TransactionManager.createTransaction(reviewArt.getArtifact().getBranch(), "Add Review Roles"); roleMgr.addOrUpdateUserRole(new UserRole()); roleMgr.saveToArtifact(transaction); transaction.execute(); @@ -486,7 +489,7 @@ public class XUserRoleViewer extends GenericXWidget implements IArtifactWidget, @Override public List<? extends IEventFilter> getEventFilters() { - return Arrays.asList(OseeEventManager.getCommonBranchFilter(), AtsUtilCore.getReviewArtifactTypeEventFilter()); + return Arrays.asList(EventUtil.getCommonBranchFilter(), AtsUtilCore.getReviewArtifactTypeEventFilter()); } @Override diff --git a/plugins/org.eclipse.osee.client.integration.tests/MasterTestSuite_Demo.launch b/plugins/org.eclipse.osee.client.integration.tests/MasterTestSuite_Demo.launch index 1c542f1ebdf..4d480075b8f 100644 --- a/plugins/org.eclipse.osee.client.integration.tests/MasterTestSuite_Demo.launch +++ b/plugins/org.eclipse.osee.client.integration.tests/MasterTestSuite_Demo.launch @@ -38,7 +38,7 @@ <stringAttribute key="selected_target_plugins" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,ch.qos.logback.slf4j@default:false,com.google.collect@default:default,com.google.inject@default:default,com.ibm.icu@default:default,com.jcraft.jsch@default:default,com.lowagie.text@default:default,de.itemis.xtext.antlr@default:default,javax.activation@default:default,javax.mail.glassfish@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml@default:default,org.antlr.generator@default:default,org.antlr.runtime@default:default,org.aopalliance@default:default,org.apache.ant@default:default,org.apache.commons.cli@default:default,org.apache.commons.codec@default:default,org.apache.commons.el@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging*1.0.4.v201101211617@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.apache.commons.net@default:default,org.apache.jasper@default:default,org.apache.log4j@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core@default:default,org.apache.lucene.highlighter@default:default,org.apache.lucene.memory@default:default,org.apache.lucene.misc@default:default,org.apache.lucene.queries@default:default,org.apache.lucene.snowball@default:default,org.apache.lucene.spellchecker@default:default,org.apache.lucene@default:default,org.apache.oro@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.eclipse.ant.core@default:default,org.eclipse.ant.launching@default:default,org.eclipse.ant.ui@default:default,org.eclipse.birt.chart.engine@default:default,org.eclipse.birt.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.boot@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.externaltools@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.cvs@default:default,org.eclipse.debug.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.draw2d@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.emf.codegen@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.compare.diff@default:default,org.eclipse.emf.compare.match@default:default,org.eclipse.emf.compare.ui@default:default,org.eclipse.emf.compare@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.editor@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.mwe.core@default:default,org.eclipse.emf.mwe.utils@default:default,org.eclipse.emf.mwe2.language@default:default,org.eclipse.emf.mwe2.launch@default:default,org.eclipse.emf.mwe2.lib@default:default,org.eclipse.emf.mwe2.runtime@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.launcher.win32.win32.x86_64@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security.win32.x86_64@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.util@default:default,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.gef@default:default,org.eclipse.help.appserver@default:default,org.eclipse.help.base@default:default,org.eclipse.help.ui@default:default,org.eclipse.help.webapp@default:default,org.eclipse.help@default:default,org.eclipse.jdt.apt.core@default:default,org.eclipse.jdt.apt.pluggable.core@default:default,org.eclipse.jdt.apt.ui@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.doc.isv@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.jdt.junit.core@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.jdt.junit4.runtime@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jdt@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.nebula.widgets.calendarcombo@default:default,org.eclipse.nebula.widgets.xviewer@default:default,org.eclipse.osee.framework.svn@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.pde.junit.runtime@default:default,org.eclipse.pde.launching@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.pde.ui@default:default,org.eclipse.pde@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.platform.doc.user@default:default,org.eclipse.platform@default:default,org.eclipse.rcp@default:default,org.eclipse.sdk@default:default,org.eclipse.search@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.team.cvs.core@default:default,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.team.svn.core@default:default,org.eclipse.team.svn.ui@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.console@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.win32@default:false,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.eclipse.update.core.win32@default:false,org.eclipse.update.core@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.update.ui@default:default,org.eclipse.xpand@default:default,org.eclipse.xtend.typesystem.emf@default:default,org.eclipse.xtend@default:default,org.eclipse.xtext.builder@default:default,org.eclipse.xtext.common.types.ui@default:default,org.eclipse.xtext.common.types@default:default,org.eclipse.xtext.generator@default:default,org.eclipse.xtext.logging@default:false,org.eclipse.xtext.ui.shared@default:default,org.eclipse.xtext.ui@default:default,org.eclipse.xtext.util@default:default,org.eclipse.xtext.xbase.lib@default:default,org.eclipse.xtext.xtend2.lib@default:default,org.eclipse.xtext@default:default,org.eclipse.zest.core@default:default,org.eclipse.zest.layouts@default:default,org.h2@default:default,org.hamcrest.core@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default,org.mozilla.javascript@default:default,org.polarion.eclipse.team.svn.connector.svnkit16@default:default,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.slf4j.api@default:default,org.slf4j.jcl@default:default"/> <stringAttribute key="selected_workspace_plugins" value="jms.activemq.launch@default:default,jms.libraries@default:default,net.jini@default:default,org.eclipse.osee.ats.config.demo.test@default:false,org.eclipse.osee.ats.config.demo@default:default,org.eclipse.osee.ats.core.test@default:false,org.eclipse.osee.ats.core@default:default,org.eclipse.osee.ats.dsl.ui@default:default,org.eclipse.osee.ats.dsl@default:default,org.eclipse.osee.ats.help.ui@default:default,org.eclipse.osee.ats.test@default:false,org.eclipse.osee.ats@default:default,org.eclipse.osee.client.integration.tests@default:default,org.eclipse.osee.coverage.help.ui@default:default,org.eclipse.osee.coverage.test@default:false,org.eclipse.osee.coverage@default:default,org.eclipse.osee.define.test@default:false,org.eclipse.osee.define@default:default,org.eclipse.osee.demo.db.connection@default:default,org.eclipse.osee.framework.access.provider@default:default,org.eclipse.osee.framework.access.test@default:false,org.eclipse.osee.framework.access@default:default,org.eclipse.osee.framework.core.client@default:default,org.eclipse.osee.framework.core.dsl.edit@default:default,org.eclipse.osee.framework.core.dsl.integration.test@default:false,org.eclipse.osee.framework.core.dsl.integration@default:default,org.eclipse.osee.framework.core.dsl.ui.integration.test@default:false,org.eclipse.osee.framework.core.dsl.ui.integration@default:default,org.eclipse.osee.framework.core.dsl.ui@default:default,org.eclipse.osee.framework.core.dsl@default:default,org.eclipse.osee.framework.core.message.test@default:false,org.eclipse.osee.framework.core.message@default:default,org.eclipse.osee.framework.core.model.test@default:false,org.eclipse.osee.framework.core.model@default:default,org.eclipse.osee.framework.core.test@default:false,org.eclipse.osee.framework.core@default:default,org.eclipse.osee.framework.database.init@default:default,org.eclipse.osee.framework.database.test@default:false,org.eclipse.osee.framework.database@default:default,org.eclipse.osee.framework.h2@default:default,org.eclipse.osee.framework.help.ui@default:default,org.eclipse.osee.framework.jdk.core.test@default:false,org.eclipse.osee.framework.jdk.core@default:default,org.eclipse.osee.framework.jini@default:default,org.eclipse.osee.framework.lifecycle.test@default:false,org.eclipse.osee.framework.lifecycle@default:default,org.eclipse.osee.framework.logging.test@default:false,org.eclipse.osee.framework.logging@default:default,org.eclipse.osee.framework.messaging.event.res.test@default:false,org.eclipse.osee.framework.messaging.event.res@default:default,org.eclipse.osee.framework.messaging.event.skynet@default:default,org.eclipse.osee.framework.messaging.test@default:false,org.eclipse.osee.framework.messaging@default:default,org.eclipse.osee.framework.plugin.core@default:default,org.eclipse.osee.framework.skynet.core.test@default:false,org.eclipse.osee.framework.skynet.core@default:default,org.eclipse.osee.framework.templates@default:default,org.eclipse.osee.framework.ui.admin@default:default,org.eclipse.osee.framework.ui.branch.graph@default:default,org.eclipse.osee.framework.ui.data.model.editor@default:default,org.eclipse.osee.framework.ui.jdk@default:default,org.eclipse.osee.framework.ui.plugin@default:default,org.eclipse.osee.framework.ui.product@default:default,org.eclipse.osee.framework.ui.service.control@default:default,org.eclipse.osee.framework.ui.skynet.test@default:false,org.eclipse.osee.framework.ui.skynet@default:default,org.eclipse.osee.framework.ui.swt@default:default,org.eclipse.osee.framework.ui.workspacebundleloader@default:default,org.eclipse.osee.framework.ui.ws@default:default,org.eclipse.osee.logback.config@default:false,org.eclipse.osee.ote.client.msg@default:default,org.eclipse.osee.ote.client@default:default,org.eclipse.osee.ote.connection.jini@default:default,org.eclipse.osee.ote.connection.service@default:default,org.eclipse.osee.ote.core.test@default:false,org.eclipse.osee.ote.core@default:default,org.eclipse.osee.ote.define@default:default,org.eclipse.osee.ote.message.test@default:false,org.eclipse.osee.ote.message@default:default,org.eclipse.osee.ote.messaging.dds@default:default,org.eclipse.osee.ote.runtimeManager@default:default,org.eclipse.osee.ote.ui.define@default:default,org.eclipse.osee.ote.ui.markers@default:default,org.eclipse.osee.ote.ui.test.manager@default:default,org.eclipse.osee.ote.ui@default:default,org.eclipse.osee.support.test.util@default:default,org.postgresql.driver@default:default"/> <booleanAttribute key="show_selected_only" value="false"/> -<stringAttribute key="timestamp" value="1331763847781"/> +<stringAttribute key="timestamp" value="1335588896076"/> <booleanAttribute key="tracing" value="false"/> <booleanAttribute key="useCustomFeatures" value="false"/> <booleanAttribute key="useDefaultConfig" value="true"/> diff --git a/plugins/org.eclipse.osee.framework.access.provider/OSGI-INF/framework.access.control.xml b/plugins/org.eclipse.osee.framework.access.provider/OSGI-INF/framework.access.control.xml index 08d31ec85d8..942a69aceab 100644 --- a/plugins/org.eclipse.osee.framework.access.provider/OSGI-INF/framework.access.control.xml +++ b/plugins/org.eclipse.osee.framework.access.provider/OSGI-INF/framework.access.control.xml @@ -7,4 +7,5 @@ </service> <property name="default" type="Boolean" value="true"/> <reference bind="setAccessModelInterpreter" cardinality="1..1" interface="org.eclipse.osee.framework.core.dsl.integration.AccessModelInterpreter" name="AccessModelInterpreter" policy="static"/> + <reference bind="setEventService" cardinality="1..1" interface="org.eclipse.osee.framework.skynet.core.event.OseeEventService" name="OseeEventService" policy="static"/> </scr:component> diff --git a/plugins/org.eclipse.osee.framework.access.provider/src/org/eclipse/osee/framework/access/provider/internal/FrameworkAccessControlProxy.java b/plugins/org.eclipse.osee.framework.access.provider/src/org/eclipse/osee/framework/access/provider/internal/FrameworkAccessControlProxy.java index faf79d9c9d4..76840c6398d 100644 --- a/plugins/org.eclipse.osee.framework.access.provider/src/org/eclipse/osee/framework/access/provider/internal/FrameworkAccessControlProxy.java +++ b/plugins/org.eclipse.osee.framework.access.provider/src/org/eclipse/osee/framework/access/provider/internal/FrameworkAccessControlProxy.java @@ -29,11 +29,12 @@ import org.eclipse.osee.framework.core.services.CmAccessControl; 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.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.listener.IEventListener; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; @@ -48,11 +49,16 @@ public class FrameworkAccessControlProxy implements CmAccessControl, HasAccessMo private CmAccessControl frameworkAccessControl; private AccessModel accessModel; private IEventListener listener; + private OseeEventService eventService; public void setAccessModelInterpreter(AccessModelInterpreter interpreter) { this.interpreter = interpreter; } + public void setEventService(OseeEventService eventService) { + this.eventService = eventService; + } + public void start() { FrameworkDslProvider frameworkDslProvider = new FrameworkDslProvider("osee:/xtext/framework.access.osee"); RoleContextProvider roleProvider = new OseeDslRoleContextProvider(frameworkDslProvider); @@ -61,12 +67,12 @@ public class FrameworkAccessControlProxy implements CmAccessControl, HasAccessMo frameworkAccessControl = new FrameworkAccessControl(roleProvider); listener = new DslUpdateListener(frameworkDslProvider); - OseeEventManager.addListener(listener); + eventService.addListener(EventQosType.NORMAL, listener); } public void stop() { if (listener != null) { - OseeEventManager.removeListener(listener); + eventService.removeListener(EventQosType.NORMAL, listener); listener = null; } frameworkAccessControl = null; 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 @@ <reference bind="setDbService" cardinality="1..1" interface="org.eclipse.osee.framework.database.IOseeDatabaseService" name="IOseeDatabaseService" policy="static"/> <reference bind="setCachingService" cardinality="1..1" interface="org.eclipse.osee.framework.core.services.IOseeCachingService" name="IOseeCachingService" policy="static"/> <reference bind="setIdentityService" cardinality="1..1" interface="org.eclipse.osee.framework.core.services.IdentityService" name="IdentityService" policy="static"/> -</scr:component>
\ No newline at end of file + <reference bind="setEventService" cardinality="1..1" interface="org.eclipse.osee.framework.skynet.core.event.OseeEventService" name="OseeEventService" policy="static"/> +</scr:component> 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 @@ <service> <provide interface="org.eclipse.osee.framework.access.IAccessProvider"/> </service> - <reference bind="setAccessControlService" cardinality="1..1" interface="org.eclipse.osee.framework.core.services.IAccessControlService" name="IAccessControlService" policy="static"/> </scr:component> 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 @@ -<?xml version="1.0" encoding="UTF-8"?> -<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osee.framework.access.internal.AccessControlHelper"> - <implementation class="org.eclipse.osee.framework.access.internal.AccessControlHelper"/> - <reference bind="setAccessControlService" cardinality="1..1" interface="org.eclipse.osee.framework.core.services.IAccessControlService" name="IAccessControlService" policy="static"/> -</scr:component> 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<AccessControlData> 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> T getService(Class<T> clazz) throws OseeCoreException { + BundleContext context = getBundleContext(); + Conditions.checkNotNull(context, "bundleContext"); + ServiceReference<T> 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<IBasicArtifact<Artifact>>(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<IOseeBranch>(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<IAccessControlService> 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<IBasicArtifact<Artifact>>(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<IOseeBranch>(branch, userPermission, Scope.createLegacyScope(), reason)); } + }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/FrameworkCore_Demo_Suite.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/FrameworkCore_Demo_Suite.java index 505a9c334c7..529537188ac 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/FrameworkCore_Demo_Suite.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/FrameworkCore_Demo_Suite.java @@ -13,54 +13,94 @@ package org.eclipse.osee.framework.skynet.core; import static org.junit.Assert.assertTrue; import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.jdk.core.util.OseeProperties; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCacheQueryTest; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPurgeTest; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTestSuite; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeInheritanceTest; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact_getLastModified; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact_setAttributeValues; +import org.eclipse.osee.framework.skynet.core.artifact.AttributePurgeTest; +import org.eclipse.osee.framework.skynet.core.artifact.BranchPurgeTest; +import org.eclipse.osee.framework.skynet.core.artifact.BranchStateTest; +import org.eclipse.osee.framework.skynet.core.artifact.ChangeManagerTest; +import org.eclipse.osee.framework.skynet.core.artifact.DuplicateHridTest; +import org.eclipse.osee.framework.skynet.core.artifact.NativeArtifactTest; +import org.eclipse.osee.framework.skynet.core.artifact.PurgeTransactionTest; +import org.eclipse.osee.framework.skynet.core.artifact.RelationDeletionTest; +import org.eclipse.osee.framework.skynet.core.artifact.RelationOrderingTest; +import org.eclipse.osee.framework.skynet.core.artifact.ReplaceAttributeWithTest; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactLoaderTest; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQueryTestDemo; +import org.eclipse.osee.framework.skynet.core.branch.BranchSuite; +import org.eclipse.osee.framework.skynet.core.event.filter.ArtifactEventFiltersTest; +import org.eclipse.osee.framework.skynet.core.event.filter.BranchEventFiltersTest; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEventLoopbackTest; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEventTest; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEventLoopbackTest; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEventTest; +import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifactTest; +import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidRelationTest; +import org.eclipse.osee.framework.skynet.core.event.model.EventChangeTypeBasicGuidArtifactTest; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEventLocalTest; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEventRemoteTest; import org.eclipse.osee.framework.skynet.core.event.systems.FrameworkEventToRemoteEventListenerTest; +import org.eclipse.osee.framework.skynet.core.importing.ImportingSuite; +import org.eclipse.osee.framework.skynet.core.importing.parsers.ParsersSuite; +import org.eclipse.osee.framework.skynet.core.internal.event.EventTestSuite; +import org.eclipse.osee.framework.skynet.core.relation.CrossBranchLinkTest; +import org.eclipse.osee.framework.skynet.core.relation.RelationTestSuite; +import org.eclipse.osee.framework.skynet.core.revision.ConflictTest; +import org.eclipse.osee.framework.skynet.core.transaction.TransactionTestSuite; +import org.eclipse.osee.framework.skynet.core.utility.CsvArtifactTest; +import org.eclipse.osee.framework.skynet.core.word.UpdateBookmarkIdTest; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) -@Suite.SuiteClasses({FrameworkEventToRemoteEventListenerTest.class, -// BranchSuite.class, -// UserManagerTest.class, -// ReplaceAttributeWithTest.class, -// AttributePurgeTest.class, -// CrossBranchLinkTest.class, -// UpdateBookmarkIdTest.class, -// ArtifactEventFiltersTest.class, -// BranchEventFiltersTest.class, -// BranchEventTest.class, -// BranchEventLoopbackTest.class, -// ArtifactLoaderTest.class, -// ArtifactEventTest.class, -// ArtifactEventLoopbackTest.class, -// TransactionEventLocalTest.class, -// TransactionEventRemoteTest.class, -// EventBasicGuidArtifactTest.class, -// EventBasicGuidRelationTest.class, -// EventChangeTypeBasicGuidArtifactTest.class, -// ArtifactQueryTestDemo.class, -// TransactionTestSuite.class, -// ArtifactTestSuite.class, -// RelationTestSuite.class, -// ArtifactTypeInheritanceTest.class, -// ArtifactPurgeTest.class, -// BranchPurgeTest.class, -// PurgeTransactionTest.class, -// Artifact_setAttributeValues.class, -// Artifact_getLastModified.class, -// CsvArtifactTest.class, -// NativeArtifactTest.class, -// ConflictTest.class, -// ChangeManagerTest.class, -// RelationDeletionTest.class, -// ArtifactCacheQueryTest.class, -// BranchStateTest.class, -// DuplicateHridTest.class, -// RelationOrderingTest.class, -// ImportingSuite.class, -// ParsersSuite.class -}) +@Suite.SuiteClasses({ + EventTestSuite.class, + FrameworkEventToRemoteEventListenerTest.class, + BranchSuite.class, + UserManagerTest.class, + ReplaceAttributeWithTest.class, + AttributePurgeTest.class, + CrossBranchLinkTest.class, + UpdateBookmarkIdTest.class, + ArtifactEventFiltersTest.class, + BranchEventFiltersTest.class, + BranchEventTest.class, + BranchEventLoopbackTest.class, + ArtifactLoaderTest.class, + ArtifactEventTest.class, + ArtifactEventLoopbackTest.class, + TransactionEventLocalTest.class, + TransactionEventRemoteTest.class, + EventBasicGuidArtifactTest.class, + EventBasicGuidRelationTest.class, + EventChangeTypeBasicGuidArtifactTest.class, + ArtifactQueryTestDemo.class, + TransactionTestSuite.class, + ArtifactTestSuite.class, + RelationTestSuite.class, + ArtifactTypeInheritanceTest.class, + ArtifactPurgeTest.class, + BranchPurgeTest.class, + PurgeTransactionTest.class, + Artifact_setAttributeValues.class, + Artifact_getLastModified.class, + CsvArtifactTest.class, + NativeArtifactTest.class, + ConflictTest.class, + ChangeManagerTest.class, + RelationDeletionTest.class, + ArtifactCacheQueryTest.class, + BranchStateTest.class, + DuplicateHridTest.class, + RelationOrderingTest.class, + ImportingSuite.class, + ParsersSuite.class}) /** * @author Donald G. Dunne */ diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFiltersTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFiltersTest.java index b06ac363267..a5f72eb2133 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFiltersTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/ArtifactEventFiltersTest.java @@ -17,6 +17,7 @@ import junit.framework.Assert; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.GUID; import org.eclipse.osee.framework.logging.SevereLoggingMonitor; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; @@ -99,7 +100,8 @@ public class ArtifactEventFiltersTest { resultSender = null; // Send dummy event - Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); + Sender sender = + Sender.createSender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event DID come through @@ -155,7 +157,8 @@ public class ArtifactEventFiltersTest { resultSender = null; // Send dummy event - Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); + Sender sender = + Sender.createSender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event DID come through @@ -190,7 +193,7 @@ public class ArtifactEventFiltersTest { } - private static void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { + private static void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) throws OseeCoreException { OseeEventManager.internalTestProcessEventArtifactsAndRelations(sender, artifactEvent); } diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/BranchEventFiltersTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/BranchEventFiltersTest.java index 4a4d199e56e..e0c176a1a39 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/BranchEventFiltersTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/filter/BranchEventFiltersTest.java @@ -14,6 +14,7 @@ import java.util.Arrays; import java.util.List; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; +import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.GUID; import org.eclipse.osee.framework.logging.SevereLoggingMonitor; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; @@ -64,7 +65,8 @@ public class BranchEventFiltersTest { resultSender = null; // Send dummy event - Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); + Sender sender = + Sender.createSender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); processBranchEvent(sender, testBranchEvent); // Test that event did come through @@ -104,7 +106,7 @@ public class BranchEventFiltersTest { TestUtil.severeLoggingEnd(monitorLog); } - private static void processBranchEvent(Sender sender, BranchEvent branchEvent) { + private static void processBranchEvent(Sender sender, BranchEvent branchEvent) throws OseeCoreException { OseeEventManager.internalTestProcessBranchEvent(sender, branchEvent); } diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEventTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEventTest.java index c605e64e40d..5fbe30c1f1d 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEventTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEventTest.java @@ -39,7 +39,9 @@ import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; import org.eclipse.osee.framework.skynet.core.event.listener.IBranchEventListener; import org.eclipse.osee.framework.skynet.core.httpRequests.PurgeBranchHttpRequestOperation; import org.eclipse.osee.support.test.util.TestUtil; +import org.junit.After; import org.junit.AfterClass; +import org.junit.Before; /** * @author Donald G. Dunne @@ -51,7 +53,17 @@ public class BranchEventTest { private static String TOP_LEVEL_BRANCH_NAME = String.format("%s - top level branch", BRANCH_NAME_PREFIX); private static Branch topLevel; - private final BranchEventListener branchEventListener = new BranchEventListener(); + private BranchEventListener branchEventListener; + + @Before + public void setup() { + branchEventListener = new BranchEventListener(); + } + + @After + public void tearDown() { + branchEventListener = new BranchEventListener(); + } @AfterClass public static void cleanUp() throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListenerTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListenerTest.java index 4b5498939c0..fa914e4073a 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListenerTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListenerTest.java @@ -10,10 +10,8 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.event.systems; -import java.rmi.RemoteException; import java.util.Collections; import java.util.List; -import org.eclipse.core.runtime.CoreException; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; import org.eclipse.osee.framework.core.exception.OseeCoreException; @@ -66,13 +64,9 @@ public class FrameworkEventToRemoteEventListenerTest { * which already has a convenience method for passing in a sample RemoteEvent to the * FrameworkEventToRemoteEventListener. The test needed here is to verify that the Artifact.transactionId field is * updated by the recipient of a remote event. - * - * @throws CoreException - * @throws InterruptedException - * @throws RemoteException */ @Test - public void testUpdateModifiedArtifact() throws CoreException, InterruptedException, RemoteException { + public void testUpdateModifiedArtifact() throws Exception { Artifact artifact = createArtifact(branch, ARTIFACT_NAME_1); artifact.persist(getClass().getSimpleName()); diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlersTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlersTest.java new file mode 100644 index 00000000000..b14f84a6da7 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlersTest.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import junit.framework.Assert; +import org.eclipse.osee.framework.core.enums.CoreBranches; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteAccessControlEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBranchEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBroadcastEvent1; +import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.AccessControlEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.AccessControlRemoteEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.ArtifactEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.BranchRemoteEventHandler; +import org.junit.Test; + +/** + * Test Case for @{link EventHandlers} + * + * @author Roberto E. Escobar + */ +public class EventHandlersTest { + + @Test + public void test() { + EventHandlers handlers = new EventHandlers(); + + EventHandlerLocal<?, ?> local1 = new AccessControlEventHandler(); + EventHandlerLocal<?, ?> local2 = new ArtifactEventHandler(); + + EventHandlerRemote<?> remote1 = new AccessControlRemoteEventHandler(); + EventHandlerRemote<?> remote2 = new BranchRemoteEventHandler(); + + handlers.addLocalHandler(AccessControlEvent.class, local1); + Assert.assertEquals(1, handlers.sizeLocal()); + Assert.assertEquals(0, handlers.sizeRemote()); + + handlers.addLocalHandler(ArtifactEvent.class, local2); + Assert.assertEquals(2, handlers.sizeLocal()); + Assert.assertEquals(0, handlers.sizeRemote()); + + handlers.addRemoteHandler(RemoteAccessControlEvent1.class, remote1); + Assert.assertEquals(2, handlers.sizeLocal()); + Assert.assertEquals(1, handlers.sizeRemote()); + + handlers.addRemoteHandler(RemoteBranchEvent1.class, remote2); + Assert.assertEquals(2, handlers.sizeLocal()); + Assert.assertEquals(2, handlers.sizeRemote()); + + Assert.assertEquals(local1, handlers.getLocalHandler(new AccessControlEvent())); + Assert.assertEquals(local2, handlers.getLocalHandler(new ArtifactEvent(CoreBranches.COMMON))); + Assert.assertNull(handlers.getLocalHandler(new TransactionEvent())); + + Assert.assertEquals(remote1, handlers.getRemoteHandler(new RemoteAccessControlEvent1())); + Assert.assertEquals(remote2, handlers.getRemoteHandler(new RemoteBranchEvent1())); + Assert.assertNull(handlers.getRemoteHandler(new RemoteBroadcastEvent1())); + + handlers.removeLocalHandler(AccessControlEvent.class); + Assert.assertEquals(1, handlers.sizeLocal()); + Assert.assertEquals(2, handlers.sizeRemote()); + + handlers.removeLocalHandler(ArtifactEvent.class); + Assert.assertEquals(0, handlers.sizeLocal()); + Assert.assertEquals(2, handlers.sizeRemote()); + + handlers.removeRemoteHandler(RemoteAccessControlEvent1.class); + Assert.assertEquals(0, handlers.sizeLocal()); + Assert.assertEquals(1, handlers.sizeRemote()); + + handlers.removeRemoteHandler(RemoteBranchEvent1.class); + Assert.assertEquals(0, handlers.sizeLocal()); + Assert.assertEquals(0, handlers.sizeRemote()); + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistryTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistryTest.java new file mode 100644 index 00000000000..c2d63b6ae09 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistryTest.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import java.util.Collection; +import java.util.List; +import junit.framework.Assert; +import org.eclipse.osee.framework.core.enums.CoreBranches; +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.listener.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.listener.ITransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; +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; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; +import org.junit.Test; + +/** + * Test Case for @{link EventListenerRegistry} + * + * @author Roberto E. Escobar + */ +public class EventListenerRegistryTest { + + @Test + public void testRegistration() { + EventListenerRegistry registry = new EventListenerRegistry(); + Delegate1 delegate1 = new Delegate1(); + Delegate2 delegate2 = new Delegate2(); + + Assert.assertEquals(0, registry.size()); + + registry.addListener(EventQosType.PRIORITY, delegate1); + Assert.assertEquals(1, registry.size()); + Assert.assertEquals(2, registry.size(EventQosType.PRIORITY)); + Assert.assertEquals(0, registry.size(EventQosType.NORMAL)); + + registry.addListener(EventQosType.NORMAL, delegate2); + Assert.assertEquals(2, registry.size()); + Assert.assertEquals(2, registry.size(EventQosType.PRIORITY)); + Assert.assertEquals(2, registry.size(EventQosType.NORMAL)); + + Collection<IEventListener> listener0 = registry.getListeners(EventQosType.PRIORITY, new TransactionEvent()); + Assert.assertEquals(0, listener0.size()); + + Collection<IEventListener> listener = registry.getListeners(EventQosType.PRIORITY, new AccessControlEvent()); + Assert.assertEquals(1, listener.size()); + Assert.assertEquals(delegate1, listener.iterator().next()); + + Collection<IEventListener> listener2 = + registry.getListeners(EventQosType.PRIORITY, new ArtifactEvent(CoreBranches.COMMON)); + Assert.assertEquals(1, listener2.size()); + Assert.assertEquals(delegate1, listener2.iterator().next()); + + Collection<IEventListener> listener3 = + registry.getListeners(EventQosType.NORMAL, new BranchEvent(BranchEventType.Added, "x")); + Assert.assertEquals(1, listener3.size()); + Assert.assertEquals(delegate2, listener3.iterator().next()); + + Collection<IEventListener> listener4 = registry.getListeners(EventQosType.NORMAL, new TransactionEvent()); + Assert.assertEquals(1, listener4.size()); + Assert.assertEquals(delegate2, listener4.iterator().next()); + + registry.removeListener(delegate2); + Assert.assertEquals(1, registry.size()); + Assert.assertEquals(2, registry.size(EventQosType.PRIORITY)); + Assert.assertEquals(0, registry.size(EventQosType.NORMAL)); + + Collection<IEventListener> listener5 = registry.getListeners(EventQosType.NORMAL, new TransactionEvent()); + Assert.assertEquals(0, listener5.size()); + + Collection<IEventListener> listener6 = registry.getListeners(EventQosType.PRIORITY, new AccessControlEvent()); + Assert.assertEquals(1, listener6.size()); + Assert.assertEquals(delegate1, listener6.iterator().next()); + + registry.removeListener(delegate1); + Assert.assertEquals(0, registry.size()); + Assert.assertEquals(0, registry.size(EventQosType.PRIORITY)); + Assert.assertEquals(0, registry.size(EventQosType.NORMAL)); + } + + private static final class Delegate2 implements ITransactionEventListener, IBranchEventListener { + + @Override + public List<? extends IEventFilter> getEventFilters() { + return null; + } + + @Override + public void handleBranchEvent(Sender sender, BranchEvent branchEvent) { + // + } + + @Override + public void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { + // + } + + } + + private static final class Delegate1 implements IArtifactEventListener, IAccessControlEventListener { + + @Override + public List<? extends IEventFilter> getEventFilters() { + return null; + } + + @Override + public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) { + // + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + // + } + + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTestSuite.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTestSuite.java new file mode 100644 index 00000000000..7f5856b3e5d --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTestSuite.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({EventHandlersTest.class, EventListenerRegistryTest.class,}) +/** + * @author Roberto E. Escobar + */ +public class EventTestSuite { + // Test Suite +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/attribute.tagger.event.listener.xml b/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/attribute.tagger.event.listener.xml new file mode 100644 index 00000000000..d99d37363e6 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/attribute.tagger.event.listener.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.osee.framework.skynet.core.attribute.HttpAttributeTaggingListener"> + <implementation class="org.eclipse.osee.framework.skynet.core.attribute.HttpAttributeTaggingListener"/> + <service> + <provide interface="org.eclipse.osee.framework.skynet.core.event.listener.IEventListener"/> + </service> + <property name="qos" type="String" value="normal"/> +</scr:component> diff --git a/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/osee.event.system.service.xml b/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/osee.event.system.service.xml index 0b8b6153151..0b78790f1f4 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/osee.event.system.service.xml +++ b/plugins/org.eclipse.osee.framework.skynet.core/OSGI-INF/osee.event.system.service.xml @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.eclipse.osee.framework.skynet.core.internal.OseeEventAdmin"> - <implementation class="org.eclipse.osee.framework.skynet.core.internal.OseeEventAdmin"/> - <reference bind="addEventListener" cardinality="0..n" interface="org.eclipse.osee.framework.skynet.core.event.listener.IEventListener" name="IEventListener" policy="dynamic" unbind="removeEventListener"/> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.eclipse.osee.framework.skynet.core.internal.OseeEventServiceImpl"> + <implementation class="org.eclipse.osee.framework.skynet.core.internal.OseeEventServiceImpl"/> + <reference bind="addListener" cardinality="0..n" interface="org.eclipse.osee.framework.skynet.core.event.listener.IEventListener" name="IEventListener" policy="dynamic" unbind="removeListener"/> <reference bind="setOseeCoreModelEventService" cardinality="1..1" interface="org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService" name="IOseeCoreModelEventService" policy="static"/> -</scr:component> + <service> + <provide interface="org.eclipse.osee.framework.skynet.core.event.OseeEventService"/> + </service> +</scr:component>
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventUtil.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventUtil.java index f05abaac21a..b9d710f3465 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventUtil.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventUtil.java @@ -10,26 +10,28 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.event; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; import java.util.logging.Level; import org.eclipse.core.runtime.Platform; -import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.core.enums.CoreBranches; +import org.eclipse.osee.framework.jdk.core.util.Collections; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.filter.BranchGuidEventFilter; import org.eclipse.osee.framework.skynet.core.internal.Activator; /** * @author Roberto E. Escobar */ public final class EventUtil { + private static BranchGuidEventFilter commonBranchGuidEvenFilter = new BranchGuidEventFilter(CoreBranches.COMMON); private EventUtil() { // Utility Class } + public static BranchGuidEventFilter getCommonBranchFilter() { + return EventUtil.commonBranchGuidEvenFilter; + } + public static String getObjectSafeName(Object object) { try { return object.toString(); @@ -38,51 +40,54 @@ public final class EventUtil { } } - public static String getListenerReport(Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners) { - List<String> listenerStrs = new ArrayList<String>(); - for (IEventListener listener : priorityListeners) { - listenerStrs.add("Priority: " + EventUtil.getObjectSafeName(listener)); - } - for (IEventListener listener : listeners) { - listenerStrs.add(EventUtil.getObjectSafeName(listener)); - } - String[] listArr = listenerStrs.toArray(new String[listenerStrs.size()]); - Arrays.sort(listArr); - return org.eclipse.osee.framework.jdk.core.util.Collections.toString("\n", (Object[]) listArr); - } - - public static void eventLog(String output) { - eventLog(output, null); + public static void eventLog(String message, Throwable ex) { + eventLog(ex, message); } - public static void eventLog(String output, Exception ex) { + public static void eventLog(Throwable ex, String message, Object... args) { try { if (isEventDebugConsole()) { - System.err.println(output + (ex != null ? " <<ERROR>> " + ex.toString() : "")); + StringBuilder builder = new StringBuilder(); + builder.append(formatMessage(message, args)); + if (ex != null) { + builder.append(" <<ERROR>> "); + builder.append(ex.toString()); + } + System.err.println(builder.toString()); } else if (isEventDebugErrorLog()) { if (ex != null) { - OseeLog.log(Activator.class, Level.SEVERE, output, ex); + OseeLog.log(Activator.class, Level.SEVERE, formatMessage(message, args), ex); } else { - OseeLog.log(Activator.class, Level.FINE, output); + OseeLog.log(Activator.class, Level.FINE, formatMessage(message, args)); } } - } catch (Exception ex1) { - OseeLog.log(Activator.class, Level.SEVERE, ex1); + } catch (Throwable th) { + OseeLog.log(Activator.class, Level.SEVERE, th); } } - private static boolean isEventDebugConsole() { - if (!Strings.isValid(System.getProperty("eventDebug"))) { - return false; + public static void eventLog(String output, Object... args) { + eventLog(null, output, args); + } + + private static String formatMessage(String message, Object... args) { + try { + return String.format(message, args); + } catch (RuntimeException ex) { + return String.format( + "Exception message could not be formatted: [%s] with the following arguments [%s]. Cause [%s]", message, + Collections.toString(",", args), ex.toString()); } - return System.getProperty("eventDebug").equals("console"); + } + + private static boolean isEventDebugConsole() { + String debugConsole = System.getProperty("eventDebug", ""); + return "console".equals(debugConsole); } private static boolean isEventDebugErrorLog() { - if (!Strings.isValid(System.getProperty("eventDebug"))) { - return false; - } - return System.getProperty("eventDebug").equals("log") || "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.skynet.core/debug/Events")); + String debugConsole = System.getProperty("eventDebug", ""); + return "log".equals(debugConsole) || "TRUE".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.osee.framework.skynet.core/debug/Events")); } } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkEventUtil.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkEventUtil.java index 9c5846c882a..4cbd6017709 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkEventUtil.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkEventUtil.java @@ -58,7 +58,11 @@ import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; /** * @author Donald G. Dunne */ -public class FrameworkEventUtil { +public final class FrameworkEventUtil { + + private FrameworkEventUtil() { + // Utility Class + } public static RemoteAccessControlEvent1 getRemoteAccessControlEvent(AccessControlEvent accessControlEvent) { RemoteAccessControlEvent1 event = new RemoteAccessControlEvent1(); diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventManager.java index afef6195917..3ea203ea16c 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventManager.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventManager.java @@ -10,26 +10,22 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.event; -import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.logging.Level; -import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.core.data.IOseeBranch; -import org.eclipse.osee.framework.core.enums.CoreBranches; -import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException; import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.jdk.core.util.OseeProperties; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; 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.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent.ArtifactEventType; import org.eclipse.osee.framework.skynet.core.event.model.BranchEvent; import org.eclipse.osee.framework.skynet.core.event.model.BroadcastEvent; import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifact; @@ -37,10 +33,9 @@ import org.eclipse.osee.framework.skynet.core.event.model.EventModType; import org.eclipse.osee.framework.skynet.core.event.model.RemoteEventServiceEventType; import org.eclipse.osee.framework.skynet.core.event.model.Sender; import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; -import org.eclipse.osee.framework.skynet.core.event.systems.EventManagerData; -import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager; import org.eclipse.osee.framework.skynet.core.internal.Activator; -import org.eclipse.osee.framework.skynet.core.utility.DbUtil; +import org.eclipse.osee.framework.skynet.core.internal.ServiceUtil; +import org.eclipse.osee.framework.skynet.core.internal.event.EventListenerRegistry; /** * Front end to OSEE events. Provides ability to add and remove different event listeners as well as the ability to kick @@ -48,19 +43,18 @@ import org.eclipse.osee.framework.skynet.core.utility.DbUtil; * * @author Donald G. Dunne */ -public class OseeEventManager { - - private static List<IEventFilter> commonBranchEventFilter; - private static BranchGuidEventFilter commonBranchGuidEvenFilter; - private static IBranchEventListener testBranchEventListener; - private static final EventManagerData eventManagerData = new EventManagerData(); +public final class OseeEventManager { private OseeEventManager() { - // Static methods only; + // Utility Class + } + + private static OseeEventService getEventService() throws OseeCoreException { + return ServiceUtil.getEventService(); } - public static EventManagerData getEventManagerData() { - return eventManagerData; + private static EventListenerRegistry getEventListeners() { + return Activator.getEventListeners(); } /** @@ -68,41 +62,34 @@ public class OseeEventManager { * listeners are called. */ public static void addPriorityListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - Collection<IEventListener> priorityListeners = eventManagerData.getPriorityListeners(); - priorityListeners.add(listener); + getEventListeners().addListener(EventQosType.PRIORITY, listener); } public static void addListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - Collection<IEventListener> listeners = eventManagerData.getListeners(); - listeners.add(listener); + getEventListeners().addListener(EventQosType.NORMAL, listener); } public static void removeAllListeners() { - eventManagerData.getListeners().clear(); - eventManagerData.getPriorityListeners().clear(); + getEventListeners().clearAll(); } public static void removeListener(IEventListener listener) { - eventManagerData.getListeners().remove(listener); - eventManagerData.getPriorityListeners().remove(listener); - } - - private static InternalEventManager getEventManager() { - return eventManagerData.getMessageEventManager(); + getEventListeners().removeListener(listener); } public static EventSystemPreferences getPreferences() { - return eventManagerData.getPreferences(); + return Activator.getEventPreferences(); } public static boolean isEventManagerConnected() { - return getEventManager() != null ? getEventManager().isConnected() : false; + boolean result = false; + try { + OseeEventService eventService = getEventService(); + result = eventService.isConnected(); + } catch (Exception ex) { + // Do Nothing; + } + return result; } public static String getConnectionDetails() { @@ -114,97 +101,37 @@ public class OseeEventManager { } public static int getNumberOfListeners() { - return eventManagerData.getListeners().size(); - } - - private static Sender createSender(Object sourceObject) throws OseeAuthenticationRequiredException { - Sender sender = null; - // Sender came from Remote Event Manager if source == sender - if (sourceObject instanceof Sender && ((Sender) sourceObject).isRemote()) { - sender = (Sender) sourceObject; - } else { - // create new sender based on sourceObject - sender = new Sender(sourceObject, ClientSessionManager.getSession()); - } - return sender; - } - - // Only Used for Testing purposes - public static void internalTestSendRemoteEvent(final RemoteEvent remoteEvent) throws RemoteException { - getEventManager().testSendRemoteEventThroughFrameworkListener(remoteEvent); - } - - // Only Used for Testing purposes - public static void internalTestProcessBranchEvent(Sender sender, BranchEvent branchEvent) { - getEventManager().processBranchEvent(sender, branchEvent); - } - - // Only Used for Testing purposes - public static void internalTestProcessEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { - getEventManager().processEventArtifactsAndRelations(sender, artifactEvent); + return getEventListeners().size(); } // Kick LOCAL remote-event event public static void kickLocalRemEvent(Object source, RemoteEventServiceEventType remoteEventServiceEventType) throws OseeCoreException { - if (isDisableEvents()) { - return; - } - if (!DbUtil.isDbInit()) { - getEventManager().kickLocalRemEvent(createSender(source), remoteEventServiceEventType); - } + getEventService().send(source, remoteEventServiceEventType); } // Kick LOCAL and REMOTE broadcast event public static void kickBroadcastEvent(Object source, BroadcastEvent broadcastEvent) throws OseeCoreException { - if (isDisableEvents()) { - return; - } - getEventManager().kickBroadcastEvent(createSender(source), broadcastEvent); + getEventService().send(source, broadcastEvent); } //Kick LOCAL and REMOTE branch events public static void kickBranchEvent(Object source, BranchEvent branchEvent, int branchId) throws OseeCoreException { - EventUtil.eventLog("OEM: kickBranchEvent: type: " + branchEvent.getEventType() + " guid: " + branchEvent.getBranchGuid() + " - " + source); - if (isDisableEvents()) { - return; - } - - Sender sender = createSender(source); - if (testBranchEventListener != null) { - testBranchEventListener.handleBranchEvent(sender, branchEvent); - } - branchEvent.setNetworkSender(sender.getNetworkSender()); - getEventManager().kickBranchEvent(sender, branchEvent); + getEventService().send(source, branchEvent); } // Kick LOCAL and REMOTE access control events - public static void kickAccessControlArtifactsEvent(Object source, AccessControlEvent accessControlEvent) throws OseeAuthenticationRequiredException { - if (isDisableEvents()) { - return; - } - Sender sender = createSender(source); - accessControlEvent.setNetworkSender(sender.getNetworkSender()); - getEventManager().kickAccessControlArtifactsEvent(sender, accessControlEvent); + public static void kickAccessControlArtifactsEvent(Object source, AccessControlEvent accessControlEvent) throws OseeCoreException { + getEventService().send(source, accessControlEvent); } // Kick LOCAL and REMOTE transaction deleted event public static void kickTransactionEvent(Object source, final TransactionEvent transactionEvent) throws OseeCoreException { - if (isDisableEvents()) { - return; - } - Sender sender = createSender(source); - transactionEvent.setNetworkSender(sender.getNetworkSender()); - getEventManager().kickTransactionEvent(sender, transactionEvent); + getEventService().send(source, transactionEvent); } // Kick LOCAL and REMOTE transaction event - public static void kickPersistEvent(Object source, ArtifactEvent artifactEvent) throws OseeAuthenticationRequiredException { - if (isDisableEvents()) { - return; - } - Sender sender = createSender(source); - artifactEvent.setNetworkSender(sender.getNetworkSender()); - getEventManager().kickArtifactEvent(sender, artifactEvent); + public static void kickPersistEvent(Object source, ArtifactEvent artifactEvent) throws OseeCoreException { + getEventService().send(source, artifactEvent); } // Kick LOCAL transaction event @@ -212,9 +139,10 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - ArtifactEvent artifactEvent = new ArtifactEvent(artifacts.iterator().next().getBranch()); + ArtifactEvent artifactEvent = + new ArtifactEvent(artifacts.iterator().next().getBranch(), ArtifactEventType.RELOAD_ARTIFACTS); artifactEvent.getArtifacts().addAll(EventBasicGuidArtifact.get(EventModType.Reloaded, artifacts)); - getEventManager().kickLocalArtifactReloadEvent(createSender(source), artifactEvent); + getEventService().send(source, artifactEvent); } public static boolean isDisableEvents() { @@ -228,10 +156,9 @@ public class OseeEventManager { // Return report showing all listeners registered public static String getListenerReport() { - String toReturn; + String toReturn = null; if (OseeEventManager.isEventManagerConnected()) { - toReturn = - EventUtil.getListenerReport(eventManagerData.getListeners(), eventManagerData.getPriorityListeners()); + toReturn = getEventListeners().toString(); } else { toReturn = "Event system is NOT active"; } @@ -249,38 +176,20 @@ public class OseeEventManager { return null; } - public static List<IEventFilter> getCommonBranchEventFilters() { - try { - if (commonBranchEventFilter == null) { - commonBranchEventFilter = new ArrayList<IEventFilter>(2); - commonBranchEventFilter.add(getCommonBranchFilter()); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - return commonBranchEventFilter; - } - - public static BranchGuidEventFilter getCommonBranchFilter() { - if (commonBranchGuidEvenFilter == null) { - commonBranchGuidEvenFilter = new BranchGuidEventFilter(CoreBranches.COMMON); - } - return commonBranchGuidEvenFilter; + /////////////////////////////////// LEGACY TEST API //////////////////////////////////////////// + // Only Used for Testing purposes + public static void internalTestSendRemoteEvent(final RemoteEvent remoteEvent) throws OseeCoreException { + getEventService().receive(remoteEvent); } - // Registration for branch events; for test only - public static void registerBranchEventListenerForTest(IBranchEventListener branchEventListener) { - if (!OseeProperties.isInTest()) { - throw new IllegalStateException("Invalid registration for production"); - } - testBranchEventListener = branchEventListener; + // Only Used for Testing purposes + public static void internalTestProcessBranchEvent(Sender sender, BranchEvent branchEvent) throws OseeCoreException { + getEventService().receive(sender, branchEvent); } - public static void removeBranchEventListenerForTest() { - if (!OseeProperties.isInTest()) { - throw new IllegalStateException("Invalid registration for production"); - } - testBranchEventListener = null; + // Only Used for Testing purposes + public static void internalTestProcessEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) throws OseeCoreException { + getEventService().receive(sender, artifactEvent); } } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventService.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventService.java new file mode 100644 index 00000000000..b35ac0cdb65 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventService.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2009 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.skynet.core.event; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; + +/** + * @author Roberto E. Escobar + */ +public interface OseeEventService { + + boolean isConnected(); + + <E extends FrameworkEvent> void send(Object object, E event) throws OseeCoreException; + + <E extends RemoteEvent> void receive(E event) throws OseeCoreException; + + <E extends FrameworkEvent> void receive(Sender sender, E event) throws OseeCoreException; + + void addListener(EventQosType qos, IEventListener listener); + + void removeListener(EventQosType qos, IEventListener listener); +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/listener/EventQosType.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/listener/EventQosType.java new file mode 100644 index 00000000000..1034eb3c39a --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/listener/EventQosType.java @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.event.listener; + +/** + * @author Roberto E. Escobar + */ +public enum EventQosType { + PRIORITY, + NORMAL; +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEvent.java index 7411a714bc3..dc09e4f5890 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AccessControlEvent.java @@ -16,7 +16,7 @@ import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; -public class AccessControlEvent extends FrameworkEvent { +public class AccessControlEvent implements FrameworkEvent, HasNetworkSender, HasEventType<AccessControlEventType> { private AccessControlEventType eventType; private List<DefaultBasicGuidArtifact> artifacts; @@ -49,6 +49,7 @@ public class AccessControlEvent extends FrameworkEvent { * * @return possible object is {@link NetworkSender } */ + @Override public NetworkSender getNetworkSender() { return networkSender; } @@ -58,10 +59,12 @@ public class AccessControlEvent extends FrameworkEvent { * * @param value allowed object is {@link NetworkSender } */ + @Override public void setNetworkSender(NetworkSender value) { this.networkSender = value; } + @Override public AccessControlEventType getEventType() { return eventType; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/ArtifactEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/ArtifactEvent.java index 6a7af3f0100..b27e4754da7 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/ArtifactEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/ArtifactEvent.java @@ -19,7 +19,6 @@ import java.util.logging.Level; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.IRelationType; import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidRelationReorder; import org.eclipse.osee.framework.core.model.event.IBasicGuidArtifact; @@ -33,7 +32,12 @@ import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; import org.eclipse.osee.framework.skynet.core.internal.Activator; import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; -public class ArtifactEvent extends FrameworkEvent { +public class ArtifactEvent implements FrameworkEvent, HasNetworkSender { + + public static enum ArtifactEventType { + RELOAD_ARTIFACTS, + UPDATE_ARTIFACTS; + } private final String branchGuid; private int transactionId; @@ -42,15 +46,21 @@ public class ArtifactEvent extends FrameworkEvent { private final List<EventBasicGuidRelation> relations = new ArrayList<EventBasicGuidRelation>(); private final Set<DefaultBasicGuidRelationReorder> relationReorderRecords = new HashSet<DefaultBasicGuidRelationReorder>(); + private final ArtifactEventType reloadEvent; - public ArtifactEvent(Branch branch) { - branchGuid = branch.getGuid(); + public ArtifactEvent(IOseeBranch branch) { + this(branch, ArtifactEventType.UPDATE_ARTIFACTS); } - public ArtifactEvent(IOseeBranch branch) { + public ArtifactEvent(IOseeBranch branch, ArtifactEventType reloadEvent) { + this.reloadEvent = reloadEvent; branchGuid = branch.getGuid(); } + public boolean isReloadEvent() { + return ArtifactEventType.RELOAD_ARTIFACTS == reloadEvent; + } + public String getBranchGuid() { return branchGuid; } @@ -79,10 +89,12 @@ public class ArtifactEvent extends FrameworkEvent { return this.relations; } + @Override public NetworkSender getNetworkSender() { return networkSender; } + @Override public void setNetworkSender(NetworkSender value) { this.networkSender = value; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AttributeChange.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AttributeChange.java index 71eb70a06c7..bc384208694 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AttributeChange.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/AttributeChange.java @@ -41,7 +41,7 @@ import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AttributeChange", propOrder = {"attrTypeGuid", "modTypeGuid", "attributeId", "gammaId", "data"}) -public class AttributeChange extends FrameworkEvent { +public class AttributeChange implements FrameworkEvent { @XmlElement(required = true) protected Long attrTypeGuid; diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEvent.java index f81186b4889..f6aa6deecc7 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BranchEvent.java @@ -12,7 +12,7 @@ package org.eclipse.osee.framework.skynet.core.event.model; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; -public class BranchEvent extends FrameworkEvent { +public class BranchEvent implements FrameworkEvent, HasNetworkSender { private String branchGuid; private BranchEventType eventType; @@ -46,6 +46,7 @@ public class BranchEvent extends FrameworkEvent { * * @return possible object is {@link NetworkSender } */ + @Override public NetworkSender getNetworkSender() { return networkSender; } @@ -55,6 +56,7 @@ public class BranchEvent extends FrameworkEvent { * * @param value allowed object is {@link NetworkSender } */ + @Override public void setNetworkSender(NetworkSender value) { this.networkSender = value; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BroadcastEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BroadcastEvent.java index 32c5eb15af0..f0cebefa6de 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BroadcastEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/BroadcastEvent.java @@ -18,7 +18,7 @@ import org.eclipse.osee.framework.skynet.core.User; /** * @author Donald G. Dunne */ -public class BroadcastEvent extends FrameworkEvent { +public class BroadcastEvent implements FrameworkEvent, HasNetworkSender { BroadcastEventType broadcastEventType; Collection<User> users; @@ -59,10 +59,12 @@ public class BroadcastEvent extends FrameworkEvent { this.users.add(user); } + @Override public NetworkSender getNetworkSender() { return networkSender; } + @Override public void setNetworkSender(NetworkSender networkSender) { this.networkSender = networkSender; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/FrameworkEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/FrameworkEvent.java index ac763d5fc1c..7a56c9949a5 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/FrameworkEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/FrameworkEvent.java @@ -13,6 +13,6 @@ package org.eclipse.osee.framework.skynet.core.event.model; /** * @author Donald G. Dunne */ -public class FrameworkEvent { +public interface FrameworkEvent { // do nothing } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasEventType.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasEventType.java new file mode 100644 index 00000000000..4f9d4bbe974 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasEventType.java @@ -0,0 +1,12 @@ +/* + * Created on Apr 27, 2012 + * + * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE + */ +package org.eclipse.osee.framework.skynet.core.event.model; + +public interface HasEventType<T> { + + T getEventType(); + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasNetworkSender.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasNetworkSender.java new file mode 100644 index 00000000000..0f4af5fac2f --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/HasNetworkSender.java @@ -0,0 +1,15 @@ +/* + * Created on Apr 27, 2012 + * + * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE + */ +package org.eclipse.osee.framework.skynet.core.event.model; + +import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; + +public interface HasNetworkSender { + + NetworkSender getNetworkSender(); + + void setNetworkSender(NetworkSender sender); +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/RemoteEventServiceEventType.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/RemoteEventServiceEventType.java index 87d1df17b61..f1cbdd6d5d5 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/RemoteEventServiceEventType.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/RemoteEventServiceEventType.java @@ -13,7 +13,7 @@ package org.eclipse.osee.framework.skynet.core.event.model; /** * @author Donald G. Dunne */ -public enum RemoteEventServiceEventType { +public enum RemoteEventServiceEventType implements FrameworkEvent { Rem_Connected(EventType.LocalOnly), Rem_DisConnected(EventType.LocalOnly); diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/Sender.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/Sender.java index 7da33feea70..2be55b18a92 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/Sender.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/Sender.java @@ -25,25 +25,33 @@ public class Sender { private final String sourceObject; private final OseeClientSession oseeSession; - public Sender(Object sourceObject, OseeClientSession oseeSession) { - this.sourceObject = EventUtil.getObjectSafeName(sourceObject); + private Sender(String sourceObjectId, OseeClientSession oseeSession) { + this.sourceObject = sourceObjectId; this.oseeSession = oseeSession; } - public Sender(NetworkSender networkSender) { - this(networkSender.sourceObject, new OseeClientSession(networkSender.sessionId, networkSender.machineName, - networkSender.userId, networkSender.machineIp, networkSender.port, networkSender.clientVersion, "n/a")); + public static Sender createSender(Object sourceObject, OseeClientSession oseeSession) { + String sourceId = EventUtil.getObjectSafeName(sourceObject); + return new Sender(sourceId, oseeSession); } - public Sender(RemoteNetworkSender1 networkSender) { - this(networkSender.getSourceObject(), new OseeClientSession(networkSender.getSessionId(), - networkSender.getMachineName(), networkSender.getUserId(), networkSender.getMachineIp(), - networkSender.getPort(), networkSender.getClientVersion(), "n/a")); + public static Sender createSender(NetworkSender networkSender) { + OseeClientSession oseeSession = + new OseeClientSession(networkSender.sessionId, networkSender.machineName, networkSender.userId, + networkSender.machineIp, networkSender.port, networkSender.clientVersion, "n/a"); + return createSender(networkSender.sourceObject, oseeSession); } - public Sender(Object sourceObject) throws OseeAuthenticationRequiredException { - this.sourceObject = EventUtil.getObjectSafeName(sourceObject); - this.oseeSession = ClientSessionManager.getSession(); + public static Sender createSender(RemoteNetworkSender1 networkSender) { + OseeClientSession oseeSession = + new OseeClientSession(networkSender.getSessionId(), networkSender.getMachineName(), networkSender.getUserId(), + networkSender.getMachineIp(), networkSender.getPort(), networkSender.getClientVersion(), "n/a"); + return createSender(networkSender.getSourceObject(), oseeSession); + } + + public static Sender createSender(Object sourceObject) throws OseeAuthenticationRequiredException { + OseeClientSession oseeSession = ClientSessionManager.getSession(); + return createSender(sourceObject, oseeSession); } public boolean isRemote() { diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionChange.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionChange.java index 40a12659203..b16395e5149 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionChange.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionChange.java @@ -15,7 +15,7 @@ import java.util.HashSet; import java.util.Set; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; -public class TransactionChange extends FrameworkEvent { +public class TransactionChange implements FrameworkEvent { private String branchGuid; private int transactionId; diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionEvent.java index ff89defb633..a8409e0e869 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/model/TransactionEvent.java @@ -15,7 +15,7 @@ import java.util.List; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; -public class TransactionEvent extends FrameworkEvent { +public class TransactionEvent implements FrameworkEvent, HasNetworkSender { private TransactionEventType eventType; private NetworkSender networkSender; @@ -49,6 +49,7 @@ public class TransactionEvent extends FrameworkEvent { * * @return possible object is {@link NetworkSender } */ + @Override public NetworkSender getNetworkSender() { return networkSender; } @@ -58,6 +59,7 @@ public class TransactionEvent extends FrameworkEvent { * * @param value allowed object is {@link NetworkSender } */ + @Override public void setNetworkSender(NetworkSender value) { this.networkSender = value; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerData.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerData.java deleted file mode 100644 index 42352189241..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerData.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 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.skynet.core.event.systems; - -import java.util.Collection; -import java.util.concurrent.CopyOnWriteArraySet; -import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; - -/** - * @author Roberto E. Escobar - */ -public class EventManagerData { - - private final Collection<IEventListener> priorityListeners = new CopyOnWriteArraySet<IEventListener>(); - private final Collection<IEventListener> listeners = new CopyOnWriteArraySet<IEventListener>(); - private final EventSystemPreferences preferences = new EventSystemPreferences(); - - private InternalEventManager messageEventManager; - - public void setMessageEventManager(InternalEventManager messageEventManager) { - this.messageEventManager = messageEventManager; - } - - public Collection<IEventListener> getPriorityListeners() { - return priorityListeners; - } - - public Collection<IEventListener> getListeners() { - return listeners; - } - - public EventSystemPreferences getPreferences() { - return preferences; - } - - public InternalEventManager getMessageEventManager() { - return messageEventManager; - } - -} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerFactory.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerFactory.java deleted file mode 100644 index 326d0e0adce..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 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.skynet.core.event.systems; - -import java.util.Collection; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; -import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; -import org.eclipse.osee.framework.skynet.core.event.OseeEventThreadFactory; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; -import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager.ConnectionStatus; - -/** - * @author Roberto E. Escobar - */ -public class EventManagerFactory { - - public InternalEventManager createNewEventManager(IOseeCoreModelEventService coreModelEventService, EventSystemPreferences preferences, Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners, ConnectionStatus connectionStatus) { - ExecutorService executorService = createExecutor("Osee Client Events"); - InternalEventManager eventManager = - new InternalEventManager(coreModelEventService, listeners, priorityListeners, executorService, preferences, - connectionStatus); - return eventManager; - } - - private ExecutorService createExecutor(String threadPrefix) { - int numberOfProcessors = Runtime.getRuntime().availableProcessors(); - if (numberOfProcessors > 4) { - numberOfProcessors = 4; - } - ThreadFactory threadFactory = new OseeEventThreadFactory(threadPrefix); - return Executors.newFixedThreadPool(numberOfProcessors, threadFactory); - } - -} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListener.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListener.java deleted file mode 100644 index 80b6bb283b6..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEventListener.java +++ /dev/null @@ -1,346 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 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.skynet.core.event.systems; - -import java.util.concurrent.ExecutorService; -import org.eclipse.osee.framework.core.enums.ModificationType; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.core.model.Branch; -import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; -import org.eclipse.osee.framework.core.model.type.AttributeType; -import org.eclipse.osee.framework.core.model.type.RelationType; -import org.eclipse.osee.framework.messaging.event.res.AttributeEventModificationType; -import org.eclipse.osee.framework.messaging.event.res.IFrameworkEventListener; -import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; -import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteAccessControlEvent1; -import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBranchEvent1; -import org.eclipse.osee.framework.messaging.event.res.msgs.RemotePersistEvent1; -import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteTransactionEvent1; -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.Attribute; -import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; -import org.eclipse.osee.framework.skynet.core.artifact.ChangeArtifactType; -import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; -import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; -import org.eclipse.osee.framework.skynet.core.event.EventUtil; -import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.PurgeTransactionEventUtil; -import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; -import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; -import org.eclipse.osee.framework.skynet.core.event.model.AttributeChange; -import org.eclipse.osee.framework.skynet.core.event.model.BranchEvent; -import org.eclipse.osee.framework.skynet.core.event.model.BranchEventType; -import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidRelation; -import org.eclipse.osee.framework.skynet.core.event.model.EventChangeTypeBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.event.model.EventModType; -import org.eclipse.osee.framework.skynet.core.event.model.EventModifiedBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.event.model.Sender; -import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; -import org.eclipse.osee.framework.skynet.core.event.model.TransactionEventType; -import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; -import org.eclipse.osee.framework.skynet.core.relation.RelationLink; -import org.eclipse.osee.framework.skynet.core.relation.RelationManager; -import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager; -import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager; - -/** - * @author Donald G. Dunne - */ -public final class FrameworkEventToRemoteEventListener implements IFrameworkEventListener { - - private final EventSystemPreferences preferences; - private final InternalEventManager eventManager; - private final ExecutorService executorService; - - public FrameworkEventToRemoteEventListener(ExecutorService executorService, EventSystemPreferences preferences, InternalEventManager eventManager) { - this.executorService = executorService; - this.preferences = preferences; - this.eventManager = eventManager; - } - - @Override - public void onEvent(final RemoteEvent remoteEvent) { - Runnable runnable = new Runnable() { - @Override - public void run() { - processRemoteEvents(remoteEvent); - } - }; - execute(runnable); - } - - private void execute(Runnable runnable) { - if (preferences.isPendRunning()) { - runnable.run(); - } else { - executorService.submit(runnable); - } - } - - private void processRemoteEvents(RemoteEvent remoteEvent) { - if (remoteEvent == null) { - return; - } - Sender sender = new Sender(remoteEvent.getNetworkSender()); - // If the sender's sessionId is the same as this client, then this event was - // created in this client and returned by remote event manager; ignore and continue - if (sender.isLocal()) { - return; - } - // Handles TransactionEvents, ArtifactChangeTypeEvents, ArtifactPurgeEvents - if (remoteEvent instanceof RemotePersistEvent1) { - try { - RemotePersistEvent1 event1 = (RemotePersistEvent1) remoteEvent; - ArtifactEvent transEvent = FrameworkEventUtil.getPersistEvent(event1); - updateArtifacts(sender, transEvent, ((RemotePersistEvent1) remoteEvent).getTransactionId()); - updateRelations(sender, transEvent); - eventManager.kickArtifactEvent(sender, transEvent); - } catch (Exception ex) { - EventUtil.eventLog("REM: RemoteTransactionEvent1", ex); - } - } else if (remoteEvent instanceof RemoteBranchEvent1) { - try { - BranchEvent branchEvent = FrameworkEventUtil.getBranchEvent((RemoteBranchEvent1) remoteEvent); - updateBranches(sender, branchEvent); - eventManager.kickBranchEvent(sender, branchEvent); - } catch (Exception ex) { - EventUtil.eventLog("REM: RemoteBranchEvent1", ex); - } - } else if (remoteEvent instanceof RemoteTransactionEvent1) { - try { - TransactionEvent transEvent = FrameworkEventUtil.getTransactionEvent((RemoteTransactionEvent1) remoteEvent); - handleTransactionEvent(sender, transEvent); - } catch (Exception ex) { - EventUtil.eventLog("REM: RemoteBranchEvent1", ex); - } - } else if (remoteEvent instanceof RemoteAccessControlEvent1) { - try { - AccessControlEvent accessEvent = - FrameworkEventUtil.getAccessControlEvent((RemoteAccessControlEvent1) remoteEvent); - eventManager.kickAccessControlArtifactsEvent(sender, accessEvent); - } catch (Exception ex) { - EventUtil.eventLog("REM: RemoteAccessControlEvent1", ex); - } - } - } - - private void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { - try { - if (transEvent.getEventType() == TransactionEventType.Purged) { - PurgeTransactionEventUtil.handleRemotePurgeTransactionEvent(transEvent); - eventManager.kickTransactionEvent(sender, transEvent); - } else { - EventUtil.eventLog("REM: handleTransactionEvent - unhandled mod type " + transEvent.getEventType()); - } - } catch (Exception ex) { - EventUtil.eventLog("REM: handleTransactionEvent", ex); - } - } - - /** - * Updates local cache - **/ - private void updateArtifacts(Sender sender, ArtifactEvent transEvent, int transactionId) { - // Don't crash on any one artifact update problem (no update method throughs exceptions) - for (EventBasicGuidArtifact guidArt : transEvent.getArtifacts()) { - EventUtil.eventLog(String.format("REM: updateArtifact -> [%s]", guidArt)); - // Handle Added Artifacts - // Nothing to do for added cause they're not in cache yet. Apps will load if they need them. - if (guidArt.getModType() == EventModType.Added) { - // do nothing cause not in cache - } - // Handle Deleted Artifacts - else if (guidArt.getModType() == EventModType.Deleted || guidArt.getModType() == EventModType.Purged) { - updateDeletedArtifact(guidArt); - } - // Handle Modified Artifacts - else if (guidArt.getModType() == EventModType.Modified) { - updateModifiedArtifact((EventModifiedBasicGuidArtifact) guidArt, transactionId); - } - // Handle Change Type Artifacts - else if (guidArt.getModType() == EventModType.ChangeType) { - ChangeArtifactType.handleRemoteChangeType((EventChangeTypeBasicGuidArtifact) guidArt); - } - // Unknown mod type - else { - EventUtil.eventLog(String.format("REM: updateArtifacts - Unhandled mod type [%s]", guidArt.getModType())); - } - } - } - - /** - * Updates local cache - */ - private void updateBranches(Sender sender, BranchEvent branchEvent) { - BranchEventType eventType = branchEvent.getEventType(); - try { - switch (eventType) { - case Committing: - case CommitFailed: - case Deleting: - case Purging: - return; - case Committed: - TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranchByGuid(branchEvent.getBranchGuid()))); - } - // TODO Need to update only branch(s) that changed, not refresh all branches cause it will - // clear any local flags that have not yet been persisted to the database like DELETED or COMMIT_IN_PROGRESS - BranchManager.refreshBranches(); - } catch (Exception ex) { - EventUtil.eventLog("REM: updateBranches", ex); - } - } - - private void updateRelations(Sender sender, ArtifactEvent transEvent) { - for (EventBasicGuidRelation guidArt : transEvent.getRelations()) { - // Don't crash on any one relation update problem - try { - EventUtil.eventLog(String.format("REM: updateRelation -> [%s]", guidArt)); - RelationEventType eventType = guidArt.getModType(); - Branch branch = BranchManager.getBranch(guidArt.getArtA()); - RelationType relationType = RelationTypeManager.getTypeByGuid(guidArt.getRelTypeGuid()); - Artifact aArtifact = ArtifactCache.getActive(guidArt.getArtA()); - Artifact bArtifact = ArtifactCache.getActive(guidArt.getArtB()); - // Nothing in cache, ignore this relation only - if (aArtifact == null && bArtifact == null) { - continue; - } - boolean aArtifactLoaded = aArtifact != null; - boolean bArtifactLoaded = bArtifact != null; - - if (aArtifactLoaded || bArtifactLoaded) { - if (eventType == RelationEventType.Added) { - RelationLink relation = - RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), - guidArt.getArtBId(), branch); - - if (relation == null || relation.getModificationType() == ModificationType.DELETED || relation.getModificationType() == ModificationType.ARTIFACT_DELETED) { - relation = - RelationManager.getOrCreate(guidArt.getArtAId(), guidArt.getArtBId(), branch, relationType, - guidArt.getRelationId(), guidArt.getGammaId(), guidArt.getRationale(), ModificationType.NEW); - - } - } else if (eventType == RelationEventType.Deleted || eventType == RelationEventType.Purged) { - RelationLink relation = - RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), - guidArt.getArtBId(), branch); - if (relation != null) { - relation.internalRemoteEventDelete(); - } - } else if (eventType == RelationEventType.ModifiedRationale) { - RelationLink relation = - RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), - guidArt.getArtBId(), branch); - if (relation != null) { - relation.internalSetRationale(guidArt.getRationale()); - relation.setNotDirty(); - } - } else if (eventType == RelationEventType.Undeleted) { - RelationLink relation = - RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), - guidArt.getArtBId(), branch); - if (relation != null) { - relation.undelete(); - relation.setNotDirty(); - } - } else { - EventUtil.eventLog(String.format("REM: updateRelations - Unhandled mod type [%s]", eventType)); - } - } - } catch (OseeCoreException ex) { - EventUtil.eventLog("REM: updateRelations", ex); - } - } - } - - private void updateDeletedArtifact(DefaultBasicGuidArtifact guidArt) { - try { - Artifact artifact = ArtifactCache.getActive(guidArt); - if (artifact == null) { - // do nothing, artifact not in cache, so don't need to update - } else if (!artifact.isHistorical()) { - artifact.internalSetDeletedFromRemoteEvent(); - } - } catch (OseeCoreException ex) { - EventUtil.eventLog("REM: updateDeletedArtifact", ex); - } - } - - private void updateModifiedArtifact(EventModifiedBasicGuidArtifact guidArt, int transactionId) { - try { - Artifact artifact = ArtifactCache.getActive(guidArt); - if (artifact == null) { - // do nothing, artifact not in cache, so don't need to update - } else if (!artifact.isHistorical()) { - artifact.setTransactionId(transactionId); - for (AttributeChange attrChange : guidArt.getAttributeChanges()) { - if (!OseeEventManager.getPreferences().isEnableRemoteEventLoopback()) { - ModificationType modificationType = - AttributeEventModificationType.getType(attrChange.getModTypeGuid()).getModificationType(); - AttributeType attributeType = AttributeTypeManager.getTypeByGuid(attrChange.getAttrTypeGuid()); - try { - Attribute<?> attribute = artifact.getAttributeById(attrChange.getAttributeId(), true); - // Attribute already exists (but may be deleted), process update - // Process MODIFIED / DELETED attribute - if (attribute != null) { - if (attribute.isDirty()) { - EventUtil.eventLog(String.format("%s's attribute %d [/n%s/n] has been overwritten.", - artifact.getSafeName(), attribute.getId(), attribute.toString())); - } - try { - if (modificationType == null) { - EventUtil.eventLog(String.format( - "REM: updateModifiedArtifact - Can't get mod type for %s's attribute %d.", - artifact.getArtifactTypeName(), attrChange.getAttributeId())); - continue; - } - if (modificationType.isDeleted()) { - attribute.internalSetModificationType(modificationType); - } else { - attribute.getAttributeDataProvider().loadData( - attrChange.getData().toArray(new Object[attrChange.getData().size()])); - } - attribute.internalSetGammaId(attrChange.getGammaId()); - attribute.setNotDirty(); - } catch (OseeCoreException ex) { - EventUtil.eventLog( - String.format("REM: Exception updating %s's attribute %d [/n%s/n].", - artifact.getSafeName(), attribute.getId(), attribute.toString()), ex); - } - } - // Otherwise, attribute needs creation - // Process NEW attribute - else { - if (modificationType == null) { - EventUtil.eventLog(String.format("REM: Can't get mod type for %s's attribute %d.", - artifact.getArtifactTypeName(), attrChange.getAttributeId())); - continue; - } - artifact.internalInitializeAttribute(attributeType, attrChange.getAttributeId(), - attrChange.getGammaId(), modificationType, false, - attrChange.getData().toArray(new Object[attrChange.getData().size()])); - } - } catch (OseeCoreException ex) { - EventUtil.eventLog( - String.format("REM: Exception updating %s's attribute change for attributeTypeId %d.", - artifact.getSafeName(), attributeType.getId()), ex); - } - } - } - } - } catch (OseeCoreException ex) { - EventUtil.eventLog("REM: updateModifiedArtifact", ex); - } - } -}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/InternalEventManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/InternalEventManager.java deleted file mode 100644 index 94bc27665a2..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/InternalEventManager.java +++ /dev/null @@ -1,583 +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.skynet.core.event.systems; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.concurrent.ExecutorService; -import java.util.logging.Level; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.jdk.core.util.GUID; -import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.messaging.event.res.IFrameworkEventListener; -import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; -import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; -import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; -import org.eclipse.osee.framework.skynet.core.event.EventUtil; -import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; -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.listener.IBroadcastEventListener; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventFilteredListener; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; -import org.eclipse.osee.framework.skynet.core.event.listener.IRemoteEventManagerEventListener; -import org.eclipse.osee.framework.skynet.core.event.listener.ITransactionEventListener; -import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; -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; -import org.eclipse.osee.framework.skynet.core.event.model.BroadcastEvent; -import org.eclipse.osee.framework.skynet.core.event.model.RemoteEventServiceEventType; -import org.eclipse.osee.framework.skynet.core.event.model.Sender; -import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; -import org.eclipse.osee.framework.skynet.core.internal.Activator; - -/** - * Internal implementation of OSEE Event Manager that should only be accessed from OseeEventManager classes. - * - * @author Donald G. Dunne - */ -public class InternalEventManager { - public static interface ConnectionStatus { - boolean isConnected(); - } - - private final Collection<IEventListener> priorityListeners; - private final Collection<IEventListener> listeners; - private final IOseeCoreModelEventService coreModelEventService; - private final ExecutorService executorService; - private final EventSystemPreferences preferences; - private final IFrameworkEventListener frameworkListener; - private final ConnectionStatus connectionStatus; - - public InternalEventManager(IOseeCoreModelEventService coreModelEventService, Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners, ExecutorService executorService, EventSystemPreferences preferences, ConnectionStatus connectionStatus) { - this.coreModelEventService = coreModelEventService; - this.listeners = listeners; - this.priorityListeners = priorityListeners; - this.executorService = executorService; - this.preferences = preferences; - this.frameworkListener = new FrameworkEventToRemoteEventListener(executorService, preferences, this); - this.connectionStatus = connectionStatus; - } - - public void start() throws OseeCoreException { - coreModelEventService.addFrameworkListener(frameworkListener); - } - - public void stop() throws OseeCoreException { - coreModelEventService.removeFrameworkListener(frameworkListener); - } - - public boolean isConnected() { - return connectionStatus.isConnected(); - } - - private void execute(Runnable runnable) { - if (preferences.isPendRunning()) { - runnable.run(); - } else { - executorService.submit(runnable); - } - } - - /** - * For all IBranchEventListener, process priorityListeners, then normal listeners - */ - public void processBranchEvent(Sender sender, BranchEvent branchEvent) { - EventUtil.eventLog(String.format("IEM: processBranchEvent [%s]", branchEvent)); - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof IBranchEventListener) { - processBranchEventListener((IBranchEventListener) listener, sender, branchEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processBranchEvent [%s] error processing priorityListeners", branchEvent), ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof IBranchEventListener) { - processBranchEventListener((IBranchEventListener) listener, sender, branchEvent); - } - } catch (Exception ex) { - EventUtil.eventLog(String.format("IEM: processBranchEvent [%s] error processing listeners", branchEvent), - ex); - } - } - } - - private void processBranchEventListener(IBranchEventListener listener, Sender sender, BranchEvent branchEvent) { - // If any filter doesn't match, don't call listener - if (((IEventFilteredListener) listener).getEventFilters() != null) { - for (IEventFilter eventFilter : ((IEventFilteredListener) listener).getEventFilters()) { - // If this branch doesn't match, don't pass events through - if (!eventFilter.isMatch(branchEvent.getBranchGuid())) { - return; - } - } - } - // Call listener if we matched all of the filters - listener.handleBranchEvent(sender, branchEvent); - } - - /** - * For all IBranchEventListener, process priorityListeners, then normal listeners - */ - public void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof IArtifactEventListener) { - processEventArtifactsAndRelationsListener((IArtifactEventListener) listener, artifactEvent, sender); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processArtsAndRels [%s] error processing priorityListeners", artifactEvent), ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof IArtifactEventListener) { - processEventArtifactsAndRelationsListener((IArtifactEventListener) listener, artifactEvent, sender); - } - } catch (Exception ex) { - EventUtil.eventLog(String.format("IEM: processArtsAndRels [%s] error processing listeners", artifactEvent), - ex); - } - } - } - - private void processEventArtifactsAndRelationsListener(IArtifactEventListener listener, ArtifactEvent artifactEvent, Sender sender) { - EventUtil.eventLog(String.format("IEM: processArtsAndRels [%s]", artifactEvent)); - // If any filter doesn't match, don't call listener - if (((IEventFilteredListener) listener).getEventFilters() != null) { - for (IEventFilter eventFilter : ((IEventFilteredListener) listener).getEventFilters()) { - // If this branch doesn't match, don't pass events through - if (!eventFilter.isMatch(artifactEvent.getBranchGuid())) { - return; - } - // Process artifacts and relations only if there were any in this ArtifactEvent - if (!artifactEvent.getArtifacts().isEmpty() || !artifactEvent.getRelations().isEmpty()) { - boolean matchFound = false; - // If artifacts are in event and one or more match, pass events through - if (!artifactEvent.getArtifacts().isEmpty() && eventFilter.isMatchArtifacts(artifactEvent.getArtifacts())) { - matchFound = true; - } - // If relations are in event and one or more artifacts of the relations match, pass events through - if (!matchFound && !artifactEvent.getRelations().isEmpty() && eventFilter.isMatchRelationArtifacts(artifactEvent.getRelations())) { - matchFound = true; - } - // If no match, don't pass events through - if (!matchFound) { - return; - } - } - } - } - // Call listener if we matched all of the filters - listener.handleArtifactEvent(artifactEvent, sender); - } - - public void processAccessControlEvent(Sender sender, AccessControlEvent accessControlEvent) { - EventUtil.eventLog(String.format("IEM: processAccessControlEvent [%s]", accessControlEvent)); - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof IAccessControlEventListener) { - ((IAccessControlEventListener) listener).handleAccessControlArtifactsEvent(sender, accessControlEvent); - } - } catch (Exception ex) { - EventUtil.eventLog(String.format("IEM: processAccessControlEvent [%s] error processing priorityListeners", - accessControlEvent), ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof IAccessControlEventListener) { - ((IAccessControlEventListener) listener).handleAccessControlArtifactsEvent(sender, accessControlEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processAccessControlEvent [%s] error processing listeners", accessControlEvent), ex); - } - } - } - - public void processEventBroadcastEvent(Sender sender, BroadcastEvent broadcastEvent) { - EventUtil.eventLog(String.format("IEM: processEventBroadcastEvent [%s]", broadcastEvent)); - if (broadcastEvent.getUsers().isEmpty()) { - return; - } - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof IBroadcastEventListener) { - ((IBroadcastEventListener) listener).handleBroadcastEvent(sender, broadcastEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processEventBroadcastEvent [%s] error processing priorityListeners", broadcastEvent), - ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof IBroadcastEventListener) { - ((IBroadcastEventListener) listener).handleBroadcastEvent(sender, broadcastEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processEventBroadcastEvent [%s] error processing listeners", broadcastEvent), ex); - } - } - } - - public void processRemoteEventManagerEvent(Sender sender, RemoteEventServiceEventType remoteEventServiceEvent) { - EventUtil.eventLog(String.format("IEM: processRemoteEventManagerEvent [%s]", remoteEventServiceEvent)); - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof IRemoteEventManagerEventListener) { - ((IRemoteEventManagerEventListener) listener).handleRemoteEventManagerEvent(sender, - remoteEventServiceEvent); - } - } catch (Exception ex) { - EventUtil.eventLog(String.format( - "IEM: processRemoteEventManagerEvent [%s] error processing priorityListeners", remoteEventServiceEvent), - ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof IRemoteEventManagerEventListener) { - ((IRemoteEventManagerEventListener) listener).handleRemoteEventManagerEvent(sender, - remoteEventServiceEvent); - } - } catch (Exception ex) { - EventUtil.eventLog(String.format("IEM: processRemoteEventManagerEvent [%s] error processing listeners", - remoteEventServiceEvent), ex); - } - } - } - - public void processTransactionEvent(Sender sender, TransactionEvent transactionEvent) { - EventUtil.eventLog(String.format("IEM: processTransactionEvent [%s]", transactionEvent)); - for (IEventListener listener : priorityListeners) { - try { - if (listener instanceof ITransactionEventListener) { - ((ITransactionEventListener) listener).handleTransactionEvent(sender, transactionEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processTransactionEvent [%s] error processing priorityListeners", transactionEvent), - ex); - } - } - for (IEventListener listener : listeners) { - try { - if (listener instanceof ITransactionEventListener) { - ((ITransactionEventListener) listener).handleTransactionEvent(sender, transactionEvent); - } - } catch (Exception ex) { - EventUtil.eventLog( - String.format("IEM: processTransactionEvent [%s] error processing listeners", transactionEvent), ex); - } - } - } - - // public String getListenerReport() { - // return EventUtil.getListenerReport(listeners, priorityListeners); - // } - - /* - * Kick LOCAL and REMOTE access control events - */ - public void kickAccessControlArtifactsEvent(final Sender sender, final AccessControlEvent accessControlEvent) { - if (sender == null) { - throw new IllegalArgumentException("sender can not be null"); - } - if (accessControlEvent.getEventType() == null) { - throw new IllegalArgumentException("accessControlEventType can not be null"); - } - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickAccessControlEvent - type: " + accessControlEvent + sender + " artifacts: " + accessControlEvent.getArtifacts()); - Runnable runnable = new Runnable() { - @Override - public void run() { - try { - // Kick LOCAL - boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); - boolean loopbackTestEnabledAndRemoteEventReturned = - preferences.isEnableRemoteEventLoopback() && sender.isRemote(); - if (normalOperation || loopbackTestEnabledAndRemoteEventReturned) { - processAccessControlEvent(sender, accessControlEvent); - } - // Kick REMOTE - if (sender.isLocal() && accessControlEvent.getEventType().isRemoteEventType()) { - sendRemoteEvent(FrameworkEventUtil.getRemoteAccessControlEvent(accessControlEvent)); - } - } catch (Exception ex) { - EventUtil.eventLog("IEM: kickAccessControlEvent", ex); - } - } - }; - execute(runnable); - } - - // Kick LOCAL "remote event manager" event - public void kickLocalRemEvent(final Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) { - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickLocalRemEvent: type: " + remoteEventServiceEventType + " - " + sender); - Runnable runnable = new Runnable() { - @Override - public void run() { - // Kick LOCAL - try { - if (sender.isLocal() && remoteEventServiceEventType.isLocalEventType()) { - processRemoteEventManagerEvent(sender, remoteEventServiceEventType); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - }; - execute(runnable); - } - - // Kick LOCAL ArtifactReloadEvent - public void kickLocalArtifactReloadEvent(final Sender sender, final ArtifactEvent artifactEvent) { - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickArtifactReloadEvent [" + artifactEvent + "] - " + sender); - Runnable runnable = new Runnable() { - @Override - public void run() { - try { - // Kick LOCAL - boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); - boolean loopbackTestEnabledAndRemoteEventReturned = - preferences.isEnableRemoteEventLoopback() && sender.isRemote(); - if (normalOperation && sender.isLocal() || loopbackTestEnabledAndRemoteEventReturned) { - processEventArtifactsAndRelations(sender, artifactEvent); - } - - // NO REMOTE KICK - } catch (Exception ex) { - EventUtil.eventLog("IEM: kickArtifactReloadEvent", ex); - } - } - }; - execute(runnable); - } - - /* - * Kick LOCAL and REMOTE branch events - */ - public void kickBranchEvent(final Sender sender, final BranchEvent branchEvent) { - if (branchEvent.getNetworkSender() == null) { - EventUtil.eventLog("IEM: kickBranchEvent - ERROR networkSender can't be null."); - return; - } - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickBranchEvent: type: " + branchEvent.getEventType() + " guid: " + branchEvent.getBranchGuid() + " - " + sender); - Runnable runnable = new Runnable() { - @Override - public void run() { - // Log if this is a loopback and what is happening - if (preferences.isEnableRemoteEventLoopback()) { - EventUtil.eventLog("IEM: BranchEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); - } - BranchEventType branchEventType = branchEvent.getEventType(); - - // Kick LOCAL - boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); - boolean loopbackTestEnabledAndRemoteEventReturned = - preferences.isEnableRemoteEventLoopback() && sender.isRemote(); - if (normalOperation || loopbackTestEnabledAndRemoteEventReturned) { - processBranchEvent(sender, branchEvent); - } - - // Kick REMOTE (If source was Local and this was not a default branch changed event - if (sender.isLocal() && branchEventType.isRemoteEventType()) { - sendRemoteEvent(FrameworkEventUtil.getRemoteBranchEvent(branchEvent)); - } - } - }; - execute(runnable); - } - - // Kick LOCAL and REMOTE ArtifactEvent - public void kickArtifactEvent(final Sender sender, final ArtifactEvent artifactEvent) { - if (artifactEvent.getNetworkSender() == null) { - EventUtil.eventLog("IEM: kickArtifactEvent - ERROR networkSender can't be null."); - return; - } - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickArtifactEvent [" + artifactEvent + "] - " + sender); - Runnable runnable = new Runnable() { - @Override - public void run() { - // Roll-up change information - try { - // Log if this is a loopback and what is happening - if (preferences.isEnableRemoteEventLoopback()) { - EventUtil.eventLog("IEM: ArtifactEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); - } - - // Kick LOCAL - boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); - boolean loopbackTestEnabledAndRemoteEventReturned = - preferences.isEnableRemoteEventLoopback() && sender.isRemote(); - if (normalOperation || loopbackTestEnabledAndRemoteEventReturned) { - processEventArtifactsAndRelations(sender, artifactEvent); - } - - // Kick REMOTE (If source was Local and this was not a default branch changed event - if (sender.isLocal()) { - sendRemoteEvent(FrameworkEventUtil.getRemotePersistEvent(artifactEvent)); - } - } catch (Exception ex) { - EventUtil.eventLog("IEM: kickArtifactEvent", ex); - } - } - }; - execute(runnable); - } - - // Kick LOCAL and REMOTE ArtifactEvent - public void kickTransactionEvent(final Sender sender, final TransactionEvent transEvent) { - if (transEvent.getNetworkSender() == null) { - EventUtil.eventLog("IEM: kickTransactionEvent - ERROR networkSender can't be null."); - return; - } - if (preferences.isDisableEvents()) { - return; - } - EventUtil.eventLog("IEM: kickTransactionEvent [" + transEvent + "] - " + sender); - Runnable runnable = new Runnable() { - @Override - public void run() { - // Roll-up change information - try { - // Log if this is a loopback and what is happening - if (preferences.isEnableRemoteEventLoopback()) { - EventUtil.eventLog("IEM: TransactionEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); - } - - // Kick LOCAL - boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); - boolean loopbackTestEnabledAndRemoteEventReturned = - preferences.isEnableRemoteEventLoopback() && sender.isRemote(); - if (normalOperation || loopbackTestEnabledAndRemoteEventReturned) { - processTransactionEvent(sender, transEvent); - } - - // Kick REMOTE (If source was Local and this was not a default branch changed event - if (sender.isLocal()) { - // Kick REMOTE - sendRemoteEvent(FrameworkEventUtil.getRemoteTransactionEvent(transEvent)); - } - } catch (Exception ex) { - EventUtil.eventLog("IEM: kickTransactionEvent", ex); - } - } - }; - execute(runnable); - } - - /* - * Kick LOCAL and REMOTE broadcast event - */ - public void kickBroadcastEvent(final Sender sender, final BroadcastEvent broadcastEvent) { - if (preferences.isDisableEvents()) { - return; - } - - if (!broadcastEvent.getBroadcastEventType().isPingOrPong()) { - EventUtil.eventLog("IEM: kickBroadcastEvent: type: " + broadcastEvent.getBroadcastEventType().name() + " message: " + broadcastEvent.getMessage() + " - " + sender); - } - Runnable runnable = new Runnable() { - @Override - public void run() { - try { - // Kick from REMOTE - if (sender.isRemote() || sender.isLocal() && broadcastEvent.getBroadcastEventType().isLocalEventType()) { - processEventBroadcastEvent(sender, broadcastEvent); - } - - // Kick REMOTE (If source was Local and this was not a default branch changed event - if (sender.isLocal() && broadcastEvent.getBroadcastEventType().isRemoteEventType()) { - sendRemoteEvent(FrameworkEventUtil.getRemoteBroadcastEvent(broadcastEvent)); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - }; - execute(runnable); - } - - /** - * InternalEventManager.enableRemoteEventLoopback will enable a testing loopback that will take the kicked remote - * events and loop them back as if they came from an external client. It will allow for the testing of the OEM -> REM - * -> OEM processing. In addition, this onEvent is put in a non-display thread which will test that all handling by - * applications is properly handled by doing all processing and then kicking off display-thread when need to update - * ui. SessionId needs to be modified so this client doesn't think the events came from itself. - */ - private void sendRemoteEvent(final RemoteEvent remoteEvent) { - if (isConnected()) { - EventUtil.eventLog(String.format("IEM: kick - [%s]", remoteEvent)); - Job job = - new Job(String.format("[%s] - sending [%s]", getClass().getSimpleName(), - remoteEvent.getClass().getSimpleName())) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - coreModelEventService.sendRemoteEvent(remoteEvent); - } catch (Exception ex) { - EventUtil.eventLog("IEM: kick", ex); - return new Status(IStatus.ERROR, Activator.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex); - } - return Status.OK_STATUS; - } - }; - - job.schedule(); - } - - if (preferences.isEnableRemoteEventLoopback()) { - EventUtil.eventLog("IEM: Loopback enabled - Returning events as Remote event."); - String newSessionId = GUID.create(); - remoteEvent.getNetworkSender().setSessionId(newSessionId); - try { - frameworkListener.onEvent(remoteEvent); - } catch (RemoteException ex) { - EventUtil.eventLog("IEM: RemoteEvent - onEvent", ex); - } - } - } - - public void testSendRemoteEventThroughFrameworkListener(final RemoteEvent remoteEvent) throws RemoteException { - frameworkListener.onEvent(remoteEvent); - } -} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/Activator.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/Activator.java index b647f57e764..c1e9b9aa154 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/Activator.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/Activator.java @@ -11,6 +11,8 @@ package org.eclipse.osee.framework.skynet.core.internal; import org.eclipse.osee.framework.core.client.ClientSessionManager; +import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; +import org.eclipse.osee.framework.skynet.core.internal.event.EventListenerRegistry; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; @@ -20,21 +22,25 @@ import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public static final String PLUGIN_ID = "org.eclipse.osee.framework.skynet.core"; - private static Activator instance; + // To Resolve Initialization issues causes by static OseeEventManager + private static final EventSystemPreferences preferences = new EventSystemPreferences(); + private static final EventListenerRegistry eventListeners = new EventListenerRegistry(); @Override public void start(BundleContext context) throws Exception { - instance = this; ClientSessionManager.class.getCanonicalName(); } @Override public void stop(BundleContext context) throws Exception { - instance = null; + // } - public static Activator getInstance() { - return instance; + public static EventSystemPreferences getEventPreferences() { + return preferences; } + public static EventListenerRegistry getEventListeners() { + return eventListeners; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventAdmin.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventAdmin.java deleted file mode 100644 index 4d0ee240e95..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventAdmin.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 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.skynet.core.internal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.logging.Level; -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; -import org.eclipse.osee.framework.skynet.core.attribute.HttpAttributeTaggingListener; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; -import org.eclipse.osee.framework.skynet.core.event.model.RemoteEventServiceEventType; -import org.eclipse.osee.framework.skynet.core.event.systems.EventManagerData; -import org.eclipse.osee.framework.skynet.core.event.systems.EventManagerFactory; -import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager; -import org.eclipse.osee.framework.skynet.core.event.systems.ResMessagingConnectionListener; - -/** - * @author Roberto E. Escobar - */ -public class OseeEventAdmin { - - private IOseeCoreModelEventService coreModelEventService; - - private final EventManagerFactory factory = new EventManagerFactory(); - - private ResMessagingConnectionListener connectionStatusListener; - private final Collection<IEventListener> coreListeners = new ArrayList<IEventListener>(); - private Thread thread; - - public void setOseeCoreModelEventService(IOseeCoreModelEventService coreModelEventService) { - this.coreModelEventService = coreModelEventService; - } - - public void addEventListener(IEventListener listener) { - OseeEventManager.addListener(listener); - } - - public void removeEventListener(IEventListener listener) { - OseeEventManager.removeListener(listener); - } - - public void start() { - final EventManagerData eventManagerData = OseeEventManager.getEventManagerData(); - - connectionStatusListener = new ResMessagingConnectionListener(eventManagerData.getPreferences()); - - Runnable runnable = new Runnable() { - @Override - public void run() { - InternalEventManager eventManager = - factory.createNewEventManager(coreModelEventService, eventManagerData.getPreferences(), - eventManagerData.getListeners(), eventManagerData.getPriorityListeners(), connectionStatusListener); - if (eventManager != null) { - try { - eventManagerData.setMessageEventManager(eventManager); - coreModelEventService.addConnectionListener(connectionStatusListener); - eventManager.start(); - - try { - OseeEventManager.kickLocalRemEvent(eventManager, RemoteEventServiceEventType.Rem_Connected); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.INFO, ex); - } - addCoreListeners(); - } catch (Throwable th) { - OseeLog.log(Activator.class, Level.SEVERE, th); - } - OseeLog.log(Activator.class, Level.INFO, "Remote Event Service - Enabled"); - - } else { - OseeLog.log(Activator.class, Level.INFO, "Remote Event Service - Disabled"); - } - } - }; - thread = new Thread(runnable); - thread.start(); - } - - private void addCoreListeners() { - coreListeners.add(new HttpAttributeTaggingListener()); - for (IEventListener listener : coreListeners) { - OseeEventManager.addListener(listener); - } - } - - private void removeCoreListeners() { - for (IEventListener listener : coreListeners) { - OseeEventManager.removeListener(listener); - } - coreListeners.clear(); - } - - public void stop() throws OseeCoreException { - if (thread != null) { - thread.interrupt(); - thread = null; - } - removeCoreListeners(); - - InternalEventManager eventManager = OseeEventManager.getEventManagerData().getMessageEventManager(); - if (eventManager != null) { - coreModelEventService.removeConnectionListener(connectionStatusListener); - eventManager.stop(); - // OseeEventManager.kickLocalRemEvent(eventManager, RemoteEventServiceEventType.Rem_DisConnected); - } - } -} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventServiceImpl.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventServiceImpl.java new file mode 100644 index 00000000000..e213c8dfe10 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventServiceImpl.java @@ -0,0 +1,271 @@ +/******************************************************************************* + * Copyright (c) 2009 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.skynet.core.internal; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.logging.Level; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteAccessControlEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBranchEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBroadcastEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemotePersistEvent1; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteTransactionEvent1; +import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.OseeEventService; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; +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.BroadcastEvent; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; +import org.eclipse.osee.framework.skynet.core.event.model.RemoteEventServiceEventType; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; +import org.eclipse.osee.framework.skynet.core.internal.event.ConnectionListenerImpl; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlers; +import org.eclipse.osee.framework.skynet.core.internal.event.EventListenerRegistry; +import org.eclipse.osee.framework.skynet.core.internal.event.EventTransport; +import org.eclipse.osee.framework.skynet.core.internal.event.OseeEventThreadFactory; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.AccessControlEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.AccessControlRemoteEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.ArtifactEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.ArtifactRemoteEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.BranchEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.BranchRemoteEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.BroadcastEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.BroadcastRemoteEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.RemoteServiceEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.TransactionEventHandler; +import org.eclipse.osee.framework.skynet.core.internal.event.handlers.TransactionRemoteEventHandler; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; + +/** + * @author Roberto E. Escobar + */ +public class OseeEventServiceImpl implements OseeEventService { + + private final EventSystemPreferences preferences; + private final EventListenerRegistry listeners; + private final EventHandlers handlers; + + private IOseeCoreModelEventService messagingService; + + private EventTransport eventTransport; + private ConnectionListenerImpl connectionStatus; + private ExecutorService executor; + + private final List<ServiceReference<IEventListener>> pendingServices = + new CopyOnWriteArrayList<ServiceReference<IEventListener>>(); + + private Thread thread; + + public OseeEventServiceImpl() { + super(); + this.handlers = new EventHandlers(); + + // TODO Fix initialization of OseeEventManager - These should not be singletons + this.preferences = Activator.getEventPreferences(); + this.listeners = Activator.getEventListeners(); + } + + public void setOseeCoreModelEventService(IOseeCoreModelEventService messagingService) { + this.messagingService = messagingService; + } + + public void addListener(ServiceReference<IEventListener> reference) { + if (isReady()) { + registerListener(reference); + } else { + pendingServices.add(reference); + } + + } + + public void removeListener(ServiceReference<IEventListener> reference) { + if (isReady()) { + unregisterListener(reference); + } else { + pendingServices.remove(reference); + } + } + + private void registerListener(ServiceReference<IEventListener> reference) { + IEventListener listener = getService(reference); + EventQosType qos = getEventQosType(reference); + + EventUtil.eventLog("registering event listener - qos[%s] name[%s]", reference.getProperty("component.name")); + addListener(qos, listener); + } + + private void unregisterListener(ServiceReference<IEventListener> reference) { + IEventListener listener = getService(reference); + EventQosType qos = getEventQosType(reference); + + EventUtil.eventLog("deregistering event listener - qos[%s] name[%s]", reference.getProperty("component.name")); + removeListener(qos, listener); + } + + private IEventListener getService(ServiceReference<IEventListener> reference) { + Bundle bundle = reference.getBundle(); + BundleContext context = bundle.getBundleContext(); + IEventListener listener = context.getService(reference); + return listener; + } + + private boolean isReady() { + return eventTransport != null; + } + + public void start() { + registerEventHandlers(handlers); + + executor = createExecutor("Osee Client Events"); + eventTransport = new EventTransport(preferences, handlers, listeners, executor, messagingService); + connectionStatus = new ConnectionListenerImpl(preferences, eventTransport); + + Runnable runnable = new Runnable() { + @Override + public void run() { + for (ServiceReference<IEventListener> reference : pendingServices) { + registerListener(reference); + } + pendingServices.clear(); + + try { + messagingService.addConnectionListener(connectionStatus); + messagingService.addFrameworkListener(eventTransport); + eventTransport.send(this, RemoteEventServiceEventType.Rem_Connected); + } catch (OseeCoreException ex) { + eventTransport.setConnected(false); + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } + }; + thread = new Thread(runnable); + thread.start(); + } + + public void stop() throws OseeCoreException { + if (thread != null) { + thread.interrupt(); + thread = null; + } + if (connectionStatus != null) { + messagingService.removeConnectionListener(connectionStatus); + connectionStatus = null; + } + if (eventTransport != null) { + eventTransport.setConnected(false); + messagingService.removeFrameworkListener(eventTransport); + } + if (executor != null) { + executor.shutdown(); + } + deregisterEventHandlers(handlers); + eventTransport = null; + } + + private EventQosType getEventQosType(ServiceReference<IEventListener> reference) { + EventQosType type = EventQosType.NORMAL; + String value = (String) reference.getProperty("qos"); + if (Strings.isValid(value)) { + for (EventQosType qosType : EventQosType.values()) { + if (qosType.name().equalsIgnoreCase(value)) { + type = qosType; + break; + } + } + } + return type; + } + + private void registerEventHandlers(EventHandlers handlers) { + handlers.addLocalHandler(AccessControlEvent.class, new AccessControlEventHandler()); + handlers.addLocalHandler(ArtifactEvent.class, new ArtifactEventHandler()); + handlers.addLocalHandler(BranchEvent.class, new BranchEventHandler()); + handlers.addLocalHandler(BroadcastEvent.class, new BroadcastEventHandler()); + handlers.addLocalHandler(RemoteEventServiceEventType.class, new RemoteServiceEventHandler()); + handlers.addLocalHandler(TransactionEvent.class, new TransactionEventHandler()); + + handlers.addRemoteHandler(RemoteAccessControlEvent1.class, new AccessControlRemoteEventHandler()); + handlers.addRemoteHandler(RemotePersistEvent1.class, new ArtifactRemoteEventHandler()); + handlers.addRemoteHandler(RemoteBranchEvent1.class, new BranchRemoteEventHandler()); + handlers.addRemoteHandler(RemoteBroadcastEvent1.class, new BroadcastRemoteEventHandler()); + handlers.addRemoteHandler(RemoteTransactionEvent1.class, new TransactionRemoteEventHandler()); + } + + private void deregisterEventHandlers(EventHandlers handlers) { + handlers.removeLocalHandler(AccessControlEvent.class); + handlers.removeLocalHandler(ArtifactEvent.class); + handlers.removeLocalHandler(BranchEvent.class); + handlers.removeLocalHandler(BroadcastEvent.class); + handlers.removeLocalHandler(RemoteEventServiceEventType.class); + handlers.removeLocalHandler(TransactionEvent.class); + + handlers.removeRemoteHandler(RemoteAccessControlEvent1.class); + handlers.removeRemoteHandler(RemotePersistEvent1.class); + handlers.removeRemoteHandler(RemoteBranchEvent1.class); + handlers.removeRemoteHandler(RemoteBroadcastEvent1.class); + handlers.removeRemoteHandler(RemoteTransactionEvent1.class); + } + + private ExecutorService createExecutor(String threadPrefix) { + int numberOfProcessors = Runtime.getRuntime().availableProcessors(); + if (numberOfProcessors > 4) { + numberOfProcessors = 4; + } + ThreadFactory threadFactory = new OseeEventThreadFactory(threadPrefix); + return Executors.newFixedThreadPool(numberOfProcessors, threadFactory); + } + + @Override + public boolean isConnected() { + return eventTransport.isConnected(); + } + + @Override + public <E extends FrameworkEvent> void send(Object object, E event) throws OseeCoreException { + eventTransport.send(object, event); + } + + @Override + public <E extends RemoteEvent> void receive(E event) { + eventTransport.onEvent(event); + } + + @Override + public <E extends FrameworkEvent> void receive(Sender sender, E event) throws OseeCoreException { + eventTransport.sendLocal(sender, event); + } + + @Override + public void addListener(EventQosType qos, IEventListener listener) { + listeners.addListener(qos, listener); + } + + @Override + public void removeListener(EventQosType qos, IEventListener listener) { + listeners.removeListener(qos, listener); + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ServiceUtil.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ServiceUtil.java index c73a800540e..0e36056b5ac 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ServiceUtil.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ServiceUtil.java @@ -18,6 +18,7 @@ import org.eclipse.osee.framework.database.IOseeDatabaseService; import org.eclipse.osee.framework.lifecycle.ILifecycleService; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.AccessPolicy; +import org.eclipse.osee.framework.skynet.core.event.OseeEventService; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; @@ -46,6 +47,10 @@ public final class ServiceUtil { return service; } + public static OseeEventService getEventService() throws OseeCoreException { + return getService(OseeEventService.class); + } + public static IdentityService getIdentityService() throws OseeCoreException { return getService(IdentityService.class); } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/ResMessagingConnectionListener.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/ConnectionListenerImpl.java index 493ea395257..543a2ffe36d 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/ResMessagingConnectionListener.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/ConnectionListenerImpl.java @@ -8,7 +8,7 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.skynet.core.event.systems; +package org.eclipse.osee.framework.skynet.core.internal.event; import java.util.logging.Level; import org.eclipse.osee.framework.core.exception.OseeCoreException; @@ -17,28 +17,27 @@ import org.eclipse.osee.framework.messaging.ConnectionListener; import org.eclipse.osee.framework.messaging.ConnectionNode; import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; 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.model.RemoteEventServiceEventType; -import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager.ConnectionStatus; import org.eclipse.osee.framework.skynet.core.internal.Activator; /** * @author Donald G. Dunne */ -public final class ResMessagingConnectionListener implements ConnectionListener, ConnectionStatus { +public final class ConnectionListenerImpl implements ConnectionListener { private final EventSystemPreferences preferences; - private boolean connectionStatus; + private final Transport transport; - public ResMessagingConnectionListener(EventSystemPreferences preferences) { + public ConnectionListenerImpl(EventSystemPreferences preferences, Transport transport) { this.preferences = preferences; + this.transport = transport; } @Override public void connected(ConnectionNode node) { - connectionStatus = preferences.isOseeEventBrokerValid(); + transport.setConnected(preferences.isOseeEventBrokerValid()); try { - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem_Connected); + transport.send(this, RemoteEventServiceEventType.Rem_Connected); OseeLog.log(Activator.class, Level.INFO, "Remote Event Service - Connected"); } catch (OseeCoreException ex) { EventUtil.eventLog("REM: ResConnectionListener", ex); @@ -47,17 +46,13 @@ public final class ResMessagingConnectionListener implements ConnectionListener, @Override public void notConnected(ConnectionNode node) { - connectionStatus = false; + transport.setConnected(false); try { - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem_DisConnected); + transport.send(this, RemoteEventServiceEventType.Rem_DisConnected); OseeLog.log(Activator.class, Level.INFO, "Remote Event Service - Dis-Connected"); } catch (OseeCoreException ex) { EventUtil.eventLog("REM: ResConnectionListener", ex); } } - @Override - public boolean isConnected() { - return connectionStatus; - } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/ConnectionStatus.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/ConnectionStatus.java new file mode 100644 index 00000000000..9bfbfb0614f --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/ConnectionStatus.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event; + +/** + * @author Roberto E. Escobar + */ +public interface ConnectionStatus { + boolean isConnected(); + + void setConnected(boolean value); +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerLocal.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerLocal.java new file mode 100644 index 00000000000..fec0937b862 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerLocal.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; + +/** + * @author Roberto E. Escobar + */ +public interface EventHandlerLocal<L extends IEventListener, E extends FrameworkEvent> { + + void handle(L listener, Sender sender, E event); + + void send(Transport transport, Sender sender, E event) throws OseeCoreException; + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerRemote.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerRemote.java new file mode 100644 index 00000000000..1a2c0e590fd --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlerRemote.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; + +/** + * @author Roberto E. Escobar + */ +public interface EventHandlerRemote<R extends RemoteEvent> { + + void handle(Transport transport, Sender sender, R remoteEvent) throws OseeCoreException; +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlers.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlers.java new file mode 100644 index 00000000000..f27e2ea1145 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventHandlers.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import java.util.HashMap; +import java.util.Map; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; + +/** + * @author Roberto E. Escobar + */ +public class EventHandlers { + + private final Map<Class<? extends FrameworkEvent>, EventHandlerLocal<? extends IEventListener, ? extends FrameworkEvent>> handlers = + new HashMap<Class<? extends FrameworkEvent>, EventHandlerLocal<? extends IEventListener, ? extends FrameworkEvent>>(); + + private final Map<Class<? extends RemoteEvent>, EventHandlerRemote<? extends RemoteEvent>> remoteHandlers = + new HashMap<Class<? extends RemoteEvent>, EventHandlerRemote<? extends RemoteEvent>>(); + + public void addLocalHandler(Class<? extends FrameworkEvent> clazz, EventHandlerLocal<? extends IEventListener, ? extends FrameworkEvent> handler) { + handlers.put(clazz, handler); + } + + public void removeLocalHandler(Class<? extends FrameworkEvent> clazz) { + handlers.remove(clazz); + } + + public void addRemoteHandler(Class<? extends RemoteEvent> clazz, EventHandlerRemote<? extends RemoteEvent> handler) { + remoteHandlers.put(clazz, handler); + } + + public void removeRemoteHandler(Class<? extends RemoteEvent> clazz) { + remoteHandlers.remove(clazz); + } + + @SuppressWarnings("unchecked") + public <H extends EventHandlerRemote<? extends RemoteEvent>> H getRemoteHandler(RemoteEvent event) { + return (H) remoteHandlers.get(event.getClass()); + } + + @SuppressWarnings("unchecked") + public <H extends EventHandlerLocal<? extends IEventListener, ? extends FrameworkEvent>> H getLocalHandler(FrameworkEvent event) { + return (H) handlers.get(event.getClass()); + } + + public int sizeLocal() { + return handlers.size(); + } + + public int sizeRemote() { + return remoteHandlers.size(); + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistry.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistry.java new file mode 100644 index 00000000000..aa40a090cca --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventListenerRegistry.java @@ -0,0 +1,211 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; + +/** + * @author Roberto E. Escobar + */ +public class EventListenerRegistry { + + private final Map<EventQosType, EventListeners> qosToListeners = + new ConcurrentHashMap<EventQosType, EventListeners>(); + private final Set<IEventListener> listenerSet = new HashSet<IEventListener>(); + + public void addListener(EventQosType qos, IEventListener listener) { + if (listener != null) { + EventListeners registry = qosToListeners.get(qos); + if (registry == null) { + registry = new EventListeners(); + qosToListeners.put(qos, registry); + } + registry.addListener(listener); + listenerSet.add(listener); + } + } + + public void removeListener(EventQosType qos, IEventListener listener) { + if (listener != null) { + EventListeners registry = qosToListeners.get(qos); + if (registry != null) { + registry.removeListener(listener); + if (registry.isEmpty()) { + qosToListeners.remove(qos); + } + } + listenerSet.remove(listener); + } + } + + public void removeListener(IEventListener listener) { + if (listener != null) { + listenerSet.remove(listener); + for (EventQosType type : EventQosType.values()) { + removeListener(type, listener); + } + } + } + + public int size(EventQosType type) { + int count = 0; + EventListeners registry = qosToListeners.get(type); + if (registry != null) { + count += registry.size(); + } + return count; + } + + public int size() { + return listenerSet.size(); + } + + public void clearAll() { + qosToListeners.clear(); + listenerSet.clear(); + } + + public <D extends IEventListener> Collection<D> getListeners(EventQosType qos, FrameworkEvent event) { + Collection<D> listener = null; + EventListeners registry = qosToListeners.get(qos); + if (registry != null) { + listener = registry.getListeners(event.getClass()); + } + if (listener == null) { + listener = Collections.emptyList(); + } + return listener; + } + + @Override + public String toString() { + List<String> values = new ArrayList<String>(); + for (EventQosType type : EventQosType.values()) { + EventListeners registry = qosToListeners.get(type); + for (Class<? extends FrameworkEvent> clazz : registry.keySet()) { + Collection<IEventListener> data = registry.getListeners(clazz); + for (IEventListener listener : data) { + values.add(String.format("type[%s] - event[%s] - [%s]", type, clazz, listener)); + } + } + } + String[] listArr = values.toArray(new String[values.size()]); + Arrays.sort(listArr); + return org.eclipse.osee.framework.jdk.core.util.Collections.toString("\n", (Object[]) listArr); + } + private final static class EventListeners { + private final Map<Class<? extends FrameworkEvent>, Set<IEventListener>> eventClassToListeners = + new ConcurrentHashMap<Class<? extends FrameworkEvent>, Set<IEventListener>>(); + private int size = 0; + + public void addListener(IEventListener listener) { + if (listener != null) { + Collection<Class<? extends FrameworkEvent>> events = getCompatibleEvents(listener); + for (Class<? extends FrameworkEvent> clazz : events) { + add(clazz, listener); + } + } + } + + private void add(Class<? extends FrameworkEvent> clazz, IEventListener listener) { + Set<IEventListener> items = eventClassToListeners.get(clazz); + if (items == null) { + items = new HashSet<IEventListener>(); + eventClassToListeners.put(clazz, items); + } + synchronized (items) { + if (items.add(listener)) { + size++; + } + } + } + + public Set<Class<? extends FrameworkEvent>> keySet() { + return eventClassToListeners.keySet(); + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return eventClassToListeners.isEmpty(); + } + + public void removeListener(IEventListener listener) { + if (listener != null) { + Collection<Class<? extends FrameworkEvent>> events = getCompatibleEvents(listener); + for (Class<? extends FrameworkEvent> clazz : events) { + remove(clazz, listener); + } + } + } + + private void remove(Class<? extends FrameworkEvent> clazz, IEventListener listener) { + Set<IEventListener> items = eventClassToListeners.get(clazz); + if (items != null) { + synchronized (items) { + if (items.remove(listener)) { + size--; + } + } + if (items.isEmpty()) { + eventClassToListeners.remove(clazz); + } + } + } + + @SuppressWarnings("unchecked") + public <D extends IEventListener> Collection<D> getListeners(Class<? extends FrameworkEvent> clazz) { + Collection<D> items = (Collection<D>) eventClassToListeners.get(clazz); + if (items == null) { + items = Collections.emptySet(); + } else { + Collection<D> copy = new HashSet<D>(); + copy.addAll(items); + items = copy; + } + return items; + } + + @SuppressWarnings("unchecked") + private Collection<Class<? extends FrameworkEvent>> getCompatibleEvents(IEventListener listener) { + Collection<Class<? extends FrameworkEvent>> events = new HashSet<Class<? extends FrameworkEvent>>(); + Method[] methods = listener.getClass().getMethods(); + if (methods != null) { + for (Method method : methods) { + Class<?>[] parameters = method.getParameterTypes(); + if (parameters != null) { + for (Class<?> parameter : parameters) { + if (FrameworkEvent.class.isAssignableFrom(parameter)) { + events.add((Class<? extends FrameworkEvent>) parameter); + } + } + } + } + } + return events; + } + + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTransport.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTransport.java new file mode 100644 index 00000000000..a75d357ca59 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/EventTransport.java @@ -0,0 +1,238 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event; + +import java.util.Collection; +import java.util.concurrent.ExecutorService; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.framework.core.client.ClientSessionManager; +import org.eclipse.osee.framework.core.exception.OseeAuthenticationRequiredException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.util.Conditions; +import org.eclipse.osee.framework.jdk.core.util.GUID; +import org.eclipse.osee.framework.messaging.event.res.IFrameworkEventListener; +import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.listener.EventQosType; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; +import org.eclipse.osee.framework.skynet.core.event.model.HasEventType; +import org.eclipse.osee.framework.skynet.core.event.model.HasNetworkSender; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.Activator; + +/** + * @author Roberto E. Escobar + */ +public class EventTransport implements Transport, IFrameworkEventListener { + + private final EventSystemPreferences preferences; + private final EventHandlers handlers; + private final EventListenerRegistry listenerRegistry; + private final ExecutorService executorService; + private final IOseeCoreModelEventService messagingService; + private volatile boolean connectionStatus; + + public EventTransport(EventSystemPreferences preferences, EventHandlers handlers, EventListenerRegistry listenerRegistry, ExecutorService executorService, IOseeCoreModelEventService messagingService) { + super(); + this.preferences = preferences; + this.handlers = handlers; + this.listenerRegistry = listenerRegistry; + this.executorService = executorService; + this.messagingService = messagingService; + this.connectionStatus = false; + } + + @Override + public void setConnected(boolean value) { + this.connectionStatus = value; + } + + @Override + public boolean isConnected() { + return connectionStatus; + } + + @Override + public boolean isLoopbackEnabled() { + return preferences.isEnableRemoteEventLoopback(); + } + + @Override + public boolean isDispatchToLocalAllowed(Sender sender) { + boolean normalOperation = !isLoopbackEnabled(); + return normalOperation || (isLoopbackEnabled() && sender.isRemote()); + } + + private boolean areEventsAllowed() { + return !preferences.isDisableEvents(); + } + + private Sender createSender(Object sourceObject) throws OseeAuthenticationRequiredException { + Sender sender = null; + // Sender came from Remote Event Manager if source == sender + if (sourceObject instanceof Sender && ((Sender) sourceObject).isRemote()) { + sender = (Sender) sourceObject; + } else { + // create new sender based on sourceObject + sender = Sender.createSender(sourceObject, ClientSessionManager.getSession()); + } + return sender; + } + + @Override + public <E extends FrameworkEvent> void send(final Object object, final E event) throws OseeCoreException { + if (areEventsAllowed()) { + Sender sender = createSender(object); + if (event instanceof HasNetworkSender) { + HasNetworkSender netSender = (HasNetworkSender) event; + netSender.setNetworkSender(sender.getNetworkSender()); + } + send(sender, event); + } + } + + @Override + public <E extends FrameworkEvent> void send(final Sender sender, final E event) throws OseeCoreException { + if (areEventsAllowed()) { + Conditions.checkNotNull(sender, "sender"); + Conditions.checkNotNull(event, "event"); + + final EventHandlerLocal<? extends IEventListener, E> handler = handlers.getLocalHandler(event); + Conditions.checkNotNull(handler, "eventHandler", "No event handler found for [%s]", event.getClass().getName()); + + Runnable runnable = new Runnable() { + @Override + public void run() { + if (preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("IEM: Loopback enabled [%s] - %s", event.getClass().getSimpleName(), + sender.isLocal() ? "Ignoring Local Kick" : "Kicking Local from Loopback"); + } + try { + if (event instanceof HasEventType) { + HasEventType<?> hasEventType = (HasEventType<?>) event; + Conditions.checkNotNull(hasEventType.getEventType(), "eventType", "for event [%s]", + event.getClass().getSimpleName()); + } + if (event instanceof HasNetworkSender) { + HasNetworkSender netSender = (HasNetworkSender) event; + Conditions.checkNotNull(netSender.getNetworkSender(), "networkSender", "for event [%s]", + event.getClass().getSimpleName()); + } + handler.send(EventTransport.this, sender, event); + } catch (Throwable th) { + EventUtil.eventLog(th, "IEM: Error sending event [%s] from sender [%s]", + event.getClass().getSimpleName(), sender); + } + } + }; + + EventUtil.eventLog("IEM: Dispatched Event - type[%s] to[%s]", event.getClass().getSimpleName(), sender); + execute(runnable); + } + } + + @Override + public <E extends FrameworkEvent, L extends IEventListener, H extends EventHandlerLocal<L, E>> void sendLocal(final Sender sender, final E event) throws OseeCoreException { + EventHandlerLocal<L, E> handler = handlers.getLocalHandler(event); + Conditions.checkNotNull(handler, "localEventHandler", "No local event handler available for event [%s]", + event.getClass().getName()); + EventUtil.eventLog("IEM: processing event [%s]", event); + for (EventQosType qos : EventQosType.values()) { + Collection<L> listeners = listenerRegistry.getListeners(qos, event); + for (L listener : listeners) { + try { + handler.handle(listener, sender, event); + } catch (Exception ex) { + EventUtil.eventLog(ex, "IEM: Error processing - qos[%s] event[%s]", qos, event); + } + } + } + EventUtil.eventLog("IEM: processed event [%s]", event); + } + + @Override + public void sendRemote(final RemoteEvent remoteEvent) { + if (isConnected()) { + EventUtil.eventLog(String.format("IEM: kick - [%s]", remoteEvent)); + Job job = + new Job(String.format("[%s] - sending [%s]", getClass().getSimpleName(), + remoteEvent.getClass().getSimpleName())) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + messagingService.sendRemoteEvent(remoteEvent); + } catch (Exception ex) { + EventUtil.eventLog("IEM: kick", ex); + return new Status(IStatus.ERROR, Activator.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex); + } + return Status.OK_STATUS; + } + }; + + job.schedule(); + } + + if (preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("IEM: Loopback enabled - Returning events as Remote event."); + String newSessionId = GUID.create(); + remoteEvent.getNetworkSender().setSessionId(newSessionId); + onEvent(remoteEvent); + } + } + + @Override + public void onEvent(final RemoteEvent remoteEvent) { + Runnable runnable = new Runnable() { + @Override + public void run() { + try { + if (remoteEvent != null) { + Sender sender = Sender.createSender(remoteEvent.getNetworkSender()); + + // If the sender's sessionId is the same as this client, then this event was + // created in this client and returned by remote event manager; ignore and continue + if (!sender.isLocal()) { + handleEvent(sender, remoteEvent); + } + } + } catch (Throwable th) { + EventUtil.eventLog("IEM: RemoteEvent - onEvent", th); + } + } + }; + execute(runnable); + } + + private <E extends RemoteEvent> void handleEvent(Sender sender, E event) throws OseeCoreException { + EventHandlerRemote<E> handler = handlers.getRemoteHandler(event); + Conditions.checkNotNull(handler, "remoteEventHandler", "No remote event handler available for event [%s]", + event.getClass().getName()); + EventUtil.eventLog("IEM: processing remote event [%s]", event); + handler.handle(this, sender, event); + EventUtil.eventLog("IEM: processed remote event [%s]", event); + } + + private void execute(Runnable runnable) { + if (preferences.isPendRunning()) { + runnable.run(); + } else { + executorService.submit(runnable); + } + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventThreadFactory.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/OseeEventThreadFactory.java index 6e6661592ad..cf1704c68f8 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/OseeEventThreadFactory.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/OseeEventThreadFactory.java @@ -8,7 +8,7 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.skynet.core.event; +package org.eclipse.osee.framework.skynet.core.internal.event; import java.lang.ref.WeakReference; import java.util.List; diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/Transport.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/Transport.java new file mode 100644 index 00000000000..9ddd94ac245 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/Transport.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 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.skynet.core.internal.event; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; + +/** + * @author Roberto E. Escobar + */ +public interface Transport extends ConnectionStatus { + + boolean isLoopbackEnabled(); + + boolean isDispatchToLocalAllowed(Sender sender); + + <E extends FrameworkEvent> void send(final Object object, final E event) throws OseeCoreException; + + <E extends FrameworkEvent> void send(final Sender sender, final E event) throws OseeCoreException; + + <E extends FrameworkEvent, L extends IEventListener, H extends EventHandlerLocal<L, E>> void sendLocal(Sender sender, E event) throws OseeCoreException; + + void sendRemote(RemoteEvent remoteEvent); + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlEventHandler.java new file mode 100644 index 00000000000..3c2bf6b92a9 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlEventHandler.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.listener.IAccessControlEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class AccessControlEventHandler implements EventHandlerLocal<IAccessControlEventListener, AccessControlEvent> { + + @Override + public void handle(IAccessControlEventListener listener, Sender sender, AccessControlEvent event) { + listener.handleAccessControlArtifactsEvent(sender, event); + } + + @Override + public void send(Transport transport, Sender sender, AccessControlEvent event) throws OseeCoreException { + if (transport.isDispatchToLocalAllowed(sender)) { + transport.sendLocal(sender, event); + } + if (sender.isLocal() && event.getEventType().isRemoteEventType()) { + transport.sendRemote(FrameworkEventUtil.getRemoteAccessControlEvent(event)); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlRemoteEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlRemoteEventHandler.java new file mode 100644 index 00000000000..c7dd2232435 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/AccessControlRemoteEventHandler.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteAccessControlEvent1; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerRemote; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class AccessControlRemoteEventHandler implements EventHandlerRemote<RemoteAccessControlEvent1> { + + @Override + public void handle(Transport transport, Sender sender, RemoteAccessControlEvent1 remoteEvent) throws OseeCoreException { + AccessControlEvent accessEvent = FrameworkEventUtil.getAccessControlEvent(remoteEvent); + transport.send(sender, accessEvent); + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactEventHandler.java new file mode 100644 index 00000000000..ec8f8e5e41e --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactEventHandler.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import java.util.List; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.event.listener.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventFilteredListener; +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.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class ArtifactEventHandler implements EventHandlerLocal<IArtifactEventListener, ArtifactEvent> { + + @Override + public void handle(IArtifactEventListener listener, Sender sender, ArtifactEvent event) { + EventUtil.eventLog(String.format("IEM: processArtsAndRels [%s]", event)); + + List<? extends IEventFilter> filters = ((IEventFilteredListener) listener).getEventFilters(); + if (filters != null) { + for (IEventFilter eventFilter : filters) { + // If this branch doesn't match, don't pass events through + if (!eventFilter.isMatch(event.getBranchGuid())) { + return; + } + // Process artifacts and relations only if there were any in this ArtifactEvent + if (!event.getArtifacts().isEmpty() || !event.getRelations().isEmpty()) { + boolean matchFound = false; + // If artifacts are in event and one or more match, pass events through + if (!event.getArtifacts().isEmpty() && eventFilter.isMatchArtifacts(event.getArtifacts())) { + matchFound = true; + } + // If relations are in event and one or more artifacts of the relations match, pass events through + if (!matchFound && !event.getRelations().isEmpty() && eventFilter.isMatchRelationArtifacts(event.getRelations())) { + matchFound = true; + } + // If no match, don't pass events through + if (!matchFound) { + return; + } + } + } + } + listener.handleArtifactEvent(event, sender); + } + + @Override + public void send(Transport transport, Sender sender, ArtifactEvent event) throws OseeCoreException { + if (transport.isDispatchToLocalAllowed(sender)) { + transport.sendLocal(sender, event); + } + if (sender.isLocal() && !event.isReloadEvent()) { + transport.sendRemote(FrameworkEventUtil.getRemotePersistEvent(event)); + } + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactRemoteEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactRemoteEventHandler.java new file mode 100644 index 00000000000..5834070678a --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/ArtifactRemoteEventHandler.java @@ -0,0 +1,229 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import java.util.Collection; +import org.eclipse.osee.framework.core.enums.ModificationType; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; +import org.eclipse.osee.framework.core.model.type.AttributeType; +import org.eclipse.osee.framework.core.model.type.RelationType; +import org.eclipse.osee.framework.messaging.event.res.AttributeEventModificationType; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemotePersistEvent1; +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.Attribute; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.artifact.ChangeArtifactType; +import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event.model.AttributeChange; +import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifact; +import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidRelation; +import org.eclipse.osee.framework.skynet.core.event.model.EventChangeTypeBasicGuidArtifact; +import org.eclipse.osee.framework.skynet.core.event.model.EventModType; +import org.eclipse.osee.framework.skynet.core.event.model.EventModifiedBasicGuidArtifact; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerRemote; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; +import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; +import org.eclipse.osee.framework.skynet.core.relation.RelationLink; +import org.eclipse.osee.framework.skynet.core.relation.RelationManager; +import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager; + +/** + * @author Roberto E. Escobar + */ +public class ArtifactRemoteEventHandler implements EventHandlerRemote<RemotePersistEvent1> { + + @Override + public void handle(Transport transport, Sender sender, RemotePersistEvent1 remoteEvent) throws OseeCoreException { + RemotePersistEvent1 event1 = remoteEvent; + ArtifactEvent transEvent = FrameworkEventUtil.getPersistEvent(event1); + updateArtifacts(sender, transEvent.getArtifacts(), remoteEvent.getTransactionId()); + updateRelations(sender, transEvent.getRelations()); + transport.send(sender, transEvent); + } + + private void updateArtifacts(Sender sender, Collection<EventBasicGuidArtifact> artifacts, int transactionId) { + // Don't crash on any one artifact update problem (no update method throughs exceptions) + for (EventBasicGuidArtifact guidArt : artifacts) { + EventUtil.eventLog(String.format("REM: updateArtifact -> [%s]", guidArt)); + EventModType eventModType = guidArt.getModType(); + switch (eventModType) { + case Added: + // Handle Added Artifacts + // Nothing to do for added cause they're not in cache yet. Apps will load if they need them. + // do nothing cause not in cache + break; + case Modified: + updateModifiedArtifact((EventModifiedBasicGuidArtifact) guidArt, transactionId); + break; + case ChangeType: + ChangeArtifactType.handleRemoteChangeType((EventChangeTypeBasicGuidArtifact) guidArt); + break; + case Deleted: + case Purged: + updateDeletedArtifact(guidArt); + break; + default: + // Unknown mod type + EventUtil.eventLog(String.format("REM: updateArtifacts - Unhandled mod type [%s]", guidArt.getModType())); + break; + } + } + } + + private void updateDeletedArtifact(DefaultBasicGuidArtifact guidArt) { + try { + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact == null) { + // do nothing, artifact not in cache, so don't need to update + } else if (!artifact.isHistorical()) { + artifact.internalSetDeletedFromRemoteEvent(); + } + } catch (OseeCoreException ex) { + EventUtil.eventLog("REM: updateDeletedArtifact", ex); + } + } + + private void updateModifiedArtifact(EventModifiedBasicGuidArtifact guidArt, int transactionId) { + try { + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact == null) { + // do nothing, artifact not in cache, so don't need to update + } else if (!artifact.isHistorical()) { + artifact.setTransactionId(transactionId); + for (AttributeChange attrChange : guidArt.getAttributeChanges()) { + if (!OseeEventManager.getPreferences().isEnableRemoteEventLoopback()) { + ModificationType modificationType = + AttributeEventModificationType.getType(attrChange.getModTypeGuid()).getModificationType(); + AttributeType attributeType = AttributeTypeManager.getTypeByGuid(attrChange.getAttrTypeGuid()); + try { + Attribute<?> attribute = artifact.getAttributeById(attrChange.getAttributeId(), true); + // Attribute already exists (but may be deleted), process update + // Process MODIFIED / DELETED attribute + if (attribute != null) { + if (attribute.isDirty()) { + EventUtil.eventLog(String.format("%s's attribute %d [/n%s/n] has been overwritten.", + artifact.getSafeName(), attribute.getId(), attribute.toString())); + } + try { + if (modificationType == null) { + EventUtil.eventLog(String.format( + "REM: updateModifiedArtifact - Can't get mod type for %s's attribute %d.", + artifact.getArtifactTypeName(), attrChange.getAttributeId())); + continue; + } + if (modificationType.isDeleted()) { + attribute.internalSetModificationType(modificationType); + } else { + attribute.getAttributeDataProvider().loadData( + attrChange.getData().toArray(new Object[attrChange.getData().size()])); + } + attribute.internalSetGammaId(attrChange.getGammaId()); + attribute.setNotDirty(); + } catch (OseeCoreException ex) { + EventUtil.eventLog( + String.format("REM: Exception updating %s's attribute %d [/n%s/n].", + artifact.getSafeName(), attribute.getId(), attribute.toString()), ex); + } + } + // Otherwise, attribute needs creation + // Process NEW attribute + else { + if (modificationType == null) { + EventUtil.eventLog(String.format("REM: Can't get mod type for %s's attribute %d.", + artifact.getArtifactTypeName(), attrChange.getAttributeId())); + continue; + } + artifact.internalInitializeAttribute(attributeType, attrChange.getAttributeId(), + attrChange.getGammaId(), modificationType, false, + attrChange.getData().toArray(new Object[attrChange.getData().size()])); + } + } catch (OseeCoreException ex) { + EventUtil.eventLog( + String.format("REM: Exception updating %s's attribute change for attributeTypeId %d.", + artifact.getSafeName(), attributeType.getId()), ex); + } + } + } + } + } catch (OseeCoreException ex) { + EventUtil.eventLog("REM: updateModifiedArtifact", ex); + } + } + + private void updateRelations(Sender sender, Collection<EventBasicGuidRelation> relations) { + for (EventBasicGuidRelation guidArt : relations) { + // Don't crash on any one relation update problem + try { + EventUtil.eventLog(String.format("REM: updateRelation -> [%s]", guidArt)); + + Branch branch = BranchManager.getBranch(guidArt.getArtA()); + RelationType relationType = RelationTypeManager.getTypeByGuid(guidArt.getRelTypeGuid()); + Artifact aArtifact = ArtifactCache.getActive(guidArt.getArtA()); + Artifact bArtifact = ArtifactCache.getActive(guidArt.getArtB()); + // Nothing in cache, ignore this relation only + if (aArtifact == null && bArtifact == null) { + continue; + } + boolean aArtifactLoaded = aArtifact != null; + boolean bArtifactLoaded = bArtifact != null; + + if (aArtifactLoaded || bArtifactLoaded) { + RelationLink relation = + RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), + guidArt.getArtBId(), branch); + + RelationEventType eventType = guidArt.getModType(); + switch (eventType) { + case Added: + if (relation == null || relation.getModificationType() == ModificationType.DELETED || relation.getModificationType() == ModificationType.ARTIFACT_DELETED) { + relation = + RelationManager.getOrCreate(guidArt.getArtAId(), guidArt.getArtBId(), branch, relationType, + guidArt.getRelationId(), guidArt.getGammaId(), guidArt.getRationale(), + ModificationType.NEW); + } + break; + case ModifiedRationale: + if (relation != null) { + relation.internalSetRationale(guidArt.getRationale()); + relation.setNotDirty(); + } + break; + case Deleted: + case Purged: + if (relation != null) { + relation.internalRemoteEventDelete(); + } + break; + case Undeleted: + if (relation != null) { + relation.undelete(); + relation.setNotDirty(); + } + break; + default: + EventUtil.eventLog(String.format("REM: updateRelations - Unhandled mod type [%s]", eventType)); + break; + } + } + } catch (OseeCoreException ex) { + EventUtil.eventLog("REM: updateRelations", ex); + } + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchEventHandler.java new file mode 100644 index 00000000000..0ceedf1fdd5 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchEventHandler.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import java.util.List; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; +import org.eclipse.osee.framework.skynet.core.event.listener.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.listener.IEventFilteredListener; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEvent; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEventType; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class BranchEventHandler implements EventHandlerLocal<IBranchEventListener, BranchEvent> { + + @Override + public void handle(IBranchEventListener listener, Sender sender, BranchEvent event) { + List<? extends IEventFilter> filters = ((IEventFilteredListener) listener).getEventFilters(); + if (filters != null) { + for (IEventFilter eventFilter : filters) { + if (!eventFilter.isMatch(event.getBranchGuid())) { + return; + } + } + } + // Call listener if we matched all of the filters + listener.handleBranchEvent(sender, event); + } + + @Override + public void send(Transport transport, Sender sender, BranchEvent event) throws OseeCoreException { + if (transport.isDispatchToLocalAllowed(sender)) { + transport.sendLocal(sender, event); + } + + BranchEventType branchEventType = event.getEventType(); + if (sender.isLocal() && branchEventType.isRemoteEventType()) { + transport.sendRemote(FrameworkEventUtil.getRemoteBranchEvent(event)); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchRemoteEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchRemoteEventHandler.java new file mode 100644 index 00000000000..99b2b015c5d --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BranchRemoteEventHandler.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBranchEvent1; +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.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEvent; +import org.eclipse.osee.framework.skynet.core.event.model.BranchEventType; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerRemote; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; +import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager; + +/** + * @author Roberto E. Escobar + */ +public class BranchRemoteEventHandler implements EventHandlerRemote<RemoteBranchEvent1> { + + @Override + public void handle(Transport transport, Sender sender, RemoteBranchEvent1 remoteEvent) throws OseeCoreException { + BranchEvent branchEvent = FrameworkEventUtil.getBranchEvent(remoteEvent); + updateBranches(sender, branchEvent); + transport.send(sender, branchEvent); + } + + private void updateBranches(Sender sender, BranchEvent branchEvent) { + BranchEventType eventType = branchEvent.getEventType(); + try { + switch (eventType) { + case Committing: + case CommitFailed: + case Deleting: + case Purging: + return; + case Committed: + Branch branch = BranchManager.getBranchByGuid(branchEvent.getBranchGuid()); + Artifact artifact = BranchManager.getAssociatedArtifact(branch); + TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(artifact); + break; + default: + break; + } + // TODO Need to update only branch(s) that changed, not refresh all branches cause it will + // clear any local flags that have not yet been persisted to the database like DELETED or COMMIT_IN_PROGRESS + BranchManager.refreshBranches(); + } catch (Exception ex) { + EventUtil.eventLog("REM: updateBranches", ex); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastEventHandler.java new file mode 100644 index 00000000000..d7267b9f835 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastEventHandler.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.listener.IBroadcastEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.BroadcastEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class BroadcastEventHandler implements EventHandlerLocal<IBroadcastEventListener, BroadcastEvent> { + + @Override + public void handle(IBroadcastEventListener listener, Sender sender, BroadcastEvent event) { + if (!event.getUsers().isEmpty()) { + listener.handleBroadcastEvent(sender, event); + } + } + + @Override + public void send(Transport transport, Sender sender, BroadcastEvent event) throws OseeCoreException { + if (!event.getBroadcastEventType().isPingOrPong()) { + EventUtil.eventLog("IEM: kickBroadcastEvent: type[%s] message[%s] sender[%s]", + event.getBroadcastEventType().name(), event.getMessage(), sender); + } + if (sender.isRemote() || sender.isLocal() && event.getBroadcastEventType().isLocalEventType()) { + transport.sendLocal(sender, event); + } + + // Kick REMOTE (If source was Local and this was not a default branch changed event + if (sender.isLocal() && event.getBroadcastEventType().isRemoteEventType()) { + transport.sendRemote(FrameworkEventUtil.getRemoteBroadcastEvent(event)); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastRemoteEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastRemoteEventHandler.java new file mode 100644 index 00000000000..185ea5d871f --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/BroadcastRemoteEventHandler.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteBroadcastEvent1; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.model.BroadcastEvent; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerRemote; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class BroadcastRemoteEventHandler implements EventHandlerRemote<RemoteBroadcastEvent1> { + + @Override + public void handle(Transport transport, Sender sender, RemoteBroadcastEvent1 remoteEvent) throws OseeCoreException { + BroadcastEvent broadcastEvent = FrameworkEventUtil.getBroadcastEvent(remoteEvent); + transport.send(sender, broadcastEvent); + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/RemoteServiceEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/RemoteServiceEventHandler.java new file mode 100644 index 00000000000..ff779c6c0c9 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/RemoteServiceEventHandler.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.listener.IRemoteEventManagerEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.RemoteEventServiceEventType; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class RemoteServiceEventHandler implements EventHandlerLocal<IRemoteEventManagerEventListener, RemoteEventServiceEventType> { + + @Override + public void handle(IRemoteEventManagerEventListener listener, Sender sender, RemoteEventServiceEventType event) { + listener.handleRemoteEventManagerEvent(sender, event); + } + + @Override + public void send(Transport transport, Sender sender, RemoteEventServiceEventType event) throws OseeCoreException { + if (sender.isLocal() && event.isLocalEventType()) { + transport.sendLocal(sender, event); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionEventHandler.java new file mode 100644 index 00000000000..a3030b3b0dd --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionEventHandler.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.listener.ITransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerLocal; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class TransactionEventHandler implements EventHandlerLocal<ITransactionEventListener, TransactionEvent> { + + @Override + public void handle(ITransactionEventListener listener, Sender sender, TransactionEvent event) { + listener.handleTransactionEvent(sender, event); + } + + @Override + public void send(Transport transport, Sender sender, TransactionEvent event) throws OseeCoreException { + if (transport.isDispatchToLocalAllowed(sender)) { + transport.sendLocal(sender, event); + } + if (sender.isLocal()) { + transport.sendRemote(FrameworkEventUtil.getRemoteTransactionEvent(event)); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionRemoteEventHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionRemoteEventHandler.java new file mode 100644 index 00000000000..1320c695ab0 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/event/handlers/TransactionRemoteEventHandler.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2012 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.skynet.core.internal.event.handlers; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteTransactionEvent1; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; +import org.eclipse.osee.framework.skynet.core.event.FrameworkEventUtil; +import org.eclipse.osee.framework.skynet.core.event.PurgeTransactionEventUtil; +import org.eclipse.osee.framework.skynet.core.event.model.Sender; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEvent; +import org.eclipse.osee.framework.skynet.core.event.model.TransactionEventType; +import org.eclipse.osee.framework.skynet.core.internal.event.EventHandlerRemote; +import org.eclipse.osee.framework.skynet.core.internal.event.Transport; + +/** + * @author Roberto E. Escobar + */ +public class TransactionRemoteEventHandler implements EventHandlerRemote<RemoteTransactionEvent1> { + + @Override + public void handle(Transport transport, Sender sender, RemoteTransactionEvent1 remoteEvent) throws OseeCoreException { + TransactionEvent transEvent = FrameworkEventUtil.getTransactionEvent(remoteEvent); + if (transEvent.getEventType() == TransactionEventType.Purged) { + PurgeTransactionEventUtil.handleRemotePurgeTransactionEvent(transEvent); + transport.send(sender, transEvent); + } else { + EventUtil.eventLog("REM: handleTransactionEvent - unhandled mod type [%s] ", transEvent.getEventType()); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/OSGI-INF/artifact.prompt.change.xml b/plugins/org.eclipse.osee.framework.ui.skynet/OSGI-INF/artifact.prompt.change.xml index 1f83b5b267a..d81b35bbdac 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/OSGI-INF/artifact.prompt.change.xml +++ b/plugins/org.eclipse.osee.framework.ui.skynet/OSGI-INF/artifact.prompt.change.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" activate="start" deactivate="stop" immediate="true" name="org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange"> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange"> <implementation class="org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange"/> <reference bind="setAccessPolicy" cardinality="1..1" interface="org.eclipse.osee.framework.skynet.core.AccessPolicy" name="AccessPolicy" policy="static"/> </scr:component> diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java index f42642a5109..2b2127a9c21 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xviewer/skynet/SkynetCustomizations.java @@ -11,6 +11,7 @@ package org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ import org.eclipse.osee.framework.skynet.core.User; 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.Attribute; +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.IArtifactEventListener; @@ -238,7 +240,7 @@ public class SkynetCustomizations implements IXViewerCustomizations, IArtifactEv @Override public List<? extends IEventFilter> getEventFilters() { - return OseeEventManager.getCommonBranchEventFilters(); + return Arrays.asList(EventUtil.getCommonBranchFilter()); } @Override diff --git a/plugins/org.eclipse.osee.support.config/launchConfig/OSEE Demo Application Server [H2].launch b/plugins/org.eclipse.osee.support.config/launchConfig/OSEE Demo Application Server [H2].launch index 8fe71ce3292..753f65b7897 100644 --- a/plugins/org.eclipse.osee.support.config/launchConfig/OSEE Demo Application Server [H2].launch +++ b/plugins/org.eclipse.osee.support.config/launchConfig/OSEE Demo Application Server [H2].launch @@ -20,7 +20,7 @@ <stringAttribute key="pde.version" value="3.3"/> <booleanAttribute key="show_selected_only" value="true"/> <stringAttribute key="target_bundles" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,ch.qos.logback.slf4j@default:false,com.google.collect@default:default,com.google.inject@default:default,com.ibm.icu@default:default,javax.activation@default:default,javax.mail.glassfish@default:default,javax.servlet@default:default,javax.xml@default:default,org.antlr.runtime@default:default,org.aopalliance@default:default,org.apache.commons.codec@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.log4j@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.compare.diff@default:default,org.eclipse.emf.compare.match@default:default,org.eclipse.emf.compare@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.util@default:default,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.team.core@default:default,org.eclipse.xtext.logging@default:false,org.eclipse.xtext.util@default:default,org.eclipse.xtext@default:default,org.h2@default:default,org.hamcrest.core@default:default,org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,org.mortbay.jetty.server@default:default,org.mortbay.jetty.util@default:default,org.objectweb.asm@default:default,org.slf4j.api@default:default,org.slf4j.jcl@default:default"/> -<stringAttribute key="timestamp" value="1331760064113"/> +<stringAttribute key="timestamp" value="1335589321010"/> <booleanAttribute key="tracing" value="false"/> <booleanAttribute key="useCustomFeatures" value="false"/> <booleanAttribute key="useDefaultConfigArea" value="true"/> |