diff options
author | audrey.e.denk | 2019-10-01 19:28:09 +0000 |
---|---|---|
committer | Ryan T. Baldwin | 2019-10-01 19:28:09 +0000 |
commit | 61e07302d85dff978545f3358c36499ae0747dbb (patch) | |
tree | b6d2fe346a439d905b9153c4f1e833aa95bdd7fc /plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse | |
parent | 73ae0c7e5cd092df13954e0f44d60d0e4589597f (diff) | |
download | org.eclipse.osee-61e07302d85dff978545f3358c36499ae0747dbb.tar.gz org.eclipse.osee-61e07302d85dff978545f3358c36499ae0747dbb.tar.xz org.eclipse.osee-61e07302d85dff978545f3358c36499ae0747dbb.zip |
bug[ACT39547]: Fix ArtifactExplorer update issue
Change-Id: I01a5c3fa1aa6d625e668b7ee6921d7e8877d17be
Signed-off-by: audrey.e.denk <audrey.e.denk@boeing.com>
Diffstat (limited to 'plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse')
6 files changed, 66 insertions, 2 deletions
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 a0db6594f06..15f892fb727 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 @@ -229,4 +229,12 @@ public final class OseeEventManager { getEventService().receive(sender, artifactEvent); } + /** + * Kick a commit event to this local client to update artifact model for committed artifacts. This is needed cause + * commit is made on server, but clients need to be notified of updates to commited branch artifact model. + */ + public static void kickCommitEvent(Class class1, ArtifactEvent artifactEvent) { + getEventService().sendCommitEvent(class1, 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 index ca6b85e9b44..3dcfb0accbf 100644 --- 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 @@ -13,6 +13,7 @@ package org.eclipse.osee.framework.skynet.core.event; 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.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event.model.FrameworkEvent; import org.eclipse.osee.framework.skynet.core.event.model.Sender; @@ -32,4 +33,10 @@ public interface OseeEventService { void addListener(EventQosType qos, IEventListener listener); void removeListener(EventQosType qos, IEventListener listener); + + /** + * Kick a commit event to this local client to update artifact model for committed artifacts. This is needed cause + * commit is made on server, but clients need to be notified of updates to commited branch artifact model. + */ + void sendCommitEvent(Class class1, ArtifactEvent artifactEvent); } 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 feac15c2a6e..d0f975a9a5a 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 @@ -197,6 +197,7 @@ public class ArtifactEvent implements FrameworkEvent, HasNetworkSender, HasBranc return guidArts; } + @SuppressWarnings("unlikely-arg-type") public boolean containsArtifact(Artifact artifact, EventModType... eventModTypes) { for (EventBasicGuidArtifact guidArt : artifacts) { for (EventModType modType : eventModTypes) { diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/CommitBranchHttpRequestOperation.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/CommitBranchHttpRequestOperation.java index a31c75aa2d7..0850e424530 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/CommitBranchHttpRequestOperation.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/CommitBranchHttpRequestOperation.java @@ -155,6 +155,14 @@ public final class CommitBranchHttpRequestOperation extends AbstractOperation { relChange.getBArtId(), defaultBasicGuidRelation); event.setRationale(relChange.getRationale()); artifactEvent.getRelations().add(event); + Artifact artA = ArtifactCache.getActive(relChange.getArtId(), newTransaction.getBranch()); + if (artA != null) { + artifacts.add(artA); + } + Artifact artB = ArtifactCache.getActive(relChange.getArtId(), newTransaction.getBranch()); + if (artB != null) { + artifacts.add(artB); + } break; case attribute: // Only reload items that were already in the active cache @@ -202,8 +210,12 @@ public final class CommitBranchHttpRequestOperation extends AbstractOperation { } } + // Reloads artifacts changed on local client since event does not get handled by us ArtifactQuery.reloadArtifacts(artifacts); + + // Kicks event to other clients; This is ignored by this client which is why below is required OseeEventManager.kickPersistEvent(getClass(), artifactEvent); + } }
\ No newline at end of file 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 index 0e01f181d9b..e3dbc155a13 100644 --- 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 @@ -72,8 +72,7 @@ public class OseeEventServiceImpl implements OseeEventService { private ConnectionListenerImpl connectionStatus; private ExecutorService executor; - private final List<ServiceReference<IEventListener>> pendingServices = - new CopyOnWriteArrayList<>(); + private final List<ServiceReference<IEventListener>> pendingServices = new CopyOnWriteArrayList<>(); private Thread thread; @@ -262,4 +261,9 @@ public class OseeEventServiceImpl implements OseeEventService { listeners.removeListener(qos, listener); } + @Override + public void sendCommitEvent(Class class1, ArtifactEvent artifactEvent) { + eventTransport.sendCommitEvent(class1, artifactEvent); + } + } 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 index 2f6cc498034..c0ae7e1e690 100644 --- 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 @@ -23,10 +23,13 @@ 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.messaging.event.res.msgs.RemotePersistEvent1; 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.listener.EventQosType; import org.eclipse.osee.framework.skynet.core.event.listener.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; 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; @@ -240,4 +243,33 @@ public class EventTransport implements Transport, IFrameworkEventListener { } } + /** + * Kick a commit event to this local client to update artifact model for committed artifacts. This is needed cause + * commit is made on server, but clients need to be notified of updates to commited branch artifact model.</br> + * </br> + * Normal event model sends artifact, attribute and relation changes to other clients upon persist. Since a commit is + * not a client ide "persist", there is no "persist" event. This method sends a synthentically created ArtifactEvent + * to the initiating client to update the artifact model on the commit-to branch for any artifacts loaded into the + * cache. This is done for the remote clients through the normal events, but not to this client cause all events sent + * remotely are ignored by the initiating client. + */ + public void sendCommitEvent(Class<?> class1, ArtifactEvent artifactEvent) { + Runnable runnable = new Runnable() { + @Override + public void run() { + try { + Sender sender = Sender.createSender(class1); + artifactEvent.setNetworkSender(sender.getNetworkSender()); + RemotePersistEvent1 remoteEvent = FrameworkEventUtil.getRemotePersistEvent(artifactEvent); + EventUtil.eventLog("IEM: processing commit remote event [%s]", artifactEvent); + handleEvent(sender, remoteEvent); + EventUtil.eventLog("IEM: processed commit remote event [%s]", artifactEvent); + } catch (Throwable th) { + EventUtil.eventLog("IEM: RemoteEvent - onEvent", th); + } + } + }; + execute(runnable); + } + } |